0

当我在 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

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

4

1 回答 1

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 字符更改。幸运的是 '0' + i 给你 '1', '2', '3' 等等

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

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

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

NAME   1

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

于 2014-04-10T17:44:30.970 回答