Ein normaler Befehl läuft im PIC
in
4 Takten ab. Daraus ergibt sich auch die Zykluszeit, die 1/4 der
Oszillator-Taktfrequenz
beträgt. Im ersten Takt kann man einen Wert aus dem RAM lesen.
Dann
wird dieser in der ALU 2 Takte lang verarbeitet. Im 4. Takt kann man
das
Ergebnis wieder in den RAM schreiben. Anstelle des RAM kann man auch
auf
Arbeitregister (Wx) zugreifen. Entscheidend ist aber, dass es pro
Befehl
nur einen RAM-Lesetakt und nur einen RAM-Schreibtakt gibt.
Sollen z.B. zwei Zahlen zu einer Summe
zusammenaddiert werden, so kann nur eine der beiden Ausgangszahlen aus
dem RAM gelesen werden. Die andere muss aus einem W-Register genommen
werden.
In der digitalen Signalverarbeitung müssen oft zwei Zahlenströme miteinander verknüpft werden.
Beispiel:
In einem digitalen Audio-Mischpult sollen
Musik und Sprache zusammengemischt werden. Der Einfachheit halber sind
beide Audiospuren 8-Bit-Mono-Spuren mit 44kHz Samplerate. Im RAM liegt
z.Z. jeweils 1/4 Sekunde der Musik- und 1/4 Sekunde der Sprach-Spur.
Das
sind jeweils 11 kByte. Zum Mischen genüge es, die beiden
Datenströme
miteinander zu addieren. In Pascal sähe das etwa so aus:
for k:=0 to 11000 do Gemischt[k]:=Musik[k]+Sprache[k];
Es handelt sich also nur um 11000 Additionen. Allerdings sind für jede Addition ZWEI Lesezugriffe auf den RAM und ein Schreibzugriff erforderlich. Deshalb ist so eine Addition eigentlich nur in zwei Schritten möglich:
Das halbiert die Verarbeitungsleistung
eines Prozessors.
Da es aber im DSP auf höchsten Datendurchsatz ankommt, benutzt man einen Trick.
Der RAM ist in in zwei Hälften
geteilt
(Die beiden Speicherteile sind nicht exakt gleich groß, sondern
nur
in etwa gleich groß. Deshalb ist der Begriff "Hälfte"
eigentlich
nicht präzise. Aber sei es drum.), und es gibt 2 Adressdecoder.
Damit
besteht die Möglichkeit, gleichzeitig zwei Zellen des RAM zum
Lesen
zu adressieren. Die untere Hälfte (adressenmäßig
betrachtet)
des RAM wird X-RAM genannt, und die obere Hälfte Y-RAM.
So ganz trifft das aber nicht die realen Verhältnisse:
Es gibt einen X-Adressdecoder (XAGU), der auf den gesamten RAM zugriff hat. Die von Ihm adressierte Speicherzelle wird ausgelesen, und ihr Wer mit dem X-Datenbus zur ALU/DSP-Engine geliefert. Die XAGU kann am Zyklusanfang von einer Zelle aus dem X-RAM lesen (XRAGU) und am Zyklusende das Operationsergebnis in eine Zelle des X-RAM schreiben (XWAGU). Die Adressen der beiden Zellen können verschieden sein
Außerdem gibt es den
Y-Adressdecoder
(YAGU). Er kann nur auf die obere Hälfte des RAM zugreifen, und
der
von Ihm ausgelesene Wert benutzt den separaten Y-Datenbus zur
ALU/DSP-Engine.
Die YAGU kann nur zum Lesen einer Y-RAM-Zelle am Zyklusanfang benutzt
werden,
(YRAGU) nicht aber zum Schreiben.
Für die meisten Befehle arbeitet nur der X-Adressdecoder, und nur der X-Datenbus wird benutzt. |
Für bestimmte DSP-Befehle
(z.B. MAC-Befehle)
werden beide AGUs benutzt. XRAGU und YRAGU lesen parallel zwei Werte
aus
verschiedenen Zellen des RAM und liefern sie an die DSP-Engine. Das
Operationsergebnis
schreibt dann die XWAGU am Zyklusende wieder in den X-RAM. Somit
kann z.B. das oben genannte Beispiel mit
doppelter
Geschwindigkeit abgearbeitet werden.
Mit der XY-RAM-Aufteilung lassen sich also Drei-Adress-Befehle realisieren. |
zurück zu 16-Bit-PICs , PIC-Prozessoren , Elektronik , Homepage
Autor: sprut
erstellt am: 14.03.2006
letzte Änderung: 14.03.2006
Quelle: Microchip