【流水线】FPGA中流水线的原因和方法

2023-11-06

目录

写在前面

什么是流水线?

无流水线设计

流水线设计

流水线的后果

结论


写在前面

对 FPGA(现场可编程门阵列)进行编程是一个定制其资源以实现确定逻辑功能的过程。这涉及使用FPGA的基本构建模块(如可编程逻辑模块(CLB)、专用多路复用器等)对程序指令进行建模,以满足数字系统的要求。

在设计过程中,需要考虑的一个重要标准是系统固有的时序问题,以及用户制定的任何约束。可以帮助设计人员实现这一目标的一种设计机制是流水线。

什么是流水线?

流水线是一个能够并行执行程序指令的过程。您可以在下面看到流水线处理器体系结构的可视化表示形式。

上图流水线处理器体系结构的可视表示形式。每个方块对应一条指令。正方形使用不同的颜色传达了这样一个事实,即指令是相互独立的。

在FPGA中,这是通过以特定方式排列多个数据处理模块来实现的。为此,我们首先将整个逻辑电路分成几个小部分,然后使用寄存器(触发器)将它们分开。

让我们通过考虑一个示例来分析FPGA设计流水线的模式。

示例

让我们看一个由三个乘法组成的系统,然后在四个输入数组上进行一次加法。我们的输出y我因此将等于(ai × bi × ci) + di。

无流水线设计

创建这样一个系统时想到的第一个设计是乘法器,然后是一个加法器,如图2a所示。

上图为非流水线 FPGA 设计示例

在这里,我们期望操作的顺序是一个我和b我 乘数 M 的数据1,然后是其乘积Ci乘数 M2最后,将所得产物与di通过加法器 A1.

然而,当系统被设计为同步时,在第一个时钟周期,只有乘法器M1才能在其输出端产生有效数据(a1×b1).这是因为,此时此刻,只有M1具有有效数据 (a1和b1) 在其输入引脚处,与 M 不同2和 A1.

在第二个时钟周期中,两个M的输入引脚上将有有效数据1和 M2.但是,现在我们需要确保只有M2在 M 时操作1保持其输出原样。这是因为,此时此刻,如果 M1操作,然后其输出行更改为 (a2× b2) 而不是其预期值 (a1× b1) 导致错误的 M2输出(a2× b2× c1) 而不是 (a1× b1× c1).

当时钟第三次滴答作响时,所有三个分量都有有效的输入:M1, M2和 A1.但是,我们只希望加法器是可操作的,因为我们期望输出是y1 = (一个1× b1× c1+ d1).这意味着系统的第一个输出将在第三个时钟滴答声后可用。

y2 =  (a2 × b2 × c2 + d2)。

当元件遵循类似的激励模式时,我们可以预期下一个输出发生在时钟周期9、12、15等处(图2b)。

流水线设计

现在,让我们假设我们在输入端向此设计添加寄存器(R1通过 R4),介于 M 之间1和 M2(R5和 R8)和沿直接输入路径(R6、R7和 R9),如图3a所示。

在这里,在第一个时钟滴答时,仅针对寄存器R显示有效输入1通过 R4 (一个1,b1,c1和 d1)和乘数 M1 (一个1和 b1).因此,只有这些才能产生有效的输出。而且,一旦M1产生其输出,它被传递到寄存器R5并存储在其中。

在第二个时钟周期,存储在寄存器R中的值5和 R6 (一个1× b1和 c1) 显示为 M 的输入2这使其能够将其输出呈现为1× b1× c1,而输出 R4 (d1) 被移位到寄存器 R7.同时,即使是第二组数据(a2,b2,c2和 d2) 进入系统并出现在 R 的输出端1通过 R4.

在这种情况下,M1允许在其输入上运行,以便使其输出线从1× b1到2× b2,与非流水线设计的情况不同。这是因为,在此设计中,M输出的任何变化1不影响M的输出2.这是因为确保M的正确功能所需的数据2已锁定在寄存器R中5在第一个时钟滴答时(即使在第二个时钟滴答时也不受干扰)。

这意味着插入寄存器R5已经使 M1和 M2功能独立,因此它们都可以同时对不同的数据集进行操作。

接下来,当时钟第三次滴答作响时,寄存器的输出R8和 R9 ((a1× b1× c1) 和 d1) 作为输入传递给加法器 A1.结果,我们得到我们的第一个输出y1 = ((a1× b1× c1) + d1).然而,在同一时钟滴答作响时,M1和 M2将可以自由操作(a3,b3) 和 (a2,b2,c2),分别。这是可行的,因为存在寄存器R5隔离块 M1从 M2和 R8隔离乘法器 M2从加法器 A1.

因此,在第三个时钟滴答作响时,我们甚至会得到(a3× b3) 和 (a2× b2× c2) 从 M1和 M2,分别除 y 之外1.

现在,当第四个时钟滴答声到来时,加法器A1对其输入进行操作以产生第二个输出 y2 = ((a2× b2× c2) + d2).此外,输出M1从 (a3× b3) 到 (a4× b4)而M2从 (a2× b2× c2) 到 (a3× b3× c3).

在遵循相同的工作模式时,我们可以期望从那时起,每个时钟周期都会出现一个输出数据(图3b),这与非流水线设计的情况不同,在非流水线设计中,我们必须等待三个时钟周期才能获得每个输出数据(图2b)。 

流水线的后果

延迟

在所示的示例中,流水线设计显示为第三个时钟周期的每个时钟周期产生一个输出。这是因为每个输入在到达输出之前必须经过三个寄存器(构成管道深度)。类似地,如果我们有一个深度为n的管道,那么每个时钟周期的有效输出仅从n开始显示一个千时钟滴答作响。

在第一个有效输出出现之前,与丢失的时钟周期数相关的这种延迟称为延迟。管道阶段的数量越多,与之关联的延迟就越大。 

工作时钟频率的增加

图2a所示的非流水线设计每三个时钟周期产生一个输出。也就是说,如果我们的时钟周期为1 ns,则输入需要3 ns(3×1 ns)才能得到处理并显示为输出。

然后,这条最长的数据路径将成为关键路径,它决定了我们设计的最小工作时钟频率。换句话说,设计系统的频率必须不大于(1/3 ns)= 333.33 MHz,以确保令人满意的运行。

在流水线设计中,一旦管线填满,就会为每个时钟周期生成一个输出。因此,我们的工作时钟频率与定义的时钟频率相同(此处为1/1ns = 1000 MHz)。

这些数字清楚地表明,与非流水线设计相比,流水线设计大大提高了工作频率。

提高吞吐量

流水线设计在每个时钟周期(一旦克服延迟)产生一个输出,而不管设计中包含的流水线级数如何。因此,通过设计流水线系统,我们可以提高FPGA的吞吐量。 

更好地利用逻辑资源

在流水线中,我们使用寄存器来存储设计各个阶段的结果。这些组件增加了设计使用的逻辑资源,使其在硬件方面变得非常庞大。

结论

流水线设计的行为非常详尽。您需要在适当的时刻将整个系统划分为单独的阶段,以确保最佳性能。然而,它所付出的辛勤工作与它在设计执行时所呈现的优势是一样的。

文章来自

http://www.allaboutcircuits.com

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

【流水线】FPGA中流水线的原因和方法 的相关文章

  • 【DDR3 控制器设计】(3)DDR3 的写操作设计

    写在前面 本系列为 DDR3 控制器设计总结 此系列包含 DDR3 控制器相关设计 认识 MIG 初始化 读写操作 FIFO 接口等 通过此系列的学习可以加深对 DDR3 读写时序的理解以及 FIFO 接口设计等 附上汇总博客直达链接 DD
  • 数字后端知识点扫盲——CTS (上)

    后端和前端一样在IC设计中扮演着非常重要的角色 甚至可以说入门的前端设计工程师对timing的理解远不如一个后端设计工程师 因此想要更好的理解电路的timing在后端P R之后或者说在大规模的设计中后端如何实现clock对DFF的驱动 就需
  • BUCK电路分析(二)

    BUCK电路分析 二 PSIM仿真同步BUCK电路 在上片文章中 初步的分析了BUCK电路的工作原理 本章使用PSIM软件仿真BUCK电路 观察分析BUCK电路器件关键波形 图1是同步BUCK电路图 开关频率设置为200K 固定占空比 在仿
  • Lattice Diamond安装

    1 下载 到Lattice官网 http www latticesemi com 注册一个lattice的账号后就可以去下载Diamond 登陆后如下图 根据自己系统情况选择对应的版本 我用的是32位win8 Diamond软件安装包和La
  • [从零开始学习FPGA编程-28]:进阶篇 - 基本组合电路-奇偶校验生成器(Verilog语言版本)

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 第1章 奇偶校验生成器 1 1 什么是奇校验 1 2 Verilog语言描述
  • 3. 从0开始学ARM-ARM模式、寄存器、流水线

    关于ARM的一些基本概念 大家可以参考我之前的文章 到底什么是Cortex ARMv8 arm架构 ARM指令集 soc 一文帮你梳理基础概念 科普 关于ARM指令用到的IDE开发环境可以参考下面这篇文章 1 从0开始学ARM 安装Keil
  • [HDLBits] Exams/ece241 2014 q7a

    Design a 1 12 counter with the following inputs and outputs Reset Synchronous active high reset that forces the counter
  • 【PIPE】流水线设计中的基本模块

    大概分成以下几节 1 概述及协议 2 valid forward valid超前 3 bubble collapse 消除气爆 4 input output skid 不知中文怎么说 5 pipe halt 流水停顿 6 idle pres
  • 画时序图软件——TimeGen和Timing Designer下载

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

    我需要在 Spartan 3E FPGA 上为我的遗传算法生成伪随机数 并且我想在 verilog 中实现它 您能给我任何关于此的指示吗 当然 Adam 的随机生成器是不可合成的 您必须显式创建一个LFSR 以下示例可能会有所帮助 它是一个
  • 在vhdl中生成随机整数

    我需要在 vhdl 中生成 0 1023 之间的随机整数 但是我在互联网上找不到这方面的好资源 请问有人帮我吗 下面是生成范围 0 1023 内均匀 均匀 分布的整数的示例 请注意 floor必须在与最大值 1 相乘之后使用运算 在本例中为
  • VHDL:按钮去抖动(或不去抖动,视情况而定)

    我已阅读其他帖子 但似乎无法修复我的 我是 VHDL 新手 所以我确信这是一个简单的修复 简而言之 按钮没有防抖 代码编译和比特流程序 在测试台中 按下按钮可以工作 但输出 LED 不会改变 在板上 按下按钮会使随机 LED 亮起 我猜是因
  • 硬核 | 从零制作一个激光雷达需要多久?

    编辑 ADS智库 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 硬件交流 技术交流群 本文只做学术分享 如有侵权 联系删文 激光雷达 LiDAR 是激光探测及测距系统的简称 目前广泛应用在无
  • 【ZYNQ学习】PL第一课

    这节课讲什么 这节课的名字本来是想写为LED 但这一课里除了LED也有按键 又想换为GPIO控制 但关于PL的GPIO控制 不应该这么草率和简单 而且这一课有很多和ZYNQ或者PL关联性不强的东西要说 所以我写了删删了写改了好几遍 终于定为
  • 使用 VHDL 实例化 FPGA 中的 RAM

    我试图按照中的指导实现双端口 RAM这篇优秀的博文 http danstrother com 2010 09 11 inferring rams in fpgas 然而 ModelSim 在编译时给出以下警告 Warning fifo ra
  • 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
  • VHDL 中的 BRAM_INIT

    我正在模拟基于处理器的设计 其中程序存储器内容保存在 BRAM 中 我正在使用 VHDL 推断 BRAM 实现程序存储器 我试图避免使用 CoreGen 因为我想保持设计的可移植性 最终该设计将进入 FPGA 我想看看是否有一种方法可以使用
  • 如何使用 Verilog 和 FPGA 计算一系列组合电路的传播延迟?

    我是 FPGA 和 HDL 的新手 但我正在尝试学习 但无法弄清楚这一点 如何通过多个级别的组合逻辑来计算或估计传播延迟 我可以仅凭经验确定这一点 还是可以在设计时弄清楚 在这种情况下 我使用 FPGA 来实现奇偶校验设置和检查电路 该电路
  • verilog $readmemh 对于 50x50 像素 RGB 图像花费太多时间

    我正在尝试编译用于 FPGA 编程的 verilog 代码 我将在其中实现 VGA 应用程序 我使用 QuartusII 和 Altera 我正在尝试正确使用 readmemh 来逐像素获取图片 现在 我已经使用 matlab 将图片转换为
  • 从 OpenCV 代码到 FPGA 代码的转换是否比 Matlab 代码更容易? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想做一个关于图像处理的项目 我想知道如果我想在FPGA上实现这个项目 我应该在第一阶段选择Matla

随机推荐

  • JDBC的原理与开发步骤(详解)

    简介 JDBC Java DataBase Connectivity 就是Java数据库连接 说白了就是用Java语言来操作数据库 原来我们操作数据库是在控制台使用SQL语句来操作数据库 JDBC是用Java语言向数据库发送SQL语句 原理
  • 想成为网络安全工程师需要学习掌握哪些技术

    想成为网络安全工程师 GPT建议需要掌握以下技术 1 网络基础知识 了解网络协议 网络拓扑 子网划分等基础概念 2 操作系统知识 熟悉常见操作系统 如Windows Linux 的安全配置和漏洞 3 数据库知识 了解数据库的安全配置和防御技
  • Java开发过程中的避坑点(一)

    1 典型空指针问题 包装类型的空指针问题 级联调用的空指针问题 Equals方法左边的空指针问题 ConcurrentHashMap 这样的容器不支持 Key 和 Value 为 null 集合 数组直接获取元素 对象直接获取属性 1 1包
  • RDA 升级

    烧录BOOT升级方式 1 连接 2 烧录BOOT 1 升级 bootrom raw bin 99K 这种升级方式需要Tera Term 工具 按 F5 U盘升级 编译的升级文件 RR8503 bin RR8501 bin RR52C bin
  • figma有哪些快速入门的好用技巧

    使用Figma在创建设计系统或处理大型设计项目时 总会涉及批量修改 快速定位 自动布局问题 MarcAndrew这篇文章分享了技巧 可以大大提高设计效率 希望对大家有所帮助 在这篇文章中 我列出了一些快速简单的方法来帮助你更快地使用它Fig
  • Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)

    本文主要解决一个问题 如何实现二叉树的前中后序遍历 有两个要求 1 O 1 空间复杂度 即只能使用常数空间 2 二叉树的形状不能被破坏 中间过程允许改变其形状 通常 实现二叉树的前序 preorder 中序 inorder 后序 posto
  • 猿如意中的【blender】工具详情介绍

    文章目录 一 工具名称 二 下载安装渠道 2 1 什么是猿如意 2 2 如何下载猿如意 三 工具介绍 四 blender介绍 4 1 blender简介 4 2 背景 4 3 主要功能 五 软件安装过程 5 1 如何在猿如意中下载开发工具b
  • 散列表习题

    1 考虑key的集合S 0 8 16 24 32 40 48 56 64 用除余法构造的散列函数 h1 key key 12 h2 key key 11 h1将S映射到的值域有几个元素 3 h2将S映射到的值域有几个元素 9 2 散列表的规
  • 【1分钟解决VS试用期到期】——登录用户时浏览器跳转失败

    登录 按钮下的 账户选项 将会默认跳转到左侧 环境 选项下的 账户 此界面中右上的 嵌入式Web浏览器 改为 系统Web浏览器 即可正常跳转登录 若没有微软账户可免费注册
  • easy poi 实现Excel文件的导入导出(SpringBoot整合)

    easypoi功能如同名字easy 主打的功能就是容易 让一个没见接触过poi的人员 就可以方便的写出Excel导出 Excel模板导出 Excel导入 Word模板导出 通过简单的注解和模板 语言 熟悉的表达式语法 完成以前复杂的写法 码
  • Win11任务栏怎么变小?Win11任务栏变小的设置方法

    很多Win11用户觉得win11任务栏太大了 用起来很不习惯 想要把任务栏变小 那要怎么进行操作 Win11的任务栏怎么变小 方法其实很简单的 系统之家小编这就分享给你 还不清楚的小伙伴们 快跟着小编一起来看看怎么操作吧 操作方法具体步骤
  • chatgpt赋能python:如何用Python进行数据清洗

    如何用Python进行数据清洗 在数据分析领域 数据清洗是非常重要的一步 因为原始数据往往包含大量的错误 缺失或者不一致的部分 对于这些 脏 数据 如果不进行清洗和处理 就会影响到后续的分析和建模工作 那么 如何用Python进行数据清洗呢
  • envi5.6处理gf3(SAR)详细过程记录

    未完结 待更新 可以参考的处理教程 SAR影像 雷达影像 的预处理 ENVI SARscape多极化单通道数据预处理流程 SARSCAPE中单雷达影像基础处理全过程 本文所使用的文件名 GF3 KAS UFS 017384 E108 9 N
  • 我的世界为什么服务器不显示皮肤,我的世界为什么皮肤没显示,为什么皮肤显示不出来怎么办...

    要正版账号盗版的话如果有皮肤MOD的话就可以看见了必须是安装了这个MOD的人才能看见 为什么显示不出更改后皮肤 用指令指令 skinset代码 英文或数字 怎么才能让我的世界人物皮肤能显示在服务器中 让每个玩家能看到 非官方的不好显示的 为
  • 2021-02-05

    1 字体类型 对于创造不同字体的文字类型时 每一个类型都得重新定义CFont 和 CStatic CStatic m cstatic title 标题名 CStatic m CStatic sys status CFont m Font C
  • mysql binlog 大小设置问题

    mysql开启了二进制日志binlog 如mysql bin 000005等 重启服务后会自动更新这个文件 如原来是000005的话会生成000006 请问 如果服务一直不重启 什么情况下会自动产生新的日志文件呢 是大小到了一定量时自动产生
  • 2016年中总结

    时间飞快 2016年上半年中收获很多 项目 学习 实习等 感慨颇多 一 学习 项目 走过BS 进入了Java的世界 在项目中实践对于自己的知识有了一个梳理和巩固 期间经历了ITOO5 0基础系统 对于基础系统的业务有了更多的了解 图书馆系统
  • 以不同的方向来处理数据倾斜

    一 程序层面 比如说在Hive中 经常遇到count distinct 操作 这样会导致最终只有一个Reduce任务 我们可以先group by 再在外面包一层count 就可以了 比如计算按用户名去重后的总用户量 优化前 只有一个redu
  • android开发之recycleView的adapter理解

    之前很长时间都是使用的listview 然后自己写适配器 主要都是继承自BaseAdapter 大致的思路呢 就是我们传入数据源以及上下文对象 然后我们在自定义适配器文件中实现了构造方法 然后将传入的上下文对象 context 以及数据源初
  • 【流水线】FPGA中流水线的原因和方法

    目录 写在前面 什么是流水线 无流水线设计 流水线设计 流水线的后果 结论 写在前面 对 FPGA 现场可编程门阵列 进行编程是一个定制其资源以实现确定逻辑功能的过程 这涉及使用FPGA的基本构建模块 如可编程逻辑模块 CLB 专用多路复用