Verilog快速入门(8)—— 4bit超前进位加法器电路

这篇具有很好参考价值的文章主要介绍了Verilog快速入门(8)—— 4bit超前进位加法器电路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Verilog快速入门

(1) 四选一多路器
(2)异步复位的串联T触发器
(3)奇偶校验
(4)移位运算与乘法
(5)位拆分与运算
(6)使用子模块实现三输入数的大小比较
(7)4位数值比较器电路
(8)4bit超前进位加法器电路
(9)优先编码器电路①
(10)用优先编码器①实现键盘编码电路
(11)8线-3线优先编码器
(12)使用8线-3线优先编码器实现16线-4线优先编码器
(13)用3-8译码器实现全减器
(14)使用3-8译码器①实现逻辑函数
(15)数据选择器实现逻辑函数
(16)状态机
(17)ROM的简单实现
(18)边沿检测



一、题目描述

Verilog快速入门(8)—— 4bit超前进位加法器电路
Verilog快速入门(8)—— 4bit超前进位加法器电路
输入描述:
输入信号:
A_in[3:0],
B_in[3:0]
C_1
类型:wire
输出描述:
输出信号:
S[3:0]
CO
类型:wire

二、解析与代码

以下内容摘自Leonico题主解析

1. 半加器

它不考虑进位输入。其中A和B是两个加数,S是和, C o C_o Co是进位输出。

assign S     = A ^ B;
assign C_out = A & B;

2. 全加器

全加器是多bit加法器的基础。 C i C_i Ci是进位输入, C o C_o Co是向上进位输出。
Verilog快速入门(8)—— 4bit超前进位加法器电路

下图中红色路径是全加器的关键路径。
Verilog快速入门(8)—— 4bit超前进位加法器电路

module full_adder(
    input  A,
    input  B,
    input  C_i,
    output S,
    output C_o
);
    assign S    = A ^ B ^ C_i;
    assign C_o  = A & B | C_i&(a^b);
    // assign C_o  = A & B | A & C_i | B & C_i; // 也可以??? 不确定
endmodule

3. 行波进位加法器

Ripple-carry adder, RCA。将全加器串联起来。 虽然RCA结构简单易于理解,但容易看出,每一位的运算结果 S i S_i Si都要依赖进位 C i − 1 C_{i-1} Ci1才能得出。如下图所示,这会使得RCA的关键路径变得很长,而长关键路径会让电路难以满足时序要求。

Verilog快速入门(8)—— 4bit超前进位加法器电路

module rca #(
    parameter width = 4
)(
    input  [width-1:0] A,
    input  [width-1:0] B,
    output [width-1:0] S,
    
    input  C_i,
    output C_o
);
    wire [width:0] C;
    genvar i;
    generate
      	for (i=0; i<width; i=i+1)begin
            full_adder myadder(
                .A    (A[i]),
                .B    (B[i]),
                .C_i  (C[i]),
                .S    (S[i]),
                .C_o  (C[i+1]),
            );
        end
    endgenerate
  	assign C[0] = C_i;
    assign C_o  = C[width];
endmodule

或者

//行波进位
wire C2,C3,C4;
sub_add sub_add_inst1(
	.Ai(A_in[0]),
	.Bi(B_in[0]),
	.C(C_1),

	.Si(S[0]),
	.Ci(C2)
);
sub_add sub_add_inst2(
	.Ai(A_in[1]),
	.Bi(B_in[1]),
	.C(C2),

	.Si(S[1]),
	.Ci(C3)
);
sub_add sub_add_inst3(
	.Ai(A_in[2]),
	.Bi(B_in[2]),
	.C(C3),

	.Si(S[2]),
	.Ci(C4)
);
sub_add sub_add_inst4(
	.Ai(A_in[3]),
	.Bi(B_in[3]),
	.C(C4),

	.Si(S[3]),
	.Ci(C0)
); 
///
module sub_add(
	input Ai,
	input Bi,
	input C,

	output Si,
	output Ci
);

assign Si = Ai ^ Bi ^ C;
assign Ci = (Ai & Bi) ||( (Ai ^ Bi )& C);

4. 超前进位加法器

Lookahead Carry Adder,LCA。超前进位加法器的思想是并行计算进位 C i C_i Ci,以缩短关键路径。 C i C_i Ci可以直接由加数得到。
Verilog快速入门(8)—— 4bit超前进位加法器电路
超前进位加法器是通过公式直接导出最终结果与每个输入的关系,是一种用面积换性能的方法。
对于4bit LCA,进位输出C4的计算路径如下:
Verilog快速入门(8)—— 4bit超前进位加法器电路文章来源地址https://www.toymoban.com/news/detail-442265.html

`timescale 1ns/1ns

module lca_4(
	input		[3:0]       A_in  ,
	input	    [3:0]		B_in  ,
    input                   C_1   ,
 
 	output	 wire			CO    ,
	output   wire [3:0]	    S
);
//超前进位

    wire [3:0] C;
     
    assign S[0] = A_in[0] ^ B_in[0] ^ C_1;
    assign S[1] = A_in[1] ^ B_in[1] ^ C[0];
    assign S[2] = A_in[2] ^ B_in[2] ^ C[1];
    assign S[3] = A_in[3] ^ B_in[3] ^ C[2];
    assign C[0] = (A_in[0] & B_in[0]) || ((A_in[0] ^ B_in[0]) & C_1);
    assign C[1] = (A_in[1] & B_in[1]) || ((A_in[1] ^ B_in[1]) & C[0]);
    assign C[2] = (A_in[2] & B_in[2]) || ((A_in[2] ^ B_in[2]) & C[1]);
    assign C[3] = (A_in[3] & B_in[3]) || ((A_in[3] ^ B_in[3]) & C[2]);
    assign CO = C[3];

endmodule

到了这里,关于Verilog快速入门(8)—— 4bit超前进位加法器电路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【基于FPGA的芯片设计】4位超前进位加法器

    目录 实验原理 源代码 仿真代码 管脚配置 实验板卡:xc7a100tlc sg324-2L,共20个开关         顶层模块 超前进位模块 全加器模块 注:vivado版本为2018版,板卡为xc7a100tlcsg324-2L

    2024年02月06日
    浏览(47)
  • 用面包板搭建4bit加法器

    4bit加法器是一种数字电路,用于将两个 4 bit的二进制数相加,生成一个 4 bit的和。实验目的如下: (1)学习数字电路的基本概念和实现方法 (2)熟悉 4 bit加法器的设计和实现原理 (3)学会使用数字电路仿真工具模拟和验证电路的功能 (4)使用晶体管搭建一个4bit加法器电

    2024年02月03日
    浏览(43)
  • Verilog数字系统设计——带进位的8位加法器

    试分别使用门级原语和always 语句设计带进位的8位加法器,要求编制测试模块对实现的逻辑功能进行完整的测试; 使用门级原语设计时注意先在草稿上做出该加法器的门级设计; 如有余力可以进一步使用门级原语设计出带超前进位链的8位加法器(期末有加分); 实验提交

    2024年02月15日
    浏览(50)
  • 使用FPGA实现逐级进位加法器

    逐级进位加法器就是将上一位的输出作为下一位的进位输入,依次这样相加。下面以一个8位逐级进位加法器给大家展示。 我增加了电路结构,应该很容易理解吧。 下面我也列举了一位加法器,可以看下。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entity adder1 is

    2024年04月23日
    浏览(33)
  • Verilog 加法器/减法器

    目录 1位加法器 8位加法器 8位补码加减法器  32位补码加减法器       

    2024年02月11日
    浏览(43)
  • 数字IC经典电路(1)——经典加法器的实现(加法器简介及Verilog实现)

    加法器是数字系统最基础的计算单元,用来产生两个数的和,加法器是以二进制作运算。负数可用二的补数来表示,减法器也是加法器,乘法器可以由加法器和移位器实现。加法器和乘法器由于会频繁使用,因此加法器的速度也影响着整个系统的计算速度。对加法器的设计也

    2024年02月14日
    浏览(54)
  • 【FGPA】Verilog:移位寄存器 | 环形计数器 | 4bit移位寄存器的实现 | 4bit环形计数器的实现

      目录 Ⅰ. 理论部分 0x00 移位寄存器(Shift Register) 0x01 环形计数器(Ring Counter)

    2024年02月05日
    浏览(43)
  • 【verilog】6位二进制数加法器

    1:掌握无符号二进制数加法器的设计方法。 2:掌握使用Modelsim对verilog程序进行仿真和验证的方法。 二进制加法器由全加器构成,全加器功能和电路图如下图所示。 全加器对两个1位二进制数和1位来自低位的进位做加法运算,产生1位和和1位向更高位的进位。图中(a)是全加

    2024年02月06日
    浏览(47)
  • verilog全加器和四位加法器

    半加器: 保存为half_addr.bsf之后,可以在该项目中添加半加器 全加器: 通过RTL-Viewer查看半加器和全加器 添加全加器到项目 在process里面先后执行start fitter 和start time analyzer 生成testbench模板 修改testbench文件: 添加到项目 注意在联合modelsim时让generate functinal simulation netlist值为

    2024年02月07日
    浏览(47)
  • 各种加法器的比对分析与Verilog实现(2)

          本文将介绍Kogge-Stone加法器和brent-kung加法器的原理,在下一篇博客中我将用Verilog进行实现。 目录 1. 并行前缀加法器(Parallel-Prefix Adder, PPA)  2. Kogge-Stone加法器原理 3. brent-kung加法器原理        为了减少AND门的深度,PPA对CLA进行了进一步优化。不过PPA和CLA进行的计算

    2024年02月07日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包