【流水线】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中流水线的原因和方法 的相关文章

  • 【Xilinx Vivado时序分析/约束系列4】FPGA开发时序分析/约束-实验工程上手实操

    目录 建立工程 添加顶层 模块1 模块2 添加约束文件 编辑时钟约束 打开布线设计 代码代表的含义 时序报告 进行时序分析 Summary 包含了汇总的信息量 Source Clock Path 这部分是表示Tclk1的延时细节 Data
  • BUCK电路分析(二)

    BUCK电路分析 二 PSIM仿真同步BUCK电路 在上片文章中 初步的分析了BUCK电路的工作原理 本章使用PSIM软件仿真BUCK电路 观察分析BUCK电路器件关键波形 图1是同步BUCK电路图 开关频率设置为200K 固定占空比 在仿
  • libero-soc许可证申请和环境配置

    环境 64位机 在哪台电脑上安装libero soc 就用哪台电脑申请许可证 1 注册 https www microsemi co 在官网注册 之后申请的许可证会发到注册时填写的邮箱 2 申请许可证 https www microsemi
  • IC Compiler指南——数据准备

    一 概述 ICC数据设置的文件关系框图如图 后端工具在数据设置阶段需要对两大类数据进行设置 包括从前端设计继承的综合数据 以及后端设计需要的物理数据 综合数据主要包括前端逻辑综合已经设置过的逻辑与时序库文件 设计约束文件sdc以 及综合网表
  • FPGA学习笔记(一)__电平知识

    常见电平标准 文章目录 1 TTL电平标准 2 LVTTL电平标准 1 LVTTL3V3 2 LVTTL2V5 3 CMOS电平标准 4 LVCOMS电平标准 1 LVCOMS3V3 2 LVCOMS2V5 3 LVCOMS1V8 4 LV
  • 【FPGA】通俗理解从VGA显示到HDMI显示

    注 大部分参考内容来自 征途Pro FPGA Verilog开发实战指南 基于Altera EP4CE10 2021 7 10 上 贴个下载地址 野火FPGA Altera EP4CE10征途开发板 核心板 野火产品资料下载中心 文档 hd
  • 【电子技术】什么是LFSR?

    目录 0 前言 1 数学基础 1 1 逻辑异或 1 2 模2乘法 和 模2除法 2 线性反馈移位寄存器LFSR 3 抽头和特征多项式 4 阶线性反馈移位寄存器实例 0 前言 线性反馈移位寄存器 Linear Feedback Shift R
  • FPGA功耗估计(二)

    针对于Altera的Cyclone III 做出了静态功耗 对于Altera 其提供了一个功耗早期估计工具 可以在官网上下到 首先需要将宏设置为安全 在excel选型中选择文件 之后便可看到 根据相应的选择 红框部分 可以查看静态功耗 对于
  • [从零开始学习FPGA编程-38]:进阶篇 -语法-函数与任务

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 前言 第1章 什么是函数Function 1 1 什么是函数 1 2 函
  • Spartan-3E 上的随机数生成

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

    我正在使用 python 来从 FPGA 接收 UDP 数据包流 并尝试丢失尽可能少的数据包 数据包速率从大约 5kHz 到一些 MHz 我们希望在特定时间窗口 代码中的 acq time 内获取数据 我们现在有这样的代码 BUFSIZE
  • VHDL:按钮去抖动(或不去抖动,视情况而定)

    我已阅读其他帖子 但似乎无法修复我的 我是 VHDL 新手 所以我确信这是一个简单的修复 简而言之 按钮没有防抖 代码编译和比特流程序 在测试台中 按下按钮可以工作 但输出 LED 不会改变 在板上 按下按钮会使随机 LED 亮起 我猜是因
  • Verilog、FPGA、统一寄存器的使用

    我有一个问题 关于我正在开发的 AGC SPI 控制器在我看来奇怪的行为 它是用 Verilog 完成的 针对的是 Xilinx Spartan 3e FPGA 该控制器是一个依赖外部输入来启动的 FSM FSM的状态存储在状态寄存器它没有
  • 硬核 | 从零制作一个激光雷达需要多久?

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

    1 框图 2 顶层 3 m generator M序列的生成 输出速率为500Kbps 4 S2P是串并转换模块 将1bit的m序列转换到50M时钟下的2bit M序列数据 就有4个象限 5 my pll是生成256M的时钟作为载波 因为s
  • Linux驱动程序DMA传输到PC作为主机的PCIe卡

    我正在开发一个 DMA 例程 将数据从 PC 传输到 PCIe 卡上的 FPGA 我阅读了 DMA API txt 和 LDD3 ch 15 详细信息 但是 我不知道如何从 PC 到 PCIe 卡上的一致 iomem 块进行 DMA 传输
  • ESP10B 锁定连接器

    ESP10B 锁定连接器 ESP10B 电机新增内容包括双极型号标准 NEMA 尺寸 17 23 和 34 的步进电机现在包括输出扭矩范围从 61 盎司英寸到 1291 盎司英寸的双极型号 该电机配有带锁定连接器的尾缆 可轻松连接 每转可步
  • 赋值语句中的“others=>'0'”是什么意思?

    cmd register process rst n clk begin if rst n 0 then cmd r lt others gt 0 elsif clk event and clk 1 then cmd r lt end if
  • 学习 Verilog 的资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 Verilog 新手 有人可以推荐学习资源 书籍 视频 博客或任何他们有良好个人经验并帮助他们更
  • 无符号和 std_logic_vector 之间的区别

    谁能告诉我以下书面陈述之间的区别 signal A unsigned 3 downto 0 signal B std logic vector 3 downto 0 Both std logic vector and unsigned ar

随机推荐

  • 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 专用多路复用