将结构作为System Verilog中的参数传递

时间:2017-09-08 16:55:03

标签: system-verilog modelsim

当删除未使用的localparam时,以下代码在Modelsim下正常工作。如果留下它,它会产生下面的错误。如果可以使用结构将参数传递给模块,我做错了什么?非常感谢。

typedef bit [7:0] myarr[2];
typedef struct { int a; myarr bytes; } mystruct;

module printer #(mystruct ms)();

  // works fine if this is removed
  localparam myarr extracted = ms.bytes;

  initial
    $display("Got %d and %p", ms.a, ms.bytes);

endmodule 

parameter mystruct ms = '{ a:123, bytes:'{5, 6}};   

module top;
  printer #(.ms(ms)) DUT ();
endmodule

这是错误。使用vlog -sv -sv12compat进行编译不会产生错误或警告。

 $ vsim -c -do "run -all; quit" top
 Model Technology ModelSim - Intel FPGA Edition vlog 10.5c Compiler 2017.01 Jan 23 2017
 (.......)
 # ** Error: (vsim-8348) An override for an untyped parameter ('#dummyparam#0') must be integral or real.

2 个答案:

答案 0 :(得分:0)

我的解决方法是使用打包数组。我不需要打包整个结构。

如果有人出现,我很乐意接受别人的回答。特别是,确认这是否真的是Modelsim中的错误,或者只是通过包含位置和参数名称可以使更有用的正确编译错误的实例是有帮助的。

答案 1 :(得分:0)

我认为这里的问题是您要在一个语句中分配整个未打包的数组,这是不允许的。尝试将myarr typedef更改为压缩数组。