|
ALU:; v' J7 D- f1 P R
module ALU(CTRL,A,B,Q,Code);- x; f$ n3 H d/ G6 T5 f- f
input CTRL;
+ M% W$ v) C! Q7 l0 F. Pinput A;. w* ]' N- O: h8 S! h
input B;* U" | `+ @+ x* A
output Q;
0 ~) a: d4 y- b" H, binput[2:0] Code;' M& K( W) ?# Y" M; c
if (CTLR === 0)6 h* p, H" ]* h6 ~ `5 L
Q = 0;3 T# ^* ~# Y( j& [5 `2 S
else0 R) N6 {7 n! X
case(Code)3 q. A, t+ Y+ G9 }3 L: \& n
3'b000: Q = A+1;7 W: b% `: v' T( R0 n' B
3'b001: Q = A+B+1;! T: x" a7 V+ \6 \: m' M2 }! [
3'b010: Q = A;* g8 P0 w7 f/ u
3'b011: Q = A+B;
# X: v, I. ? y) C3 A8 X 3'b100: Q = A-1;
9 G, _* |4 ~, n {+ Y1 H& a% _ 3'b101: Q = A-B; j; Z# p# V! Y: E0 K
3'b110: Q = B;
- k4 |. A: R5 q( j& }. P default: Q = A-B-1;
9 D$ ^2 k# {( ^ endcase5 q; p# C! V. X9 F! f2 T. @
endmodule
: @6 |9 R. S8 Q
7 y* F% E# ~2 M* @2 ]9 p
7 |8 H6 p, ?, s4 |testbench:
+ A t5 C0 J( O. C- v# ?# Xmodule ALU_tb();
" s( Q3 W+ [( Ireg A,B,CTRL;% i5 }5 d$ D% d9 R' b
wire Q;
5 T v. q- ]1 B" x( F8 g- H- Areg[2:0] Code;, i. g# V' _* q$ k+ _1 P
integer case_num;5 S: d0 z# |; P- c5 ~
initial begin
# r0 R1 Y' C1 W& h CTRL=0;
- l0 U X0 d5 j& o- d case_num = 1;& \/ e) U$ D2 F. w% L. s
A=1 'b0;( g% c" R0 w8 I! ]
B=1 'b1;% c% |6 \( O# t/ F6 U) M: t* u
#100;
( c+ p: U( Q I* x% L if(Q==0)
2 M' W8 @* M9 a, U2 u$ ]4 | $display("[Simulation Info] Case %2d PASS.",case_num);
5 B6 [) s. |; N* g4 j6 _3 ? else5 m& _( E6 }+ ]* z1 F
$display("[Simulation Info] Case %2d ERROR.",case_num);- P+ t5 c# D: g
#100;( V+ A1 ^# E# ?+ y9 _
CTRL=1;% ~3 l3 ~# V) |+ Q$ Q7 J9 |
case_num = 2;
6 V1 V% R4 Z; j- }9 {1 J% y A= 1 'b1;6 R3 B: `" I' i+ q) k- j
B= 1 'b0;9 Q) M6 j4 d* a/ V/ {
Code = 3 'b000;2 R0 {" A- J* a! N5 \
#20;
5 J x7 s- J) Z if(Q==0)
: g N+ B6 s, A. P0 L $display("[Simulation Info] Case %2d PASS.",case_num);
9 F. `% {8 C% R* O else" x0 J6 l, n( s# G/ m) s' x, {" `2 V
$display("[Simulation Info] Case %2d ERROR.",case_num);
/ u3 Q" o# \/ A #100;
; f! e8 m, V. K! Y case_num = 3;
+ X) W$ d& u( K, ~; b# q0 l5 t0 z Code = 3 'b001;0 y% G* H9 u3 y
#20;: Y: u. H/ K% z: v9 j1 I! ?
if(Q==0)
" e: K9 W1 ?, c. F $display("[Simulation Info] Case %2d PASS.",case_num);0 y5 {1 X% J: u" R/ \* {% E6 n% x( y
else+ v9 h3 a3 O: a" S
$display("[Simulation Info] Case %2d ERROR.",case_num);
: O5 c) W8 V% f; N4 y #100;
- ? k, Y# R% f" x: g% I case_num = 4;+ R; P4 O8 E* j! n1 b$ a% c W
Code = 3 'b010;9 F- q1 V; t/ s$ f% Z, \
#20;. j. s j) f0 G5 P2 b/ l
if(Q==1)
2 T2 v3 [4 E- c6 M7 C2 o( _ $display("[Simulation Info] Case %2d PASS.",case_num);
X9 R. C3 c; n# ^( x: J else
5 x7 n. W" x( d" `- `5 A8 A $display("[Simulation Info] Case %2d ERROR.",case_num);
3 o* U0 Y! z7 j #100;
7 V9 Q' @$ V5 K" B9 V3 q' w3 N! l case_num = 5;) O M5 X3 Z" x# o! f
Code = 3 'b011;
% ?7 h- b( L( N5 V #20;
Y1 R; z0 f; U if(Q==1)6 c3 S) C- u# ?8 g
$display("[Simulation Info] Case %2d PASS.",case_num);, q) [( z# w) m4 |
else
& j) Q# o/ T" `# k- y2 Y6 G# a $display("[Simulation Info] Case %2d ERROR.",case_num);+ {" \$ i1 w1 t3 E5 s/ w% T
#100;
) x0 M/ {# |" Q case_num = 6;0 Z. W" H; g. B3 d- N- t3 [2 p
Code = 3 'b100;
9 {: ]1 F) T# [. O) y& |0 T #20;
6 i" q% g) k* }7 w7 A3 t$ M! G if(Q==0)
, z7 {( ]8 g; { $display("[Simulation Info] Case %2d PASS.",case_num);. [, o* E, e, \8 H5 o A
else
" o) O4 } i! V- R% R# t6 L4 z $display("[Simulation Info] Case %2d ERROR.",case_num);; Q4 p' \( J3 H$ i3 U0 k9 k# b
#100;9 R" V2 M& Q. t
case_num = 7;, t& w+ [5 ~2 u# ^! k h
Code = 3 'b101;
. {; p$ a/ `2 s+ C4 t" @; ` #20;7 y! B7 G# J+ C+ m; i3 z
if(Q==1)
5 L6 c/ P5 U8 S( W9 q4 m $display("[Simulation Info] Case %2d PASS.",case_num);
0 w/ y( D9 {* U$ W8 f0 b else4 D( E- p8 x& ~( V" ?7 S$ o
$display("[Simulation Info] Case %2d ERROR.",case_num);* p& D. }6 z# v0 [$ V( q( F
#100;
' Y+ s' F$ l1 g- Q* O8 e, F0 e! k4 | case_num = 8;
! y( U0 [0 J2 f0 a9 T Code = 3 'b110;
5 r; o) S2 Z9 ~0 W #20;; X4 ]- @6 q" I7 G& X7 P- Q6 V+ \
if(Q==0)
$ `- Y. [) L! O% K0 d. k $display("[Simulation Info] Case %2d PASS.",case_num);% f/ ]6 p% y0 [: j b- k6 F! l
else: o' l; H t+ c6 a G( C
$display("[Simulation Info] Case %2d ERROR.",case_num);
' f E" F+ S; A4 s# _% ^ ^ #100;
+ U* A) O( {! v6 t+ g/ n case_num = 9;( J" g2 H/ W. l G
Code = 3 'b111;1 h6 a- \: V% ]: Q& @$ \ v* u
#20;$ M0 A; J/ F8 w9 F7 t, a
if(Q==0)! [% D1 x4 H$ v4 [9 y$ R5 x
$display("[Simulation Info] Case %2d PASS.",case_num);
* w( D+ E6 D1 V4 p. t else8 @3 C' h, P$ C3 J
$display("[Simulation Info] Case %2d ERROR.",case_num);
; a6 O; A. U" S( R. q6 c #100;( K( M$ Z2 o( H+ Q7 }6 q1 {0 q
$finish;
4 O% v5 j4 _: c9 H* ~1 H1 E end
! a6 I' F5 [6 m) Qendmodule |
|