FPGA——verilog实现加法器(详细)

it2023-09-21  81

1、半加器 首先我们看看半加器的真值表

abcoso000101011110

由真值表我们可以得到RTL图 verilog代码:

module half_add(a,b,so,co);//半加器 input a,b;//定义两个输入 output so,co;//so为和值的输出,co为进位数据的输出 assign so=a^b;//根据真值表可得so为a,b异或逻辑后的结果 assign co=a&b;//根据真值表可得co为a,b与逻辑后的结果 endmodule

这里用modelsim进行仿真

testbench文件:

`timescale 1ns/1ps//时延单位为1ns,时延精度为1ps module half_add_tb; //定义激励信号,对应连接到测试模块的输入端口,寄存器型 reg signal_a; reg signal_b; //定义待检测信号,对应连接到测试模块的输出端口,网线型 wire signal_so; wire signal_co; //例化测试模块 half_add U0( .a(signal_a), .b(signal_b), .so(signal_so), .co(signal_co) );//对应连接,端口名关联法 //产生激励 initial//初始 begin//按照真值表给a,b赋值 signal_a=0;signal_b=0; #100;//电平维持100ns signal_a=0;signal_b=1; #100;//电平维持100ns signal_a=1;signal_b=0; #100;//电平维持100ns signal_a=1;signal_b=1; #100;//电平维持100ns $stop;//停止 end endmodule

仿真结果: 仿真结果符合预期要求。

2、全加器

全加器真值表

abinsumcout0000000110010100110110010101011100111111

在这里我们采用上述半加器构成一个全加器 顶层代码:

module full_add(a,b,in,sum,cout); input a,b;//两个数据输入 input in;//进位输入 output sum;//和输出 output cout;//进位输出 wire sum_b; wire in_a; wire co1,co2;//定义网络线 half_add U1(.a(a),.b(b),.so(sum_b),.co(co2)); half_add U2(.a(in),.b(sum_b),.so(sum),.co(co1)); assign cout = co1|co2; endmodule

这里用modelsim进行仿真

testbench文件:

`timescale 1ns/1ps//时延单位为1ns,时延精度为1ps module full_add_tb; //定义激励信号,对应连接到测试模块的输入端口,寄存器型 reg signal_a; reg signal_b; reg signal_in; //定义待检测信号,对应连接到测试模块的输出端口,网线型 wire signal_sum; wire signal_cout; //例化测试模块 full_add U0( .a(signal_a), .b(signal_b), .in(signal_in), .sum(signal_sum), .cout(signal_cout) );//对应连接,端口名关联法 //产生激励 initial//初始 begin//按照真值表给a,b赋值 signal_a=0;signal_b=0;signal_in=0; #100;//电平维持100ns signal_a=0;signal_b=0;signal_in=1; #100;//电平维持100ns signal_a=0;signal_b=1;signal_in=0; #100;//电平维持100ns signal_a=0;signal_b=1;signal_in=1; #100;//电平维持100ns signal_a=1;signal_b=0;signal_in=0; #100;//电平维持100ns signal_a=1;signal_b=0;signal_in=1; #100;//电平维持100ns signal_a=1;signal_b=1;signal_in=0; #100;//电平维持100ns signal_a=1;signal_b=1;signal_in=1; #100;//电平维持100ns $stop;//停止 end endmodule

仿真结果: 仿真结果符合预期要求。

最新回复(0)