文章目录

  • 串行进位加法器
    • 半加器
    • 全加器
    • 任意位数串行进位加法器
      • tb
  • 4bit超前进位加法器
  • Reference

串行进位加法器

半加器

module half_adder (input in1,input in2,output sum,output cout
);assign sum = in1^in2;
assign cout = in1&in2;endmodule

全加器

module full_adder (input in1,input in2,input cin,output sum,output cout
);wire xor2;
assign xor2 = in1^ in2;                // reuseassign sum = xor2^ cin;                        // assign cout = in1&in2| in1&cin| in2&cin;    // 3and 2or
// assign cout = in1&in2| cin&(in1|in2);       // one less and, 2and 2or
assign cout = (xor2&cin)| (in1&in2);               // resuse in1^in2, 2and 1or endmodule
module full_adder_comb (input in1,input in2,input cin,output sum,output cout
);wire sum1;
wire sum2;wire cout1;
wire cout2;half_adder u1(.in1   (in1),.in2  (in2),.sum  (sum1),.cout    (cout1)
);half_adder u2(.in1    (sum1),.in2 (cin),.sum  (sum2),.cout    (cout2)
);assign sum = sum2;
assign cout = cout1| cout2;endmodule

任意位数串行进位加法器

module serial_adder#(parameter WIDTH = 8
)(input [WIDTH-1:0]     in1,input [WIDTH-1:0]   in2,input               cin,output  [WIDTH:0]   sum
);wire [WIDTH:0]cout;
assign cout[0] = cin;genvar i;
generatefor(i=0; i<WIDTH; i=i+1)begin :gffull_adder_comb ufa(.in1 (in1[i]),.in2   (in2[i]),.cin   (cout[i]),.sum  (sum[i]),.cout  (cout[i+1]));end
endgenerateassign sum[WIDTH] = cout[WIDTH];endmodule

tb

`timescale  1ns / 1psmodule tb_serial_adder;// serial_adder Parameters
parameter PERIOD = 10;
parameter WIDTH  = 2;// serial_adder Inputs
reg   [WIDTH-1:0]  in1                     = 0 ;
reg   [WIDTH-1:0]  in2                     = 0 ;
reg   cin                                  = 0 ;// serial_adder Outputs
wire  [WIDTH:0]  sum                       ;// initial
// begin
//     forever #(PERIOD/2)  clk=~clk;
// end// initial
// begin
//     #(PERIOD*2) rst_n  =  1;
// endserial_adder #(.WIDTH ( WIDTH ))u_serial_adder (.in1                     ( in1  [WIDTH-1:0] ),.in2                     ( in2  [WIDTH-1:0] ),.cin                     ( cin              ),.sum                     ( sum  [WIDTH:0]   )
);initial
beginin1 = 8'b1111_0000;in2 = 8'b1111_0101;#10;in1 = 8'b1111_1111;in2 = 8'b1111_1111;cin = 1;#10;in1 = 8'b1111_1111;in2 = 8'b1001_1111;cin = 1;#10;in1 = 8'b1111_1111;in2 = 8'b1;cin = 1;#10;in1 = 8'b1111_1111;in2 = 8'b0;cin = 1;#10;in1 = 8'b1111_1111;in2 = 8'b1;cin = 0;$finish;
endendmodule


在vivado中被优化的不成样子,且vivado似乎不支持通过WIDTH的方式进行传参,但Modelsim支持的非常完美

4bit超前进位加法器

虽然超前进位加法器不支持任意位数,但是可以通过嵌套实现高位超前进位加法器
嵌套方法有串行超前进位加法器与超前超前进位加法器

// s = in1^in2^cin
//  = (in1|in2)^(in1&in2)^cin
// cout = in1&in2 | cin(in1|in2)module lookahead_carry_adder #(parameter WIDTH = 4
)(input [WIDTH-1:0]     in1,input [WIDTH-1:0]   in2,input               cin,output  [WIDTH:0]   sum
);wire [WIDTH-1:0] G;
wire [WIDTH-1:0] P;
wire [WIDTH:0] C;   // input carryassign G = in1&in2;
assign P = in1|in2;assign C[0] = cin; // lsb carry equals to cin
assign C[1] = G[0] | (C[0]&P[0]);
// assign C[2] = G[1] | C[1]&P[1];
assign C[2] = G[1] | (G[0]&P[1]) | (C[0]&P[0]&P[1]);
assign C[3] = G[2] | (G[1]&P[2]) | (G[0]&P[1]&P[2]) | (C[0]&P[0]&P[1]&P[2]);
assign C[4] = G[3] | (G[2]&P[3]) | (G[1]&P[2]&P[3]) | (G[0]&P[1]&P[2]&P[3]) | (C[0]&P[0]&P[1]&P[2]&P[3]);assign sum[3:0] = P^G^C;
assign sum[4] = C[4];
endmodule

Reference

https://blog.csdn.net/qq_45861449/article/details/109460294
https://wenku.baidu.com/view/3b1b326dcc84b9d528ea81c758f5f61fb736287b.html
https://www.jianshu.com/p/6ce9cad8b467

串行进位加法器与超前进位加法器 verilog相关推荐

  1. 32位进位选择加法器_超前进位加法器amp;行波进位加法器

    超前进位加法器&行波进位加法器 八位超前进位加法器 原理 设计文件 综合电路 测试文件 仿真波形 八位行波进位加法器 原理 设计文件 测试文件 仿真波形 总结 八位超前进位加法器 原理 有学弟 ...

  2. 四位行波进位加法器_超前进位加法器amp;行波进位加法器

    超前进位加法器&行波进位加法器 八位超前进位加法器 原理 设计文件 综合电路 测试文件 仿真波形 八位行波进位加法器 原理 设计文件 测试文件 仿真波形 总结 八位超前进位加法器 原理 有学弟 ...

  3. 串行进位加法器和超前进位加法器代码实现及性能对比

    写在前面:要了解超前进位加法器的实现机制,参考超前进位加法器-郭天祥 代码实现 串行进位加法器 代码 adder_4bits.v module adder_4bits(a,b,cin,cout,sum ...

  4. 半加器、全加器、行波进位加法器、超前进位加法器

    半加器 两个1bit数据相加,不包含进位. 全加器 包含低位来的进位,相当于三个1bit数据相加. 至于为啥或和异或一样的解释:因为AB为00,01,10时异或和或结果一样,但是11时或为1,异或为0 ...

  5. 加法器的实现(半加器,全加器,行波进位加法器,超前进位加法器,流水线加法器)

    一.半加器和全加器 二.行波进位加法器 三.超前进位加法器(Carry-Lookahead Adder,CLA) https://www.jianshu.com/p/6ce9cad8b467 四.流水 ...

  6. Verilog实现4-bit行波进位加法器和超前进位加法器

    1. 行波进位实现方式: module adder4_ripple (input wire [3:0] a, b,input wire Cin0,output wire [3:0] y,output ...

  7. 超前进位加法器实验报告_16位超前进位加法器实验报告

    一.实验目的 设计.验证并优化 16 位超前进位加法器的逻辑功能. 二.实验原理 1 . 1 位全加器原理 全加器的求和输出信号和进位信号,定义为输入变量 A . B . C 的两种组合布尔函 数: ...

  8. verilog 实现32位加法器(超前进位)

    一.功能概述: 先行进位加法器是对普通的全加器进行改良而设计成的并行加法器,主要是针对普通全加器串联时互相进位产生的延迟进行了改良.超前进位加法器是通过增加了一个不是十分复杂的逻辑电路来做到这点的. ...

  9. Verilog实现超前进位加法器

    在CPU等对性能要求较高的电路中,一般都会采用超前进位加法器,因为超前进位加法器的延时相对来说比较小.下面讲述超前进位加法器的原理: 我们知道,一个三输入,二输出的全加器,其逻辑关系为 S=A⊕B⊕C ...

最新文章

  1. ExtJs选项卡,求大神解答
  2. 3D特效师可以下班了丨Science
  3. 【正一专栏】恒大中超七连冠到手了
  4. ethercat通讯协议_工业控制常用接口协议大全,长见识了
  5. 关于json格式字符串解析并用mybatis存入数据库
  6. Go编程技巧--io.Reader/Writer
  7. zblog php 七牛缩略图,zblog中Gravatar头像不显示解决方法
  8. python字符串对齐_Python - 字符串对齐
  9. Python django 安装 mysqlclient 失败
  10. v-for循环下动态绑定ref后undefine的解决方式
  11. MAC 安装caffe 教程 排坑
  12. 高中计算机会考操作题frontpage,高中信息技术会考frontpage操作题要点
  13. 从自建服务器到选择阿里云我们都应该慎重决定
  14. php容器概念,PHP容器——Pimple运行流程浅析
  15. 苹果描述文件无法连接服务器,教你 game center无法连接服务器解决办法及iOS9.3.2公测版已修复GameCenter无响应bug...
  16. 计算机休眠不播放音乐,电脑休眠后不能播放音乐怎么办
  17. linux spool目录 删除,Linux知识:/var/spool/clientmqueue 下垃圾文件删除
  18. 旗舰级安卓手机推荐 2022年不如买它
  19. c语言学习之转义字符
  20. 男戴观音女戴佛有依据吗?

热门文章

  1. 外星人鼠标如何设置宏定义
  2. 【计算机毕业设计】522租房网站
  3. 2018.09.06 烽火传递(单调队列优化dp)
  4. 街区的最短路径 nyist7
  5. 22-05-10 西安 mysql基础篇(02) 修改表 、修改列、commit和rollback、表数据之增删改 DML 、列级约束、表级约束
  6. ajax put完整示例,Java AjaxParams.put方法代码示例
  7. java 路径遍历 漏洞修复
  8. Linux正则与文本处理工具
  9. corona sdk android,Corona SDK
  10. viewport概念