プロセッサを構成するのに必要な回路

これは、主に、論理回路や実験2ハードウェアをまじめにやっていなかった人への軽い参考資料です。 ただし、ちょっとしたTipsも入っているので、まじめにやった人も目を通しておくと良いと思います。 あと、あくまでも軽い参考資料なので、詳しく調べたい場合はちゃんと 教科書を使って復習すること。

以下の説明は基本的に1ビットの回路を記述してあります。


マルチプレクサ

回路図
AND-ORによる実現
マルチプレクサ1
3状態バッファによる実現
マルチプレクサ2
備考
この回路図は、2入力1出力のマルチプレクサであり、 Sの内容に応じて、A,Bのどちらをoutに出力するかを選択する回路である。 この実装では、Sが0の時にAの内容がoutに出力され、 Sが1の時にBの内容がoutに出力される。
図にはAND-ORを使った組み合わせ回路と 3状態バッファを使った実現例があるが、 どちらでも容易に3入力1出力,4入力1出力,...に拡張できる。
なお、マルチプレクサとは逆に、1つの信号を 複数の出力のうちの1つに選択的に出力する回路は デマルチプレクサと呼ばれる。 こちらの回路図は、マルチプレクサの構成が理解できていれば すぐに思い付くと思うので、特に記載しない。

デコーダ(例:3-8デコーダ)

回路図
3-8デコーダ
備考
nビットの2進数で表された値に従い、n個の信号線のうちの 1本を選択してアサートしたい場合がある。 プロセッサの構成要素の中では、レジスタ・ファイルの中から 1つのレジスタを指定する場合などにこのような必要が出てくる。
このような場合、図のようなデコーダと呼ばれる回路を構成する。 図は、3ビットの2進数A[2..0]に従い、8本の信号線から 1本の選択してアサートする回路である。 これを3-8デコーダと呼ぶ。 入力線の数とANDへの入力数を変化させることにより、 n-(2^n)デコーダを構成できる。
なお、デコーダとは逆に、n本の入力のうちの1本がアサートされた時、 アサートされた入力の番号をlog_nビットで返す回路はエンコーダと呼ぶ。

符号拡張(例:8ビットから16ビットの符号拡張)

回路図
8ビットから16ビットへの符号拡張
備考
nビットの符号付き整数をmビットの符号付き整数(m>n)に変換する時、 2進数で表現したnビットの符号付き整数のさらに上位に(m-n)個の 0を追加するのは正しくない。 これを、一般的なプロセッサ用いられている符号付き整数の表現 である2の補数表現のもとで例をあげて説明する。
まず、8ビットの符号付き整数
11111101
をがあるとする。これを10進数に直すと「-3」となる。 これを先程説明した問題のある方法で16ビットにすると
0000000011111101
となる。これは10進数では「+253」であり、 元の数値から変わってしまう。
このような場合、元のビット列の符号ビット(最上位ビット)を 使って(m-n)ビット目を埋めれば問題はなくなる。 これを符号拡張と呼ぶ。上記の例を符号拡張すると
1111111111111101
となり、「-3」という値を維持できる。

フェーズ・カウンタ

回路図
フェーズ・カウンタ
備考
以下の図のように、クロック信号からフェーズを示すパルスを生成し、 プロセッサの制御部の組み合わせ論理回路の入力とすれば、 制御部から出力する信号線の論理関数の記述が多少楽になる。
この回路は左の図のようになる。なお、resetはp1を1、それ以外を0という 初期状態にするための信号である。左の図では、resetを信号線へのAND/ORの 付加で実現しているが、プリセット/クリア機能がついたD-フリップフロップを 使用すれば、そのプリセット/クリア機能を用いてより簡単に実現できる。
(注: この回路は未完成で、このままではこの波形は出ません。また、更にクロックとフェーズ信号の論理積をとった信号を作っておくと便利かも知れません。)
なお、実際に実装する場合、図の構成では タイミング違反が発生する可能性があるため、 Dフリップ・フロップをマスタ/スレーブ構成にするなどの 工夫をすること。 (注: クロック信号、フェーズ信号に遅延が生じるため、この図のように同時に立ち上がり/立ち下がりが起こることは期待できません。)

フェーズを示すパルス

Last modified: 2014/4/18 10:50