Hardware Reference
In-Depth Information
return Feld;
end function ;
)
WEB-Projekt:P3.3/AfgEA_pack.vhdl
b) Zur Initialisierung einer Konstanten wird nach der Typzuordnung der
Rückgabewert der Initialisierungsfunktion mit dem Dateinamen und dem
Wert 1024 als Aufrufparameter zugewiesen:
constant ROM: tByteFeld:=Init( "Daten.txt" , 1024 )
)WEB-Projekt:P3.3/Test_Afg3_13_pack.vhdl
6.3.4 Beschreibungsschablonen für digitale Schaltungen
Lösung zu Aufgabe 3.14
a) In einer Schleife über alle Eingabewerte wird die Zählvariable für alle
Eingabebits, die »1« sind, um eins erhöht:
function Anzahl1a(x:std_logic_vector; N:natural)
return tUnsigned is
variable sum: tUnsigned(N-1 downto 0):=( others => '0' );
begin
for idx in x'range loop
if x(idx)= '1' then sum := sum+ "1" ; end if ;
end loop ;
return sum ;
end function ;
b) Die Umstellung des Berechnungsflusses für die Additionen von einer
Ketten- in eine Baumstruktur nutzt im einfachsten Fall den Algorith-
mus aus Abb. 3.22. Die Summanden und Zwischensummen dürfen laut
der Fußnote in der Aufgabenstellung alle die Bitbreite N haben und kön-
nen somit wie im Vorbildalgorithmus zu einem Vektor zusammengefasst
werden. Der Typ dieses Vektors ist von den Aufrufparametern abhängig
und muss deshalb innerhalb der Funktion vereinbart werden. Die erste
Schleife im Anweisungsteil überträgt die Bitwerte des Eingabevektors in
die niederwertigsten Bits der ersten Vektorelemente der Variablenzund
schreibt in die höherwertigen Bits Nullen. Auf diese Weise initialisiert sie
die Vektorelemente für die Eingabewerte wahlweise mit dem Wert null
oder eins. Dann werden wie in Abb. 3.22 immer die Werte benachbar-
ter Feldelemente zusammengefasst - hier im Beispiel addiert - und das
Ergebnis in das nächste freie Feldelement eingetragen:
function Anzahl1b(x:std_logic_vector; N:natural)
return tUnsigned is
type tVektortyp is array (natural range <>) of
tUnsigned(N- 1 downto 0 );
constant xl:natural:= x'length;
variable z: tVektortyp( 2 *xl- 2 downt o 0 );
 
Search WWH ::




Custom Search