# [2021/05/13] 數位邏輯設計實習
## EX9

### testbench.sv
```
// Code your testbench here
// or browse Examples
`timescale 1ns/1ns
module testbanch();
reg [3:0] S;
reg [4:0] A, B;
wire [4:0] Alu;
alu4 uut(.S(S), .A(A), .B(B), .Alu(Alu));
initial
begin
S = 4'b1101;
A = 5'b10100;
B = 5'b00101;
#100
S = 4'b1100;
#100
S = 4'b0111;
#100
S = 4'b0101;
#100
S = 4'b0001;
#100
S = 4'b0000;
#100
S = 4'b1111;
end
initial
begin
$display("testBanch");
#700;
$finish();
end
initial
begin
$dumpfile("dump.vcd");
$dumpvars(0);
end
endmodule
```
### design.sv
```
// Code your design here
module alu4(S, A, B, Alu);
input [3:0] S;
input [4:0] A, B;
output [4:0] Alu;
reg [4:0] Alu;
always@(S or A or B)
case(S)
0 : Alu = A>B ? 5'b11111 : 5'b00000;
1 : Alu = A > B ? A : B;
5 : Alu = {B[2:0], B[3]};
7 : Alu = A>>1;
12: Alu = ~(A^B);
13: Alu = ~(A & B);
default: Alu = 6;
endcase
endmodule
```