FPGA学习笔记 -- 层次化设计

自下而上:由功能单元到模块到整体

自上而下:由整体分解到功能模块

实际中两种思想是混合使用的:

        

案例:

全加器:

        

利用半加器实现

 

半加器模块

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

endmodule

 全加器引用半加器

module full_adder
(
	input wire in0,
	input wire in1,
	input wire cin,
	
	output wire count,
	output wire sum
);

wire sum_0;
wire count_0;
wire count_1;

half_add half_0
(
	.in_1(in0),
	.in_2(in1),
	
	.sum(sum_0),
	.count(count_0)
);

half_add half_1
(
	.in_1(sum_0),
	.in_2(cin),
	
	.sum(sum),
	.count(count_1)
);

assign count = (count_0 | count_1);

endmodule

注意需要在file选项中选择全加器作为顶层设计

测试wen'j

`timescale 1ns/1ns

module tb_full_adder;

	reg in_1;
	reg in_2;
	reg cin;
	
	wire sum;
	wire count;
	
	initial
		begin
			in_1 <= 1'b0;
			in_2 <= 1'b0;
			cin <= 1'b0;
		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
	always #10 in_1 <= {$random} % 2;
	always #10 in_2 <= {$random} % 2;
	always #10 cin <= {$random} % 2;
	
	full_adder full_adder_0
	(
		.in0(in_1),
		.in1(in_2),
		.cin(cin),
		
		.count(count),
		.sum(sum)
		
	);

endmodule

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值