无符号比较器
无符号比较器,需要比较两边信号均为无符号类型,同时如果位宽不匹配,需要扩展位宽进行匹配,对于无符号数,扩展位补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