ARM技术论坛
直播中

申换换

7年用户 1498经验值
私信 关注
[经验]

记录一个在使用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

》写在最后

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

原作者:玉骐

更多回帖

发帖
×
20
完善资料,
赚取积分