Professional Documents
Culture Documents
Thiết kế khối số học số thực dấu phẩy động
Thiết kế khối số học số thực dấu phẩy động
: TS. V L Cng.
Nhm 20:
Sinh
vin
inh Vn Nam
20091814
TVT 01 K54
Nguyn Mnh Trung 20115803
TT 1-k56
H Ni, 12/2014
1
CNT-
Mc Lc.
Mc Lc 1
Danh mc hnh nh. ..2
Li cm n 3
Tm tt. 4
Gii thiu5
FPU l g? ..5
Tiu chun IEEE754 ..7
Gii thiu ti..8
Kt lun chng. 9
Chng 2. L Thuyt. 10
2.1 Gii thiu. ..10
2.2 S thc du phy ng 10
2.3 Biu din s thc du chm ng thc hin trong d n.11
2.3.1 Biu din s b 2 ca s nhi phn 4 bt. 11
a. Phn phn s F(fraction). ..12
b. Phn s m E(exponent).13
2.4 Nhn hai s thc du phy ng. 13
2.5 Cng s thc du phy ng.18
2.6 Tr hai s thc du phy ng. 19
2.7Kt lun chng21
2
3.2 S khi23
3.3 Kt qu m phng24
3.3.1 Kt qu m phng trn quartus24
3.3.2 Kt qu m phng trn Modulesim..25
3.4 Kt lun chng..29
Chng 4 Kt Lun30
Ti liu tham kho32
Ph Lc 33
M t
Thut ton nhn s thc du phy ng.
Thut ton nhn hai s nguyn khng du
Thut ton cng s thc du phy ng.
Thut ton tr s thc du phy ng.
S khi ca chng trnh.
M t chn d liu trong s khi.
Bng m t gi tr ca m php ton.
Bng chuyn i s nh phn 4 bt hin th trn led 7 thanh.
Kt qu m phng thnh cng trn quartus
S lung d liu dataflow
Bng kt qu trancript.
Tng hp kt qu m phng.
Li cm n.
Chng ti mun by t lng bit n chn thnh i vi ngi hng dn ca
chng ti TS V L Cng, Vin in T Vin Thng, i Hc Bch Khoa H Ni
4
Tm tt.
cng( CPU v FPU) v thc hin trn phn mm. nh dng mt s thc du phy ng
chim 32 bit trong b nh ca my tnh. Phin bn hin ti, IEEE 754-2008 ra mt vo
thng Tm nm 2008. Trong phin bn IEEE754-2008 Trong IEEE 754-2008, 32-bit vi
2 nh dng chnh thc l: single precision hoc binary32. Cc tiu chun IEEE754 quy
nh mt s tc du phy ng l c bt du hiu c chiu di 1 bt,mt s m c chiu
di 8 bit v phn nh tr c chiu di 24 bit trong 23 bit l c lu tr mt cch r
rng v 1bt l tim n .
Bt du xc nh du ca s thc du chm ng. Bng 0 th s mang du dng,
bng 1 s mang du m. Phn m s dng s nguyn 8 bt c gi tr t -128 n 127 hoc
dng s nguyn khng m c gi tr t 0 n 255. Phn nh tr cha 23 bt phn bn phi
ca im nh phn v bt tim n(nm bn tri im nh phn). Vi s c gi tr bng 1
th tt c cc bt phn m u bng 0. Nh vy ch c 23 bit xut hin phn nh tr
trong cc nh dng b nh nhng tng cng chnh xc l 24 bit.
V d:
S
EEEEEEE
FFFFFFFFFFFFFFFFFFFFFFF
E
31
30
23 22
Chng 2. L thuyt.
2.1 Gii thiu chng.
Trong chng ny, phn 2.2 gii thiu tng qut v s thc du chm ng, phn 2.3
gii thiu v s thc du chm ng thc hin trong ti, phn 2.4 gii thiu v thut
ton nhn s thc du phy ng, phn 2.5 gii thiu v thut ton cng hai s thc du
10
chm ng, phn 2.6 gii thiu v thut ton tr hai s thc du phy ng V cui
cng, phn 2.7 a ra mt bn tm tt ca chng.
2.2 S thc du phy ng.
S thc du phy ng(Floating Point Number) biu din cho s thc .
Tng qut: mt s thc X c biu din theo kiu s du phy ng nh sau:
E
X=M* R
M l phn nh tr (Mantissa),
R l c s (Radix),
E l phn m (Exponent).
Chun IEEE 754.
C s R = 2
Cc dng:
Dng 32-bit
Dng 44-bit
Dng 64-bit
Dng 80-bit.
V d dng 32 bt.
31
30
23
22
m
11
S l bit du:
S = 0 s dng
S = 1 s m
e (8 bit) l m excess-127 ca phn m E:
e = E+127 E = e 127
gi tr 127 gi l l lch (bias)
m (23 bit) l phn l ca phn nh tr M:
M = 1.m
Cng thc xc nh gi tr ca s thc:
S
e127
X = (1) *1.m * 2
.
0
1
2
3
= 02 + 12 +02 + 12 =(5/8)10 .
1.0112
1
2
3
= 1+02 +12 +12 =(5 /8)10
3
2
1
0
= 02 + 12 +02 + 12 =5 10 .
10112
3
2
1
0
= 12 +02 +12 + 12 =510
10002
01112
tng ng t
810
710
E
0101
1.011
1011
5
(-5/8)* 2
1.000
1000
1
(-1)* 2
5
(5/8)* 2
Nu F khng dng chun chng ta c th chuyn v dng chun bng cch dch
v bn phi cho n khi bt du v bt k tip ca n khc nhau. Vic dch bt v bn tay
phi ng ngha vi vic gi tr ca F c nhn thm vi 2 v vy chng ta phi gim
gi tr ca E xung 1 gi tr ca N khng thay i. Sau khi chun ha xong . Sau y
l mt s v d v vic chun ha F:
13
Trng thi
Cha chun ha(Unnormalized)
F
0.0101
E
0011
Chun ha(Normalized)
0.101
0010
2
(5/8)* 2 =5/2
1.11011
1100
4
(-5/32)* 2 =
3
(5/16)* 2 =5/2
9
5* 2
Dch tri F
1.1011
1011
5
(-5/16)* 2 =
9
5* 2
Chun ha(Normalized)
1.011
1010
6
(-5/8)* 2 =
9
5* 2
E=1000
N=0
14
c biu din dng s b 2. Cng thc tng qut khi thc hin nhn 2 s thc du
phy ng nh sau:
E1
F1
* 2 xF 1 * 2
Gi s u vo chng ta c
F1
F
E +E
E
= )x 2
=F* 2 .
E2
F2
kt qu u ra cng c chun ha. Khi thc hin nhn phn phn s( fraction) v cng
phn s m s xy ra mt s trng hp c bit cn phi ch .
u tin nu F=0 th mc nh gi tr E=1000(-8).
Th hai khi nhn -1 vi -1 (1.000 x 1.000) khi kt qu s l +1 nhng chng ta
khng th biu din s 1 dng b 2 phn phn s. Chng ta gi l trng hp
fraction overflow . gii quyt vn ny chng ta gn F=1/2(0.100) v cng 1 vo
E( E=E+1).
Khi nhn phn phn s(fraction) th kt qu s cha chun ha. V d:
0.100 * 2E x 0.100 * 2E =
1
0.010
E +E
E + E 1
)x 2
=0.100* 2
Trong v d trn chng ta chun ha kt qu bng vic dch tri phn phn s mt v
tr v tr i mt phn s m. Kt thc nu phn s m khng nm trong di cho php
ca phn s m trong h thng th s xy ra trng hp trn bt phn s m. Chng ta s
dng 4 bt cho phn s m th di gi tr cho php l: 1000 n 0111(-8 n 7). Khi xy ra
trn bt th s c tn hiu bo trn. Sau y l s thut ton cho vic nhn s thc du
phy ng.
Vi u vo l 2 s thc du phy ng
E
N= F* 2 .
15
N 1 v N 2
v kt qu l N.
N1
E
= F1 * 2 .
N2
E
= F2 * 2 .
Vi
F1
E1 , F 2
E2
c trnh by mc 2.3.1
Bt u
F1
=0
Y
F=0, E=
-8
F2
=0
Y
Nhn phn
nh tr, cng
phn s m
Trn
bt
F=1/2,
E=E+1
E
Trn
bt
Chun
ha
F <<1
E=E-1
Y
Bo trn
E
Kt
thc
Hnh 2.1 Thut ton nhn hai s thc du phy ng.
16
Sau y l thut ton khi nhn hai s khng m :Vi C bt nh, A l tng.
Bt u
C0,
A0
MS b
nhn
QS nhn
B m : i
N
Q[0]=1
b1
Y
C,A A+M
Dch phi
C,A,Q
B m i=i-1
B m
i=0
Y
Kt thc
Hnh 2.2 Thut ton nhn hai s nguyn khng du.
V d v nhn hai s nguyn khng du:
17
C
A
Q
0
0000 1101 Cc gi tr khi u
+ 1011
0
1011 1101 A A + M
0
0101 1110 Dch phi
0
0010 1111 Dch phi
+ 1011
0 1101 1111 A A + M
+ 1011
1 0001 1111 A A + M
E1
t thnh ghi X
2 bt du th khi cng
E1
E2
Gi s
cn cng hai
F1
F2
E
E
E
* 2 + F 1 * 2 =Fx 2 .
1
E1
u c chun ha v Nu
F2
bng
E1
E2
th ta ch
khng bng
E2
th
Do
E1
F1
E
5
* 2 = 0.111x 2 .
1
E2
nn dch chuyn
F2
E
3
* 2 =0.101x 2 .
2
3
4
5
0.101x 2 =0.0101x 2 .= 0.00101x 2 .
19
E2
F1
F2
1
1
F1
= 1.110x 2 +0.100x 2 (sau khi dch phi 1 ca
)
1
= 0.010x 2
(kt qu cha chun ha)
2
= 0.100x 2
(sau khi dch tri phn phn s 1 v tr 1 phn s m).
20
Nu
>>
E2
F2
F2
l s dng th tt c cc bt ca
s tr thnh 0
ngay sau khi chng ta dch chuyn v bn phi hai s m bng nhau v kt qu l F=
F1
E1
v E=
. Nu
E1
>>
E2
F2
l s m th tt c cc bt ca
F2
s tr
thnh 1 khi chng ta dch chuyn v bn phi hai s m bng nhau. V th khi cng hai
phn fraction s cho kt qu sai. V vy trnh vn ny xy ra th khi
ta c: F=
F1
v E=
E1
. Nu
E 2 E1
th F=
F2
v E=
E2
E1
>>
E2
. Trong d n ny
E1
E2 3 th
N1
E
= F1 * 2 .
N2
E
= F2 * 2 .
Vi
F1
E1 , F 2
E2
c trnh by mc 2.3.1
21
Bt
u
E1
=E
2
F=F1+F
2
Shift_F=|
E1-E2|
Shift
_F
>3
F=
0
Tng phn
s m nh
hn gi tr
Shift_F=|
E1-E2|
Dich sang
phi phn
nh tr s
nh hn
Shift_F
Gn kt
qu l s
c s m
ln hn
Kt
thc
F>>1,
E=E+
1
F
b
tr
n
F=0,
E=-8
Kt
thc
F
Ch
un
hoa
E
b
tr
n
N
F<<1,
E=E-1
Bo
trn E
Kt
thc
Hnh 2.3 S thut ton cng hai s thc du phy ng.
2.6 Tr hai s thc du phy ng.
Khi tr hai s thc du chm ng th s c cng theo cng thc sau:
F1
E
E
E
* 2 F1 * 2 =Fx 2 .
1
N1
E
= F1 * 2 .
N2
E
= F2 * 2 .
Vi
F1
E1 , F 2
E2
c trnh by mc 2.3.1
22
Bt
du
E1
=E
2
F=F1-F2
Shift_F=|
E1-E2|
Shift
>3
Y
E1
>E
2
F=~F2
+1
E=E2
F=F1
E=E1
Kt
thc
F=
0
Tng phn
s m nh
hn gi tr
Shift_F=|
E1-E2|
Dich sang
phi phn
nh tr s
nh hn
Shift_F
F>>1,
E=E+
1
F
b
tr
n
E
b
tr
n
Y
F=0,
E=-8
Kt
thc
F
Ch
u
n
ho
a
N
F<<1,
E=E-1
Y
Bo
trn E
Kt
thc
Hnh 2.4 Thut ton tr hai s thc du phy ng.
23
24
F1
led_overflow
E1
F2
led_frac
FPU
E2
led_exp
opcode
N1
F1
E
N2
F2
* 2 ,
=
*
1
rng
Loi
M t
F1
(bt)
4
Input
F1
E1
Input
E1
F2
Input
F2
25
E2
Input
opcode
led_overflo
3
1
Output
Output
M php ton
Nu kt qu nm ngoi gi tr cho php s bo trn
w
led_frac
led_exp
7
7
Output
Output
E2
Php ton
(Opcode)
010
011
100
101
Cng
Tr
Nhn
Chia
26
Gi tr hin th
0
1
2
3
4
5
6
7
-8
-7
-6
-5
-4
-3
-2
-1
3.3 Kt qu m phng.
Trong d n s dng phn mm ModelSim PE student Edition 10.4a. v phn
mm Quartus 9.0 .
3.3.1 Kt qu m phng trn quartus.
Kt qu m phng thnh cng trn quartus.
27
28
29
ST
T
E1
F2
E2
opcode F
Ove
Biu thc
0111 0001
0111
0011
010
0100
0100
flow
0
100
1101
1000
1001
010
1000
1101
3
7
1.000x 2 +1.000x 2 .= 1.000x 2
10
0
101
0111
1010
0010
010
1010
0111
7
2
7
1.010x 2 +1.110x 2 .= 1.010x 2
15
0
100
0111
1001
0111
010
1001
1000
7
7
8
1.001x 2 +0.111x 2 .= 1.001x 2
20
1
000
0011
1001
1001
010
1101
1001
3
7
25
0
000
0011
0000
1001
010
0000
1000
3
7
30
0
100
0011
0100
0111
010
0000
1000
3
3
8
1.001x 2 +0.111x 2 .= 0.000x 2
35
1
1100 1110
0100
1111
010
0100
1110
2
1
1.100x 2 +0.100x 2 .= 0.100x 2
40
0111 0001
0111
0011
011
1010
0011
1
3
4
0.111x 2 -0.111x 2 .= 0.100x 2 .
45
100
1101
1000
1001
011
1000
1101
3
7
50
0
101
0111
1010
0010
011
1010
0111
7
2
7
1.010x 2 -1.110x 2 .= 1.010x 2 .
55
0
100
0111
1001
0111
011
0000
1000
7
7
8
1.001x 2 -0.111x 2 .= 0.000x 2
60
1
000
0011
1001
1001
011
0011
1001
3
7
7
0.000x 2 -1.001x 2 .= 0.011x 2
65
0
0111 0001
0111
1000
100
0110
1001
1
8
7
0.111x 2 *0.111x 2 =0.110x 2
70
100
1011
0001
100
0100
1010
8
3
1001
1
31
1
3
4
0.111x 2 +0.111x 2 .= 0.100x 2
75
100
0111
1000
1001
100
0100
0001
7
7
1
1.000x 2 *1.000x 2 .= 0.100x 2
80
0
010
0111
1011
1001
100
1001
1111
7
7
85
1
000
1000
0000
1000
100
0000
1000
8
8
90
0
0111 0111
1001
0011
100
0000
1000
7
3
8
0.111x 2 *1.001x 2 .= 1.000x 2
95
0110 0111
1010
1001
100
1011
0000
7
7
0
0.110x 2 *1.010x 2 .= 1.011x 2
32
Chng 4 Kt Lun.
Khi s thc du phy ng rt thng dng trong b ng x l ton hc. N l
mt phn ca mt h thng my tnh c thit k c bit thc hin cc hot ng
tnh ton trn cc s thc du chm ng. Mt s hot ng tnh ton trn khi FPU nh:
cng, tr, nhn, chia. Mc ch l xy dng mt CPU hiu qu thc hin cc chc
nng c bn cng nh chc nng siu vit vi vic lm gim phc tp ca logic c
s dng lm gim hoc t nht gii hn thi gian tng ng nh dng x87 v lm gim
b nh cng nhiu cng tt. Chnh v th m vn ny nhn c s quan tm rt ln
ca cc c nhn, t chc, trng i hc v nhiu vin nghin cu trn th gii. Trong d
n ny tm hiu v: Thit k khi s hc s thc du phy ng. C th d n t
c cc kt qu sau.
Nhng iu t c.
-Trnh by l thuyt khi FPU trong my tinh.
-Tm hiu l thuyt chun ha IEEE754 trong tnh ton s hc s thc du phy
ng.
33
-Trnh by thut ton cng, tr, nhn, chia s thc du phy ng vi 4 bt phn
nh tr v 4 bt phn s m. Tt c s m phn nh tr v s m c th hin
dng nh phn b hai.
-Vit c chng trnh cho khi s hc s thc du phy ng bng verilog HDL
vi cc php tnh cng, tr, nhn.
Nhng hn ch.
-Chng trnh cha thc hin cho php tnh chia hai s thc du phy ng.
-Cha vit c khi keypad dng nhp s t bn phm in thoi kch thc
4x4.
-Code chng trnh cn di, cha ti u c mt s on code c th rt gn.
Hng pht trin ca ti.
-Xy dng chng trnh hon thin hn, d liu nhp c t thit b ngoi vi nh
bn phm in thoi...
-Ti u code chng trnh ngn gn v d hnh dung hn.
-Tm hiu v vit thm phn php tnh chia cho khi s hc s thc du phy ng.
V thi gian nghin cu c hn, trnh hiu bit ca bn chng em cn nhiu hn
ch nn bi bo co ca chng em khng trnh khi nhng thiu st, em rt mong nhn
c s gp qu bu ca tt c cc thy c gio bo co ca chng em c hon
thin hn.
Chng em xin chn thnh cm n!
34
35
Ph Lc
1. Code file alu.v
module alu(F1,E1,F2,E2,opcode, led_overflow, led_frac, led_exp);
input [3:0] F1,E1,F2,E2;
input [2:0] opcode;
output led_overflow;
output [6:0] led_frac, led_exp;
reg [4:0] shift_F;
reg [7:0] F;
reg [6:0] f;
reg [4:0] E;
reg [8:0] ACC;
reg [7:0] f1,f2;
reg [4:0] e1,e2;
reg
overflow;//tran bit
reg
sosanh;//so sanh hai so mu
reg [3:0] a,b,c,f11,f21;
reg [4:0] addout; // cong 4 bit nen can 5 bit de luu tru
reg [2:0] i;
parameter add = 3'b010,
sub = 3'b011,
mult= 3'b100,
div = 3'b101;
always @(*) begin
a=0; b=0;c=0; addout = 0; i =0; f1=0; f2=0;e1 =0; e2 =0; shift_F=0; overflow=0; sosanh=0;
F=0;E=0; f11=0; f21=0; f=0;
if(E1[3]) begin
if(E2[3]) begin
if(E1[2:0]>E2[2:0]) sosanh =1'b1;
else
sosanh=1'b0;
end
else sosanh=1'b0;//E2[3]=1'b0
end
else begin
if(E2[3]) sosanh=1'b1;
else begin
if(E1[2:0]>E2[2:0]) sosanh=1'b1;
else
sosanh=1'b0;
end
end
case(opcode)
add,sub: begin
if(F1==4'b0000) begin
if(F2==4'b000) begin
F=8'b0000_0000;
E=5'b01000;
36
overflow=1'b0;
end
else begin
if(opcode==add) begin
F = {F2[3], F2, 3'b000};
E = {E2[3], E2};
overflow=1'b0;
end
else begin
c=~F2+1;
F = {c[3], c, 3'b000};
E = {E2[3], E2};
overflow=1'b0;
end
end
end
else if(F2==4'b0000) begin
F = {F1[3], F1, 3'b000};
E = {E1[3], E1};
overflow=1'b0;
end
else begin
if(E1 == E2)begin
E = {E1[3], E1};
shift_F =0;
f1 = {F1[3], F1, 3'b000};
f2 = {F2[3], F2, 3'b000};
if(opcode==add) F = f1 + f2;
else F = f1 - f2;
if(F == 8'b0000_0000) begin
E= 5'b01000;
overflow = 1'b0;
end
else if(F[7]!=F[6]) //tran phan dinh tri
begin
E=E+1;//cong phan so mu 1 don vi
F = {F[7], F[7-:7]};//dich phai 1 don vi
if(E[4] != E[3] ) overflow = 1'b1;//tran so mu
else overflow = 1'b0;
end
else if (F[6] == F[5]) begin //chuan hoa
if(E != 5'b01000) begin
F = F << 1;
E= E-1;
if(E[4] != E[3] ) overflow = 1'b1;//tran
else overflow = 1'b0;
end
else overflow = 1'b1;
end
37
else begin
E=E;
F=F;
overflow = 1'b0;
end
end
else if ( sosanh==1'b1) begin
shift_F = E1 - E2;
E={E1[3], E1};
if(shift_F > 2'b11) begin
F = {1'b0, F1,3'b000};
overflow = 1'b0;
E={E1[3], E1};
end
else begin // else cua if (shift_F > 2'b11)
f1 = {F1[3], F1, 3'b000};
f2 = {F2[3], F2, 3'b000}>> shift_F;
if(F2[3])
f2 = f2 + ({8'b1111_1111} << ( 8 - shift_F)) ;
if(opcode==add) F = f1 + f2;
else F = f1 - f2;
if(F == 8'b0000_0000) begin
E= 5'b01000;
overflow = 1'b0;
end
else if(F[7]!=F[6]) begin//tran phan dinh tri
E=E+1;//cong phan so mu 1 don vi
F = {F[7], F[7-:7]};//dich phai 1 don vi
if(E[4] != E[3] ) overflow = 1'b1;//tran so m
else overflow = 1'b0;
end
else if (F[6] == F[5]) begin //chuan hoa
if(E != 5'b01000) begin
F = F << 1;
E= E-1;
if(E[4] != E[3] ) overflow = 1'b1;//tran so mu
else overflow = 1'b0;
end
else overflow = 1'b1;
end
else begin
E=E;
F=F;
overflow = 1'b0;
end
end
end
38
begin
E=E;
F=F;
overflow = 1'b0;
end
end
end
39
end
end//end add
mult:begin
if((F1==4'b0000))
begin
F=8'b0000_0000;
E=5'b01000;
overflow=1'b0;
end
else if(F2==4'b0000)
begin
F=8'b0000_0000;
E=5'b01000;
overflow=1'b0;
end
else begin
if(F1[3]) f11=~F1+1;
else f11=F1;
if(F1[3]) f21=~F2+1;
else f21=F2;
a = 4'b000;
b = f11;
for(i=0; i<3; i=i+1)
begin
if(b[0]) begin
addout = a +f21;
a = {f21[3], addout[3-:3]};
b = {addout[0], b[3-:3]};
end // end if
else begin
b = {a[0], b[3-:3]};
a = {a[3], a[3-:3]};
end // end else
end // end for
if(b[0]) begin
addout = a + (~f21) +1;
a = ({~f21[3], addout[3-:3]});
b = {addout[0], b[3-:3]};
end // enf if
else begin
b = { a[0], b[3-:3] };
a = { a[3], a[3-:3] };
end // end else
f = { a[2-:3], b};
e1 = {E1[3], E1};
e2 = {E2[3], E2};
E = e1 + e2;
if(F1[3]==1'b1) begin
if(F2[3]==1'b1)F= {1'b0,f};
else begin
40
f=~f+1;
F={1'b0,f};
end
end
else begin
if(F2[3]==1'b0)F= {1'b0,f};
else begin
f=~f+1;
F={1'b0,f};
end
end
if(F == 8'b0100_0000) begin
F = F >> 1;
E=E+1;
if(E[4] != E[3] ) overflow = 1'b1;//tran so mu
else overflow = 1'b0;
end
else if (F[6] == F[5]) begin //chuan hoa
if(E != 5'b01000) begin
F = F << 1;
E= E-1;
if (F[6] == F[5]) begin //chuan hoa
if(E != 5'b01000) begin
F = F << 1;
E= E-1;
if(E[4] != E[3] ) overflow = 1'b1;//tran so mu
else overflow = 1'b0
end
else overflow=1'b1;
end
if(E[4] != E[3] ) overflow = 1'b1;//tran so mu
else overflow = 1'b0;
end
else overflow=1'b1;
end
else begin
if(E[4] != E[3] ) overflow = 1'b1;//tran so mu
else overflow = 1'b0;
end
end// end if(E1=4'b000)
end//end mult
default: begin
E = 5'b00000;
F=8'b0000_0000;
overflow=1'b0;
end
endcase
ACC[8] = overflow; // dua overflow ra thanh ghi ACC
41
ACC[7-:4] = F[6-:4]; // dua F ra thanh ghi ACC, lay 4 bit dau cua F
ACC[3-:4] = E[3-:4];
end // end always
display u4(.ACC(ACC), .led_overflow(led_overflow), .led_frac(led_frac),
.led_exp(led_exp));
endmodule
module display ( ACC, led_overflow, led_frac, led_exp);
//input clk;
input [8:0] ACC;
output led_overflow;
output [6:0] led_frac, led_exp;
assign led_overflow = ACC[8];
led7 segF (ACC[7-:4], led_frac);
led7 segE (ACC[3-:4], led_exp);
endmodule
module led7(a, seg);
input [3:0] a;
output [6:0] seg;
reg [6:0] seg;
always @(*) begin
seg = 7'b111_1110; // khoi tao "-"
case (a)
4'b0000: seg = 7'b000_0001; // 0
4'b0001: seg = 7'b100_1111; // 1
4'b0010: seg = 7'b001_0010; // 2
4'b0011: seg = 7'b000_0110; // 3
4'b0100: seg = 7'b100_1100; // 4
4'b0101: seg = 7'b010_0100; // 5
4'b0110: seg = 7'b010_0000; // 6
4'b0111: seg = 7'b000_1111; // 7
4'b1000: seg = 7'b000_0000; // - 8
4'b1001: seg = 7'b000_0100; // -7
4'b1010: seg = 7'b000_1000; // -6
4'b1011: seg = 7'b110_0000; // -5
4'b1100: seg = 7'b011_0001; // -4
4'b1101: seg = 7'b100_0010; // -3
4'b1110: seg = 7'b011_0000; // -2
4'b1111: seg = 7'b011_1000; // -1 //led_frac = 001_0010, led_exp=100_1111
endcase
end
endmodule
2. Code file test_bench.v.
module test_bench;
reg [2:0] opcode;
reg [3:0] F1,E1,F2,E2;
wire led_overflow;
wire [6:0] led_frac, led_exp;
alu u1 (F1,E1,F2,E2,opcode, led_overflow, led_frac, led_exp);
42
initial
$monitor($time, " F1 = %b, E1= %b,F2 = %b, E2= %b,opcode= %b, led_overflow=
%b,led_frac = %b, led_exp=%b",F1,E1,F2,E2,opcode, led_overflow, led_frac, led_exp);
//initial state = 2'b00;
initial begin
//cong
F1 = 4'b0111; E1=4'b0001;F2=4'b0111;E2=4'b0011;opcode=3'b010;//((7/8)x2^1)+((7/8)x2^(3)))
F1 = 4'b1000; E1=4'b1101;F2=4'b1000;E2=4'b1001;opcode=3'b010;//((-1)x2^(-3))+((-1)x2^(-7)))
#5 F1 = 4'b1010; E1=4'b0111;F2=4'b1110;E2=4'b0010;opcode=3'b010;//((-3/4)x2^7)+((-1/8)x2^(2)))
#5 F1 = 4'b1001; E1=4'b0111;F2=4'b1001;E2=4'b0111;opcode=3'b010;//((-7/8)x2^7)+((-7/8)x2^(7)))
#5 F1 = 4'b0000; E1=4'b0011;F2=4'b1101;E2=4'b1001;opcode=3'b010;//((0)x2^3)+((-3/8)x2^(-7)))
#5 F1 = 4'b0000; E1=4'b0011;F2=4'b0000;E2=4'b1001;opcode=3'b010;//((0)x2^3)+(0x2^(-7)))
#5 F1 = 4'b1011; E1=4'b0011;F2=4'b1011;E2=4'b0011;opcode=3'b010;//((-5/8)x2^3)+(-5/8x2^(3))
//tru
#5 F1 = 4'b0111; E1=4'b0001;F2=4'b0111;E2=4'b0011;opcode=3'b011;//((7/8)x2^1)-((7/8)x2^(3)))
#5 F1 = 4'b1000; E1=4'b1101;F2=4'b1000;E2=4'b1001;opcode=3'b011;//((-1)x2^(-3))-((-1)x2^(-7)))
#5 F1 = 4'b1010; E1=4'b0111;F2=4'b1110;E2=4'b0010;opcode=3'b011;//((-3/4)x2^7)-((-1/8)x2^(2)))
#5 F1 = 4'b1001; E1=4'b0111;F2=4'b1001;E2=4'b0111;opcode=3'b011;//((-7/8)x2^7)-((-7/8)x2^(7)))
#5 F1 = 4'b0000; E1=4'b0011;F2=4'b1101;E2=4'b1001;opcode=3'b011;//((0)x2^3)-((-3/8)x2^(-7)))
//nhan
#5 F1 = 4'b0111; E1=4'b0001;F2=4'b0111;E2=4'b1000;opcode=3'b100;//((7/8)x2^1)*((7/8)x2^(-8)))
#5 F1 = 4'b1001; E1=4'b1001;F2=4'b1001;E2=4'b0001;opcode=3'b100;//((-7/8)x2^1)*((-7/8)x2^(-8)))
#5 F1 = 4'b1000; E1=4'b0111;F2=4'b1000;E2=4'b1001;opcode=3'b100;//((-1)x2^7)*((-1)x2^(-7)))
#5 F1 = 4'b0000; E1=4'b1000;F2=4'b0000;E2=4'b1000;opcode=3'b100;//((0)x2^(-8))*((0)x2^(-8))
#5 F1 = 4'b0111; E1=4'b0111;F2=4'b1001;E2=4'b0011;opcode=3'b100;//((7/8)x2^7)*((-7/8)x2^(3)))
43
#5
#5 $stop;
end
endmodule
44