无符号比较器

 无符号比较器
无符号比较器,需要比较两边信号均为无符号类型,同时如果位宽不匹配,需要扩展位宽进行匹配,对于无符号数,扩展位补0即可。当然,Synposys,推荐的时候,在定义信号时,把信号符号类型定义清楚,默认定位为无符号,可以不作位宽匹配,工具自动优化。不过本人还是建议,按照位宽扩位方式进行代码编写,一个是电路表达最清晰和可控,不依赖于工具的理解,因为可能synopsys综合最优,但可能FPGA综合就有问题,二个是,作工具语法检查,可以省去很多位宽不匹配的Warning的检查,防止Warning过多,检查疏忽,反而把真正有位宽匹配的问题漏掉。

个人推荐无符号比较器 Verilog写法:
       localparam   A_WIDTH;
       localparam   B_WIDTH;
      
       reg [A_WIDTH-1:0]  a;  // Default declaration type is unsigned
       reg [B_WIDTH-1:0]  b;  // Default declaration type is unsigned
   
       reg                          c;
      // A_WIDTH is bigger than B_WIDTH
      always @(*) begin
            if (a > {{(A_WIDTH-B_WIDTH){1'b0}},b}) begin
                  c = 1'b1;
            end
            else begin
                 c = 1'b0;
            end
      end

sysnopsys 推荐写法:
       localparam   A_WIDTH;
       localparam   B_WIDTH;
      
       reg unsigned [A_WIDTH-1:0]  a;  // Default declaration type is unsigned
       reg unsigned [B_WIDTH-1:0]  b;  // Default declaration type is unsigned
   
       reg                          c;
      // A_WIDTH is bigger than B_WIDTH
      always @(*) begin
            if (a > b) begin
                  c = 1'b1;
            end
            else begin
                 c = 1'b0;
            end
      end
posted @ 2023-03-04 17:18  大块头  阅读(80)  评论(0编辑  收藏  举报