实验一:四位全加器的RTL设计

0.前言

为了熟悉整个数字IC设计流程,以知识点+实验的方式记录。
四位全加器的写法有很多种,按照FPGA的设计方法,可以直接调用一个四位的加法器;但数字IC基于标准cell的设计,为了速度与面积的trade off,以及后端布线方便,本实验采用模块调用的写法。

1.设计代码

module adder_4bits(
input	[3:0]	num1,
input	[3:0]	num2,
output			cout,
output	[3:0]	sum
);
wire		cout_0;
wire		cout_1;
wire		cout_2;


adder_1bit		adder0	(
.num1		(	num1[0]	),
.num2		(	num2[0]	),
.cin		(	1'b0	),
.cout		(	cout_0	),
.sum		(	sum[0]	)
);

adder_1bit		adder1	(
.num1		(	num1[1]	),
.num2		(	num2[1]	),
.cin		(	cout_0	),
.cout		(	cout_1	),
.sum		(	sum[1]	)
);

adder_1bit		adder2	(
.num1		(	num1[2]	),
.num2		(	num2[2]	),
.cin		(	cout_1	),
.cout		(	cout_2	),
.sum		(	sum[2]	)
);

adder_1bit		adder3	(
.num1		(	num1[3]	),
.num2		(	num2[3]	),
.cin		(	cout_2	),
.cout		(	cout	),
.sum		(	sum[3]	)
);

endmodule


module adder_1bit(
input 	num1	,
input	num2	,
input	cin		,
output	cout	,
output	sum
);

assign {cout,sum}=num1+num2+cin;

endmodule

2.验证代码

`timescale 1ns/1ps

module test_tb();

reg				clk_1	;
reg				clk_16	;

reg		[3:0]	num1	;
reg		[3:0]	num2	;
wire			cout	;
wire	[3:0]	sum 	;



//instance
adder_4bits			adder	(
.num1			(	num1	),
.num2			(	num2	),
.cout			(	cout	),
.sum			(	sum		)
);

//generate clk
always
begin
	forever	
	#10 clk_1=~clk_1;
end

always
begin
	forever	
	#160 clk_16=~clk_16;
end

//add driven by clk
always@(clk_1)
begin
	num1=num1+4'b0001;
end

always@(clk_16)
begin
	num2=num2+4'b0001;
end


initial
begin
	//test begin
	clk_1=0;
	clk_16=0;
	
	num1=4'b0000;
	num2=4'b0000;

	#20000;
	$finish;
end


endmodule

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值