目录

流水线设计思想

全加器

非流水线全加器设计

Verilog设计

testbench设计

仿真波形

RTL视图

资源使用情况

流水线加法器设计

Verilog设计

testbench设计

仿真波形

RTL视图

资源使用情况

总结


流水线设计思想

关于流水线对于FPGA设计中的作用,既有利也有弊,优点是能够优化时序从而提高系统运行的最大频率,缺点是增加延时,因为流水线的设计思想就是在计算过程中插入寄存器,从而增加了延时,下面就以一个八位全加器的例子去验证以上的论述。

全加器

全加器英语名称为full-adder,是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。

以下为全加器的真值表,可以看到其实和普通的加法没什么差别,就多了一个进位数,直接累加上就行。

非流水线全加器设计

不使用流水线的话,就比较简单粗暴,直接两个加数和进位一同相加得到最终的加法结果和进位值。

Verilog设计

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /* Engineer    : Linest-5
/* File        : add_no_pipeline.v
/* Create      : 2022-09-02 09:29:04/* Module Name : add_no_pipeline
/* Description : 全加器非流水线设计                                                                         /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/module add_pipeline(input             clk,input [7:0]       a,input [7:0]       b,input             cin,output reg [7:0]  sum,output reg        cout
);always @(posedge clk) begin{cout,sum} <= a + b + cin;
endendmodule 

testbench设计

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /* Engineer    : Linest-5
/* File        : tb_add_no_pipeline.v
/* Create      : 2022-09-02 09:34:46/* Module Name : tb_add_no_pipeline
/* Description : 全加器非流水线设计仿真模块
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/`timescale 1ns/1ps
module tb_add_no_pipeline();reg           clk;
reg  [7:0]    a;
reg  [7:0]    b;
reg           cin;
wire [7:0]    sum;
wire          cout;initial begin
clk = 'd1;
endalways #10 clk = ~clk;
always #20 a   <= {$random}%256;
always #20 b   <= {$random}%256;
always #20 cin <= {$random}%2;add_pipeline inst_add_pipeline (
.clk(clk),
.a(a),
.b(b),
.cin(cin),
.sum(sum),
.cout(cout)
);endmodule

仿真波形

可以很清晰的看到,加数为237和140,相加为377,这超过了8位最大值,因此需要进一位,最终加法结果为sum = 377-255 = 122,进位cout = 1,并且只使用了一拍时钟周期就得到了结果。

RTL视图

从RTL图中可以看到结构很简单,两个加法器并对输出结果打一拍即可。

资源使用情况

可以看到LUT使用了8个,触发器使用了9个。

流水线加法器设计

这里使用一级流水设计方法,即将a、b 8位加法拆分开计算,分别计算a、b 的低四位和高四位,将最终的结果拼接在一起即得到最终的计算结果。

Verilog设计

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /* Engineer    : Linest-5
/* File        : add_pipeline.v
/* Create      : 2022-09-02 09:25:18/* Module Name : add_pipeline
/* Description : 全加器的流水线设计                                                                         /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/module add_pipeline(input             clk,input [7:0]       a,input [7:0]       b,input             cin,output reg [7:0]  sum,output reg        cout
);
reg  [3:0]        a_reg;
reg  [3:0]        b_reg;
reg  [3:0]        sum1;
reg               cout1;//计算低四位
always @(posedge clk) begin{cout1,sum1} <= a[3:0] + b[3:0] + cin;a_reg        <= a[7:4];b_reg        <= b[7:4];
end//计算高四位
always @(posedge clk) begin{cout,sum[7:4]}  <= a_reg + b_reg + cout1;sum[3:0]         <= sum1;endendmodule 

testbench设计

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /* Engineer    : Linest-5
/* File        : tb_add_pipeline.v
/* Create      : 2022-09-02 09:30:52/* Module Name : tb_add_pipeline
/* Description : 全加器的流水线设计仿真模块                                                                         /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/`timescale 1ns/1ps
module tb_add_pipeline();reg           clk;
reg  [7:0]    a;
reg  [7:0]    b;
reg           cin;
wire [7:0]    sum;
wire          cout;initial begin
clk = 'd1;
endalways #10 clk = ~clk;
always #20 a   <= {$random}%256;
always #20 b   <= {$random}%256;
always #20 cin <= {$random}%2;add_pipeline inst_add_pipeline (
.clk(clk),
.a(a),
.b(b),
.cin(cin),
.sum(sum),
.cout(cout)
);endmodule

仿真波形

可以看到和非流水线设计的仿真图形不同的是,加法结果需两个时钟周期才能出结果,结果也是正确的,这与前面说的一致。

RTL视图

从RTL图可以看到,相比较非流水线的RTL图,流水线设计的全加器使用的资源明显更多,在计算链上插入了红框中的寄存器,这样可以一定程度上优化时序并提高系统的最大工作频率值。

资源使用情况

与非流水线设计的相比,LUT同样使用了8个,但是触发器个数却是其2倍多,这就是流水线设计的弊端,尤其是大位宽的计算,更是资源消耗成倍的增加,这就是有得必有失。

总结

流水线设计在FPGA中应用得很广泛,至于什么时候选择使用流水线设计:当资源充足的情况下,需要提高系统运行速率,这时就可以使用流水线的设计,这是用资源换速率的案例,当然使用的流水线的部分计算延时也会增加,但能提高整体系统的运行速率,这点延迟可以忽略不计。

【Verilog 流水线设计】以全加器为例阐述流水线设计的影响相关推荐

  1. BlockChain:《Blockchain Gate》听课笔记——以POW机制为例阐述共识机制的激励相容设计

    BlockChain:<Blockchain Gate>听课笔记--以POW机制为例阐述共识机制的激励相容设计 导读       区块链技术通过巧妙的经济激励和技术设计,创造了一种新型自由 ...

  2. Verilog设计实例(8)按键防抖设计之软件防抖

    博文目录 写在前面 正文 背景介绍及回顾 单个按键 单按键的其他设计版本 多个按键 写在最后 参考资料 交个朋友 写在前面 个人微信公众号: FPGA LAB 个人博客首页 注:学习交流使用! 正文 ...

  3. (72)加法器设计(全加器)

    (72)加法器设计(全加器) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)加法器设计(全加器) 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 1)F ...

  4. [转载]以xilinx为例的低功耗设计

    在项目设计初期,基于硬件电源模块的设计考虑,对FPGA设计中的功耗估计是必不可少的.笔者经历过一个项目,整个系统的功耗达到了100w,而单片FPGA的功耗估计得到为20w左右,有点过高了,功耗过高则会 ...

  5. 《软件建模与设计: UML、用例、模式和软件体系结构》一一2.10 UML扩展机制

    本节书摘来自华章计算机<软件建模与设计: UML.用例.模式和软件体系结构>一书中的第2章,第2.10节,作者:(美)Hassan Gomaa,更多章节内容可以访问云栖社区"华章 ...

  6. CCU案件例及点评:设计渐进演化的知识结构

    CCU案件例及点评:设计渐进演化的知识结构 张成遇到的问题,其实一不是技术,二不是管理,而是战略.他的董事长 胆略太过人了,魏武说要用3到5年的时间完成从制造向贸易再向行业服务的三级转型,这可不是那么 ...

  7. 《软件建模与设计: UML、用例、模式和软件体系结构》一一

    本节书摘来自华章计算机<软件建模与设计: UML.用例.模式和软件体系结构>一书中的第3章,第3.5节,作者:(美)Hassan Gomaa,更多章节内容可以访问云栖社区"华章计 ...

  8. fpga经典设计100例_“100例”—优秀产品设计曲线细节美图

    自然界中因人体能包罗一切美的曲线,故为曲线美的代表. 曲线美是指人们对于曲线所产生的美感.美学上以曲线比直线柔和,而且富于变化,因称人们对于曲线所产生的美感为曲线美. 曲线美是自然.生活中最本真原始的 ...

  9. 设计延迟加载的“单例设计模式”

    今天看毕老师的线程部分,学到了如何设计延迟加载的单例设计模式: 单例设计模式分两种: 1.饿汉模式 2.懒汉模式 先上饿汉式代码: // 饿汉式 class Single{ private stati ...

最新文章

  1. 独家 | 虚假疫苗网站如何获取你的个人信息
  2. zabbix监控之nginx状态监控(一)
  3. 基于ESP32的智能车竞赛新版裁判系统的软件功能要求与实现
  4. Oracle RAC 环境下的连接管理
  5. nmap 获取主机名
  6. pytorch 加载模型 模型大小测试速度
  7. php和python对比-python学习笔记一和PHP的一些对比
  8. PowerDesigner16中的对象无效,不允许有扩展属性 问题的解决
  9. 如何设计区块链项目的通证(token)模型
  10. linux下c语言按q退出_在linux下C语言写了一个while循环,怎么实现按任意键退出。如何编写程序?...
  11. hive 结构metastone_深入理解hive之事务处理
  12. 线程共享全局变量(.data和.bbs)
  13. ios 开发日记 21 -自动处理键盘事件的第三方库:IQKeyboardManager
  14. java 管理系统 注释_员工管理系统--带注释--oracle系统--java项目
  15. 周剑:国产商业智能 BI 这 20 年(1997~2017)
  16. smart700iev3 程序下载设置_smart 700ie v3下载程序时提示OS更新-工业支持中心-西门子中国...
  17. Character-level recurrent sequence-to-sequence model (翻译)
  18. Springboot统一异常处理并保存到数据库
  19. 点亮了中行U盾12864屏线 12液晶,附12864详细手册
  20. 文档管理系统 Mayan EDMS安装

热门文章

  1. 高并发线程内存事件处理器 disruptor 一 初步了解
  2. 《食品真相大揭秘》和《中国食品安全现状调查》
  3. 微软 AI 华人先驱黄学东正式宣布离职,将加入 Zoom 担任 CTO
  4. 从项目采购管理人员角度,浅谈工程总承包项目采购风险管理
  5. 实用工具网站合集【大自然的搬运工~】
  6. 精通CSS+DIV网页样式与布局--CSS段落效果
  7. 收录十五本诗集的Android软件《双语泰戈尔诗集v2.5》
  8. audio插入背景音乐_在HTML中添加背景音乐
  9. 求职面试100问,最全职场面试宝典
  10. 20个你不得不知道的数组reduce高级用法