バイナリ減算器に関する7つの事実:ハーフおよびフル減算器

  • バイナリ減算器の定義と概要
  • ハーフ減算器
  • 完全減算器
  • Nビット減算器
  • バイナリ減算器のアプリケーション
  • VHDL ハーフサブトラクタとフルサブトラクタの実装

定義

減算器は、XNUMXつの数値を減算し、結果を生成するデバイスです。 デジタルまたはバイナリ減算器は、XNUMX進数の減算を処理するものです。

デジタルデバイスまたはデジタルコンピュータ内のデジタル計算には、バイナリ減算器が必要です。 符号なしXNUMX進数を減算する最も便利な方法は、補数の方法です。 バイナリ減算にはルールがあります。

バイナリ減算ルールは次のように記述されます。 ここで、0はロジックロー、XNUMXはロジックハイです。 AとBはXNUMXつの入力です。

ABY = A – B
000
011(借りる1)
101
110
バイナリ減算真理値表

減算演算の例:

1101 – 1011

1101

- 1011 XNUMX

= 0010

だから、答えは0010です

補数の方法は、代わりにバイナリ減算器のバイナリ減算を実行することができます。 一般的に使用される補数法にはXNUMXつのタイプがあります。

A.1の補数

B.2の補数

1の補数を実行する手順:

  1. 減算される数の1の補数を見つけます。
  2. これで、減算が必要な数に1の補数が追加されます。
  3. ステップ2での追加の結果のうち、最後の位置にキャリーがXNUMXつある場合、キャリアが削除され、キャリーなしで製品に追加されて、最終結果が得られます。

例を見てみましょう– 1101 – 1011

1の1011の補数= 0100

ここで、1101と0100を追加します

1101

 + 0100

 = 1 0001

ご覧のとおり、キャリーとしてXNUMXつあるので、キャリーを削除して再度追加すると、得られた結果が得られます。

0001

+ 1

= 0010

だから、減算への答えは0010です

2の補数法の場合

  1. 2の補数を計算します。
  2. 補数に別の番号が追加されました。
  3. キャリーは拒否されます。

例を見てみましょう– 1101 – 1011

任意の数の2の補数は、1の補数を実行し、それに1を加算することによって計算されます。

2の補数

ここで、1101と0100を追加します

1101 + 0100 = 1 0001

ご覧のとおり、キャリーとしてXNUMXつあるので、キャリーを削除して再度追加すると、得られた結果が得られます。

0001 + 1 = 0010

だから、減算への答えは0010です

デジタルコンピュータは、キャリーが少なくて済むため、計算に2の補数法を使用します。

9進法の補数法は、10とXNUMXの補数法として知られています。

さまざまなデジタル回路がこの減算演算を実装しています。 彼らです -

  • ハーフ減算器
  • 完全減算器

バイナリ減算器は、加算演算を実行するだけでなく、デジタルアプリケーションでも使用されます。 値のデコードとエンコード、インデックスの計算は、そのアプリケーションのいくつかです。

ハーフサブトラクタ

ハーフバイナリ減算器は、XNUMXビットのデータを減算して結果を生成するバイナリ減算器です。 デジタルロジック値を供給するためのXNUMXつの入力側と、操作の影響を受けるXNUMXつの出力があります。 結果はXNUMX桁で表示できます。 作品は、減算された個々の数字と同じ意味を持つ減算の数を示しています。 もうXNUMXつの出力は、ボロービットを示しています。

NANDゲートの実装。 画像クレジット– ニチアナビギャンNANDを使用したハーフサブトラクタCC BY-SA 4.0

半減算真理値表

ハーフバイナリ減算器の動作を次の真理値表に示します。

AB差異かりて
0000
0111
1010
1100
ハーフバイナリ減算器の真理値表

ハーフサブトラクタ回路

真理値表から、最初の1行はXNUMX桁の数字を使用して結果を表すことができると結論付けることができます。 XNUMX行目では、XNUMXとして借用しているため、XNUMXつの数字を使用して作業を説明しています。

差= A'B + AB '

借りる= A'B 

そう、

差= A XOR B

借りる= A'AND B

ロジックを実装するには、XNUMXつのXORゲート、XNUMXつのNOTゲート、およびXNUMXつのANDゲートが必要です。 XORゲート、NOTゲート、ANDゲートは、NANDやNORなどのユニバーサルゲートを使用して作成することもできます。 したがって、半減算器はユニバーサルゲートのみを使用して設計できます。

次の画像は、AとBを入力として、Dを差として、Cを借用として示しています。

ハーフバイナリ減算器
ハーフ減算器

完全減算器

フルバイナリ減算器は、バイナリ減算演算の結果を提供する別の種類のバイナリ減算器です。 最下位桁を除いてXNUMXつのXNUMX進数を減算すると、Bとしての借用があります。I-1 Bとして借りるi。 完全な減算器は、各ステージの借用を処理するように設計されています。 これが、注文全体が、借用を実行することによる半分の減算器の欠点を克服する方法です。

完全な減算器の真理値表

XiYiBI-1DiBi
00000
00111
01011
01101
10010
10100
11000
11111
完全な減算器の真理値表

フルサブトラクタ回路

差= A'B 'Bin + AB'Bin′+ A′BBin′+ ABBin 

借りる= A'Bin + A'B + BBin 

論理ゲートを使用して式を実装するには、単語をさらに単純化する必要があります。

差= A'B 'Bin + AB'Bin′+ A′BBin′+ ABBin 

 または、差= Bin (A'B '+ AB)+ Bin ′(AB′ + A′B)

 または、差= Bin (A XNOR B)+ Bin ′(A XOR B)

 または、差= Bin (A XOR B) ′+ Bin ′(A XOR B)

 または、差= Bin XOR(A XOR B)

  または、差=(A XOR B)XORビン

借りる= A'B 'Bin + AB'Bin′+ A′BBin′+ ABBin 

 または、借入= A'B 'Bin + A'BBin ′+ A′BBin + A'BBin + A'BBin + ABビン

 または、借入= A'Bin (B + B ')+ A'B(Bin + Bin ′)+ BBin (A + A ')

 または、借入= A'Bin + A'B + BBin

式は別の方法で書くことができます–

試合= A'B 'ビン+ A'Bビン' + A'Bビン+ ABビン     

    または、借入=ビン(AB + A'B ')+ A'B(ビン+ビン')

     または、Borrow = Bin(A XNOR B)+ A'B

    または、借入=ビン(A XOR B) '+ A'B

完全減算器、X、Y、Zが入力されます

回路図が示すように、A、B、およびBインチ この回路は、差分出力としてXNUMXつの出力を提供し、出力を借用します。 Bin 入力Aに借用がある場合は常に1に設定されます。Bin 次に、AとYから減算されます。

一般式は、D = A – B –Bと書くことができます。in +2B不足しています。

フルサブトラクタは、ハーフサブトラクタを使用して実装することもできます。

ハーフ減算器を使用したフル減算器

Nビット減算器

シングルビットのバイナリ減算器では、1ビットの減算しか実行できません。 nビットの減算を実行する必要がある場合は、ビットバイナリ減算器が必要です。 nビット減算器は、カスケード形式の減算器を使用して同様に実装できます。

減算器のアプリケーション

  • 減算器は、加算器とともに使用されることがよくあります。 回路に加算器が必要な場合は常に、減算器も必要です。
  • 計算を担当し、内部にとどまるALU マイクロプロセッサ、減算器も必要です。 CPUは、動作のために減算器も必要とします。
  • マイクロコントローラーは、デジタル計算を実行するために減算器も使用します。
  • 減算器は、デジタル信号処理ドメインでも使用されます。
  • デジタルコンピュータは多くの減算器を使用します。

ハーフサブトラクタとフルサブトラクタのVHDL実装

ハーフサブトラクタデータフローモデリング

ライブラリIEEE;

IEEE.STD_LOGIC_1164.ALLを使用します。

エンティティENTITY_NAMEは

    ポート(A:STD_LOGIC内;

           B:STD_LOGIC内;

           IB:STD_LOGIC内;

           差分:STD_LOGICを出力;

           Borr:out STD_LOGIC);

ENTITY_NAMEを終了します。

アーキテクチャデータフロー

ENTITY_NAMEのアーキテクチャデータフローは

始まる

差分<=(A xor B)xor IB;

Borr <=((Aではない)および(BまたはIB))または(BおよびIB);

データフローを終了します。

完全な減算器データフローモデリング

エンティティENTITY_NAMEは

    ポート(A:STD_LOGIC内;

           B:STD_LOGIC内;

           IB:STD_LOGIC内;

           Borr:アウトSTD_LOGIC;

           差分:STD_LOGICを出力);

ENTITY_NAMEを終了します。

アーキテクチャデータフロー

ENTITY_NAMEのアーキテクチャの動作は

始まる

プロセス(A、B、IB)

始まる

if(A = '0' and B = '0' and IB = '0')then

Diff <= '0';

Borr <= '0';

elsif(A = '0' and B = '0' and IB = '1')then

Borr <= '1';

Diff <= '1';

elsif(A = '0' and B = '1' and IB = '0')then

Borr <= '1';

Diff <= '1';

elsif(A = '0' and B = '1' and IB = '1')then

Borr <= '0';

Diff <= '1';

elsif(A = '1' and B = '0' and IB = '0')then

Borr <= '1';

Diff <= '0';

elsif(A = '1' and B = '0' and IB = '1')then

Borr <= '0';

Diff <= '0';

elsif(A = '1' and B = '1' and IB = '0')then

Borr <= '0';

Diff <= '0';

ほかに

Borr <= '1';

Diff <= '1';

もしも

最終過程;

行動を終了します。

上へスクロール