always模块构成简易ALU运算器
此模块属于组合逻辑电路,其输入、输出信号如下:
input opcode, //操作码
input a, //操作数
input b,
output out //数值输出
并且利用case语句,结合parameter定义,构建简易ALU运算器如下:
module C_Alu(
input [1:0] opcode, //操作码
input [3:0] a, //操作数
input [3:0] b,
output reg [7:0]out //数值输出
);
parameter add = 2'b00;
parameter sub = 2'b01;
parameter mul = 2'b10;
parameter div = 2'b11;
always@(opcode or a or b ) //电平触发
begin
case(opcode)
add: out <= a+b;
sub: out <= a-b;
mul: out <= a*b;
div: out <= a/b;
default: out <= 8'bz;
endcase
end
endmodule
利用modelsim软件进行仿真,其测试代码如下:
module C_Alu_tb;
reg [1:0] opcode; //操作码
reg [3:0] a; //操作数
reg [3:0] b;
wire [7:0]out; //数值输出
C_Alu i1 (
.a(a),
.b(b),
.opcode(opcode),
.out(out)
);
initial
begin
#50
#50 opcode = 2'b01;
#50 a=3;b=1;
end
endmodule
在仿真的时间设置上,设置1s停止,时间间隔为1ps,得到的时序图如下:
由此可验证always搭键建议ALU运算器成功。