十二 · 2021年11月19日

如何设计一个“价值百万”的总线互联IP(五)

最后一块拼图,Axi4读通路多路仲裁的设计

多选一的抉择

相较于Axi4写通路,多通路的多选一就容易多了。对于Axi4ReadOnlyArbiter,其仅需处理两个问题:

  • Ar通路多端口仲裁,其处理和写通路aw通路基本相同,采用多端口RR调度即可,同时也需将端口的仲裁信息放置于id字段用于读返回数据的端口路由。
  • r通路数据路由,其处理与b通路相似,根据返回的id字段信息解析出端口信息路由至正确的端口,

配置参数

相较于Axi4WriteOnlyArbiter,Axi4ReadOnlyArbiter的参数配置要简单很多:

  • outputConfig:输出端口Axi4配置。
  • inputsCount:输入端口个数

    由于不再需要Route buffer,也就没有readIssuingCapability的概念,其支持取决于下游端口。

代码解析

针对ar通路,Axi4ReadOnly的处理方式为:

图片.png    简洁优雅依旧。这里面值得学习的一点小技巧是removeAssignments方法的使用。顾名思义,其作用是将之前的 赋值给删除掉。这里对于output端口的readCmd,我们唯一需要改动的只有id字段,剩下的就是直连了。因为id位宽的改变将导致不能直接用“<>”方法进行端口的互联,而这里却依旧使用了 “<>”方法,只不过在最后又调用了removeAssignments方法将id的赋值给抹去,重新对id字段进行赋值(位宽的匹配检查是在生成RTL代码的一步执行的)。通过这种方式能够让代码更加的简洁而方便,不失为“神来之笔”。

而对于r通路,代码也简洁明了:

图片.png

通过从id字段提取端口信息,进行数据端口的路由。这里一个for循环,一个zipped方法(可参考文章《软为硬用,如是而已》)将复杂的端口连线在几行代码内完成,你能跟我讲SystemVerilog有这个效率?  

写在最后

好了,至此整个端口互联IP的所有关键组件都梳理完成,貌似万事大吉了。明天最后一篇,带你体会SpinalHDL的究极魅力。

☆ END ☆

作者:玉骐
原文链接:https://mp.weixin.qq.com/s/dsIZtEEpiC05WoYXXVk5rg
微信公众号:
 title=

推荐阅读

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