在verilog中使用不同的字符串参数生成实例

时间:2013-06-27 07:02:45

标签: verilog

当我在Quartus II中配置pll_reconfig模块时,设计中的generate for语句必须为不同的实例指定不同的字符串参数(文件名)。 我试过这些代码:

genvar i;
generate 
   for (i=0; i<2; i=i+1) begin:u
      rom #($sformatf("mif%d.mif",i)) U(
         //signals connected.
      );
   end
endgenerate

据说代码不可合成。 如何在生成块中指定变量字符串参数?

1 个答案:

答案 0 :(得分:1)

我有一个类似的问题,但在一个不支持$ sformatf的系统上。我的解决方案有点脏,但可以帮助别人:

genvar i;
generate
  for (i=0; i<10; i=i+1)
  begin
    mymodule #(.NAME("NAME0" + i) instance(.RESET(mreset) ... );
  end
endgenerate

我认为,这可以通过将字符串“NAME0”视为一个数字(一个40位数字)来实现。通过添加i,您只需将值增加i,结果就是最后一个ASCII char更改。幸运的是'0'+我给你'1','2','3'等

明显的缺陷是这只适用于0-9,但有一个简单的扩展使用divide和modulo算术:​​

mymodule #(.NAME("NAME00" + (256 * (i / 10)) + (i % 10) ) ) ...

作为旁注,我使用字符串连接{“NAME”,i}遇到了问题,因为Verilog将i视为32位值,因此字符串最终为:

NAME   1

由于额外的'不需要的'24位,相当于3个空字符