Hardware Reference
In-Depth Information
when
opc_add => tmp := (
'0'
&a)+b+F.cy;
8
when
opc_inc => tmp := (
'0'
&b)+
'1'
;
when
opc_sub => tmp := (
'0'
&a)-b-F.cy;
when
opc_dec => tmp := (
'0'
&b)-
'1'
;
when
opc_neg => tmp := (
not
(
'0'
&b))+
'1'
;
-- Verschiebe- und Rotationsbefehle
when
opc_sll => tmp := b &
'0'
;
when
opc_srl => tmp := b(
0
) &
'0'
& b(b'high
downto
1
);
when
opc_sra => tmp := b(
0
) & b(b'high)&b(b'high
downto
1
);
when
opc_rol => tmp := b & F.cy;
when
opc_ror => tmp := b(
0
) & F.cy & b(b'high
downto
1
);
when others
=> tmp := (
others
=>
'X'
);
end case
;
-- Ergebnis- und Flag-Zuweisungen
y.Wert := tmp(tmp'high-1
downto
tmp'low);
y.F.cy := tmp(tmp'high);
y.F.s := tmp(tmp'high-
1
);
if
tmp(tmp'high-1
downto
tmp'low)=
x"00"
then
y.F.z :=
'1'
;
elsif not
is_x(tmp)
then
y.F.z :=
'0'
;
else
y.F.z :=
'X'
;
end if
;
end case
;
return
y;
end function
;
)
WEB-Projekt:P5.4/RISC_pack.vhdl
5.4.7 Test des Rechenwerks
Das Funktionsmodell des Rechenwerks ist so umfangreich, dass es einen ei-
genen Testrahmen benötigt. Für einen gründlichen Test empfiehlt sich ein
Pseudo-Zufallstest. Ein Pseudo-Zufallstest wählt die Testbeispiele unvorein-
genommen aus [29]. Der hier entwickelte Testrahmen verwendet die »unreine«
Funktion »rand(...)« aus dem Package »Tuc.Zufallstest«
impure function
rand(xVec:std_logic_vector; px: tWeight:=
0.0
)
return
std_logic_vector;
für die pseudo-zufällige Auswahl der Eingabewerte für die beiden Operan-
den und den Operationscode. Die Funktion erzeugt einen Bitvektor vom Typ
std_logic_vector mit der Länge des übergebenen Vektors
und be-
schreibt seine einzelnen Bits mit einer Wahrscheinlichkeit p
x
= 0;003, die
als Aufrufparameter übergeben wird, mit »X« und je mit einer Wahrschein-
lichkeit von (1 p
x
) =2 mit »0« bzw. »1«. Der Wert des Übertragsbits wird
mit der Funktion
8
Die hier verwendeten Operatorfunktionen für die Addition und die Subtraktion
mit den Operandentypen std_logic_vector und std_logic sind im Package
P5.4/RISC_pack.vhdl definiert.
x