- バイナリ減算器の定義と概要
- ハーフ減算器
- 完全減算器
- Nビット減算器
- バイナリ減算器のアプリケーション
- VHDL ハーフサブトラクタとフルサブトラクタの実装
定義
減算器は、XNUMXつの数値を減算し、結果を生成するデバイスです。 デジタルまたはバイナリ減算器は、XNUMX進数の減算を処理するものです。
デジタルデバイスまたはデジタルコンピュータ内のデジタル計算には、バイナリ減算器が必要です。 符号なしXNUMX進数を減算する最も便利な方法は、補数の方法です。 バイナリ減算にはルールがあります。
バイナリ減算ルールは次のように記述されます。 ここで、0はロジックロー、XNUMXはロジックハイです。 AとBはXNUMXつの入力です。
A | B | Y = A – B |
0 | 0 | 0 |
0 | 1 | 1(借りる1) |
1 | 0 | 1 |
1 | 1 | 0 |
減算演算の例:
1101 – 1011
1101
- 1011 XNUMX
= 0010
だから、答えは0010です
補数の方法は、代わりにバイナリ減算器のバイナリ減算を実行することができます。 一般的に使用される補数法にはXNUMXつのタイプがあります。
A.1の補数
B.2の補数
1の補数を実行する手順:
- 減算される数の1の補数を見つけます。
- これで、減算が必要な数に1の補数が追加されます。
- ステップ2での追加の結果のうち、最後の位置にキャリーがXNUMXつある場合、キャリアが削除され、キャリーなしで製品に追加されて、最終結果が得られます。
例を見てみましょう– 1101 – 1011
1の1011の補数= 0100
ここで、1101と0100を追加します
1101
+ 0100
= 1 0001
ご覧のとおり、キャリーとしてXNUMXつあるので、キャリーを削除して再度追加すると、得られた結果が得られます。
0001
+ 1
= 0010
だから、減算への答えは0010です
2の補数法の場合
- 2の補数を計算します。
- 補数に別の番号が追加されました。
- キャリーは拒否されます。
例を見てみましょう– 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つの出力は、ボロービットを示しています。

半減算真理値表
ハーフバイナリ減算器の動作を次の真理値表に示します。
A | B | 差異 | かりて |
0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 |
ハーフサブトラクタ回路
真理値表から、最初の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。 完全な減算器は、各ステージの借用を処理するように設計されています。 これが、注文全体が、借用を実行することによる半分の減算器の欠点を克服する方法です。
完全な減算器の真理値表
Xi | Yi | BI-1 | Di | Bi |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 0 |
1 | 1 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 |
フルサブトラクタ回路
差= 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

回路図が示すように、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';
もしも
最終過程;
行動を終了します。