03-Verilog学习-C_always模块构成简易ALU运算器

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,得到的时序图如下:

03-Verilog学习-C_always模块构成简易ALU运算器_第1张图片

由此可验证always搭键建议ALU运算器成功。

你可能感兴趣的:(Verilog项目实践)