Verilog四位全加器

▼魔方 西西 提交于 2019-11-26 14:35:32
1.4位全加器:能实现4位二进制数全加的数字电路模块,称之为四位全加器(逐位进位 超前进位)多位全加器连接可以是逐位进位,也可以是超前进位。逐位进位也称串行进位,其逻辑电路简单,但速度也较低。
	①第一种方法:仿真源文件代码:(行为描述和结构描述基本上差不多)
    	//数据流描述4位全加器
    module add_4
    (
    	input[3:0] a,b,
    	output[3:0] sum,
    	output cout,
    	input cin
    );
    assign{cout,sum} = a+b+cin;
    endmodule

//测试文件
module adder_4();
wire
在写testbeach文件之前,先普及一点testbeach的知识:
一般来讲,在数据类型声明时,和被测模块的输入端口相连的信号定义为reg类型,这样便于在initial语句和always语句块中对其进行赋值;和被测模块输出端口相连的信号定义为wire类型,便于进行检测。Testbench模块最重要的的任务就是利用各种合法的语句,产生适当的时序和数据,以完成测试,并达到覆盖率要求。
测试文件源代码:
module adder_4();
    wire[3:0] sum;
    wire cout;
    reg[3:0] a,b;
    reg cin;
    initial
        begin//这个其实就是真值表的应用
            #0 a = 4'b0001; b = 4'b1010; cin = 1'b0;
            #5 a = 4'b0010; b = 4'b1010; cin = 1'b1;
            #5 a = 4'b0010; b = 4'b1110; cin = 1'b0;
            #5 a = 4'b0011; b = 4'b1100; cin = 1'b1;
            #5 a = 4'b0111; b = 4'b1001; cin = 1'b0;
            #5 a = 4'b0001; b = 4'b1100; cin = 1'b1;
            #5 a = 4'b0011; b = 4'b1100; cin = 1'b0;
            #5 a = 4'b0111; b = 4'b1111; cin = 1'b1;
            #5 $finish;
        end
    add_4 u1(.a(a),.b(b),.cin(cin),.sum(sum),.cout(cout));
endmodule

波形图如下:
在这里插入图片描述
RTL电路图是:
在这里插入图片描述
第二种方法
仿真源文件:

module add4
(
		input[3:0] a,b,
		output[3:0] sum,
		output cout
);
assign {cout,sum} = a + b;
endmodule
在这里主要用到的是Verilog的拼接运算符——{信号1,信号2}, 其中信号1是高位置,信号2是低位值

测试文件:

module adder4();
reg [3:0] a,b;
wire  [3:0] sum;
wire cout;
initial 
	begin
		a = 0;	b = 0;	#50;
		a = 0;	b = 1;	#50;
		a = 0;	b = 3;	#50;
		a = 0;	b = 7;	#50;
		a = 0;	b = 15;	#50;	
		a = 1;	b = 15;	#50;
		a = 3;	b = 15;	#50;
		a = 7;	b = 15;	#50;
		a = 15;	b = 15;	#50;
		
	end
add4 u2(a,b,sum,cout);
endmodule

波形图如下:
在这里插入图片描述
RTL电路图是:
在这里插入图片描述
觉得本文可以的同学可以关注一下微信公众号“空谷小莜蓝”,我相信后期微信公众号会越来越好看的,谢谢~~

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!