不允许同时分配给非网络“_”

Concurrent assignment to a non-net '_' is not permitted

我遇到错误:

concurrent assignment to a non-net 'A' is not permitted
concurrent assignment to a non-net 'B' is not permitted 
Static elaboration of top level Verilog design unit(s) in library work failed.

我做错了什么?

module ex1( input reg [1:0] a,
  input reg [1:0]b,
  output wire c,
  );
  assign c=(a>b)?(a=1'b1):(c=1'b0);     
endmodule 

module testbench(
    );
    reg[1:0]a=2'b11;
    reg [1:0]b=2'b00;
    wire c;
    always#10
    begin
      a=a-2'b01;
      b=b-2'b01;
    end
    initial
      #150 $finish;
    ex1 testbench2 (.a(a),
      .b(b),.c(c));
endmodule

我在你的 ex1 模块中发现了 3 个语法错误。

端口列表中的尾随逗号是非法的。变化:

output wire c,

至:

output wire c

给模块内的输入端口赋值是非法的。这是非法的:a=1'b1。假设在那里使用 a 是一个拼写错误,而你真的想输入 c,你应该更改:

assign c=(a>b)?(a=1'b1):(c=1'b0);     

至:

assign c = (a>b) ? 1'b1 : 1'b0;     

您通常不想像您的代码那样在条件运算符内进行赋值。

一个模拟器还抱怨将 input 端口声明为 reg 类型。对于 ab,您应该省略 reg。这是重新编码的模块:

module ex1 (
    input [1:0] a,
    input [1:0] b,
    output wire c
);
    assign c = (a>b) ? 1'b1 : 1'b0;     
endmodule