在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
语句来获得预期的多路复用器。但是,我想知道是否有更好的方法来做到这一点。
答案 0 :(得分:3)
您不能将for
和case
混合在一起。如果您只是尝试编写多路复用器,请查看以前的旧问题: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