利用半加器实现全加器(层次化设计)

上一篇文章介绍了怎么使用ISE新建一个项目进行波形仿真,本篇利用上一篇的半加器模块实现全加器功能。

1、因为要用到半加器模块,所以我们在添加文件的时候需要把已经写好的半加器verilog文件加到工程里来

 2、把signals里边涉及到的信号都加进来,可以看到完整的RTL图

 3、可以看到原理图如图所示

 4、在新建测试文件这里我们选择全加器

 5、测试代码编写完毕,运行结束可以观察到如图所示波形

 附录代码:

1、半加器

module half_adder(
    input 		wire		in_1,
    input 		wire		in_2,
	 
    output 		wire		sum,
    output 		wire		count
    );
	 
assign	{count,sum} = in_1 + in_2;

endmodule

2、全加器

module full_adder(
    input		wire 		in_1,
    input		wire		in_2,
    input		wire 		cin,
	 
    output		wire 		count,
    output		wire 		sum
    );
	 
	 wire		h0_sum;
	 wire		h0_count;
	 wire		h1_count;
	 
	// 对两个半加器分别进行实例化
	half_adder  half_adder_inst0(
		.in_1		(in_1),
		.in_2		(in_2),
		
		.sum		(h0_sum),
		.count	(h0_count)
		);         
	
	half_adder  half_adder_inst1(
		.in_1		(cin),
		.in_2		(h0_sum),
		
		.sum		(sum),
		.count	(h1_count)
		); 
		
	assign	count = (h0_count | h1_count);

endmodule

仿真代码

`timescale 1ns / 1ns
module tb_full_adder;

	// Inputs
	reg in_1;
	reg cin;
	reg in_2;

	// Outputs
	wire count;
	wire sum;
	
	
	initial begin
		// Initialize Inputs
		in_1 = 0;
		in_2 = 0;
		cin = 0;
	end	
	
	initial begin
		$timeformat(-9,0,"ns",6);
		$monitor("@time %t:in_1=%b,in_2=%b,cin=%b,sum=%b,count=%b",$time,in_1,in_2,cin,sum,count);
	end
	

	// Instantiate the Unit Under Test (UUT)
	full_adder uut (
		.in_1(in_1), 
		.in_2(in_2), 
		.cin(cin), 
		
		.count(count), 
		.sum(sum)
	);
	
	always #10 in_1 <= {$random} % 2;
	always #10 in_2 <= {$random} % 2;
	always #10 cin  <= {$random} % 2;
      
endmodule

补充几个好用的快捷键:

1、ctrl+D,快速复制当前行

2、alt+光标,列选中

3、先选中内容,ctrl+鼠标拖拽,可以快速复制内容到任意位置

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值