✎ 编 者 按
在SpinalHDL中,Stream的抽象可谓诸多设计的核心,今天,一同来看下不带数据的Stream——Event。
》不带数据的Stream
在逻辑设计里,握手信号处处可见,在SpinalHDL里,所有的握手信号都可以抽象为Stream接口:
valid
payload
ready
这里的payload可以是任何的数据类型。但在某些场合下,我们可能并不需要payload,而只是单纯的想要一个握手信号。
在这种情况下,你可以使用SpinalHDL lib中所提供的Event:
def Event = new Stream(NoData)
Event对应一个payload为NoData的Stream信号,而NoData顾名思义,其实现为一个空的Bundle:
class NoData extends Bundle {
}
》Example
这里我们以Axi4-Lite写通道为例进行描述。自定义信号名称如下:
case class hpi() extends Component{
val addr=UInt(32 bits)
val data=Bits(32 bits)
}
当我们将hpi转换为Axi4-Lite Write接口时,addr信号要送到aw通路,而data通路则要送到w通路。这里我们需要用到一个StreamFork组件,通过Event,我们可以很方便的描述该电路:
这里,我们通过Event及StreamFork3来完成cmd和alite4WriteOnly三路Stream握手信号的处理,实现电路更加的方便简洁。
作者:玉骐
原文链接:Spinal FPGA
微信公众号:
推荐阅读
更多SpinalHDL技术干货请关注Spinal FPGA专栏。