关于求最大值的程序求助
时间:10-02
整理:3721RD
点击:
module Verilog2(a,b,c);
input wire [(DATA_WIDTH-1):0] a,b;
output wire [(DATA_WIDTH-1):0] c;
parameter DATA_WIDTH = 12;
wire [(DATA_WIDTH-1):0] x1;
wire [(DATA_WIDTH-1):0] x2;
reg [(DATA_WIDTH-1):0]cmp2max;
assign x1 = a;
assign x2 = b;
always @*
begin
if (x1[(DATA_WIDTH-1)] || x2[(DATA_WIDTH-1)])//both are negative or positive
begin
if (x1[(DATA_WIDTH-1)])
cmp2max = x2;
else
cmp2max = x1;
end
else
begin
if (x1[(DATA_WIDTH-2):0] > x2[(DATA_WIDTH-2):0])
cmp2max = x1;
else
cmp2max = x2;
end
end
assign c =cmp2max;
endmodule
程序是实现两个二进制数的比较,当正数的时候和负数的时候,可是输出的结果总是x2,不知道怎么回事!
input wire [(DATA_WIDTH-1):0] a,b;
output wire [(DATA_WIDTH-1):0] c;
parameter DATA_WIDTH = 12;
wire [(DATA_WIDTH-1):0] x1;
wire [(DATA_WIDTH-1):0] x2;
reg [(DATA_WIDTH-1):0]cmp2max;
assign x1 = a;
assign x2 = b;
always @*
begin
if (x1[(DATA_WIDTH-1)] || x2[(DATA_WIDTH-1)])//both are negative or positive
begin
if (x1[(DATA_WIDTH-1)])
cmp2max = x2;
else
cmp2max = x1;
end
else
begin
if (x1[(DATA_WIDTH-2):0] > x2[(DATA_WIDTH-2):0])
cmp2max = x1;
else
cmp2max = x2;
end
end
assign c =cmp2max;
endmodule
程序是实现两个二进制数的比较,当正数的时候和负数的时候,可是输出的结果总是x2,不知道怎么回事!
最高位是符号位
逻辑有问题。同正以及同负的情况检测有问题。
一正一负 这个条件 (x1[(DATA_WIDTH-1)] || x2[(DATA_WIDTH-1)])也会成立的!
if (x1[(DATA_WIDTH-1)] || x2[(DATA_WIDTH-1)])改成
if (x1[(DATA_WIDTH-1)] ^ x2[(DATA_WIDTH-1)])
因为你想两者一正一负的时候输出正吧,那你应该在两个数异号时判断最高位
