32ビットの2の補数があり、2つの数値が等しいことを知る最も簡単な方法を知りたい場合、これを知るための最速のビット演算子は何でしょうか。私は両方の数値を排他的論理和することを知っており、結果がゼロであるかどうかを確認します...他のものはありますか?
数値が0より大きい場合はどうですか?31番目のビットをチェックして0以上かどうかを確認できますが、bgtzはどうですか?
32ビットの2の補数があり、2つの数値が等しいことを知る最も簡単な方法を知りたい場合、これを知るための最速のビット演算子は何でしょうか。私は両方の数値を排他的論理和することを知っており、結果がゼロであるかどうかを確認します...他のものはありますか?
数値が0より大きい場合はどうですか?31番目のビットをチェックして0以上かどうかを確認できますが、bgtzはどうですか?
あなたのコメントに反して、'=='は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ゲートに合成されます。
// 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
xorを実行して結果をゼロと比較できる場合は、結果をある値と比較できます。何かを値と比較できる場合は、xorと32ビットのゼロを使用せずに2つの値を比較できます。