我正在使用一个生成循环来实例化一个可指定数量的模块,我想根据循环迭代为模块分配一些输入。不幸的是,我遇到了综合问题,设计编译器认为这是一个错误,因为端口宽度不匹配。这就是我要做的事情:
genvar k;
generate
for(k = 0; k < `NUM/2; ++k) begin
cmp2 cmps(
.a (arr[k]),
.b (arr[k+1]),
.a_idx (k), //gives errors about port width mismatch
.b_idx (k+1), //but I can't get it to work any other way
.data_out(data[k]),
.idx_out (idx[k])
);
end
endgenerate
我还尝试在循环中使用localparams并将a_idx和b_idx分配给localparam,但我仍然在综合下得到相同的错误。
我尝试了类似.a_idx((k)[bit_width-1:0]),
的内容,但这种做法也不起作用。
有什么想法吗?
答案 0 :(得分:3)
k
和k+1
为32位宽,导致宽度不匹配。
根据您的综合工具支持的内容,您可能需要尝试以下操作:
位切片:
.a_idx (k[0 +: bit_width])
转换为bit_width
- 广义逻辑:
typedef logic[bit_width-1:0] logicN_t;
// .... //
.a_idx (logicN_t'(k)),
.b_idx (logicN_t'(k+1)),
// .... //