《数字系统设计与Verilog HDL》上面有这么一段代码,用于实现8位4级流水线加法器。

module adder8pip(cout,sum,cin,ina,inb,clk    );input cin,clk;input [7:0] ina,inb;output cout;output [7:0] sum;reg cout,tempcin;reg [7:0] sum,tempa,tempb;reg firstco,secondco,thirdco; //前三级加法的进位输出reg [1:0] firstsum,thirdina,thirdinb;reg [3:0] secondsum,secondina,secondinb;reg [5:0] thirdsum,firstina,firstinb;

always @ (posedge clk)begin tempcin=cin;tempa=ina;tempb=inb;//输入数据缓存end

always @ (posedge clk)begin {firstco,firstsum}=tempa[1:0]+tempb[1:0]+tempcin;//第一级低2位相加 firstina=tempa[7:2];firstinb=tempb[7:2];//未参加计算的数据缓存end

always @ (posedge clk)begin {secondco,secondsum}={firstina[1:0]+firstinb[1:0]+firstco,firstsum};//第二级2位相加,并与前一级结果合并 secondina=firstina[5:2];secondinb=firstinb[5:2];//未参加计算的数据缓存end

always @ (posedge clk)begin {thirdco,thirdsum}={secondina[1:0]+secondinb[1:0]+secondco,secondsum};//第三级2位相加,并与前一级结果合并 thirdina=secondina[3:2];thirdinb=secondinb[3:2];//未参加计算的数据缓存end

always @ (posedge clk)begin {cout,sum}={thirdina[1:0]+thirdinb[1:0]+thirdco,thirdsum};//第四级最高2位相加,并与前一级结果合并end

endmodule

综合之后发现如下警告:
FF/Latch <secondco> (without init value) has a constant value of 0 in block <adder8pip>. This FF/Latch will be trimmed during the optimization process.
再看RTL电路图,发现cout果然被接地了。
在网上找原因,原来是因为在后面三级的加法运算中,比如第二级:
{secondco,secondsum}={firstina[1:0]+firstinb[1:0]+firstco,firstsum};
”{ }”就已经限定等号右边为4位,由于等号左边为5位,这造成secondco没用,综合的时候会把secondco综合掉。
  因此对于有符号数的加法,将上述代码改为:
{secondco,secondsum}={ {firstina[1],firstina[1:0]}+{firstinb[1],firstinb[1:0]}+firstco,firstsum};(未验证)
即扩展符号位,每一级的加法运算都要扩,对于第一级加法也要扩符号位。
下面是无符号数流水线加法器的完整代码:
module adder8pip(cout,sum,cin,ina,inb,clk    );input cin,clk;input [7:0] ina,inb;output cout;output [7:0] sum;reg cout,tempcin;reg [7:0] sum,tempa,tempb;reg firstco,secondco,thirdco; //前三级加法的进位输出reg [1:0] firstsum,thirdina,thirdinb;reg [3:0] secondsum,secondina,secondinb;reg [5:0] thirdsum,firstina,firstinb;

always @ (posedge clk)begin tempcin=cin;tempa=ina;tempb=inb;//输入数据缓存end

always @ (posedge clk)begin {firstco,firstsum}=tempa[1:0]+tempb[1:0]+tempcin;//第一级低2位相加,由于没有{}限位,因此不需要扩展位 firstina=tempa[7:2];firstinb=tempb[7:2];//未参加计算的数据缓存end

always @ (posedge clk)begin {secondco,secondsum}={{1'b0,firstina[1:0]}+{1'b0,firstinb[1:0]}+firstco,firstsum};//第二级2位相加,并与前一级结果合并 secondina=firstina[5:2];secondinb=firstinb[5:2];//未参加计算的数据缓存end

always @ (posedge clk)begin {thirdco,thirdsum}={{1'b0,secondina[1:0]}+{1'b0,secondinb[1:0]}+secondco,secondsum};//第三级2位相加,并与前一级结果合并 thirdina=secondina[3:2];thirdinb=secondinb[3:2];//未参加计算的数据缓存end

always @ (posedge clk)begin {cout,sum}={{1'b0,thirdina[1:0]}+{1'b0,thirdinb[1:0]}+thirdco,thirdsum};//第四级最高2位相加,并与前一级结果合并end

endmodule

该代码用ISE综合没有报错,但是发现RTL电路仍然不符合要求,想不通,怀疑难道综合器有问题。于是装上Synplify,再综合,还真没问题了,而且界面很好看。
然后再用modelsim做前仿真,结果还是不对啊。。。为嘛,为嘛啊。。。
好吧,做map后仿真,结果正确了。。。这是为啥啊?

转载于:https://www.cnblogs.com/haigege/archive/2011/09/28/2194687.html

Verilog 流水线加法器相关推荐

  1. 流水线加法器的实现(verilog)

    文章目录 1.流水线技术 2.流水线设计的概念 3.流水线设计的优缺点 4.实验目的 5.程序设计 5.引用 1.流水线技术 ​ 硬件描述语言的一个突出优点就是指令执行的并行性.多条语句能够在相同时钟 ...

  2. 【Verilog 流水线设计】以全加器为例阐述流水线设计的影响

    目录 流水线设计思想 全加器 非流水线全加器设计 Verilog设计 testbench设计 仿真波形 RTL视图 资源使用情况 流水线加法器设计 Verilog设计 testbench设计 仿真波形 ...

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

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

  4. 实验十三 流水线加法器

    (学习笔记!只是笔记) 实验十三 流水线加法器 实验目的 实验内容 实验步骤(请同学们自行完成) 顶层模块,scan_led_hex_disp adder_substractor_32模块 adder ...

  5. Verilog 流水线设计 Pipeline

    介绍 定义:流水线设计就是将组合逻辑分割,并在各级之间插入寄存器,暂存中间数据的方法.以面积换速度. 优点:每一部分延时降低--可用更快的时钟:大部分电路同时运算--提高数据吞吐率. 缺点:增加面积: ...

  6. Verilog流水线CPU设计(超详细)

    上篇:Verilog单周期CPU设计(超详细) 本篇完整工程下载链接,已于19.12.17更新 实验 流水线CPU 一.设计目的与要求 1.1 实验内容 1.2 实验要求 1.3 实验创新 二.课程设 ...

  7. <Verilog实现加法器>加法器相关基础知识——持续更新版

    一,内容介绍 加法器是数字电路中的最基础电路之一,也是CPU的核心功能之一.(计算单元) 在这个专栏,我会把所有我知道的数字电路的加法器相关模型都实现一遍并解释其原理. 编程使用的语言为Verilog ...

  8. Verilog流水线设计

    流水线概述 如下图为工厂流水线,工厂流水线就是将一个工作(比如生产一个产品)分成多个细分工作,在生产流水线上由多个不同的人分步完成.这个待完成的产品在流水线上一级一级往下传递. 比如完成一个产品,需要 ...

  9. 【Verilog】加法器减法器的设计

    一.要求 用16位的加法器设计一个加法器,减法器.当sub为1时,是减法:当sub为0时是加法. 二.原理 当sub为1的时候: 第一个加法器的进位输入为1,经过异或门,将b和sub按位取异或其实是将 ...

最新文章

  1. Cisco/H3C交换机配置与管理完全手册(第2版)卓越网正式到货
  2. s5pv210 uboot-2012-10移植(三) 之支持SPL
  3. 生成打印标贴_亚马逊如何打印FBA标签?亚马逊怎么打印FBA标签?
  4. 建设数据中台之前,建议先看这份企业数据能力测评 | 大咖说中台
  5. 《数据结构与算法分析》习题-----第二章(3)(关于list的题目)
  6. 轻松解决U盘拷贝文件时提示文件过大问题
  7. 【机器人学习】机器人轨迹规划A※算法代码
  8. 《Gradle实战》如何配置利用Maven本地仓库
  9. 利用 QTcpSocket 实现的进程间通信
  10. 公共DNS递归服务器(转发)
  11. 管理学定律三:羊群效应与刺猬法则
  12. 计算机安全概述ppt,计算机信息安全概述.ppt
  13. 解决flutter应用模拟器出现System UI isn‘t respon报错
  14. 字符串输入的2种常用方法详解
  15. Omnibus GitLab 使用说明
  16. vs2013+opencv3.1.0+qt5.3.5图像算法开发环境
  17. 真正好用的数据恢复软件EasyRecovery15
  18. 2020汽车修理工(中级)实操考试视频及汽车修理工(中级)考试试题
  19. WMS仓储自动化是什么?有哪些用途
  20. 微信号复制跟跳转——clipboard.js

热门文章

  1. linux系统ip策略筛选器,在Linux下基于路由策略的IP地址控制
  2. 通过mem函数在MicroPython中访问模块寄存器
  3. MindMotion MM32 单片机上的MicroPython移植-PWM
  4. 智能车竞赛技术报告 | 智能车视觉 - 温州大学- 春华秋实
  5. 地表车神争霸赛,且看第16届大学生智能汽车竞赛
  6. N-MOS 2N7002晶体管
  7. 双轴机械臂串口控制命令开发与测试:STM32F103控制板,简易调试命令集合
  8. 第五届全国大学生智能汽车竞赛获奖名单
  9. WAV文件中使用有符合整形数
  10. Android 8 WiFi断流,安卓8.0曝出重大bug,比国产手机WiFi断流严重多了