私は数日前にVerilogを学びました。
私はそれについて理解していますが、ゲートレベルで2つの符号なし4ビット数を比較するときにどちらが大きいかを知る方法がわかりません。
アルゴリズムについてのヒントを教えてください。
事前にThx
私は数日前にVerilogを学びました。
私はそれについて理解していますが、ゲートレベルで2つの符号なし4ビット数を比較するときにどちらが大きいかを知る方法がわかりません。
アルゴリズムについてのヒントを教えてください。
事前にThx
以下に示すように、2つのヌーバーをビットa1..a4とb1..b4で定義されるaとbとします。
a= a1*8+a2*4+a3*2+a1
b= b1*8+b2*4+b3*2+b1
結果:
c result (c==true iff a>b)
cの論理式:(&はandを意味し、|はorを意味し、!はnotを意味します)
c=(a1 & !b1) |
(!(a1 xor b1) & (a2 & !b2)) |
(!(a1 xor b1) & (!(a2 xor b2) (a3 & !b3)) |
(!(a1 xor b1) & (!(a2 xor b2) & (!(a3 xor b3) (a4 & !b4))
[これは同等性をチェックせず、a>bの場合にのみ表示されます]
式の部分の説明:
aの最上位ビットが設定されているが、bの最上位ビットが設定されていない場合、=>a>b
(a1 & !b1)
最上位ビットが同じであるが、aの2番目に上位のビットが設定されているが、bの2番目に上位のビットが設定されていない場合=>a>b
(!(a1 xor b1) & (a2 & !b2))
上位2ビットが等しいが、aの3番目に高いビットが設定されているが、bの3番目に高いビットではない場合=>a>b
(!(a1 xor b1) & (!(a2 xor b2) (a3 & !b3))
上位3ビットが等しいが、aの下位ビットが設定されているが、bの下位ビットが設定されていない場合=> a>b
(!(a1 xor b1) & (!(a2 xor b2) & (!(a3 xor b3)
Ps
このような小さな数値の場合、8ビットのアドレスと1ビットの出力を備えたROMを使用することもできます。このROMには、aとbのすべての可能な値に対する回答が含まれています。