16-Bit-PICs -  XY-Speicher

in Arbeit

zurück zu 16-Bit-PICs , PIC-Prozessoren , Elektronik , Homepage

Einleitung
Problem
XY-RAM

zurück zu 16-Bit-PICs


Einleitung

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.
 

nach oben

Problem

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:

  1. Laden einer Musik-Zahl aus dem RAM in ein W-Register
  2. Laden einer Sprachzahl aus dem RAM, Addieren mit dem W-Registerwert und schreiben als Gemischt-Zahl in den RAM.
for k:=0 to 11000 do begin
  W:=Musik[k];
  Gemischt[k]:=W+Sprache[k];
end;

Das halbiert die Verarbeitungsleistung eines Prozessors.
 

nach oben

XY-RAM

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.
 
normaler 2-Adress-Befehl Für die meisten Befehle arbeitet nur der X-Adressdecoder, und nur der X-Datenbus wird benutzt.
3-Adress-Befehl 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.


 

nach oben

zurück zu 16-Bit-PICs , PIC-Prozessoren , Elektronik , Homepage

Autor: sprut
erstellt am: 14.03.2006
letzte Änderung: 14.03.2006

Quelle: Microchip