3

如果我有一个 32 位二进制补码并且我想知道知道两个数字相等的最简单方法是什么……知道这一点的最快按位运算符是什么?我知道对这两个数字进行异或并检查结果是否为零效果很好……还有其他的吗?

如果一个数字大于0怎么办?我可以检查第 31 位,看看它是否大于或等于 0..但是 bgtz 怎么样?

4

3 回答 3

9

与您的评论相反,'==' 是 Verilog 的一部分,除非我今晚的记忆力比平时差很多,否则它应该合成得很好。例如,您可以编写如下内容:

// warning: untested, incomplete and utterly useless in any case.
// It's been a while since I wrote much Verilog, so my syntax is probably a bit off
// anyway (might well be more like VHDL than it should be).
//
module add_when_equal(clock, a, b, x, y, z);
input clock;
input [31:0] a, b, x, y;
output [31:0] z;
reg [31:0] a, b, x, y, z;

always begin: main
   @(posedge clock);
   if (a == b)
       z <= x + y;
end
endmodule;

Verilog 还支持您通常期望的其他比较运算符(!=、<= 等)。合成器相当“智能”,因此x != 0通常会合成到 N 输入 OR 门而不是比较器。

于 2010-05-06T04:23:01.277 回答
1
// this should work as comparator for Equality
wire [31:0] Cmp1, Cmp2;
wire Equal;
assign Equal  =  &{Cmp1 ~^ Cmp2}; // using XNOR
assign Equal  = ~|{Cmp1  ^ Cmp2}; // using XOR
于 2010-07-30T09:58:03.257 回答
0

如果您可以异或然后将结果与零进行比较,那么您可以将结果与某个值进行比较,如果您可以将某个值与某个值进行比较,那么您可以在不使用异或和 32 位零的情况下比较这两个值。

于 2010-05-07T19:53:42.310 回答