FPGA设计篇之流水线思想

2023-11-17

一、写在前面

  流水线?大家好,我是富土康三号流水线的张全蛋。
在这里插入图片描述
  在这之前,我们谈一谈:什么是流水线思想。
  如果一家公司的主要工作是做数字IC设计,那么假设该公司做一个项目的周期为两年,每隔两年完成一个项目,然后开始一个新的项目。也就是说,完成N个项目需要的时间要20N个月,如下图所示。

在这里插入图片描述

  那么,在数字IC设计中,我们可以根据流程划分为4个部门,分别完成:确定项目需求、系统级设计、前端设计、后端设计,其所需的时间分别为3个月、4个月、7个月和6个月,如下图所示。

在这里插入图片描述
  于是,我们得到了下面分开独立工作的四个部门,如下图所示。

在这里插入图片描述

  那么,在这里,部门1在第3个月完成工作后将项目一交给部门2进行下一步工作,此时,部门1就可以开始第二个项目的工作了。在第6个月,部门1已经完成了第二个项目的工作,可以将第二个项目交给部门2进行下一步工作了,但是问题在于部门2每做一个项目需要4个月,此时,部门2的第一个项目的工作都还没做完,需要等到第7个月完成第一个项目后才能接手第二个项目。所以,在这里虽然部门1做一个项目只需要3个月,但是要将当前做完的项目交接给部门2,必须等部门2完成上一个项目的工作后,也就是4个月,所以我们给部门1一个冗余的时间,让其每4个月接一个项目,于是就得到如下图所示的设计周期。

在这里插入图片描述
  按照上图所示的设计周期,在第12个月,部门2完成了第二个项目,可以把第二个项目交接给部门3进行下一步的工作,但是和上面同样的问题,部门3此时第一个项目都还没做完,必须等到部门3的第一个项目做完了才能接手来自部门2的第二个项目。按照上面的处理方法,以此类推,我们只需要将所有部门完成一项工作的所需时间都调整为所有部门中完成一项工作所需时间的最大值即可,如下图所示。

在这里插入图片描述
  那么,这样一来,该公司完成第一个项目需要28个月,虽然相较于最前面的每完成一个项目需要20个月的时间要多,但是以后的每隔7个月,该公司就可以完成一个项目,而最前面所讲的则是每个项目都需要20个月。相比之下,流水线生产要快的多,这就是流水线的思想。

二、正文开始

  在这之前,在编写Verilog代码时,我总在想:时序逻辑中每插入一级寄存器,计算我们需要的数据就要多等一拍(一个时钟周期),那么输入的数据从输入端的寄存器到输出端的寄存器中间的运算如果都使用组合逻辑,也就不用浪费多个时钟的等待时间,那不是可以以最少的时间到达输出端。那么是不是这样的呢?带着这样的疑问我们开始下面的学习。

2.1举个栗子

2.2.1情况一(组合逻辑)

  对于R=A&B&C&D,如果中间的三级与运算采用组合逻辑,如下图所示。假设系统时钟频率为33.33MHz(时钟周期为30ns),且所有的寄存器均工作在同一时钟下,那么在系统时钟的第一个时钟上升沿处(0ns),数据A、B、C、D分别从源寄存器发出,经过三个与门(这里内部连线延迟暂时不考虑,仅考虑逻辑单元的延迟,每个与门输入到输出的延迟假设为10ns),则需要30ns的时间,也就是说正好在系统时钟的第二个上升沿处(30ns)可以得到我们需要的正确输出值。
在这里插入图片描述

2.1.2情况二(流水线设计)

  那么,对于上面这种情况,如果我们采用流水线设计的思想,将两个寄存器之间的计算步骤再进行拆分,拆分为多级寄存器到寄存器之间的运算,在三级与运算中再插入两级寄存器REG_1和REG_2,如下图所示。

在这里插入图片描述

  在这里,很多人可能很疑惑,对于上面这种情况一,我计算一组数据(A&B&C&D)只需要30ns啊。那你这样子采用流水线设计,插入了两级的寄存器,计算一组数据就多出了两个时钟周期,也就是60ns,那不是采用流水线设计的需要90ns吗?
  那么,在这里上面的分析是对的,对于一组数据的计算,确实是这样的。那如果说要计算5组数据呢?我们可以手算一下。

  • 情况一:非流水线设计
      第一个上升沿处(设为0点),源寄存器的数值分别输入到三个与门进行计算,在第二个时钟的上升沿得到第一组数据的计算结果,同时将第二组数据送入到三个与门进行计算,在第三个时钟的上升沿处得到了第二组数据的计算结果,同时将第三组数据送入到三个与门进行计算,在第四个时钟的上升沿处得到了第三组数据的计算结果,以此类推,计算五组数据需要五个时钟周期,所以计算五组数据的最小时间需要:
Time = 5 x 30ns = 150ns
  • 情况二:流水线设计
      对于第一组数据,第一个时钟上升沿(设为0点)处,源寄存器REG_A与REG_B的值同时输入到第一个与门进行计算,而在第二个时钟上升沿处,将源寄存器REG_C的值输入到第二个与门和第一个与门的计算结果进行计算,同时,可以将第二组数据的REG_A和REG_B输入到第一个与门进行计算。依次类推,在第三个时钟上升沿处,源寄存器REG_D的值输入到第三个与门和第二个与门的计算结果进行计算,同时,可以将第二组数据的REG_C的值和第一个与门的计算结果进行计算,同时,将第三组数据的REG_A和REG_B输入到第一个与门进行计算。依此类推。。。。。
      在第四个上升沿后每隔一个时钟周期,都可以得到一组数据的计算结果,所以这里采用流水线设计计算五组数据所需的最小时间为:
Time = 3 x 30ns + 30ns + 30ns + 30ns + 30ns = 210ns

  啊?这不是流水线设计比非流水线设计计算所需时间还要多吗?其实这里不是这样算的,或者可以说在流水线设计里面时钟周期不能以原始的时钟周期30ns来算了。因为在流水线设计中各级与门到寄存器的D端的时间为10ns,但是时钟周期为30ns,也就是说这中间的20ns差值是可以进行优化的,即提升主频至100MHz(缩短时钟周期为10ns)。那么,实际上流水线设计所需的最小时间为:

Time = 3 x 10ns + 10ns + 10ns + 10ns + 10ns = 70ns

  这里,对于计算五组数据,流水线设计所需的运算时间70ns明显要比非流水线设计的时间150ns要小。

2.1.4 小总结

  对于上面这种情况,取五组数据进行举例只是我随机选择的,在这里只是想说明一点,流水线设计(情况二)相对于非流水线设计(情况一),其第一组数据的计算时间要多或者相等(这里假设三级与门计算的时间相同,且相加起来正好等于时钟周期),但是随着计算数据组数的增加,非流水线设计需要每隔一个时钟周期(其时钟周期为30ns)才能输出一组数据的计算结果,而流水线设计每隔一个时钟周期(其时钟周期为10ns)就可以输出一组数据。
  我们用Matlab进行仿真,以验证我们上面手算的结果,与我们手算的结果一致的是,如果在输入数据组数为5时,非流水线设计计算所需的时间时小于流水线设计计算所需的时间的,非流水线设计计算所需的时间为150ns,而流水线设计所需的时间为70ns,且随着组数的不断增加,这一差距不断增大。
在这里插入图片描述

2.2举第二个栗子

  那么,我们在上面是三级一样的与门,所以我们假设其每级与门从输入到输出的时间一致,为10ns。那么,如果这里三级运算我们假设是其他的运算,且计算所需的时间分别为5ns、10ns、20ns,如下图所示。
在这里插入图片描述
  则其采用非流水线设计计算五组数据所需要的时间还是一样的:

Time = 5 x 30ns = 150ns

  但是我们如果采用流水线设计,则其最大时钟频率可以提升至66.67MHz(时钟周期为15ns),如下图所示。

在这里插入图片描述

  那么,流水线设计计算五组数据所需的时间为:

Time = (15ns + 15ns + 15ns)+ 15ns + 15ns + 15ns + 15ns = 105ns

  这里括号中是第一组数据计算得到结果所需的时间为第一组数据计算所需的时间,这里可以明显看出:对于流水线设计,其第一组数据计算所需时间(45ns)要比非流水线设计第一组数据计算所需时间(30ns)要多,但是从第二组数据开始,流水线设计每隔一个时钟周期(15ns)就会输出一组数据的计算结果,而非流水线设计每隔一个时钟周期(30ns)才会输出一组数据。
  同样的,在这里,我们使用Matlab进行仿真,以验证我们的计算结果。
在这里插入图片描述
  如上图所示,在输入数据的组数小于2时,流水线设计计算所需要时间要比非流水线设计计算所需要时间要多,但是当输入数据的组数大于2时,流水线设计计算所需要的时间要比非流水线设计计算所需要的时间要少,且这一差距随着输入数据组数的增大而增大。

写在最后

  流水线设计是我们在设计中常用的一种方法,它通过”拆分“的方式将一项工作拆分为多项工作,可以提升系统设计的最高主频,降低大量数据计算所需的时间,以达到增加吞吐量的目的。那么,对于写在前面中的疑问也就迎刃而解。
  好了,上面就是关于FPGA中流水线设计的一些学习笔记,如果有疑义的地方欢迎评论区友好探讨学习!!!!!
在这里插入图片描述

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

FPGA设计篇之流水线思想 的相关文章

  • 鼠标右键添加git

    1 打开注册表 win R 输入regedit 2 找到HKEY CLASSES ROOT Directory Background目录 3 查看是否有shell这个目录 如果没有就添加 4 在shell目录下添加 项 鼠标右键点击新建 项
  • C# Socket连接请求超时处理

    在Socket的超时时间默认20多秒 而实际连上不需1秒时间 20多秒很多时候用户是不能接受的 而在等待返回结果的这段时间里程序会处于停止响应状态 废话不多说了 先上代码 private delegate string ConnectSoc
  • 突发!ITELLYOU要改版了!

    微信公众号 网管小贾 个人博客 www sysadm cc 经常下载Windows系统镜像的老司机中 我敢保证十之八九对 MSDN 我告诉你 这个网站再熟悉不过 可是对于新手小白们来说 这个站TA究竟是个啥 其实 MSDN 我告诉你 是个名
  • 2023 华子(华为)硬件岗位面试2

    写在前面 本内容仅作参考 如有侵权或者其他问题 立马删除 也仅作为笔者个人经历或者回忆 不一定完全准确 一切都在改变 也祝愿大家面试顺利 顺利取得自己心仪的offer 编辑切换为居中 添加图片注释 不超过 140 字 可选 本次是业务主管面
  • 【三电平SVPWM学习

    导读 本期对三电平SVPWM的原理和建模做一个简单介绍 并与两电平SVPWM做了一个对比 后面把三电平的SVPWM运用到异步电机直接转矩控制中 看与传统的两电平SVPWM 控制性能是否得到改善 模型可分享 关注公众号 浅谈电机控制 留下邮箱
  • 已经设置了端口映射但是外网还是访问不了服务器

    来自于 http www tp link com cn pages article detail asp result faq d 31 已经设置了端口映射但是外网还是访问不了服务器 1 首先检查您设置的端口影射是否正确映射到您内网的服务器
  • 硬件工程师-三极管

    目录 一 机械开关 二 三极管的种类 三 NPN型三极管 N型三极管 四 PNP型三极管 编辑 五 三极管公式 NPN型三极管 PNP型三极管 六 NPN管的继续讲解 三极管的导通电压 PNP管也是一样 三极管的三种状态 判断三极管是放大还
  • 【电子技术】什么是LFSR?

    目录 0 前言 1 数学基础 1 1 逻辑异或 1 2 模2乘法 和 模2除法 2 线性反馈移位寄存器LFSR 3 抽头和特征多项式 4 阶线性反馈移位寄存器实例 0 前言 线性反馈移位寄存器 Linear Feedback Shift R
  • 亲密关系沟通-【正向情绪】创造一场愉快的沟通体验

    为什么有的时候聊天越聊越开心 有时候却让你意兴阑珊 正向情绪体验 积极议题 充分发挥 谁都喜欢被看见 让他不断得到关注 得到你持续的关注 你知道吗 我这个月业绩第一 哇 你超棒的 哪里哪里 话题聊不下去 你给他夸奖 他只能谦虚 天哪你怎么做
  • 【FPGA多周期时序约束详解】- 解读FPGA多周期时序约束的全过程

    FPGA多周期时序约束详解 解读FPGA多周期时序约束的全过程 FPGA作为数字电路设计的常见工具 其设计中必然会遇到时序约束的问题 而多周期时序约束更是FPGA设计中不可避免的难点之一 本文将详细介绍FPGA多周期时序约束的全过程 并结合
  • 画时序图软件——TimeGen和Timing Designer下载

    在写实验报告的时候需要画波形图 但是手头没有很好的软件 就上网搜了一些 分享出来 这里分享的是TimeGen和Timing Designer两个软件 资源均来自网上 有侵权请联系 TimeGen使用和安装都比较简单 我发的应该里面有破解方法
  • [从零开始学习FPGA编程-24]:进阶篇 - 基本组合电路-编码器与译码器(Verilog语言)

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 125247358 目录 前言 Veri
  • DC/DC闭环控制的丘克(Cuk)变换电路原理设计及实验仿真

    如果将降压 Buck 变换电路和升压 Boost 变换电路的拓扑结构进行对偶变换 即Boost变换电路和Buck变换电路串联在一起得到一种新的电路拓扑结构 丘克 CUK 变换电路 如图所示 Cuk变换电路的输入和输出均有电感 增加电感的值
  • FL Studio2024水果编曲软件21.2.0中文版本下载更新

    FL Studio2024是功能强大的音乐制作解决方案 使用旨在为用户提供一个友好完整的音乐创建环境 让您能够轻松创建 管理 编辑 混合具有专业品质的音乐 一切的一切都集中在一个软件中 只要您想 只要您需要 它总能满足您的音乐需求 工具方面
  • [Verilog] Verilog 基本格式和语法

    主页 元存储博客 全文 3000 字 文章目录 1 声明格式 1 1 模块声明 1 2 输入输出声明 1 3 内部信号声明 1 4 内部逻辑声明
  • CSDN找到“仅我可见”内容

    有时候自己做一些笔记参考了他人的内容 所以想将文章转为 仅自己可见 仅作自用 记录一下CSDN找私密文章的方式 今天摸了好一会儿才找到哈哈哈 1 点击导航栏处的创作中心进入 2 查看更多 3 点击浏览就可以查看啦 来源 CSDN找到 仅我可
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • 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
  • 基于信号完整性的PCB设计原则

    最小化单根信号线质量的一些PCB设计建议 1 使用受控阻抗线 2 理想情况下 所有信号都应该使用完整的电源或地平面作为其返回路径 关键信号则使用地平面作为返回路径 3 信号的返回参考面发生变化时 在尽可能接近信号换层孔的位置增加至少一个返回

随机推荐

  • 给服务器端的.git瘦身

    一 背景 git库擅长管理文本型的文件 二进制文件一版不建议用git管理 现在我们已经用git管理的二进制文件 并且已经有了上百个提交 多个分支 且存储的二进制文件的总和已经相当庞大 可能几十个G 上百G 这给我们的git管理带来了以下3问
  • 嵌入式C语言之位操作详解

    1 位操作符 位操作直接将两个操作数按照二进制对应进行操作 例 0xaa 位与 0xf0 0xa0 逻辑操作是 两个操作数整体来操作 例 0xaa 逻辑与 0xf0 1 嵌入式的移位操作针对于无符号数 左移时右侧补0 右移时左侧补0 相当于
  • Python爬虫从入门到精通:(12)cookie_Python涛哥

    什么是cookie 是存储在客户端的一组键值对 web中cookie的典型应用 免密登陆 cookie和爬虫之间的关联 sometime 对一张页面进行请求的时候 如何请求的过程中不携带cookie的话 那么我们是无法请求到正确的页面数据
  • P5731 【深基5.习6】蛇形方阵

    题目描述 给出一个不大于 9 的正整数 n 输出n n 的蛇形方阵 从左上角填上 1 开始 顺时针方向依次填入数字 如同样例所示 注意每个数字有都会占用 3 个字符 前面使用空格补齐 输入格式 输入一个正整数 n 含义如题所述 输出格式 输
  • VMware虚拟机安装Linux 系统步骤

    一 获取安装包与系统镜像 VMware安装包下载 直接去访问我之前的博客 安装VMware虚拟化软件 何妨呀 的博客 CSDN博客 分享两个系统镜像资源库 下载Linux系统镜像 清华大学开源镜像站 清华大学开源软件镜像站 Tsinghua
  • [Web前端基础] CSS优先级、JS运算优先级、CSS设置在第几行进行超出部分省略号、JS设置元素样式的六种方式

    CSS优先级 important gt 行内样式 gt id选择器 gt 类选择器 gt 标签选择器 gt 通配符选择器 gt 继承 如果有多个复合选择器选中同一个元素 则需要通过权重计算确定优先级 挡住的是 标签选择器的个数 注意 只要是
  • win11出现:终止代码:SYSTEM SERVICE EXCEPTION解决方案实列(不懂请私信up主)

    有关此问题的详细信息和可能的解决方法 请访问 https www windows com stopcode 如果致电支持人呗 请向他们提供以下信息 终止代码 SYSTEM SERVICE EXCEPTION 终止代码解释 SYSTEM SE
  • Sublime, Vscode 快捷键

    vsCode 快捷键 Tips 编码规范 很多大型开源项目缩进其实不是4个空格 而是两个空格 比如 vue react 源码 当然还是具体看公司的代码是怎么规范的 在 VScode 里设置 tab 为2个空格方法 File Preferen
  • Mathorcup数学建模竞赛第六届-【妈妈杯】B题:车位分布的优化设计与评价(附一等奖获奖论文、C++和matlab代码)

    赛题描述 随着现代社会经济的快速发展 房地产成为国家经济发展中重要的经济增长点之一 而小区内汽车停车位的分布对于小区居民的上下班出行影响很大 请建立数学模型 解决下列问题 问题1 分析评判小区汽车停车位分布是否合理的几个关键指标 建立评判车
  • 基于ESP32的数据采集端

    背景介绍 数据采集设备属于物联网领域的标准件 广泛应用于工业 医疗 通讯以及教育等场景 调研发现 数据采集设备主要由硬件系统和软件代码两部分组成 近年来 随着技术的发展 工程技术人员通过编写各种程序算法 不断的挖掘硬件的性能 不仅降低了硬件
  • 一文读懂selenium自动化测试(基于Python)

    前言 我们今天来聊聊selenium自动化测试 我们都知道selenium是一款web自动化测试的工具 它应该如何去运用呢 我们接着看下去 1 Selenium简介 1 1 Selenium Selenium是一款主要用于Web应用程序自动
  • hive面试题

    Hive面试总结 什么是 Hive Hive结构描述 Hive的优势 内部表 外部表 分区表 分桶表 hive中 排序的种类和适用场景 动态分区和静态分区的区别 使用场景 hive 语句执行顺序 Hive的几种存储方式 列式存储的好处 HQ
  • 《期权、期货及其他衍生产品》读书笔记(第三章:利用期货的对冲策略)

    3 1 基本原理 完美对冲 Perfect Hedge 指完全消除风险的策略 一劳永逸 保完即忘Hedge and Forget Strategy 一旦设定对冲策略后 无需在对其进行调整 空头对冲 Short Hedge 对冲者选择期货的空
  • 前端面试总结

    前端面试 一 计算机网络 1 HTTP和HTTPS HTTP的基本概念 http 是互联网上应用最为广泛的一种网络协议 是一个客户端和服务器端请求和应答的标准 TCP 用于从 WWW 服务器传输超文本到本地浏览器的超文本传输协议 HTTP工
  • java 盲水印实现比其他版本的速度更快 !!!

    该盲水印版本速度上更快 参照了c的底层实现改编的 java 语法 结合先人的经验得以完成 希望能帮助有困惑的朋友 实测代码有效 下面就是我的代码实现 首先是盲水印工具类 导入类 import org bytedeco javacpp Loa
  • C++编译器为类自动生成的函数

    我们可以构建一个空类 class Empty 尽管没有定义任何函数 但我们可以通过以下方式使用这个类 Empty e1 Empty e2 e1 e2 e1 因为当编译器发现你用上述方式使用这个类而却在类声明中没有定义一般构造函数 非复制构造
  • Python Web系列学习1

    1 全栈网络框架 除了封装网络和线程操作 还提供HTTP栈 数据库读写管理 HTML模板引擎等一系列功能的网络框架 Django Flask Tornado是全栈网络框架的典型标杆 Twisted更专注于网络底层的高性能封装而不提供HTML
  • 服务器2008r2启动修复,Windows Server 2008 R2原生启动试用

    IT168 特别策划 6000名IT精英齐聚一堂 与来自微软产品核心研发团队及各个领域数百位顶级专家面对面交流 Tech Ed 2009盛典召开在即 IT168带您一起体验丰富多彩的活动和内容安排 更加深入 专注的互动讨论 IT168 专稿
  • 文件恢复原理&&Linux文件恢复工具-foremost&extundelete

    文件恢复的原理 首先简单介绍一下 Linux 文件系统的最基本单元inode inode 译成中文就是索引节点 每个存储设备 例如硬盘 或存储设备的分区被格式化为文件系统后 应该有两部份 一部份是 inode 另一部份是 block blo
  • FPGA设计篇之流水线思想

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