微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于求最大值的程序求助

关于求最大值的程序求助

时间: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,不知道怎么回事!

最高位是符号位

逻辑有问题。同正以及同负的情况检测有问题。
一正一负 这个条件 (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)])
因为你想两者一正一负的时候输出正吧,那你应该在两个数异号时判断最高位

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top