verilog 生成循环分配给迭代器宽度不匹配
verilog generate loop assign to iterator width mismatch
我正在使用生成循环来实例化可参数化的模块数量,我想根据循环迭代将一些输入分配给模块。不幸的是,我 运行 陷入综合问题,其中设计编译器说存在错误,因为端口宽度不匹配。这是我正在尝试做的事情:
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]),
之类的东西,但也不管用。
有什么想法吗?
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)),
// .... //
我正在使用生成循环来实例化可参数化的模块数量,我想根据循环迭代将一些输入分配给模块。不幸的是,我 运行 陷入综合问题,其中设计编译器说存在错误,因为端口宽度不匹配。这是我正在尝试做的事情:
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]),
之类的东西,但也不管用。
有什么想法吗?
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)), // .... //