我有幅值比较器4位Verilog代码,输出错误

我有幅值比较器4位Verilog代码,输出错误,verilog,Verilog,我有Verilog代码:4位幅度比较器。 我不知道怎么了。 我的输出没有(a大于b)和(a小于b)。 我的错在哪里 `timescale 1ns/1ns module magnitudecomparator(agtb,altb,aeqb,a,b); input [3:0]a,b; output agtb,altb,aeqb; wire [3:0]x; assign x=!(a^b); assign agtb=(a[3]&(!b[3]))|(x[3]&a[2]&

我有Verilog代码:4位幅度比较器。 我不知道怎么了。 我的输出没有(a大于b)和(a小于b)。 我的错在哪里

`timescale 1ns/1ns
module magnitudecomparator(agtb,altb,aeqb,a,b);
  input [3:0]a,b;
 output agtb,altb,aeqb;
 wire [3:0]x;

 assign x=!(a^b);
 assign agtb=(a[3]&(!b[3]))|(x[3]&a[2]&(!b[2]))|(x[3]&x[2]&a[1]&(!b[1]))|(x[3]&x[2]&x[1]&a[0]&(!b[0]));
assign altb=((!a[3])&b[3])|(x[3]&(!a[2])&b[2])|(x[3]&x[2]&(!a[1])&b[1])|(x[3]&x[2]&x[1]&(!a[0])&b[0]);
assign aeqb=x[3]&x[2]&x[1]&x[0];
endmodule



`timescale 1ns/1ns
module testmagnitudecomparator;
 reg a,b;
 wire agtb,aeqb,altb;
 magnitudecomparator m0(agtb,altb,aeqb,a,b);
 initial
  begin
   #10 a=4'b0110;b=4'b1110;
   #20 a=4'b1101;b=4'b0111;
   #30 a=4'b1011;b=4'b1011;

 end
initial
$monitor($time, "THE VALUE OF INPUT  IS a=%b ,b=%b AND OUTPUT IS agtb=%b ,aeqb=%b ,altb=%b",a,b,agtb,aeqb,altb);
endmodule 

在测试台上,您将1位信号连接到4位端口。 在
testmagnityComparator
模块中,更改:

 reg a,b;
致:

此外,您还可以简化代码:

assign agtb = (a >  b);
assign altb = (a <  b);
assign aeqb = (a == b);
assign agtb=(a>b);
分配altb=(a
或者您也可以通过使用
if
else
语句来使用行为代码

always@(*)
  begin
     if(a>b)
       agtb=1'b1;
     else if(a<b)
       altb=1'b1;
     else
       aeqb=q'b1;
  end
始终@(*)
开始
如果(a>b)
agtb=1'b1;

else if(使用3个单独的assign语句)更简单,并且在合成时将避免潜在的不需要的锁存。
always@(*)
  begin
     if(a>b)
       agtb=1'b1;
     else if(a<b)
       altb=1'b1;
     else
       aeqb=q'b1;
  end