Verilog两位幅度比较器



我试图编写一个两位比较器的Verilog代码,但我一直得到错误。任何帮助吗?

错误代码:

10170 Verilog HDL syntax error at two_bitcomparatorVerilog.v(5) near text: ";"; expecting ")"
10170 Verilog HDL syntax error at two_bitcomparatorVerilog.v(7) near text: ";"; expecting ")"
10170 Verilog HDL syntax error at two_bitcomparatorVerilog.v(15) near text: "~"; expecting ")"

设计:

module twobit_comparator(
//assigning inputs
input wire [1:0] A, B;
// assigning outputs
output wire LT, GT, EQ;
// L=Less, G=Greater, E=Equal 
);


wire [9:0] s;

//A = B output 
assign s0 = (~A[1] & ~A[0] & ~B[1] ~B[0]);
assign s1 = (~A[1] & A[0] & ~B[1] & B[0]);
assign s2 = (A[1] & ~A[0] & B[1] & ~B[0]);
assign s3 = (A[1] & A[0] & b[1] & B[0]);
assign EQ = s0 | s1 | s2 | s3;

//A less than B output 
assign s4 = (~A[0]) & (~A[1]) & B[0];
assign s5 = (~A[1]) & B[1];
assign s6 = (~A[0]) & B[1] & B[0];
assign LT = s4 | s5| s6;

// A greater than B output
assign s7 = (~B[0]) & (~B[1]) & A[0];
assign s8 = (~B[1]) &  A[1];
assign s9 = (~B[0]) & A[1] & A[0];
assign GT = s7 | s8 | s9;

endmodule 

用逗号分隔端口,而不是分号,并且不要以分号结束端口列表:

module twobit_comparator(
//assigning inputs
input wire [1:0] A, B,
// assigning outputs
output wire LT, GT, EQ
// L=Less, G=Greater, E=Equal 
);

您缺少&算子;我在这里添加了:

assign s0 = (~A[1] & ~A[0] & ~B[1] & ~B[0]);
//                                 ^

我在这里将b更改为B(Verilog区分大小写):

assign s3 = (A[1] & A[0] & B[1] & B[0]);
//                         ^

我没有得到任何更多的编译错误与上述更改。但是,您声明了信号s,但没有使用。并且,您没有声明s0,s1等,但是您正在使用它们。这是有效的,因为Verilog允许您使用未声明的电线时,他们是1位宽。但是,你应该声明所有的信号。例如,可以使用:

wire [9:0] s;
assign s[0] = (~A[1] & ~A[0] & ~B[1] & ~B[0]);
assign s[1] = (~A[1] & A[0] & ~B[1] & B[0]);