verilog生成循环分配给迭代器宽度不匹配
我正在使用generate循环来实例化可参数化数量的模块,并希望根据循环迭代将一些输入分配给模块。不幸的是,我遇到了合成方面的问题,设计编译器说这是一个错误,因为端口宽度不匹配。以下是我想做的:verilog生成循环分配给迭代器宽度不匹配,verilog,system-verilog,synthesis,Verilog,System Verilog,Synthesis,我正在使用generate循环来实例化可参数化数量的模块,并希望根据循环迭代将一些输入分配给模块。不幸的是,我遇到了合成方面的问题,设计编译器说这是一个错误,因为端口宽度不匹配。以下是我想做的: genvar k; generate for(k = 0; k < `NUM/2; ++k) begin cmp2 cmps( .a (arr[k]), .b (arr[k+1]),
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
genvark;
生成
对于(k=0;k<`NUM/2;++k)开始
cmp2 cmps(
.a(arr[k]),
.b(arr[k+1]),
.a_idx(k),//提供有关端口宽度不匹配的错误
.b_idx(k+1),//但我无法以任何其他方式让它工作
.数据输出(数据[k]),
.idx_out(idx[k])
);
结束
最终生成
我还尝试在循环中使用localparams,并将a_idx和b_idx分配给localparam,但在合成中仍然会遇到相同的错误
我尝试过类似于.a_idx((k)[bit\u width-1:0]),
的方法,但这也不起作用
有什么想法吗?
k
和k+1
是32位宽的,这会导致宽度不匹配。
根据合成工具支持的内容,您可能希望尝试以下操作:
- 位切片:
.a_idx (k[0 +: bit_width])
- 转换为
-宽逻辑:位宽度
typedef logic[bit_width-1:0] logicN_t; // .... // .a_idx (logicN_t'(k)), .b_idx (logicN_t'(k+1)), // .... //
k
和k+1
是32位宽,这会导致宽度不匹配。
根据合成工具支持的内容,您可能希望尝试以下操作:
- 位切片:
.a_idx (k[0 +: bit_width])
- 转换为
-宽逻辑:位宽度
typedef logic[bit_width-1:0] logicN_t; // .... // .a_idx (logicN_t'(k)), .b_idx (logicN_t'(k+1)), // .... //