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
 
Search WWH ::




Custom Search