在verilog或系统verilog中生成块内部case语句

时间:2014-09-15 13:39:00

标签: verilog system-verilog

在Verilog或SystemVerilog中是否有一种方法可以在case语句中插入generate语句来生成所有可能的输入组合。例如,典型的用例是N:1 mux。

case(sel)
  generate
    for(i = 0; i < N; i += 1)
      i: out = q[i];
  endgenerate
endcase

我尝试了这个,但该工具给出了错误。

是另一种语法
out <= q[sel];

但是,我的工具不理解这个(多路复用器被完全解码)并产生组合循环。我可以使用if语句来获得预期的多路复用器。但是,我想知道是否有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:3)

您不能将forcase混合在一起。如果您只是尝试编写多路复用器,请查看以前的旧问题:How to define a parameterized multiplexer using SystemVerilog

唯一的区别是选择信号应该是单拍编码的。对于你的情况,你会有:

always_comb begin
out = 'z;
for (int i = 0; i < N; i++) begin
  if(sel == i)
    out = q[i];
end