宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

一、思路

全加器(full_adder):是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器,一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。
一位全加器的真值表如下:假设Ai,Bi,Ci-1是输入信号,s1和c1是输出信号,并且有Ai是被加数,Bi是加数,相邻低位来的进位数是Ci-1,输出本位和是Si,向相邻高位进位数是Ci

针对全加器的特性,设计思路如下(图中a,b为加数;cin为前一位进位;sum为输出本位和;cout为相邻高位进位数):

最终结果用4位二进制表示,至于结果的每一位来源可以通过经过cout端口的次数来确定,即0次(全从sum端口出)为最低位,依次类推。

二、代码

最终结果用4位二进制表示,至于结果的每一位来源可以通过经过cout端口的次数来确定,即0次(全从sum端口出)为最低位,依次类推。

代码如下:

module f_adda, b, ci, s, co ); input a; input b; input ci; output s; output co; assign {co,s}=a+b+ci;endmodule module count_1_add data_in, data_out ); input [7:0]data_in; output [3:0]data_out; wire s0,s1,s2,s3,s4,s5,s6; wire c0,c1,c2,c3,c4,c5,c6; f_add f_add0 .adata_in[0]), .bdata_in[1]), .cidata_in[2]), .ss0), .coc0) ); f_add f_add1 .adata_in[3]), .bdata_in[4]), .cidata_in[5]), .ss1), .coc1) ); f_add f_add2 .as0), .bs1), .cidata_in[6]), .ss2), .coc2) ); f_add f_add3 .as2), .bdata_in[7]), .ci1’b0), .ss3), .coc3) ); f_add f_add4 .ac0), .bc1), .cic2), .ss4), .coc4) ); f_add f_add5 .as4), .bc3), .ci1’b0), .ss5), .coc5) ); f_add f_add6 .ac5), .bc4), .ci1’b0), .ss6), .coc6) ); assign data_out={c6,s6,s5,s3}; endmodule 2.测试文件

代码如下:

`timescale 1ns/1nsmodule tb; reg [7:0]data_in; wire [3:0]data_out; reg clk; count_1_add count_1_add .data_indata_in), .data_outdata_out) ); initial clk=0; always #1 clk=~clk; initial begin data_in=8’b1101_0010; #10; data_in=8’b168飞艇6种不亏钱的方法 .ac0), .bc1), .cic2), .ss4), .coc4) ); f_add f_add5 .as4), .bc3), .ci1’b0), .ss5), .coc5) ); f_add f_add6 .ac5), .bc4), .ci1’b0), .ss6), .coc6) ); assign data_out={c6,s6,s5,s3}; endmodule 2.测试文件

代码如下:

`timescale 1ns/1nsmodule tb; reg [7:0]data_in; wire [3:0]data_out; reg clk; count_1_add count_1_add .data_indata_in), .data_outdata_out) ); initial clk=0; always #1 clk=~clk; initial begin data_in=8’b1101_0010; #10; data_in=8’b1001_0000; endendmodule 仿真结果

可以看到用了七个全加器,点开其中一个,可以看到一个全加器由两个半加器和一个或门组成

时序: