|

ALU:% f* m: d& V8 L/ T
module ALU(CTRL,A,B,Q,Code);$ T3 t3 ]- |1 p) @
input CTRL;7 c3 x* Z# K* d6 m4 g3 d' T6 y: M
input A;
, I5 g0 d: Q: f1 }input B;
5 n0 q; Z: j3 N; Routput Q;; C& p3 z4 q V+ I/ U' T/ D
input[2:0] Code;+ k1 g p4 A) S
if (CTLR === 0)
+ [% s( F, V: {( W Q = 0;
/ }2 D: R8 z& _3 b/ N7 Lelse( x# h# D4 k) n" l2 h6 w1 P
case(Code)
+ ~2 q2 z- f. O) v) T8 ? 3'b000: Q = A+1; X* J7 ~( W1 P; k; t! R/ x) D' E; P
3'b001: Q = A+B+1; Q9 J" S7 D: F9 b9 _4 B6 v0 T0 C
3'b010: Q = A;
+ J9 b# J% r5 a% }6 I- V* ~0 H 3'b011: Q = A+B;
! j* \! s! j4 X% Z, i. E 3'b100: Q = A-1;
+ G p4 ]0 J! w4 w! p+ { 3'b101: Q = A-B;) k: e3 y2 x i/ E8 K: x& _# X
3'b110: Q = B;
# Y. w4 d3 v4 ^! Y4 Y2 R' Y5 ` default: Q = A-B-1;
9 L7 r" d. k2 ^9 f W endcase" \3 s- l' ?( \4 ^3 B
endmodule
# {; H8 T, {8 i% [
. p2 N6 h+ Q9 P. ~! ^6 \* T
, W$ E$ c& l$ O1 \6 w2 S! Ttestbench:: O. n5 [. v7 J1 r V' x0 E) s
module ALU_tb();
' ^: `! ^) B9 u) Lreg A,B,CTRL;
# y% w; F+ h9 O7 P: rwire Q;
# ~/ v: s& t; }# [! ?( Ireg[2:0] Code;
0 l# E% R4 O5 q: W9 q' U$ Rinteger case_num;* q8 ]6 G( D, e1 [
initial begin7 Y; V! W5 m; u" m" M
CTRL=0;2 J7 `! x( G' x! Y
case_num = 1; D3 o; \: `2 u4 j$ X1 p. O: y! G
A=1 'b0;
, D% G g& | J; z2 ? B=1 'b1;1 K" [2 P' X7 t
#100;1 d( k5 v: H1 w( j
if(Q==0)
. E0 A& M; v x/ ^5 o G) D, s $display("[Simulation Info] Case %2d PASS.",case_num);9 N0 j! E e1 V) y1 E1 y2 r$ P
else
X3 e% n4 A D' X! J $display("[Simulation Info] Case %2d ERROR.",case_num);' |& o% \: s6 S8 V
#100;1 |. l3 V, @! T/ e0 O5 ?' n
CTRL=1;
9 q. s0 Q/ t, {, y. _ case_num = 2;
" q1 ~' K( k5 t& i A= 1 'b1;% k* J+ X7 Y& S$ ]- ?7 x
B= 1 'b0;
; A- e9 x* P% O8 g Code = 3 'b000;5 n, O: y6 a( \4 i
#20;
! x4 ] R! l9 [; k9 x if(Q==0)
@8 r `5 d# J1 E- D7 D7 y $display("[Simulation Info] Case %2d PASS.",case_num);2 G$ F$ d, m9 }
else
2 n0 u4 x6 G+ s( h, ? $display("[Simulation Info] Case %2d ERROR.",case_num);2 g$ r' H9 j1 B* d6 B0 |! s% \" i
#100;
1 D' @, }+ W1 ^6 Y' r9 W; d) ^ Q/ G case_num = 3;
& i( N: o/ B& R# R Code = 3 'b001;+ U: h5 Z- i, S r3 e% l
#20;, P ^4 |0 a. d
if(Q==0)
# D3 X& h- h' C $display("[Simulation Info] Case %2d PASS.",case_num);
; v2 k$ n; P C" L0 U- | else2 I1 ^% N1 F+ w. O
$display("[Simulation Info] Case %2d ERROR.",case_num);# w1 G- ^6 B: b4 G
#100;
@; x8 I0 [- q. y3 Y" o3 x case_num = 4;; F7 r( n6 B/ z; h5 c
Code = 3 'b010;* j2 ]- j- I8 P: Z! W4 z: k
#20;/ \' i* ]7 ^( p6 T& U0 W7 i- `" P
if(Q==1)
% {2 b. o" K8 S& h: \) L1 F $display("[Simulation Info] Case %2d PASS.",case_num);9 I( Q- J3 S/ D* g0 y
else
& ]- U, R2 p) J, J! l& L $display("[Simulation Info] Case %2d ERROR.",case_num);, f6 b: \) F: l" z2 F W
#100;
H; w& k' n- ~ Y case_num = 5;
- ?3 H7 ]1 n7 {. c. d0 A% s Code = 3 'b011;
7 b3 J! F) s- j4 c" ]1 Y #20;
* S3 E) s5 v& x' q' O3 @1 [' x }1 F' Z if(Q==1)# H, L) G6 h* T+ F9 w; d, [
$display("[Simulation Info] Case %2d PASS.",case_num);
4 m( ?: d& B% o: H8 f9 d4 W- k else
1 X1 G9 K2 {8 B5 T+ F P $display("[Simulation Info] Case %2d ERROR.",case_num);
) a; g9 W& e7 e, Y9 _ #100; w+ d: v7 P7 B
case_num = 6;: `. M2 E" w4 e3 O
Code = 3 'b100;8 }$ t* c. X N
#20;
$ X" r# s1 s, ]6 `* h% ?! E* H if(Q==0), x( w0 K$ w& N
$display("[Simulation Info] Case %2d PASS.",case_num);6 K# p0 C! J* @7 w0 f
else- | U7 E; C o0 J* v: }/ j& M! y" r5 r
$display("[Simulation Info] Case %2d ERROR.",case_num);
! e1 E: R% o, ]% ~/ P6 ^ #100;
+ Y) m7 d# n7 ^$ n case_num = 7;
1 D; J7 C$ S# E* q5 f+ g2 B Code = 3 'b101;
7 L: K7 k: ?* L& N; a, a Q: d* B #20;7 | }0 {# m, z( \
if(Q==1)# [ I# Z+ E/ a+ N L
$display("[Simulation Info] Case %2d PASS.",case_num);
/ K: O5 B/ o% C5 {( C else
' e! F0 R/ w O1 `3 m2 B3 A l $display("[Simulation Info] Case %2d ERROR.",case_num);# @3 y9 @/ H2 \0 M
#100;' n/ n7 j; k4 B
case_num = 8;2 H' Y0 p( u, w
Code = 3 'b110;
2 g% y( i6 M: ?7 @1 z #20;5 l+ v4 ]% f, ~! R5 _1 r
if(Q==0)
2 T. u5 i) }& Z' Q $display("[Simulation Info] Case %2d PASS.",case_num);+ A4 f, P- D! v) m; f) i
else
+ k6 M( a' c# p8 x0 X6 b $display("[Simulation Info] Case %2d ERROR.",case_num);
3 Z$ b: b% h. `) h( [4 D #100;% w4 E% y1 E9 q
case_num = 9;
. c( T( Y- s( N6 Z Code = 3 'b111;$ x7 K8 {. D! I: V$ o# y5 M1 a
#20;
' z0 g8 x8 I& p9 {: M if(Q==0); D a" y% F7 o- s& `
$display("[Simulation Info] Case %2d PASS.",case_num);, B2 K8 u2 M8 j1 f+ x
else0 ~" r' x7 S% E3 b) F
$display("[Simulation Info] Case %2d ERROR.",case_num);
3 [' Z8 m& W* r3 f5 M5 v$ j8 I( r3 p #100;1 f/ _7 {8 P7 D) d: P& s
$finish;
$ T) [* d0 Z3 u/ x; P end
6 Q$ l" O v2 V8 |1 ]/ s: kendmodule |
|