MYマイコンを作る(3)
    COMETUの構造を考る

 MYマイコンを作る(2)でCOMETUの全命令の内部動作をステップに分けて考えて、順序操作が同じ命令をグループ化した。又、命令実行に必要なレジスタがわかった。

 ここでは、COMETUの全命令の機能を実現する内部構成(ブロック図)を考えましょう。


◆命令実行に必要な順序操作、演算操作、レジスタを纏めます

●「命令の内部動作をステップに分けて考えた」ことを、ここに纏めておきます。

●演算操作を纏めます。
●命令実行に必要なレジスタを纏めてレジスタ名を付けます。








内部構成(ブロック図)

●これまでに纏めた内容をそのまま内部構成(ブロック図)にすると次のようになりました。



 マルチプレクサが多いですね。例えば、主記憶の Data In に GR0 〜 GR7,PR,MDR,TMP を接続しています。間違いではないのですが、最適な構成かどうか!

 今回使う予定のアルテラのFPGAの基本論理ブロック(LE)は、4入力1出力のルックアップテーブルと一つのレジスタで構成されています。マルチプレクサは、4入力1出力のルックアップテーブルを使って作られます。4入力1出力のルックアップテーブルでは、データ入力に2つ、切換信号に1つ、空きが1つの配分になります。
 すなわち、2ビットのマルチプレクサを作るため、一つの基本論理ブロック(LE)を使います。3ビットでは2つ、4ビットでは3つです。モッタイナイ!プログラマブルデバイスの宿命か。


●演算回路(ALU)の構成を次に示します。
 シフト回路は16ビット入力1出力のマルチプレクサが16組で構成されます。参考図が書き難いので省略します。
 A,Bから出力の矢印は、そのままのルートでLD命令等に使います。




●構成の図を見ながら、命令の内部動作をステップに分けて追っかける

 一例として ADDA r,adr,x 命令を見ます。
 太字が追記部分

ステップ ADDA r,adr,x 命令の内部動作
・プログラムレジスタ PR の内容をアドレスとしてメモリから命令を読み出してインストラクションレジスタ IR に設定する。
 PR の内容を MEM の Address In に入力してメモリを読み出す。読み出したメモリの内容は Data Out に出力されるので IR に設定する。
・命令を解析すると2語命令なので次ステップは2語目の命令の読み出しと判断する。
  MEM の Data Out に出力された命令を1語命令かデコードする。
・プログラムレジスタ PRの内容を +1 する。

 PRの +1 入力から  PRを +1 した値を PRに設定する。
・プログラムレジスタ PR の内容をアドレスとしてメモリから命令を読み出して2語目のインストラクションレジスタ IR2 に設定する。
 ステップ1と同様。
・命令を2語読み出したので次ステップは命令の実行と判断する。
 ステップ1と同様 2語命令をデコードする。
・プログラムレジスタ PRの内容を +1 する。

 ステップ1と同様。
・インストラクションレジスタ IR の命令が ADDA r,adr,x なので x が指定するレジスタの内容の値とadr を加算して実効アドレスを計算する。計算値は保持するそ。
  IR の x が指定するレジスタを汎用レジスタから読み出し ALUの入力Bに入れる。IR2 に有る adr をALUの入力Aに入れ加算する。結果を TMP に設定する。
・実効アドレスで指定するメモリのアドレスを読み出す。
 TMP の内容を MEM の Address In に入力してメモリを読み出す。読み出したメモリの内容は Data Out に出力されるので MDR に設定する。
メモリから読み出した実効アドレスの内容と r が指定するレジスタの内容を算術加算する。その結果を r が指定するレジスタに設定する。
  MDR の内容を ALUの入力Bに入れる。IR の r が指定するレジスタを汎用レジスタから読み出し ALUの入力Aに入れ加算する。結果を r が指定するレジスタに設定する。
・フラッグレジスタ FR に演算結果に従って設定する。

 ALUで演算した結果を FR に設定する。
・次の命令に進む。
 
 以上の命令の実行により、プログラムレジスタ PR の内容は +2され、 r が指定するレジスタに r が指定するレジスタに加算の結果が設定される。




ホームへ戻る