Verilog 两位幅度比较器
Verilog Two bit Magnitude comparator
我正在尝试编写两位比较器的 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]);
我正在尝试编写两位比较器的 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]);