8

私はこのプロジェクトを以下で聞いていますが、どこから始めればよいかわかりません。誰かが私にいくつかの指針を与えるか、これを開始する正しい方向に私を向けることができますか? ありがとう!!

入力: A、B = 8 進数 (以下の表現を参照)。Cin = 2 進数

出力: S = 8 進数 (以下の表現を参照)。Cout = 2 進数

タスク: 2 進 FA を使用して、8 進 FA として機能する回路を設計します。より具体的には、この回路は 2 つの 8 進数 A、B を入力し、それらを 2 進数に変換し、2 進数の FA のみを使用してそれらを加算し、2 進数の結果を 8 進数に戻し、合計を 8 進数として出力し、2 進数を実行します。 .

8 進数の入力/出力バイナリ表現

すべての 8 進数は、次の 8 ビット 2 進数表現を使用して表されます。

8 進 8 ビット入力ライン:

桁: 0 1 2 3 4 5 6 7
0 1 0 0 0 0 0
1 0 1 0 0 0 0 0
2 0 0 1 0 0 0 0 0
3 0 0 0 1 0 0 0
4 0 0 0 0 1 0 0 0
5 0 0 0 0 1 0 0
6 0 0 0 0 0 1 0
7 0 0 0 0 0 0 1

構造化された方法で回路を設計する必要があります。

4

3 に答える 3

11

わかりました。基本的には、8 対 3 のエンコーダーと 3 対 8 のデコーダーを設計するよう求められています。一緒に働くFAが与えられているので、それは任務のポイントではありません。

まず、エンコーダーとデコーダーがどのように機能するかを定義する必要があります。したがって、真理値表を作成します。

エンコーダー:

Input    | Output
01234567 | 421
-----------------
10000000 | 000
01000000 | 001
00100000 | 010
00010000 | 011
00001000 | 100
00000100 | 101
00000010 | 110
00000001 | 111

デコーダーはその逆です。

次に、エンコーダをどのように構築しますか? まあ、一度に1ビットずつ攻撃するだけです。

したがって、入力ビット 1、3、5、または 7 が設定されている場合は 1 の桁であり、それ以外の場合は 0 です。したがって、1、3、5、および 7 に接続された 4 つの入力を持つ巨大な OR が必要です。

2 桁の場合、OR ゲートを 2、3、6、7 に接続する必要があります。最後に、4 桁のゲートを 4、5、6、7 に接続します。これは、余分なビットが存在しないことを確認するためのエラー チェックを行いません。設定していません。ただし、その場合の動作は仕様で定義されていないようなので、おそらく問題ありません。

次に、3 つの行を取得して加算器に供給します。これは簡単なので立ち入りません。

最後に、デコーダーが必要です。これは、エンコーダーよりも少しトリッキーです。

デコーダの真理値表を見てみましょう:

Input | Output
421   | 01234567 
----------------
000   | 10000000
001   | 01000000
010   | 00100000
011   | 00010000
100   | 00001000
101   | 00000100
110   | 00000010
111   | 00000001

今回は 3 or ゲートだけで終わりではありません。

これを C ライクなコードで書き留めてみましょう。

if (!input[0] && !input[1] && !input[2])
  output[0] = 1
if (input[0]  && !input[1] && !input[2])
  output[1] = 1
if (!input[0] && input[1]  && !input[2])
  output[2] = 1
if (input[0]  && input[1]  && !input[2])
  output[3] = 1
if (!input[0] && !input[1] && input[2])
  output[4] = 1
if (input[0]  && !input[1] && input[2])
  output[5] = 1
if (!input[0] && input[1]  && input[2])
  output[6] = 1
if (input[0]  && input[1]  && input[2])
  output[7] = 1

というわけで、3入力のANDゲートを8つ、NOTゲートを3つ使うことになりそうです!

これはもう少し複雑なので、実装例を作成しました。

3対8のデコーダ

于 2012-05-19T08:43:52.600 に答える
5

クラスで手動で変換する場合は、次の方法を試すことができます。

8 進数から 2 進数への変換:

8 進数を 2 進数に変換するには、各 8 進数をその 2 進数表現に置き換えます。例: 518 をバイナリに変換: 58 = 1012 18 = 0012 したがって、518 = 101 0012.

2 進数から 8 進数への変換:

このプロセスは、前のアルゴリズムの逆です。2 進数は、小数点 (存在する場合) または最後の桁から始まり、左と右に進む 3 でグループ化されます。必要に応じて、先頭の 0 (または小数点の右側の末尾のゼロ) を追加して、最後の 3 つのグループを埋めます。次に、各トリオを同等の 8 進数に置き換えます。

例: 2 進数 1010111100 を 8 進数に変換します。 (先行ゼロを 2 つ追加すると、数値は 001010111100 になります) 001 = 1、010 = 2、111 = 7、100 = 4 したがって、1010111100 = 1274

于 2012-05-18T06:40:49.040 に答える
4

8進数との間で変換するには、エンコーダーとデコーダーのペア(http://www.asic-world.com/digital/combo3.html)を使用できます。3ビット加算器は、3つのFAをチェーンすることで作成できます。

于 2012-05-16T20:47:14.387 に答える