42
21.08.2014 HaSi-Talk: Ein DSP kann zaubern Eine CPU kann rechnen, aber ein DSP kann zaubern Harald Kipp HaSi-Talk am 21.08.2014

“Eine CPU kann rechnen, aber ein DSP kann zaubern”

  • Upload
    hybr1s

  • View
    302

  • Download
    1

Embed Size (px)

DESCRIPTION

Nach einer kurzen Einführung in die Signalverarbeitung werden DSP-spezifische Eigenschaften und Möglichkeiten am Beispiel des VS1063 Audiocodecs dargestellt.

Citation preview

Page 1: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Eine CPU kann rechnen,aber ein DSP kann zaubern

Harald Kipp

HaSi-Talk am 21.08.2014

Page 2: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Wer ist der Typ da vorne?

Harald KippGeschäftsführer der egnite GmbH

● Entwicklung, Produktion und Vertrieb von Mikrocontroller Boards

● Distribution von Ethernet-Sensoren, Audio-Codecs etc.● www.egnite.de

Gründer und Admin des Ethernut Projekts● Open Source Hardware und Software● www.ethernut.de

Page 3: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Wer sitzt im Publikum?

● Hardwarekenntnisse– Erfahrung mit Spannung und Strom– Allgemeine Struktur einer CPU ist bekannt (Register, Bus)

● Softwarekenntnisse– Erste Erfahrungen mit C-Programmierung– Erste Erfahrungen mit Assemblerprogrammierung

● Mathematikkenntnisse– Grundrechenarten– Lesen von Diagrammen

Page 4: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

D igitalerS ignal-P rozessor

Worum es geht hier eigentlich?

Eine CPU kann rechnen, aber ein DSP kann zaubern– Signalverarbeitung im Schnelldurchgang (0:10)– Nachteile von universellen Prozessoren (0:05)– Hacking eines MP3-Decoders (0:15)– Kurze Pause (0:05)– Anleitung zum Bau eines Filters (0:15)– Demonstration eines Audioeffekts (0:10)

Page 5: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Signal

Ein Signal ist eine sich kontinuierlich ändernde physikalische Größe, die Information enthält.

Gesäusel (Luftdruckändert sich kontinuierlich)

Telefondraht (ElektrischeSpannung ändert sich

kontinuierlich)Mr. Dagger Complex„prüft“ kontinuierlich

Bu n

de sa

rc hiv , B

il d 1 8

3- 57 3

39 -0

01 8

Page 6: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Verstärken

● Ein elektrisches Signal wird verstärkt, um es über eine große Entfernung übertragen zu können.

Graphics madeby SciLab

Page 7: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Modulieren

● Das Signal wird auf einen Träger aufmoduliert.

Signal

Träger

Modulierter Träger

Page 8: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

● Modulierte Trägerwel-len zusammenfassen um mehrere Signale über eine Leitung zu transportieren.

● Am Leitungsende ein-zelne Träger durch Filter trennen und das Ursprungssignal mit Demodulator zurück-gewinnen.

● Das ist Signalverarbei-tung.

Mischen und Filtern

Signal 1

Signal 2 Träger 2

Träger 1 AM 1

AM 2

Summe

Page 9: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Analog und digital

● Analog– Kontinuierliche

Funktionen– Realisierung mit

Hardware● Digital

– Diskrete Werte– Realisierung

überwiegend in Software

Cre

ative

Com

mo

ns At trib

utio

n-Sh

are Alike

3.0 U

npo

rted

Roger McLassus

Page 10: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Digitalisierung

Durch Digitalisierung erhält man zu konkreten Zeiten konkrete Werte

Page 11: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Mathematische Methoden

Hardware Mathematik

VerstärkenUOUT = 2 * UIN

ModulierenUOUT = US * UT

SummierenUOUT = U1IN + U2IN + ...

FilternUOUT = Σ coeff[i] * UIN[n-i]

Page 12: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Anforderungen an digitale Signalverarbeitung

● Kontinuierliche Verarbeitung von Datenströmen... – Hauptsächlich Multiplikation und Addition von

Vektoren– Behandlung von Überläufen

● ...in Echtzeit– Effektive Speicherzugriffe– Effektive Schleifen

Page 13: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Programmschleifen

● Universeller Prozessor– Die meisten Befehle werden

für die Schleifensteuerung benötigt

– Daher hohe Taktrate für Echtzeitverarbeitung erforderlich

– Viele MIPS, wenig GRIPS

/* Verstärker */for (i = 0; i < 100; i++) { u_out[i] = u_in[i] * amp;}

LDI R1, 0 LDI R2, 100 LD R3, AMPLOOP: CMP R1, R2 JGE END LDX R4, U_IN, [R1] MUL R4, R3 STX R4, U_OUT, [R1] INC R1 JMP LOOPEND:

CompilerC-Programm Assemblerprogramm

Page 14: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Kontinuierliche Multiplikation und Addition

● Filter sind die typische Anwendung bei der digitalen Signalverarbeitung

/* Filter */for (k = 0; k <= bufsiz; k++) { for (i = 0; i <= m; i++) { y[k] = y[k] + h[i] * u[k - i]; }}

z.B.

C-Programm

Schleifen sind nicht gutfür universelle CPUs.

Viel Rechnerei, aber eskommt noch dicker.

Page 15: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

ÜberlaufAlarm

Sättigungsarithmetik

Beispiel: Zweifache Verstärkung von 128V am Eingang und maximal 255V Ausgangsspannung (Wertebereich)

128V * 2 = 255V 128V * 2 = 0VHardware: 8-Bit Software:

/* Handle overflow using 16-bit math */u_out[i] = u_in[i] * 2;if (u_out[i] > 255) u_out[i] = 255;

Einfache Lösungfunktioniert mit

Einschränkungen.Vorzeichen?

Nachkommastellen?

Page 16: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Überlauf anschaulich gemacht

A B+ =Sättigungsarithmetik

Standardarithmetik

● Bildhelligkeit erhöhen

Original Offset+

Scree

nsho

t of B

len

der 2

.41

Page 17: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Und was ist mit Cortex-M4?

Aktueller Leistungsvergleich

● High-End DSPs ● High-End PC

Texas Instruments C6000 32-Bit CPU 1,2Ghz Taktfrequenz 8MB 2nd-Level Cache Optionale Fließkomma-Einheit

Freescale StarCore Multi-Core 1Ghz Taktfrequenz

Analog Devices SHARC / (Blackfin) 400MHz Taktfrequenz Offizielle GNU Toolchain (für Blackfin)

Intel Haswell 64-Bit CPU mit FPU 3,9Ghz Taktfrequenz (Turbo) 84 Watt

Theodor Fontane schreibt:

Ein fester Kessel,ein doppelter Dampf,

die bleiben Siegerin solchem Kampf.

Page 18: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Historischer Leistungsvergleich

1995● WinPlay3, der erste real-

time MP3-Decoder für PCs, benötigte

● 32-Bit 468DX2 66MHz ● FPU ● 8kB Cache ● 6W Stromverbrauch

(nur CPU)

1999● Single-Chip MP3 De-

coder auf DSP-Basis benötigte

● 16-Bit mit 25MHz ● Keine FPU ● Kein Cache ● 50mW Stromver-

brauch (CPU ohne Analogteil)

Page 19: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

MP3 Hardware-Decoder

Bist du meine Mami?

GPIO-Taster

DSP-Chip

Streichholz?

Audio-Ausgang

Serielles Flash

Steckergehäuse!

Moderne Miniatur-Audioplayer– z.B. mit VS10XX von VLSI Solution Oy

USB-Schnittstelle

Dire

ctme

dia D

VD

-RO

M 1

0.0

00 M

eisterw

erk e de

r Malerei

Page 20: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Audiocodec-Architektur

Theorie... ...und Praxis

Wic

hti

g!

2 B

uss

e!

Programmier-schnittstelle

Analogsignal

Analogsignal

DAC

DSP

ADC

Page 21: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

VSDSP4 Register

● Spezialregister– Programmzähler PC– 2 Page Register IPR0 und IPR1– IPR0 wird beim Interrupt nach

IPR1 kopiert – 32-Bit Produktregister P– 3 16-Bit Loop Register LS, LC und

LE– 2 16-Bit Link Register LR0 und

LR1– LR0 für Unterprogramme– LR1 für Interrupts – Pseudoregister NULL (alle Bits 0)

und ONES (alle Bits 1)– 16-Bit Mode Register MR0

Page 22: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Pipeline

* * AND A0,A0,A0 NOP JZS OUT NOP * *

Takt Laden Dekodieren Ausführen Ergebnis

1 AND * *

2 NOP AND *

3 JZS NOP AND Z-Flag gesetzt

4 NOP JZS NOP

5 ? NOP JZS Sprung ausgeführt

● Nach einer arithmetischen Operation können die Flags erst nach einem Delay als Sprungentscheidung verwendet werden.

● Sprünge werden mit einem Delay ausgeführt.● Statt NOP können wir etwas sinnvolleres tun.

Page 23: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Pipeline Beispiel

and a0,a0,a0 ldx (i0),b0 jzs out add c0,b0,b0

Modifiziert die Flags.

Darf keine Operation sein, die dasZ-Flag wieder verändern könnte.

Sprung kann jetzt entschiedenwerden.

Da auch der Sprung einen Delay hat,wird dieser Befehl immer ausgeführt.Hier dürfen die Flags wiedermodifiziert werden.

Auswirkungen der Pipeline sind verwirrend und erfordern Kreativität. ldx (i0),b0 add c0,b0,b0 and a0,a0,a0 nop jzs out nop

Delay Slots ausnutzen

Page 24: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Das blanke Entsetzen

Das war eine abschreckende Eigenschaft.

Jetzt kommen die Bonbons...endlich!

Charles Darwin's The Expression of the Emotions in Man and Animals

Page 25: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

MAC

● MAC ist eine Abkürzung für Multiply and Accumulate– Eigentliche Reihenfolge: Erst ADD, dann MUL

● Mächtiges Kommando für Filter-Implementierung

c += p;p = a0*b0;

mac a0,b0,c 1 Takt Viele Takte

c += a[i] * b[n-i]

DSP PC

Page 26: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Schleifen

● LOOP-Befehl– Kopiere PC+1 nach LS– Kopiere Register in Parameter 1 nach LC– Kopiere Adresse in Parameter 2 nach LE

● Bearbeite Befehle bis PC gleich LE, dann– Prüfe, ob LC gleich Null– Wenn ungleich Null, dekrementiere LC um 1 und kopiere

LS nach PC

LOOP A1,LOOPEND-1 NOPLOOPSTART: *LOOPEND: *

Reg. Inhalt

LS Startadresse der Schleife

LC Schleifenzähler

LE Endadresse der Schleife

Page 27: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Modulo Adressierung

● Implementierung von Ringpuffern– 0x8000: I1 wird jeweils um 1

inkrementiert und nach 47 wieder auf 0 gesetzt

– 0xA000: I1 wird jeweils um 1 dekrementiert und nach 0 wieder auf 47 gesetzt

– Puffer muss auf Adresse liegen, die durch nächsthöhere Zweierpotenz der Pufferlänge teilbar ist. Bei einer Pufferlänge von 48 muss der Puffer also an einer Adresse liegen, die durch 64 teilbar ist.

ldc 0x8000+(48-1),i0ldx (i1)*,a0

ldc 0xA000+(48-1),i0ldx (i1)*,a0

Page 28: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Parallele Verarbeitung

● Viele Operationen können parallel ausgeführt werden– Arithmetische Operation, z.B. macss a0,a1,d– Zugriff auf X-Memory, z.B. ldx (i0)*,a0– Zugriff auf Y-Memory, z.B. ldy (i2)*,a1– Loop

and a0,null,a0 mulss a0,a0 loop a1,END-1 and d,null,d; ldx (i1)*,a0; ldy (i2)*,a1 mac a0,a1,d; ldx (i1)*,a0; ldy (i2)*,a1END:

Initialisierung

Schleife (1 Taktzyklus)

Realisierung eines Filters:f

a

Tiefpass

Page 29: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Intentionally blank slide

Page 30: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Tiefpass Assemblerroutine

//void FirAsm(register __i0 s_int16 *d, __y register __i2 s_int16 *s); .sect code, FirAsm .export _FirAsm_FirAsm:

// Store register values stx i1, (i6)+1 stx i3, (i6); sty ls, (i6)+1 stx le, (i6); sty lc, (i6)+1 stx a0, (i6); sty a1, (i6)+1 stx b0, (i6); sty b1, (i6)

ldc MAKEMOD64(-2,LINE_IN_BUF_LEN), i3 //-2 step mv i0, i5 ldc _firCoeffs, i0 // coefficient vector ldc 1, i1 // linear forwards +1 (No modulo) ldc 0x0000, mr0 // fract mode

and a,NULL,a; ldx (i0)*,b1; ldy (i2)*,b0 // clear a-reg., load first coef./sample -pair ldc FIR_LEN-2, lc // loop count

Reale Implementierung der FIR Assemblerroutine

Finite Impulse ResponseFilter mit endlicher Impulsantwort

Filterkoeffiziententabellebestimmt die Filterfunktion

Page 31: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Tiefpass Assemblerroutine

loop lc, firloop1end-1 // start looping // Delay slot, perform first multiply, load next coef./sample -pair mul b1, b0; ldx (i0)*,b1; ldy (i2)*,b0 firloop1: mac b1, b0, a; ldx (i0)*,b1; ldy (i2)*,b0 // use pipelined MAC to implement FIRfirloop1end:

add a, p, a ldc FIR_SCALE, b0 ashl a, b0, a rnd a, a1 stx a1, (i5)

// Restore registers ldx (i6), b0; ldy (i6)-1, b1 ldx (i6), a0; ldy (i6)-1, a1 ldx (i6), le; ldy (i6)-1, lc ldx (i6), i3; ldy (i6)-1, ls ldx (i6)-1, i1 jr ldc 0x200, mr0 // Delay slot, restore integer mode

Page 32: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Tiefpass C-Programmaufruf

__y s_int16 *delayLinePtr = lineInPtr;s_int16 *sp = audioOut;int i;for (i=0; i<BLOCKSIZE; i++) { // apply the filter FirAsm(sp++,delayLinePtr++); // left channel FirAsm(sp++,delayLinePtr++); // right channel}

Aufruf der FIR Assemblerroutine

Page 33: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Filterkoeffizienten berechnen

pkg load allfs=48000;fsp2=fs/2;f1=3100;f2=4300;deg=62;b=firls(deg, [0 f1/fsp2 f2/fsp2 1], [1 1 0 0]);

Filterkoeffizienten nach der Methodeder kleinsten Quadrate berechnen

Ordnung des Filters

Übergangsbereich des Filters

Normalisierungsfaktor

Frequenzen undAmplituden sindnormalisiert

Samplerate

Normalisierte Frequenzwerte:So umrechnen, dass der Wert 1 der halbenAbtastrate entspricht (Nyquist-Grenze).

Filterkoeffizienten können bequem mit GNU Octave, MATLABoder SciLab berechnet werden

Anweisungen für GNU Octave

Page 34: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Frequenz- und Phasengang

freqz(b);

Durchlassbereich

Sperrbereich

Übergangsbereich

Welligkeit

Anweisung für GNU Octave

fa

Tiefpass

Quizfrage: Frequenz von 0 bis 1?

Page 35: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Filterkoeffizienten einbauen

b2=round(b'*32768);save 'coeff.txt' b2

16-Bit-Werte erzeugen

# Created by Octave 3.6.2, Thu Oct 17 18:27:38 2013 W. Europe Daylight Time# name: b2# type: matrix# rows: 1# columns: 63 63 101 121 113 71 -2 -93 -181 -242 -252 -197 -77 89 268 416 487 446 278...

_firCoeffs:.word 63, 101, 121, 113, 71, -2, -93, -181.word -242, -252, -197, -77, 89, 268, 416, 487.word 446, 278, -1, -347, -685, -930, -993, -807.word -338, 401, 1348, 2397, 3419, 4274, 4842, 5041.word 4842, 4274, 3419, 2397, 1348, 401, -338, -807.word -993, -930, -685, -347, -1, 278, 446, 487.word 416, 268, 89, -77, -197, -252, -242, -181.word -93, -2, 71, 113, 121, 101, 63

Inhalt der Dateicoeff.txt

Umgeschrieben fürAssemblerprogramm

Anweisungen für GNU Octave

Page 36: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Frequenzweiche

DSP

Verstärker

Verstärker Tieftöner

Hochtöner

Audiosignal

Gestern

Heute

Morgen?

Günther Nubert (Nubert Speaker Factory)

Page 37: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

DSP-Board Schaltplan

Wichtig!Tiefpass nicht

vergessen!

SeriellerSpeicher

Page 38: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

VSDSP Toolchain

● VSIDE– Vollständige Entwicklungs-

umgebung für VSDSP Signal-prozessoren

– Unterstützt Debugging auf realer Hardware über RS232 (USB-Bridge)

● Kommandozeile– ANSI-C Compiler, Assembler,

Linker, Profiler etc.● Windows only!● Kostenlos

lcc -g -hhw_desc -O6 -fsmall-code -DDEBUG -DVS1063 -IC:/VSIDEoptimizing (452): 299 281 274 273.273.271.271.271C 271 CF 0 X 6 Y 8198 F 0Successfully compiled 2012 lines (244 in source) with 0 warnivsa -c hw_desc -D ASM -D VS1063 -I C:/VSIDE/libvs1063 -o Debvslink -k -m user_vs1063-extra.mem C:/VSIDE/libvs1063/rom1063coff -L. -LC:/VSIDE/libvs1063 -lcvssym -Q Debug/effect.coffDebug/effect.coff:C 429 CF 0 X 6 Y 8198 F 0total code memory size 0x01ad 429 wordstotal X memory size 0x0006 6 wordstotal Y memory size 0x2006 8198 words const_x 0x0006 6 words bss_y 0x2000 8192 words const_y 0x0006 6 words

SORRY!

Page 39: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Hello World

main() {// show text in consoleputs("Hello, world.");// setup button and ledCONFIGURE_LED_1;CONFIGURE_OPTO_1;//// enter busy loop, detect button press//while (1) {

if (OPTO_1_ACTIVE) {SET_LED_1_ON;

} else {SET_LED_1_OFF;

}}return 0;

}www.usda.gov/oc/photo/opclibra.htm

Page 40: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Zaubermaschine

Evan P. Cordes: EP-2

Page 41: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Vielen Dank

We're cool, right?

You are allowed to applaude by clapping the hands or knocking on the tables.

Kibadunno: Mega_awesome_super_cool_amazing_sunglasses

Page 42: “Eine CPU kann rechnen, aber ein DSP kann zaubern”

21.08.2014 HaSi-Talk: Ein DSP kann zaubern

Questions ?

Thank you for your attention.

Any questions?

plus.google.com/+EgniteDewww.youtube.com/user/egniteGmbH

www.facebook.de/egniteDewww.twitter.com/egniteEmbedded