尝试编写一个简单的N位优先级仲裁器(它将优先处理req [0]> req [1]> req [2] ... req [N]。
工作代码:
assign grant_simple[0] = req_in[0];
generate
for (i=1; i<N; i++)
assign grant_simple[i] = req_in[i] & (!(|req_in[i-1:0]));
endgenerate
但是我试过不生成并且使用这样的always_comb块。
assign grant_simple [0] = req_in [0];
always_comb begin
for (int i=1; i<N; i++)
grant_simple[i] = req_in[i] & (!(|req_in[i-1:0]));
end //always
这给我一个错误。
错误-[IRIPS]零件选择范围错误 design.sv,18岁 零件选择的范围是非法的: req_in [(i-1):0]
错误-[TCF-CETE]无法评估表达式 design.sv,18岁 “(i-1)” 无法评估左切片表达式中的表达式。 该表达式必须是编译时间常数。
我尝试将[i-1:0]
替换为i-:1
,但我认为它不会做同样的事情。寻找一个明确的解释,为什么使用[i-1:0]
可以生成,而不使用不带for的for循环。在这种情况下,如何将位切片用于系统Verilog?