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

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

3天内不再提示

pipeline高端玩法—看下FlushNext的用法

Spinal FPGA 来源:Spinal FPGA 作者:玉骐 2023-10-08 10:13 次阅读

看完了flush,再看下flushNext的用法

》flushNext

在Stage里,有关flushNext提供的API有:

defflushNext():Unit = flushNext(ConditionalContext.isTrue)

defflushNext(cond : Bool):Unit = internals.request.flushNext += cond

调用flushNext,最终会将flushNext的需求暂存到internals.request.flushNext中。

在Pipeline中,propagateRequirements函数中对于每一级Stage的处理:

varflushNext = stage.internals.request.flushNext.nonEmpty generate orR(stage.internals.request.flushNext)

如果flushNext不为空,则将所有条件或后得到flushNext电路对象。

a884076e-5f4a-11ee-939d-92fbcf53809c.png

在上面的这段描述中,针对驱动当前Stage的Conntection处理,flushNext电路将会被存储在clFlushNext(l)中。如果flushNext不为空(line:5),可以看到在line7:9行处理时,不管flush是存在,都会创建一个flush电路对象,也就意味着一般情况下flush,flushNext不需要同时使用。

而在line11:14中,以M2S为例,alwasContainsSlaveToken为True,会将flushNext清空。此时在line16:17时,仅会对驱动当前Stage的Stage Master调动flushIt函数,也就意味着flushNext将会向前传播,前级相当于执行flushIt。

clFlushNext的使用仅在Connection中使用到。还是以M2S为例,其处理逻辑为:

if(flushNext != null&& !flushPreserveInput) s.valid clearWhen(flushNext && s.ready)

在这里,如果flushNext不为空(flushPreserveInput默认为true),s.valid仅会在slave端ready和flushNext同时为高时才会清零。对比flush操作:

if (flush!= null&& !flushPreserveInput) s.valid clearWhen(flush)

也就意味着flushNext存在ready的情况下才具有意义。

》example

结合上面的分析,flushNext与flush的最大区别在于存在ready传播的情况。这里先给出一个flsuhIt的例子:

wKgZomUiEOWAWKyuAADG-gw3z3U180.jpg

这里是一个三级pipeline,最后一级调用flushIt操作,flushRoot参数传递为true。

采用下面的仿真代码:

wKgaomUiEP-AYapaAACi0NSFcZE779.jpg

我们这里在index==5时将cond拉高一拍,data_out.ready拉低一拍。

仿真波形如下:

a8aa546e-5f4a-11ee-939d-92fbcf53809c.jpg

可以看到,由于这里流水线为3级,在index=5时执行flush数据3,4,5不会从data_out有效输出。

将flushRoot参数修改为false:

a8b65b2e-5f4a-11ee-939d-92fbcf53809c.jpg

cond为高时data_out.valid仍然为高电平,下一个时钟周期拉低。虽然此时ready为低电平,这个数据没有被消耗,但其拉低时间不考虑ready信号的高低电平。

再将上面的代码换成flushNext:

a8c3aa5e-5f4a-11ee-939d-92fbcf53809c.jpg

可以看到,虽然cond为高,但其仍会坚持将此时已经传播到stage2的3给稳定传输出去,仅有4,5不会被data_out输出。






审核编辑:刘清

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

    关注

    68

    文章

    18948

    浏览量

    227426
  • 仿真器
    +关注

    关注

    14

    文章

    1009

    浏览量

    83457
  • Pipeline
    +关注

    关注

    0

    文章

    28

    浏览量

    9324

原文标题:pipeline高端玩法(八)—FlushNext

文章出处:【微信号:Spinal FPGA,微信公众号:Spinal FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    总结一下STM32串口的用法

    STM32CubeMX_定时器中断_PWM前两节简单的总结了GPIO, EXTI, TIMER的相关用法, 本节总结一下STM32串口的用法, 依然是原理性的东西不多讲, 直接开干.先看下缩写:...
    发表于 02-10 06:17

    Pipeline ADCs Come of Age

    Pipeline ADCs Come of Age Abstract: In the mid 1970s, a new data converter architecture
    发表于 04-16 16:21 1035次阅读
    <b class='flag-5'>Pipeline</b> ADCs Come of Age

    Pipeline ADCs Come of Age

    and mixed-signal community, called pipeline ADCs. The following article takes the knowledge of advantages and disadvantages of the pipeline
    发表于 04-25 10:22 1056次阅读
    <b class='flag-5'>Pipeline</b> ADCs Come of Age

    流水线模数转换器的时代-Pipeline ADCs Come

    and mixed-signal community, called pipeline ADCs. The following article takes the knowledge of advantages and disadvantages of the pipeline
    发表于 05-01 10:57 1013次阅读
    流水线模数转换器的时代-<b class='flag-5'>Pipeline</b> ADCs Come

    状态机原理及用法

    状态机原理及用法状态机原理及用法状态机原理及用法
    发表于 03-15 15:25 0次下载

    如何降低开发门槛助力音视频创新玩法

    、和华为AI技术专家Eric相聚直播间,深度解析了AV Pipeline Kit的技术要点和应用场景,助力广大音视频开发者以更轻松更高效的方式,为用户提供新玩法,新交互。 缘起:音视频开发面临诸多挑战
    的头像 发表于 09-28 10:26 1857次阅读

    修改V4L2的Video Pipeline的devicetree

    PetaLinux 能够根据Vivado的设计,自动生成V4L2的Video Pipeline的devicetree。但是它主要为Xilinx的VCU TRD服务,测试的组合比较少。很多时候,需要根据自己的工程,修改V4L2的Video Pipeline的devicetr
    的头像 发表于 08-02 08:03 1976次阅读
    修改V4L2的Video <b class='flag-5'>Pipeline</b>的devicetree

    Ping命令的7个基础用法

    IT行业中ping命令经常被用到,今天整理了一下关于网络基础知识中的网络命令ping命令在项目中是使用频率最高的,一般我们用的都是它的基本功能,今天和大家来详细看下Ping命令的7个基础用法,掌握了秒变大神!
    的头像 发表于 10-12 09:16 3647次阅读

    SpinalHDL里pipeline的设计思路

    如果你曾看过VexRSICV的设计,对于从事逻辑设计的你会惊讶从未想过逻辑设计还能这么来做。针对VexRSICV所衍生出的pipeline Lib,该系列会对pipeline进行一次梳理。诚如之前一篇博客曾讲,这是“勇者的游戏”。
    的头像 发表于 08-16 15:11 849次阅读
    SpinalHDL里<b class='flag-5'>pipeline</b>的设计思路

    pipeline高端玩法之Stage里的隐式转换

    Scala里面的隐式转换的好处是灵活,坏处就是太灵活。
    的头像 发表于 08-19 10:45 552次阅读
    <b class='flag-5'>pipeline</b><b class='flag-5'>高端</b><b class='flag-5'>玩法</b>之Stage里的隐式转换

    Pipeline中throwIt的用法

    字如其名,来看下Pipeline中throwIt的用法,是怎么个丢弃方式。
    的头像 发表于 10-21 16:24 440次阅读
    <b class='flag-5'>Pipeline</b>中throwIt的<b class='flag-5'>用法</b>

    pipeline高端玩法—优先级介绍

    无论是SystemVerilog还是SpinalHDL,都有Last valid assignment wins的语法特征。如在SpinalHDL-Doc中所描述
    的头像 发表于 11-04 10:13 545次阅读
    <b class='flag-5'>pipeline</b><b class='flag-5'>高端</b><b class='flag-5'>玩法</b>—优先级介绍

    pipeline高端玩法—haltIt介绍(九)

    看名字,就基本能猜到这个函数的大体功能是流水线暂停。
    的头像 发表于 11-24 16:57 284次阅读

    什么是pipeline?Go中构建流数据pipeline的技术

    本文介绍了在 Go 中构建流数据pipeline的技术。 处理此类pipeline中的故障很棘手,因为pipeline中的每个阶段可能会阻止尝试向下游发送值,并且下游阶段可能不再关心传入的数据。
    的头像 发表于 03-11 10:16 457次阅读

    浅析SpinalHDL中Pipeline中的复位定制

    之前有系列文章介绍了SpinalHDL中Pipeline的使用,最近在一个功能模块中真实的使用了这个lib。
    的头像 发表于 03-17 17:31 866次阅读
    浅析SpinalHDL中<b class='flag-5'>Pipeline</b>中的复位定制