十二 · 2022年08月31日 · 北京市

踩坑系列——BlackBox的parameter

✎ 编 者 按 
记录一个在使用BlackBox中parameter踩到的坑

》踩到的坑

   在很早之前,曾写过如何在SpinalHDL中例化之前用Verilog/SystemVerilog所写的代码,可参照文章《SpinalHDL——集成你的RTL代码》一文。在SpinalHDL doc里面也曾提到,在创建BlackBox时,关于原始RTL代码中的parameter的处理方式为:

image.png

   嗯,看起来很简单,我们照猫画虎就好了,最近在写代码时偶然间踩到了一个坑,这里用下面的代码来说明:

image.png

   嗯,看起来似乎没什么毛病是吧,这里采用的new Generic的方式来声明parameter。但当我仿真时却发现了异常,adder仍旧是8 bits。着实让我诧异了好久,寻思我的代码写的挺明白的呀,随后,打开生成的RTL代码,发现了令人震惊的事情:

image.png

   在例化时我们传入的parameter并没有被声明出来……

》刨根问底

   明明照着document来做的,却没有达到想要的效果,这着实令人不可思议。打开BlackBox的源代码,终于找到了线索:

image.png

   我们这里使用的是例化Generic的方式,而BlackBox中处理这一块儿的代码如上所示。代码里的处理逻辑是寻找类中名为generic的对象进行parameter的处理,而我们在代码里Generic例化的名字是param,从而无法找到对应的parameter,也就是说我们在BlackBox中所声明的parameter并没有被使用。这里我们把Generic的声明改为generic:

image.png

   而最终例化的代码也如其所愿:

image.png

》写在最后

   这里偶然在这里踩了个坑,源代码实现略不优雅,自己也随意发挥了些~

☆ END ☆

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

推荐阅读

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