计算机组成实验——四位加法器设计

1. 用 Verilog HDL 语言设计一位全加器电路。建立工程,编译,设计仿真波形文件,进行功能仿真测试等,为一位全加器建立符号模块 symbol,供顶层原理图文件调用。

2. 调用一位全加器符号模块,顶层采用原理图方式设计四位加法器,进位方式可采用串行进位或先行进位。

一、实验分析与设计

本实验需要建立两个项目。

第一个项目为full_adder,通过 Verilog HDL 语言编写全加器代码,并依次项目生成符号模块。

第二个项目为四位全加器,通过原理图方式,调用第一个项目建立的full_adder符号模块,连接成四位加法器。

二、程序代码

一位全加器

module full_adder(a,b,cin,sum,cout);
	input a, b, cin; 
	output sum, cout;
		
	assign{cout, sum} = a + b + cin;
endmodule

编译项目后,生成符号文件。

在原理图中,调用生成的符号文件。

将全加器与输入输出符号连接。编译后,按要求分配引脚。

三、ModelSim仿真

TestBench代码sy1.vt

`timescale 1 ps/ 1 ps
module sy1_vlg_tst();
reg a1;
reg a2;
reg a3;
reg a4;
reg b1;
reg b2;
reg b3;
reg b4;
reg cin;
// wires                                               
wire cout_3;
wire sum_0;
wire sum_1;
wire sum_2;
wire sum_3;
                     
sy1 i1 (
	.a1(a1),
	.a2(a2),
	.a3(a3),
	.a4(a4),
	.b1(b1),
	.b2(b2),
	.b3(b3),
	.b4(b4),
	.cin(cin),
	.cout_3(cout_3),
	.sum_0(sum_0),
	.sum_1(sum_1),
	.sum_2(sum_2),
	.sum_3(sum_3)
);
initial                                                
begin
	#20 cin = 1;
	#20 a1 = 1;b1 = 0;
	#20 a2 = 0;b2 = 1;
	#20 a3 = 1;b3 = 0;
	#20 a4 = 0;b4 = 1; 
	#20 $stop;
$display("Running testbench");                       
end                                                   
endmodule

由于ModelSim仿真不支持原理图,只能将原理图转换为 Verilog HDL 文件sy1.v

module sy1(
	cin,
	b2,
	a2,
	b3,
	a3,
	b4,
	a4,
	a1,
	b1,
	sum_0,
	sum_1,
	sum_2,
	sum_3,
	cout_3
);

input wire	cin;
input wire	b2;
input wire	a2;
input wire	b3;
input wire	a3;
input wire	b4;
input wire	a4;
input wire	a1;
input wire	b1;
output wire	sum_0;
output wire	sum_1;
output wire	sum_2;
output wire	sum_3;
output wire	cout_3;

wire	SYNTHESIZED_WIRE_0;
wire	SYNTHESIZED_WIRE_1;
wire	SYNTHESIZED_WIRE_2;

full_adder	b2v_inst(
	.a(a1),
	.b(b1),
	.cin(cin),
	.sum(sum_0),
	.cout(SYNTHESIZED_WIRE_0));

full_adder	b2v_inst1(
	.a(a2),
	.b(b2),
	.cin(SYNTHESIZED_WIRE_0),
	.sum(sum_1),
	.cout(SYNTHESIZED_WIRE_2));

full_adder	b2v_inst2(
	.a(a4),
	.b(b4),
	.cin(SYNTHESIZED_WIRE_1),
	.sum(sum_3),
	.cout(cout_3));

full_adder	b2v_inst3(
	.a(a3),
	.b(b3),
	.cin(SYNTHESIZED_WIRE_2),
	.sum(sum_2),
	.cout(SYNTHESIZED_WIRE_1));

endmodule

新建ModelSim项目,导入三个文件

仿真结果如下:a(0101) + b(1010) + cin(1) = sum(0000) + cout(1)。

ModelSim仿真教学

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值