Hardware Reference
In-Depth Information
function
mult(a, b: tDaten)
return
tDaten
is
constant
y: tSigned(
2
*tDaten'length-
1
downto
0
):=a*b;
begin
return
y(y'high-
2
downto
y'high-tDaten'
length-
1
);
end function
;
)WEB-Projekt:P3.4/cordic2_pack.vhdl
Im Testrahmen selbst ist das Package auszutauschen (siehe Web-Projekt
CORDIC/cordic2.vhdl). Die Konstanten und Eingabewerte sind vor ihrer Ver-
arbeitung in den neu definierten Bitvektortyp zu konvertieren. Die Multiplika-
tionsoperatoren sind durch die Mult-Funktion und die Str-Funktionen für die
Ausgabedaten durch die neu definierte Funktion »str_real(....)« zu ersetzen.
Das überarbeitete Simulationsmodell verhält sich fast wie das erste. Nur die
Ergebnisse sind bei einer Berechnung mit nur 16 Bit etwas ungenauer.
Schritt 4: Ablaufoptimierung
In der nächsten Nachbesserungsiteration sollen Hardware- und Zeitaufwand
genauer betrachtet werden. Den größten Schaltungsaufwand erfordern, falls
in Hardware realisiert, die beiden abschließenden 16-Bit-Multiplikationen. Da
eine Multiplikation auch durch bitverschobene bedingte Additionen nachge-
bildet werden kann, bietet es sich im Beispiel an, die vorhandenen Addierer
und Shifter auch für die Multiplikationen zu nutzen. Abbildung 3.38 zeigt die
Struktogrammerweiterung um eine Schleife mit bedingten Additionen und den
zugehörigen VHDL-Code. Der Wert der Konstanten
SCS
liegt zwischen 0,5
und eins. Das größte Bit, das eins ist, ist
(13) mit dem Stellenwert 0,5. Die
Register für die Akkumulation der Produkte werden entsprechend mit dem
halbierten ersten Faktor »x sra 1« bzw. »y sra 1« initialisiert. Dann wird in
einer Schleife für alle niederwertigeren Bits von SCS, falls diese eins sind, der
SCS
signal
px, py: tDaten;
constant
SCS: tDaten:=...
...
px <= x
sra
1; py <= y
sra
1
;
wait for
tP;
for
idx
in
12
downto
0
loop
if
SCS(idx)=
'1'
then
px <= px+(x
sra
(
14
-idx));
py <= py+(y
sra
(
14
-idx));
end if
;
wait for
tP;
end loop
;
Wiederholeimmer
Eingabe,CORDIC-Schritte
...
px<=xsra1;py<=ysra1;
wiederholef¨uridx=0bis12
ja
SCS(idx)=1?
nein
px<=px+(xsla(14
−
idx));
py<=py+(ysla(14
−
idx));
Ausgabe
wartef¨ureinenTakt
⇒
Web-Projekt:P3.4/cordic3.vhdl
Abb. 3.38. Nachbildung der abschließenden Multiplikationen mit der Konstanten
SCS durch Additionen und Verschiebeoperationen