|
ALU:
. r( A0 B' ^1 i" h# ^: w& z# e* {+ y4 Emodule ALU(CTRL,A,B,Q,Code);; Z" `' |) Y; M" A9 p
input CTRL;
& ~1 g* R: I( d; e) W0 }input A;
& V+ B7 w: q v0 t1 v# G! j5 E" iinput B;
; X# k& b& u7 u2 w; Uoutput Q;
c4 A. {8 v1 b' G) Q; ~input[2:0] Code;
3 \- F! H' A P5 X5 M/ lif (CTLR === 0)3 F8 f2 X7 p* r3 }( }
Q = 0;
: A" q* t6 R% f# belse
. \9 G+ w* C- r% z7 Z case(Code)9 }; Z) k$ f0 n) u& F2 {6 V7 j/ Q
3'b000: Q = A+1;
5 t. u9 M) g( \ 3'b001: Q = A+B+1;9 T" ^6 }; c$ J
3'b010: Q = A;
) r4 M7 ?8 e: u- z5 H" _/ ^ 3'b011: Q = A+B;- {: q h. \) t5 r4 N3 @
3'b100: Q = A-1;3 ~4 K, I. m; w# c! X
3'b101: Q = A-B;3 Q: F, k# i! ~ u0 o
3'b110: Q = B;' i9 F8 J M5 j- F f
default: Q = A-B-1;2 P3 [- [% a, C+ ^: l7 U
endcase
* _0 _6 z1 f; g+ w/ H1 Z2 yendmodule) T0 T0 V, k( m" D8 V; N
& J+ k, q7 @& F% \6 c/ L+ x% F, w$ }+ P
testbench:
0 D. U/ u0 l: W |3 _0 |; H5 X/ ~module ALU_tb();' u: K+ k, a( l2 y y1 J
reg A,B,CTRL;' e/ t2 z' [" V! @7 p. p5 Y l1 p
wire Q;$ X# j* ?- w$ Y9 A1 ], {
reg[2:0] Code;
! z0 o/ F* E4 Finteger case_num;$ _5 f$ \% i }. g' N5 d7 d5 P( h
initial begin
+ h& }/ [$ h) g; @) P3 j3 | CTRL=0;
, G G0 E4 K9 ^6 V! b* ^/ _ case_num = 1;3 `7 F$ Z& t7 X8 I
A=1 'b0;
3 L* F' v# N# I6 E( N3 d, \% k& e B=1 'b1;
# t* ?$ v: P: F8 u, p #100;: C$ W. }* \4 z6 A. {6 l. d# K
if(Q==0)
: h$ N1 w1 ~$ b% h* d $display("[Simulation Info] Case %2d PASS.",case_num);
) G4 i6 d* c' I+ H! p4 y/ }! } else
: t7 j, V) T/ J' y$ B& V, Z $display("[Simulation Info] Case %2d ERROR.",case_num);/ d: z* w" I, O- G3 Y4 f9 y
#100;
3 }- v9 j) a6 s& @% ]) l& n CTRL=1;, T8 \) C- j' |0 Q
case_num = 2;# x4 |" f% t* G2 M$ q8 n
A= 1 'b1;
u# a+ S1 _/ Y( {, W4 @ B= 1 'b0;0 Q2 p2 f1 O, @' ~, }* v
Code = 3 'b000;9 Y; L& y4 V) H9 s+ B% e
#20;
+ r" z z4 y( J. }$ d) |2 r if(Q==0)
: C# y0 j/ X9 Y, p% K! ^ $display("[Simulation Info] Case %2d PASS.",case_num);
& c4 a+ c/ X% o. s% l r+ p+ J! h8 Z else
1 o, v M9 \4 i0 I' I $display("[Simulation Info] Case %2d ERROR.",case_num);
, j0 g) k, Q3 K #100;
0 Y( |/ m1 r" \/ [0 E7 P0 W% A case_num = 3;
; G v9 F g( K( e3 L' j% W( j$ V9 w Code = 3 'b001;
6 Y7 M9 y0 S' E2 j #20;
7 e: a0 A+ Z$ n) k* A9 r+ n8 g if(Q==0)
7 _+ l+ o. U7 t! o% o+ J# X3 @, X; u, r $display("[Simulation Info] Case %2d PASS.",case_num);* r, ]$ W9 O) t" C
else0 Z2 p2 B/ k, [3 g( A
$display("[Simulation Info] Case %2d ERROR.",case_num);0 s% f, j5 Q' J
#100;4 u+ H7 W1 C' B1 U& R! b3 b u
case_num = 4;
X# ^9 m, C3 g" c2 v6 p2 ` Code = 3 'b010;
# Z+ r/ V$ R# U$ F' t" i) ] #20;
4 J( Y! y; ?9 i if(Q==1)
+ S( [+ k* t) j- P( a $display("[Simulation Info] Case %2d PASS.",case_num);- o( p' A) p& l2 R% f7 N% \
else
& h5 s1 N8 F; L" ^: i) d( F+ g $display("[Simulation Info] Case %2d ERROR.",case_num);! n- p* | u" x% ^* U% u
#100;% Z+ w! X2 E5 g# R" I
case_num = 5;7 C# ?5 Q$ b4 H2 K. z4 T0 D! t
Code = 3 'b011;' V/ Y' B; ~% E/ [' t
#20;) P9 i# w: R* [
if(Q==1)$ S0 ^1 \0 j- S! z4 _
$display("[Simulation Info] Case %2d PASS.",case_num);
& G% p" t/ H! y" f else; e/ d. E8 @4 i, G
$display("[Simulation Info] Case %2d ERROR.",case_num);4 C" q# t( F; F0 I9 @# R. s0 l
#100;
) {5 C/ h q& _ case_num = 6;
, r( D/ \& f2 x) m Code = 3 'b100;
4 J* w. j% h+ D2 t #20;
7 X( R& G% f$ @7 n if(Q==0)) a3 Z2 { p& [" ?: ~7 A3 @" O- {
$display("[Simulation Info] Case %2d PASS.",case_num);
4 n4 g& J) `0 {: D' q7 X+ R else
- t3 ]# o. g" R" ^; H, ~ $display("[Simulation Info] Case %2d ERROR.",case_num);5 k/ p6 ~4 {* C! o+ p) A3 ~# O
#100;) B0 }9 J$ e' E* T
case_num = 7;
8 ?6 {9 H) Q1 Q9 V Code = 3 'b101;2 T" v5 a$ g% M/ P
#20;
, Q. [& Q( W3 F if(Q==1)
. C3 U* q, |: {9 U! s; U' r $display("[Simulation Info] Case %2d PASS.",case_num);2 z" C# ]4 m, N5 v8 P+ j [
else4 R. Z5 |3 f8 A: n4 O
$display("[Simulation Info] Case %2d ERROR.",case_num);
4 R' u, }0 g q( N2 ~) B3 R #100;* i2 p0 O. ?+ w
case_num = 8;( m A% ^% {4 }- A9 T
Code = 3 'b110;8 z2 @0 O* o: t. q
#20;
% i9 E% H1 s* T if(Q==0)
: F- F- E+ E6 J+ g' g$ k# \ $display("[Simulation Info] Case %2d PASS.",case_num);" X3 }0 O4 `1 H% i) \
else
2 B" \3 K3 Q" y! |. [ $display("[Simulation Info] Case %2d ERROR.",case_num);
' B) V" D, ]+ p$ W$ n #100;
- O8 ^. `& z9 a K" L" P& w2 M case_num = 9;; w* H( `4 D/ S
Code = 3 'b111;) d( Y9 |3 Y2 ]$ B# {
#20;3 A8 a9 R* {1 \% O
if(Q==0)
+ T* ^+ ~8 m+ Q$ d$ A1 K$ O" `& Y $display("[Simulation Info] Case %2d PASS.",case_num);
2 _: k3 Q3 a0 D$ r/ u" t else4 V; G7 G6 Z) ^5 |
$display("[Simulation Info] Case %2d ERROR.",case_num);
/ t% Y& _1 L/ G! ?1 R2 e$ W #100;7 Q% @& J) ^) J2 v4 r5 R
$finish;+ [: p+ c4 H9 H2 y
end+ R% [7 o- S0 D. g' K% L9 x
endmodule |
|