减法需要的资源是否比 verilog 中的比较符号少?

Does subtraction need less resource than comparison symbol in verilog?

我在做一个项目,我对以前一个高级工程师写的verilog代码感到困惑,他现在不在公司所以我想知道他为什么这样写比较:

subtractor #(41) sub_sum(expiredSum, {1'b0,dataRead[39:0]}, {1'b0,timeStandard}); 
assign expiredD = expiredSum[40];//goes high when dataRead>timeStandard

这样做有什么好处?为什么他不直接做 expiredD == (dataRead < timeStandard); 我认为这是一种更常见的方式。

module subtractor( c, a, b );

parameter WIDTH = 1;

input [WIDTH-1:0] a;
input [WIDTH-1:0] b;

output [WIDTH-1:0] c;

assign c = a - b;

endmodule

提前致谢

在我的职业生涯中,我 运行 遇到过几次此类问题。即使原来的工程师有空,也很难弄清楚为什么在后面的几个项目中做了某事。

通常,根本原因与标准单元库或合成器的时序 and/or 区域挑战有关。在您的具体情况下,看起来 40 位比较器的效率低于使用强制 41 位减法器。这可能仍然是真的。

你应该尝试综合和时序分析。不管结果如何,在代码中添加更多有意义的注释来解释合理性,这样在代码审查期间以及以后继承代码的人都有意义。即使这次比较器效率更高。下一个技术节点或 fpga 目标可能会再次不同。最好两者都有,其中一个被注释掉,好的评论解释它。