Hardware Reference
In-Depth Information
procedure
GenSin(
signal
T:std_logic;
signal
y:
out
tSigned;
A:natural; tpsim:delay_length; phi:real)
is
variable
r:real;
begin
assert
A <
2
**(y'length-
1
)
report
"A ist zu gross"
severity
error;
if
rising_edge(T)
then
r :=
2.0
*math_pi*real(now/fs)/real(tPsim/fs)+phi;
y <= to_tSigned(integer(real(A)*sin(r)), y'length);
end if
;
end procedure
;
)WEB-Projekt:P3.5/GenSin_pack.vhdl
6.4 Vom Transistor zur Schaltung
6.4.1 Entwurf und Modellierung von CMOS-Gattern
Lösung zu Aufgabe 4.1
Für den Übergabeparameter der Auflösungsfunktion ist in Anlehnung an Ab-
schnitt 4.1.3 zuerst ein Vektortyp mit »tZ01« als Elementtyp zu definieren:
type
tZ01_vector
is array
(natural
range
<>)
of
tZ01;
In der nachfolgenden Lösung wird eine mit dem Wert der ersten Quelle initia-
lisierte Variable »tmp« angelegt. In einer Schleife für alle anderen Quellen-
werte wird ihr Wert, wenn er »Z« und der andere Quellenwert »0« oder »1«
ist, durch den anderen Quellenwert ersetzt. Wenn beide Werte ungleich »Z«
sind, beendet eine Assert-Anweisung die Simulation mit »severity failure«.
Anderenfalls ist der Rückgabewert der Wert in »tmp« nach Abarbeitung der
Schleife:
function
AufloesZ01(x: tZ01_vector)
return
tZ01
is
variable
tmp: tZ01:=x(x'low);
begin
for
idx
in
x'low+
1
to
x'high
loop
if
x(idx)/=
'Z'
then
assert
tmp=
'Z'
report
"Mehrere aktive Quellen"
severity
failure;
tmp := x(idx);
end if
;
end loop
;
return
tmp;
end function
;