并行前缀加法器 verilog

2023-10-31

并行前缀加法器verilog实现

关于并行前缀加法器的介绍,请看这里

前缀网络用KS树,64位加法器的verilog实现如下:


module cal_union(
    input g2,p2,g1,p1,
    output G,P
);
    assign G = g2 | p2&g1;
    assign P = p1 & p2;
endmodule

module adder_nocarry( 
    input A,B,C_in,
    output S,
    output g,p
    );
    assign S = A ^ B ^ C_in;
    assign g = A & B;
    assign p = A ^ B;
endmodule

module Para_prefix_mod_64bit(
    input [63:0]g,p,
    output [63:0]G,P //P[i] 表示 p[i:0] , G[i] 类似
);
    //采用KS树结构,64位需要6层树,每层有 16 - (1<<(i-1)) 个计算单元 
    wire  [63:0] GL[6:0],PL[6:0];
    
    assign GL[0] = g;
    assign PL[0] = p;

    generate 
        genvar	i,j;
            for(i=1;i<7;i=i+1)
                begin: layer
                for(j=(1<<(i-1));j<64;j=j+1)
                    begin: column						
                            cal_union ui1(
                                    .g2(GL[i-1][j]),        // g2,p2 代表高的那一位
                                    .p2(PL[i-1][j]),
                                    .g1(GL[i-1][j-(1<<(i-1))]),
                                    .p1(PL[i-1][j-(1<<(i-1))]),
                                    .G(GL[i][j]),
                                    .P(PL[i][j])
                                    );
                   end
               for(j=0;j<(1<<(i-1));j=j+1)
                   begin: column_						
                         assign GL[i][j] = GL[i-1][j];
                         assign PL[i][j] = PL[i-1][j];
                   end
            end
     endgenerate
    
    assign G = GL[6];
    assign P = PL[6]; 
endmodule 

module adder_prefix_64bit(
    input [63:0] A,B,
    input C_in,
    output [63:0] S,
    output C_out
);
    wire [63:0] g,p,G,P; 
    wire [64:0] C;
    assign C [0] = C_in;
    generate   
        genvar j;
        for(j=0;j<64;j=j+1)
            begin: carry_mod
                assign C[j+1] = G[j] | (P[j]&C_in); //C [j] 代表 第j个半加器的C_in
            end
        
        genvar i;
        for(i=0;i<64;i=i+1)
            begin: add_mod //64 half_adder
                adder_nocarry add_unit(
                    .A(A[i]),
                    .B(B[i]),
                    .C_in(C[i]),
                    .S(S[i]),
                    .g(g[i]),
                    .p(p[i])       
                );
            end
    
    endgenerate
    //前缀网络计算进位信号
    assign C_out = C[64];
    Para_prefix_mod_64bit prefix_net(.g(g), .p(p), .G(G) ,.P(P));
    
endmodule

module adder_prefix_tb();
    reg [63:0]A,B;
    reg C_in;
    wire C_out;
    wire [63:0]S;
   

    adder_prefix_64bit  T4 (.A(A),.B(B),.C_in(C_in),.S(S),.C_out(C_out));
    integer i = 0;
    initial 
    begin
        C_in = 1;
        for(i=0;i<16;i=i+1)
        begin
            A = $random;
            B = $random;
            #10;
        end
        C_in = 0;
        for(i=0;i<16;i=i+1)
        begin
            A = $random;
            B = $random;
            #10;
        end
    end    
endmodule

后续——
发现C_in的扇出太大了,应该想办法改进

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

并行前缀加法器 verilog 的相关文章

  • FPGA设计篇之流水线思想

    FPGA设计篇之流水线思想 一 写在前面 二 正文开始 2 1举个栗子 2 2 1情况一 组合逻辑 2 1 2情况二 流水线设计 2 1 4 小总结 2 2举第二个栗子 写在最后 一 写在前面 流水线 大家好 我是富土康三号流水线的张全蛋
  • PRBS笔记

    1 概述 PRBS 伪随机二进制序列 也称为伪随机码 通常被用来测试高速信号的信号质量 伪随机 也说明了该码流并不是真正的随机 而是具有特性属性 码流由 多项式 决定 具有重复周期 PRBS具有多种阶数 如PRBS7 PRBS15 PRBS
  • STM32【复习串口】

    串口复习加深理解笔记 杂谈 USART FLAG TXE发送缓冲区空标志 说明可以往数据寄存器写入数据了 但并不代码数据发送完成了 USART FLAG TC发送完成标志 这个才是代表USART在缓冲区的数据发送完成了 即从机接收到了数据
  • 【Xilinx Vivado时序分析/约束系列6】FPGA开发时序分析/约束-IO时序输入延时

    目录 源同步FPGA输入时序分析的模型 input delay约束 极限input delay 往期系列博客 源同步FPGA输入时序分析的模型 以下为源同步FPGA输入时序分析的模型的示意图 在之前的文章中介绍过 在此介绍一下各个时钟延时的
  • Verilog:【1】时钟分频电路(clk_divider.sv)

    碎碎念 作为Basic Verilog的第一个学习笔记 打算用这种命名方式来对博客进行命名 应该有助于检索 简单阅览了部分工程的代码 发现里面有很多嵌套关系 因此决定先从基础模块开始 也是为了整个博客内容的流畅性 读者朋友有问题的话 也可以
  • HDLBits — Verilog Practice(每日一题)

    HDLBits Verilog Practice 每日一题 一 Getting Started 1 Getting Started 一 Getting Started 1 Getting Started 问题描述 Build a circu
  • 【FPGA入门】第八篇、FPGA驱动VGA实现动态图像移动

    目录 第一部分 实现效果 第二部分 动态VGA显示的原理 1 将动态显示的区域提前进行赋值 2 图像块的移动是每张图片叠加后的效果 3 如何实现图像块位置的改变 第三部分 系统结构和驱动波形 1 系统的Top down结构 2 图像块移动的
  • 二、RISC-V SoC内核注解——译码 代码讲解

    tinyriscv这个SoC工程的内核cpu部分 采用经典的三级流水线结构进行设计 即大家所熟知的 取值 gt 译码 gt 执行三级流水线 另外 在最后一个章节中会上传额外添加详细注释的工程代码 完全开源 如有需要可自行下载 上一篇博文中注
  • 硬件基础知识

    SPI是串行外设接口 Serial Peripheral Interface 的缩写 是一种高速的 全双工 同步的通信总线 SCLK SCLK是一种有固定周期并与运行无关的信号量 CLK CLK是一种脉冲信号 TDNN 时延神经网络 它的两
  • 手把手教你Modelsim仿真【2020.4版本】

    首先新建一个文件夹 test5 打开Modelsim 依次选择 File gt Change Directory 把目录选择到创建的 test5 文件夹 创建库 依次选择 File gt New gt Library 一般我们选择第三个 库
  • verilog中wire和reg类型的区别

    module counter parameter CNT MAX 25 d24 999 999 input wire sys clk input wire sys rst n output reg led out reg 24 0 cnt
  • FPGA的基本设计流程

    FPGA开发主要包括系统设计 设计输入 功能仿真 综合优化 综合后仿真 实现与布局布线 时序方针与验证 板级方针与验证 芯片编程与调试等9个部分 如下图所示 1 电路设计 在系统设计之前 首先要进行的是方案论证 系统设计和FPGA芯片选择等
  • 八、RISC-V SoC外设——GPIO接口 代码讲解

    前几篇博文中注释了RISC V的内核CPU部分 从这篇开始来介绍RISC V SoC的外设部分 另外 在最后一个章节中会上传额外添加详细注释的工程代码 完全开源 如有需要可自行下载 目录 0 RISC V SoC注解系列文章目录 1 结构
  • TestBench编写_激励产生

    TestBench编写 激励产生 TestBench编写 激励产生 基本背景 读取函数介绍 a fopen函数使用 b fread函数使用 c fclose函数使用 实际使用 TestBench编写 激励产生 基本背景 最近遇到项目中需要对
  • 【DDR3 控制器设计】(3)DDR3 的写操作设计

    写在前面 本系列为 DDR3 控制器设计总结 此系列包含 DDR3 控制器相关设计 认识 MIG 初始化 读写操作 FIFO 接口等 通过此系列的学习可以加深对 DDR3 读写时序的理解以及 FIFO 接口设计等 附上汇总博客直达链接 DD
  • PAJ7620U2手势识别——配置0x00寄存器(3)

    文章目录 前言 一 为啥要配置0x00寄存器 二 配置步骤 1 单个读操作步骤图 2 模块状态转移图绘制 3 模块波形图绘制 4 上板验证 5 参考代码 总结 前言 在前面的教程中 小编带领各位读者学习了如何通过I2C协议去唤醒PAJ762
  • 画时序图软件——TimeGen和Timing Designer下载

    在写实验报告的时候需要画波形图 但是手头没有很好的软件 就上网搜了一些 分享出来 这里分享的是TimeGen和Timing Designer两个软件 资源均来自网上 有侵权请联系 TimeGen使用和安装都比较简单 我发的应该里面有破解方法
  • [Verilog] Verilog 基本格式和语法

    主页 元存储博客 全文 3000 字 文章目录 1 声明格式 1 1 模块声明 1 2 输入输出声明 1 3 内部信号声明 1 4 内部逻辑声明
  • Vivado ILA的debug信息保存与读取

    保存 write hw ila data D Project FPGA ILA Debug Data 202401041115 ila upload hw ila data hw ila 1 读取 display hw ila data r
  • MINI-UTDE 10 BASE-T 集成控制器

    MINI UTDE 10 BASE T 集成控制器 MINI UTDE 10 BASE T 拥有多达三个本地I O板和远程I OS总线通信 为用户提供了一系列生产单元功能的单一控制点 包括诸如夹头 反馈器和辅助机器等外围生产设备 支持所有主

随机推荐

  • Netty简介及应用场景

    什么是Netty Netty 是一个基于 JAVA NIO 类库的异步通信框架 它的架构特点是 异步非阻塞 基于事件驱动 高性能 高可靠性和高可定制性 Netty是基于Java NIO client server的网络应用框架 使用Nett
  • Linux centos搭建web服务器

    文章目录 前言 1 本地搭建web站点 2 测试局域网访问 3 公开本地web网站 3 1 安装cpolar内网穿透 3 2 创建http隧道 指向本地80端口 3 3 配置后台服务 4 配置固定二级子域名 5 测试使用固定二级子域名访问本
  • Linux配置都对ping静态地址ping不通解决方案(亲测搞了很久)

    CentOS7配置静态网络ping www baidu com或114 114 114 114 失败 首先root用户下vim etc sysconfig network scripts ifcfg ens33 esc wq 保存退出 se
  • 立体仓库货架设计

    目 录 摘要 3 Abstract 4 1 绪论 5 2 AS RS仓库主要参数确定 12 2 1单元货格尺寸的确定
  • u盘中病毒解决方法 (文件夹变成exe文件)

    上机课的电脑机子有毒 u盘刚插上去 就中病毒了 文件夹都变成exe文件了 上课就只顾杀毒 救我的u盘了 下面是我的杀毒 挽救u盘里的文件的具体步骤 亲测好用有效 1 下个 火绒 安全软件 链接 https www huorong cn 然后
  • 如何用css画出三角形

  • c++将数字转换为字符串

    include
  • C语言——计算阶层求和

    利用两次for循环进行求和 include
  • 中国跨境电商品牌营销白皮书

    导读 报告显示 近年来 中国品牌在走向国际市场的过程中面临着诸多挑战 跨文化 和 品牌形象接受度低 成为中国品牌在海外营销中的主要问题 由于国内外文化存在差异 中国品牌在营销方面遇到了困难 许多品牌往往照搬国内的广告模式 无法吸引国外消费者
  • SVG主要的画图元素以及几个基本的几何图形介绍

    本文主要介绍SVG画图中的两种主要画图元素 Path和Text 以及SVG的几个基本的几何形状 如线条 折线 多边形 椭圆 矩形 圆等等 本文主要采取理论 例子的方式来介绍 这种方式向来都是解释介绍的王道 同时也是学习的一种好方法 第一 首
  • 413 Request Entity Too Large

    一 字面意思是请求体太大 一般出现在上传文件 二 主要问题 Nginx默认最大能够上传1MB文件 大于1MB的文件自然无法上传 打开nginx conf 没权限找运维人员 在http 中设置 client max body size 50m
  • empire-web可视化

    首先说明我的安装系统为kali 教程同样适用于ubantu系统 1 首先安装Empire 没有安装的可以去先参考其他教程安装 2 下载empire web git clone https github com interference se
  • 【Python 笔记】Linux下安装pip方法的全总结

    本文研究记录了 Linux 下安装 pip 的全部方法 文章目录 1 通过 Linux 系统的包管理工具安装 1 1 apt 包管理工具安装 pip 1 1 1 安装 1 1 2 升级 1 1 3 issue5599 1 2 yum 包管理
  • 矩阵分解——谱分解

    文章目录 先修知识 幂等矩阵 谱分解定理 谱分解的流程 谱分解的推论 谱分解的应用 先修知识 幂等矩阵 谱分解定理 谱分解的流程 谱分解的推论 谱分解的应用
  • 浅析Bootstrap中Tab(标签页)的使用方法

    Bootstrap 导航元素使用相同的标记和基类 改变修饰的class 可以在不同的样式间进行切换 如 nav pills 胶囊式导航 与 nav tabs 标签式导航 创建一个标签式的导航菜单 以一个带有class nav 的无序列表开始
  • xxl-job任务操作源码分析(四)

    手动执行任务 页面上点击 执行 按钮 前端会发送一个请求 jobinfo trigger post 请求 param id 任务ID controller最终会调用service的方法进行处理 public ReturnT
  • 浅谈sql中的in与not in,exists与not exists的区别

    1 in和exists in是把外表和内表作hash连接 而exists是对外表作loop循环 每次loop循环再对内表进行查询 一直以来认为exists比in效率高的说法是不准确的 如果查询的两个表大小相当 那么用in和exists差别不
  • js遍历字典

    for var key in data html
  • eclipse使用pthread.h遇到“pthread_create”未定义的问题。

    解决方法 a 需要在编译时添加 lpthread参数 g XXXXX cpp lpthread o XXXXX o b 在eclipse中配置 project gt properties gt c c Build gt GCC C Link
  • 并行前缀加法器 verilog

    并行前缀加法器verilog实现 关于并行前缀加法器的介绍 请看这里 前缀网络用KS树 64位加法器的verilog实现如下 module cal union input g2 p2 g1 p1 output G P assign G g2