0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA中流水线的原因和方式

科技观察员 来源:allaboutcircuits 作者:Sneha HL 2022-05-07 16:51 次阅读

本文解释了流水线及其对 FPGA 的影响,即延迟、吞吐量、工作频率的变化和资源利用率。

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

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

什么是流水线?

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

pYYBAGJ2MwWAHXu-AAC7Qyoezgk454.jpg

图 1.

流水线处理器架构的可视化表示。每个方块对应一条指令。正方形使用不同颜色传达了指令相互独立的事实。图片由

Colin ML Burnett

[

CC-BY-SA-3.0

] 提供。

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

让我们通过一个例子来分析一下FPGA设计流水线化的模式。

一个例子

让我们看一下在四个输入数组上进行三个乘法和一个加法的系统。因此,我们的输出y i将等于 ( a i × b i × c i ) + d i。

非流水线设计

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

poYBAGJ2MwqASgxoAAAgpIr2n7g915.jpg

图 2a。

非流水线 FPGA 设计示例。图片由 Sneha HL 创建

在这里,我们期望操作序列是a i和b i数据乘以乘数 M 1,然后是其乘积与c i乘以乘数 M 2 ,最后将结果乘积与d i相加加法器 A 1。

然而,当系统设计为同步时,在第一个时钟滴答时,只有乘法器 M1 可以在其输出端产生有效数据 ( a 1 × b 1 )。这是因为,此时,与 M 2和 A 1不同,只有 M 1在其输入引脚处具有有效数据(a 1和b 1 ) 。

在第二个时钟节拍中,M 1和 M 2的输入引脚上都会有有效数据。但是,现在我们需要确保只有 M 2运行,而 M 1保持其输出不变。这是因为,此时,如果 M 1运行,则其输出线变为 ( a 2 × b 2 ) 而不是其预期值 ( a 1 × b 1 ),从而导致错误的 M 2输出 ( a 2 × b 2 × c 1 ) 而不是 ( a 1 ×b 1 × c 1 )。

当时钟第三次滴答作响时,所有三个组件都会有有效输入:M 1、M 2和 A 1。尽管如此,我们只希望加法器能够运行,因为我们期望输出为y 1 = ( a 1 × b 1 × c 1 + d 1 )。这意味着系统的第一个输出将在第三个时钟滴答之后可用。

接下来,随着第四个时钟滴答的到来,M 1可以对下一组数据进行操作:a 2和b 2。 但此时,M 2和 A 1预计空闲。这之后必须在第五个时钟节拍激活 M 2 -只有M 2 - 在第六个时钟节拍激活 A 1 -只有A 1。这确保了我们的下一个输出, y 2 = ( a 2 × b 2 × c 2 + d 2)。

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

Figure2b.jpeg

图 2b。

流水线设计

现在,假设我们在输入(R 1到 R 4)、M 1和 M 2之间(分别为 R 5和 R 8)以及沿直接输入路径(R 6、R 7、和 R 9 ),如图 3a 所示。

Fig3a.jpg

图 3a。

流水线 FPGA 设计示例。Sneha HL 创建的图像和表格

这里,在第一个时钟滴答声中,有效输入仅出现在寄存器 R 1到 R 4(分别为 a 1、b 1、c 1和d 1)和乘法器 M 1(a 1和b 1)。结果,只有这些才能产生有效的输出。此外,一旦 M 1产生它的输出,它就会被传递到寄存器 R 5并存储在其中。

在第二个时钟滴答声中,存储在寄存器 R 5和 R 6(a 1 × b 1和c 1)中的值显示为 M 2的输入,这使其能够将其输出呈现为a 1 × b 1 × c 1,而R 4 ( d 1 ) 的输出被转移到寄存器R 7。同时,即使是第二组数据(a 2、b 2、c 2和d 2) 进入系统并出现在 R 1到 R 4的输出端。

在这种情况下,允许 M 1对其输入进行操作,以使其输出线从a 1 × b 1变为a 2 × b 2,这与非流水线设计的情况不同。这是因为,在本设计中,M 1输出的任何变化都不会影响 M 2的输出。这是因为确保 M 2正确功能所需的数据在第一个时钟节拍期间已经锁存在寄存器 R 5中(并且即使在第二个时钟节拍时也保持不受干扰)。

这意味着寄存器 R 5的插入使 M 1和 M 2在功能上独立,因此它们都可以同时对不同的数据集进行操作。

接下来,当时钟第三次滴答作响时,寄存器R 8和R 9的输出(( a 1 × b 1 × c 1 )和d 1 )作为输入传递给加法器A 1。结果,我们得到第一个输出y 1 = (( a 1 × b 1 × c 1 ) + d 1 )。尽管如此,在同一时钟滴答声中,M 1和 M 2将可以自由操作 ( a 3 , b 3) 和 ( a 2 , b 2 , c 2 )。这是可行的,因为存在将块M 1与M 2隔离的寄存器R 5和将乘法器M 2与加法器A 1隔离的R 8。

因此,在第三个时钟滴答处,我们甚至可以分别从 M 1和 M 2得到 ( a 3 × b 3 ) 和 ( a 2 × b 2 × c 2 ) ,除了y 1。

现在,当第四个时钟滴答到达时,加法器 A 1对其输入进行运算以产生第二个输出,y 2 = (( a 2 × b 2 × c 2 ) + d 2 )。此外,M 1的输出从 ( a 3 × b 3 ) 变为 ( a 4 × b 4 ),而 M 2的输出从 ( a 2 × b 2 × c 2 ) 变为 ( a 3 × b3 × c 3 )。

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

poYBAGJ2MyKAMx8nAAC0HhjgCc8615.jpg

流水线的后果


潜伏

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

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

增加工作时钟频率

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

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

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

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

吞吐量增加

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

更好地利用逻辑资源

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

结论

流水线化设计的行为非常详尽。您需要在适当的时刻将整个系统划分为各个阶段,以确保最佳性能。尽管如此,投入其中的辛勤工作与其在设计执行时所呈现的优势相当。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1603

    文章

    21331

    浏览量

    593663
  • 现场可编程门阵列

    关注

    1

    文章

    19

    浏览量

    4659
收藏 人收藏

    评论

    相关推荐

    关于fpga流水线的理解

    如何理解fpga流水线
    发表于 08-15 11:43

    请教verilog中流水线技术的用途?

    [table=98%][tr][td]看到很多资料里说“利用流水线的设计方法,可大大提高系统的工作速度。”这是一个教材里很常用的例程:(1)非流水线实现方式module adder_8bits
    发表于 09-26 23:29

    FPGA中的流水线设计

    `流水线设计前言:本文从四部分对流水线设计进行分析,具体如下:第一部分什么是流水线第二部分什么时候用流水线设计第三部分使用流水线的优缺点第四
    发表于 10-26 14:38

    流水线寄存器问题

    图中的DFG(Data Flow Graph)节点已经标出了传输延迟,求该电路中流水线寄存器的最佳放置位置?求问大神解答这个题
    发表于 11-20 11:02

    FPGA重要设计思想及工程应用之流水线

    FPGA重要设计思想及工程应用之流水线流水线设计是高速电路设计中的一 个常用设计手段。如果某个设计的处理流程分为若干步骤,而且整个数据处理 流程分
    发表于 02-09 11:02 52次下载

    什么是流水线技术

    什么是流水线技术 流水线技术
    发表于 02-04 10:21 3745次阅读

    流水线中的相关培训教程[1]

    流水线中的相关培训教程[1]  学习目标     理解流水线中相关的分类及定义;
    发表于 04-13 15:56 889次阅读

    电镀流水线的PLC控制

    电镀流水线的PLC控制电镀流水线的PLC控制电镀流水线的PLC控制
    发表于 02-17 17:13 36次下载

    FPGA流水线练习5:设计思路

    流水线的工作方式就象工业生产上的装配流水线。在CPU中由5—6个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成5—6步后再由这些电路单元分别执行,这样就能实现在一个
    的头像 发表于 11-29 07:06 2311次阅读

    FPGA流水线练习(3):设计思路

    流水线的平面设计应当保证零件的运输路线最短,生产工人操作方便,辅助服务部门工作便利,最有效地利用生产面积,并考虑流水线安装之间的相互衔接。为满足这些要求,在流水线平面布置时应考虑流水线
    的头像 发表于 11-28 07:07 2093次阅读

    FPGA之为什么要进行流水线的设计

    流水线又称为装配线,一种工业上的生产方式,指每一个生产单位只专注处理某一个片段的工作。以提高工作效率及产量;按照流水线的输送方式大体可以分为:皮带
    的头像 发表于 11-28 07:04 3295次阅读

    FPGA流水线练习3:设计思路

    流水线主要是一种硬件设计的算法,如第一条中表述的流水线设计就是将组合逻辑系统地分割,并在各个部分(分级)之间插入寄存器,并暂存中间数据的方法。
    的头像 发表于 11-18 07:05 1905次阅读

    各种流水线特点及常见流水线设计方式

    按照流水线的输送方式大体可以分为:皮带流水装配线、板链线、倍速链、插件线、网带线、悬挂线及滚筒流水线这七类流水线
    的头像 发表于 07-05 11:12 6370次阅读
    各种<b class='flag-5'>流水线</b>特点及常见<b class='flag-5'>流水线</b>设计<b class='flag-5'>方式</b>

    如何选择合适的LED生产流水线输送方式

    LED生产流水线输送形式分为平面直线传输流水线、各种角度平面转弯传输流水线、斜面上传流水线、斜面下传流水线这四种输送
    发表于 08-06 11:53 818次阅读

    什么是流水线 Jenkins的流水线详解

    jenkins 有 2 种流水线分为声明式流水线与脚本化流水线,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkin
    发表于 05-17 16:57 680次阅读