连续赋值中的赋值表达式非法.Verilog八进制2到1 Mux



我正在尝试对八进制(8位输入(2对1多路复用器进行编码。这是我的代码:

module octal2to1mux(input [7:0] a, input [7:0] b, input s, output w);
assign w= (s=1'b0) ? a:
(s=1'b1) ? b: 1'bx;
endmodule

当我尝试编译时,我得到以下错误:

octal2to1mux.sv(3): Illegal assignment expression in continuous assignment.

如果s=0,我只想得到w=a,如果s=1,我只想要得到w=b。a和b都是8位输入。我在测试台上使用了两次这个模块。

对可合成多路复用器进行编码的推荐方法是:

module octal2to1mux (input [7:0] a, input [7:0] b, input s, output [7:0] w);
assign w = (s) ? a : b;
endmodule

它更简单、更容易理解并修复您的语法错误。此外,如果sXZ,则w将是X;不需要将其明确地设置为CCD_ 6。

注意,w必须与ab输入具有相同的位宽。

输出w的宽度应为8。正如@Serge评论的那样,在进行比较时,应该使用=====(不可合成(。

最新更新