✎ 编 者 按
记录一个在使用BlackBox中parameter踩到的坑
》踩到的坑
在很早之前,曾写过如何在SpinalHDL中例化之前用Verilog/SystemVerilog所写的代码,可参照文章《SpinalHDL——集成你的RTL代码》一文。在SpinalHDL doc里面也曾提到,在创建BlackBox时,关于原始RTL代码中的parameter的处理方式为:
嗯,看起来很简单,我们照猫画虎就好了,最近在写代码时偶然间踩到了一个坑,这里用下面的代码来说明:
嗯,看起来似乎没什么毛病是吧,这里采用的new Generic的方式来声明parameter。但当我仿真时却发现了异常,adder仍旧是8 bits。着实让我诧异了好久,寻思我的代码写的挺明白的呀,随后,打开生成的RTL代码,发现了令人震惊的事情:
在例化时我们传入的parameter并没有被声明出来……
》刨根问底
明明照着document来做的,却没有达到想要的效果,这着实令人不可思议。打开BlackBox的源代码,终于找到了线索:
我们这里使用的是例化Generic的方式,而BlackBox中处理这一块儿的代码如上所示。代码里的处理逻辑是寻找类中名为generic的对象进行parameter的处理,而我们在代码里Generic例化的名字是param,从而无法找到对应的parameter,也就是说我们在BlackBox中所声明的parameter并没有被使用。这里我们把Generic的声明改为generic:
而最终例化的代码也如其所愿:
》写在最后
这里偶然在这里踩了个坑,源代码实现略不优雅,自己也随意发挥了些~
☆ END ☆
作者:玉骐
原文链接:Spinal FPGA
微信公众号:
推荐阅读
更多SpinalHDL技术干货请关注[Spinal FPGA]欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。