✎ 编 者 按
来自之前小伙伴的一个问题,Stream中的halfPipe方法为什么会导致带宽减半?
》halfPipe
在之前《打个拍,握个手可以么》一文中就Stream中的信号打拍常用的方法有过说明,而在Stream所提供的诸多方法中,对于信号的打拍处理,还有一个halfPipe方法。按照文档中所说,该方法会“ divide the bandwidth by 2”,因而引起了小伙伴的疑问。
这里先看源代码:
halfPipe的valid信号取决于rValid,从该信号为一个寄存器,从该信号的处理上来看:
- rValid滞后于源端valid信号一个时钟周期
- 若当前拍halfPipe.fire,无论源端valid是否为高,其下一拍rValid必定为低电平。
基于此,可以想象,当halfPipe.ready始终为高电平,源端valid时钟为高电平时,rValid将会在每隔一个时钟周期拉高一拍。
再来看源端ready信号,可以看出,每当halfPipe的valid信号为高电平时,源端ready信号将会变成低电平,这也就意味着每当下游有任务处理时,上均会被阻塞。
我们以下面的demo来作为DUT:
仿真波形如下:
可以看到,相较于streamIn_valid,streamOut_valid带宽减半。
》pipelined
Stream中诸多打拍握手方法,或许你记起来比较麻烦,那么可以在使用时采用下面的方法:
- m2s:valid,payload信号打拍处理
- s2m:ready信号打拍处理
- halfRate:带宽减半处理,valid,payload信号打拍处理
☆ END ☆
作者:玉骐
原文链接:Spinal FPGA
微信公众号:
推荐阅读
更多SpinalHDL技术干货请关注[Spinal FPGA]欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。