Verilog,截断genvar宽度大小

时间:2016-08-30 20:20:55

标签: verilog system-verilog modelsim

如何截断genvar变量的宽度?例如,如果我有:

parameter LENGTH = 8;

genvar i;
for(i = 0; i < LENGTH; i = i + 2) begin
   somemodule #(WIDTH($clog2(LENGTH))
               )
               tmp (.a(i)
                   ,.b(i+1)
                   ,.c(output)
                   );
end
endgenerate

当我在ModelSim中模拟时,我会得到端口大小与连接大小不匹配。我知道问题在于genvar是32位宽,而我的模块宽度也不同。

我试过

genvar [$clog2(LENGTH)-1:0] i;

.a(i[$clog2(LENGTH)-1:0])

但它们在语法上并不正确。

如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您可以使用为此

声明的数据类型的中间参数
parameter int LENGTH = 8;
parameter int WIDTH  = $clog2(LENGTH);
for(genvar i = 0; i < LENGTH; i = i + 2) begin

   parameter bit [WIDTH-1:0] A = i;
   somemodule #(.WIDTH(WIDTH))
               )
               tmp (.a(A)
                   ,.b(A+1'b1)
                   ,.c(output)
                   );
end