十二 · 2022年06月08日

halfPipe是如何导致带宽减半的

✎ 编 者 按 

    来自之前小伙伴的一个问题,Stream中的halfPipe方法为什么会导致带宽减半?

》halfPipe

    在之前《打个拍,握个手可以么》一文中就Stream中的信号打拍常用的方法有过说明,而在Stream所提供的诸多方法中,对于信号的打拍处理,还有一个halfPipe方法。按照文档中所说,该方法会“ divide the bandwidth by 2”,因而引起了小伙伴的疑问。

    这里先看源代码:

bb1a40053d2dc1b166a22e6d20cc6adb.png

    halfPipe的valid信号取决于rValid,从该信号为一个寄存器,从该信号的处理上来看:

  1. rValid滞后于源端valid信号一个时钟周期
  2. 若当前拍halfPipe.fire,无论源端valid是否为高,其下一拍rValid必定为低电平。

    基于此,可以想象,当halfPipe.ready始终为高电平,源端valid时钟为高电平时,rValid将会在每隔一个时钟周期拉高一拍。    

    再来看源端ready信号,可以看出,每当halfPipe的valid信号为高电平时,源端ready信号将会变成低电平,这也就意味着每当下游有任务处理时,上均会被阻塞。

    我们以下面的demo来作为DUT:

90c2fabbe3f8b8134ae2e371d22260d7.png

    仿真波形如下:

0706342be915fe653c0f1bb7a42ae12c.png

    可以看到,相较于streamIn_valid,streamOut_valid带宽减半。

》pipelined

    Stream中诸多打拍握手方法,或许你记起来比较麻烦,那么可以在使用时采用下面的方法:

abaa15a75c2ecfb3a331dfa29cdefdd4.png

  • m2s:valid,payload信号打拍处理
  • s2m:ready信号打拍处理
  • halfRate:带宽减半处理,valid,payload信号打拍处理

☆ END ☆

作者:玉骐
原文链接:Spinal FPGA
微信公众号:
 title=

推荐阅读

更多SpinalHDL技术干货请关注[Spinal FPGA]欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
1581
内容数
133
用SpinalHDL提升生产力
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息