我有幅值比较器4位Verilog代码,输出错误
我有Verilog代码:4位幅度比较器。 我不知道怎么了。 我的输出没有(a大于b)和(a小于b)。 我的错在哪里我有幅值比较器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]&
`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