十二 · 2022年04月14日

Event—没有数据的Stream

✎ 编 者 按 

   在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,我们可以很方便的描述该电路:

327a179effdf4dc465294f9c243ce65c.png
    这里,我们通过Event及StreamFork3来完成cmd和alite4WriteOnly三路Stream握手信号的处理,实现电路更加的方便简洁。

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

推荐阅读

更多SpinalHDL技术干货请关注Spinal FPGA专栏。
推荐阅读
关注数
1581
内容数
133
用SpinalHDL提升生产力
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息