Hardware Reference
In-Depth Information
x 1
PackagezumEntwurfsprojekt
x 2
···
fkt(x 1 ,x 2 ,...)
yTyp
packagefktpackis
[sub]typeyTypis...
···
y
--kombinatorischeFunktion
Entwurfseinheit(en)
functionfkt(x1:...;x2;...;...)returnyTypis...;
--Signalvereinbarungen
--Str-Funktion
signalx1:...;
signalx2:...;
signaly:yTyp;
functionstr(y:yTyp)return
STRING is...;
--Test,obung¨ultig
functionisX(y:yTyp)return
is...;
--Simulationsmodell
y<=XXyTypafterth,
fkt(x1,x2,...)aftertd;
BOOLEAN
--Konstantef¨urung¨ultig
constantXXyTyp:yTyp:=...;
endpackage;
packagebodyfktpackis...;
--Synthesebeschreibung
y<=fkt(x1,x2,...);
Abb. 3.17. Auslagerung kombinatorischer Funktionen in Packages
Encoder soll für einen Eingabevektor
das höchstwertigste Bit bestimmen,
das »1« ist. Die Schaltungsausgabe soll aus einem Zahlenwert für die Bitnum-
mer und einem Gültigkeitsbit bestehen. Das Gültigkeitsbit soll »1« sein, wenn
mindestens ein Eingabebit »1« ist. Der Verbund für die Schaltungsausgabesi-
gnale besteht entsprechend aus zwei Teilobjekten:
x
type tPEncOut is record
w: tUnsigned( 3 downto 0 );
g:std_logic;
end record ;
In der Definition der kombinatorischen Funktion kann die Größe des Eingabe-
vektors variabel gehalten werden. Damit die Ausgabe alle Bitnummern dar-
stellen kann, darf der größte Indexwert »15« nicht überschreiten. Eine Assert-
Anweisung beendet in diesem Fall die Simulation mit einer Fehlermeldung:
function PrioEnc(x:std_logic_vector) return tPEncOut is
variable y: tPEncOut:=(w=> x"0" , g=> '0' );
begin
assert x'high< 16 report "Fehler" severity failure;
for idx in x'high downto x'low loop
if x(idx)= '1' then
y.w := to_tUnsigned(idx, y.w'length);
y.g := '1' ;
return y;
end if ;
end loop ;
return y;
end function ;
Priorit¨ats x w
g
Encoder
x
w
g
00 0000
0
0
0
0
0
0
000
--- -
0 1 1 1 1
1 01
001
000
-
-
-
-
-
-
1 0
0 0
1
11 0
-- -
-
-
-
- --- -
-
10
1 1
- 1
-
-
0 0
-
-
-
-
-
1
... ... ...
-beliebig(don'tcare)
)
WEB-Projekt:P3.4/PEnc_pack.vhdl
Die Berechnung erfolgt in einer Schleife vom höchstwertigen zum niederwer-
tigsten Bit des Eingabevektors. Wenn der Bitwert »1« ist, wird der Indexwert
 
Search WWH ::




Custom Search