流水线设计的思想来源是高流量,也就是说时间延迟固定的情况下尽可能的产生高的流量,使得整体的信号传输速率得到提升。

这一概念我是最早在《高级FPGA设计——结构、实现和优化》(Steve Kilts)一书中接触到的。作者在书中提到,高流量设计的抽象术语就是“流水线”。

作者指出:流水线设计的优越性是新数据在前面的数据完成之前就可以进行处理。并给出一个例子,硬件实现计算一个数的三次方。

这给出设计代码,用于下文分析比较。

1.类似于软件的递归算法实现(非流水线结构)

`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2022/01/21 15:59:20
// Design Name:
// Module Name: test
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies: 实现计算一个数的三次方,采用非流水线的方式
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module power3(
output reg [7:0]  XPower,
output            finished,
input       [7:0] X,
input             clk, start     //the duration of start is  a single clock
);    reg [7:0] ncount;assign finished=(ncount==0);always@(posedge clk)if (start) begin XPower <=X;ncount<=2;endelse if (!finished)  begin ncount<=ncount-1;XPower <=XPower*X;endendmodule

2.流水线结构

module power3(output  reg  [7:0] XPower,input               clk,input         [7:0] X
);reg   [7:0]  XPower1, XPower2;
reg   [7:0]  X1, X2;//两级流水操作
always@(posedge clk) begin
// Pipeline stage 1X1     <= X;XPower1<= X;
// Pipeline stage 2X2     <= X1;XPower2<= XPower1*X1;
//  Pipeline stage 3 XPower<= XPower2*X2;
end
endmodule

有了设计代码,下面就是比较分析,在硬件层面上究竟两者有啥区别呢?速度?占用资源?是否有差别呢?

在vivado中将两者综合并分析比较。

图一:非流水线设计RTL连线图

图二:非流水线设计资源报告

图三:流水线设计RTL连线图

图四:流水线设计资源报告

比较1:可以看到,非流水线设计中存在较多组合逻辑,而触发器和乘法单元相对较少;在流水线设计中,触发器和乘法单元用的更多。这是不是所谓的“面积”上的区别

图五:非流水线设计时序报告

图六:流水线设计时序报告

比较2:可以看到,在相同的时钟约束下,流水线设计所能达到的最大频率更高(1/(4+0.185)),也就是速度更快。

这是我们通过综合工具得出的结论,Steve Kilts在书中用更抽象的参数描述了两者的区别。

非流水设计:

流量=8/3,或者2.7位/时钟

时滞=3时钟

时序=关键路径中的一个乘法延时

流水设计:

流量=8/1,或者8位/时钟

时滞=3时钟

时序=关键路径中的一个乘法延时

个人思考:

那么这上述流量判定的依据是什么呢?一开始我也困惑,后来慢慢体会给出了自己的思考。

在非流水设计中,最终的输出须等到三次运算都完成后,才能输出,所以输出8位数据需要3个时钟周期,而在流水设计中呢?

我们回到开头“流水线设计的优越性是新数据在前面的数据完成之前就可以进行处理”,抓住“新”一词,其中应强调数据的变化性,就能体会到流水线设计的特征。当数据变化时,在最后一级处理的同时“新数据”已经在处理了,只需“再”一个时钟周期,8位的“新”数据又可以输出了,所有此时流量为8/1。

这里强调数据变化,若是数据不变,或者在第一个数据处理时,流水线的这种优越性将很难让人体会的到。

那么流水线处理的本质依据是什么呢?答案是FPGA的并行性。这一点在Donald G.Bailey 的《基于FPGA的嵌入式图像处理系统设计》中提到过。作者指出,流水性设计,就是将系统整体操作拆解成若干操作步骤进行处理。我们可以看出,上述三次乘方计算中,就是将其拆解成X*X*X来处理。

综合起来,我们可以得出这样的结论:流水线设计单个模块而言,由于插入了若干级寄存器,使得

其时钟频率增加;对于系统级设计而言,流水线设计又能减少模块间的传输延迟。

所以,流水线设计用起来吧!下一步研究怎么样应用吧。

我是fpga小白,写博客只为分享和记录。

自学fpga,关于流水线设计问题相关推荐

  1. FPGA中的流水线设计(含Verilog范例)

    一.流水线设计介绍 在高速通信系统设计中,如何提高系统的工作速度至关重要,通常使用的方法有两种: 1. 并行方式设计:可减少模块间的延时: 2. 流水线设计:流水线设计如同生产线一样,将整个执行过程分 ...

  2. FPGA中的流水线设计(Pipeline Design)

    流水线设计 前言: 本文从四部分对流水线设计进行分析,具体如下: 第一部分什么是流水线 第二部分什么时候用流水线设计 第三部分使用流水线的优缺点 第四部分流水线加法器举例 第一 什么是流水线 流水线设 ...

  3. 【FPGA】流水线学习笔记

    下面的内容来自:<从算法设计到硬件逻辑的实现> 所谓流水线设计实际上就是把规模较大.层次较多的组合逻辑电路分为几个级,在每一级插入寄存器组暂存中间数据.K 级的流水线就是从组合逻辑的输入到 ...

  4. 12.流水线设计方式

    FPGA教程目录 MATLAB教程目录 -------------------------------------------------------------------------------- ...

  5. fpga芯片架构设计与实现 pdf_FPGA设计的8大重要知识点,你都get了吗

    1. 面积与速度的平衡与互换 这里的面积指一个设计消耗FPGA/CPLD的逻辑资源的数量,对于FPGA可以用消耗的FF(触发器)和LUT(查找表)来衡量,更一般的衡量方式可以用设计所占的等价逻辑门数. ...

  6. 新书预告:Xilix FPGA数字信号处理设计——基础版

    掌握FPGA数字信号处理设计需满足三个条件:熟悉FPGA设计方法.理解数字信号处理理论.掌握理论的工程实现方法.对初学者来讲,每个条件看似都难以逾越.杜勇老师完美融合课程教学与工程设计的需求特点,以独 ...

  7. FPGA之流水线思想

    FPGA之流水线思想(含代码) 本文主要涉及以下几个问题: 1:什么是流水线 2:流水线使用场景 3:一个例子来说明流水线 1:CASE1: 例如工厂要对一个产品进行组装,分为A,B,C三步,以往是一 ...

  8. Altera FPGA/CPLD设计 基础篇+高级篇(附随书光盘)

    获取方法: 微信公众号:OpenFPGA   后台回复 Altera设计 基础篇介绍 <Altera FPGA/CPLD设计(基础篇)>是王诚.蔡海宁.吴继华编著的一本图书.该书可作为高等 ...

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

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

最新文章

  1. ubuntu下zip文件操作
  2. “是福不是祸,是祸躲不过”这句话对吗?
  3. 排序算法:希尔排序算法实现及分析
  4. 裸考大学英语四级写作核心词汇及模板
  5. ​求1000以内是3或者是5的倍数的值的和
  6. SpringBoot(十四)_springboot使用内置定时任务Scheduled的使用(一)
  7. 创业计划书写得好不好,能够决定投资人会不会进行投资,那么创业计划书应该怎么写呢?
  8. POJ 1330:Nearest Common Ancestors【lca】
  9. javascript 数组去重 unique
  10. 50以内的质数顺口溜_100以内的质数顺口溜
  11. 微信小程序Unhandled promise rejection TypeError
  12. chrome弹出2345网址导航删除方法之一
  13. 韶关python培训班_《韶》字意思读音、组词解释及笔画数 - 新华字典 - 911查询
  14. 文字点选验证码再也不是难题,通过率 96% 的深度学习了解一下!
  15. 擦地机器人排行榜_拖地机器人哪个牌子好?拖地机器人排行榜
  16. java首字母排序_Java-首字母排序汉字排序
  17. SYN6288移植51程序
  18. 【嵌入式开发】ARM 处理器工作模式 及 修改方法 ( 处理器模式 | 设置处理器模式 | 程序状态字寄存器 CPSR SPSR | 模式设置代码编写 | 设置 svc 模式 )
  19. 企业微信实现消息本地存档
  20. iocp端口断开_iocp 关闭 | 学步园

热门文章

  1. 对比度增强CLAHE
  2. android之获取应用中的图片资源_获取找你妹中的图片资源
  3. 相对开音节java_单词拼读规则表2 - ccxixicc @ Think in life - BlogJava
  4. oracle怎么用sql命令添加注释,Oracle SQL Developer将我的注释视为命令
  5. 老子的软件之道 - 道篇 18 标准之上
  6. 「TCG 规范解读」简介-MISC-TPM 工作组
  7. matlab多项式拟合体会,多项式拟合——用Matlab实现并分析
  8. python 文本聚类分析案例——从若干文本中聚类出一些主题词团
  9. 计算机行业未来的发展趋势
  10. 超酷炫!天翼云亮相中国服贸会