如何截断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])
但它们在语法上并不正确。
如何解决这个问题?
答案 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