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