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
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
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
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)
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
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
21.08.2014 HaSi-Talk: Ein DSP kann zaubern
Modulieren
● Das Signal wird auf einen Träger aufmoduliert.
Signal
Träger
Modulierter Träger
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
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
21.08.2014 HaSi-Talk: Ein DSP kann zaubern
Digitalisierung
Durch Digitalisierung erhält man zu konkreten Zeiten konkrete Werte
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] * UΣ IN[n-i]
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
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
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.
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?
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
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.
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)
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
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
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
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.
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
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
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
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
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
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
21.08.2014 HaSi-Talk: Ein DSP kann zaubern
Intentionally blank slide
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
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
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
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
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?
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
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)
21.08.2014 HaSi-Talk: Ein DSP kann zaubern
DSP-Board Schaltplan
Wichtig!Tiefpass nicht
vergessen!
SeriellerSpeicher
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!
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
21.08.2014 HaSi-Talk: Ein DSP kann zaubern
Zaubermaschine
Evan P. Cordes: EP-2
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
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