part_select /的系统Verilog问题在always_comb块中生成简单的for循环

时间:2018-11-02 00:18:02

标签: generate

尝试编写一个简单的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?

0 个答案:

没有答案