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

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

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

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

        FPGA学习笔记 -- 层次化设计_第1张图片

案例:

全加器:

        FPGA学习笔记 -- 层次化设计_第2张图片

利用半加器实现

FPGA学习笔记 -- 层次化设计_第3张图片

 FPGA学习笔记 -- 层次化设计_第4张图片

半加器模块

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

你可能感兴趣的:(FPGA学习笔记及心得,fpga开发,学习)