alu.v
1、ALU的电路图如下所示,假设ALU能够实现两个8位二进制数的7种运算:清零、加、减、自加、自减、与、或。
2、ALU端口信号说明如下:
result:8位,输出,运算结果
data1:8位,输入,参与运算的操作数1
data2:8位,输入,参与运算的操作数2
op:3位,输入,操作控制信号,说明如下:
op=000:清零,result=0;
op=001:加法,result=data1+data2;
op=010:减法,result=data1-data2;
op=011:自加,result=data2+1;
op=100:自减,result=data2-1;
op=101:与, result=data1&data2;
op=110:或, result=data1|data2;
3、在新建的Verilog1.v文件中输入实现ALU的代码:
//实现清零、加、减、自加、自减、与、或运算
module alu(data1,data2,op,result);
input [7:0]data1,data2;
input[2:0]op; //可实现8种运算
output reg[7:0] result;
always@(data1 or data2 or op)
case(op)
3'b000: result = 8'b00000000;
3'b001: result = data1 + data2;
3'b010: result = data1 - data2;
3'b011: result = data2 + 8'b00000001;
3'b100: result = data2 - 8'b00000001;
3'b101: result = data1 & data2;
3'b110: result = data1 | data2;
default:result = 8'bx;
endcase
endmodule
testbench文件
`timescale 1ns/1ns
module alu_tb();
reg [7:0] data1,data2;
reg [2: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 $finish;
end
endmodule
仿真波形