仿真波形如图:
ALU模块
module alu(data1,data2,op,result);
input [7:0]data1,data2;
input[3:0]op; //可实现8种运算
output reg[7:0] result;
always@(data1 or data2 or op)
case(op)
4'b0000: result = 8'b00000000;
4'b0001: result = data1 + data2;
4'b0010: result = data1 - data2;
4'b0011: result = data2 + 8'b00000001;
4'b0100: result = data2 - 8'b00000001;
4'b0101: result = data1 & data2;
4'b0110: result = data1 | data2;
4'b0111: result = ~data1;
4'b1000: result = data1 ^ data2;
default:result = 8'bx;
endcase
endmodule
testbench文件
`timescale 1ns/1ns
module alu_tb();
reg [7:0] data1,data2;
reg [3:0] op;
wire[7:0]result;
alu malu(.data1(data1),.data2(data2),.op(op),.result(result));
initial
begin
op=0;
data1=8'd23;
data2=8'd34;
end
initial
begin
#50 op = 1;
#50 op = 2;
#50 op = 3;
#50 op = 4;
#50 op = 5;
#50 op =6;
#50 op =7;
#50 op =8;
#50 $finish;
end
endmodule