MYマイコンを作る(7)
    Comet2eの命令とシーケンスの制御



 今まで考えたり検討したことを基にMYマイコンComet2eの命令とシーケンスの制御を検討すると共に、作成してきた資料の不都合個所の修正と不足部分の補足をします。

 次に、以下で検討した資料をPDFにして置きます。
 ・Comet2eの構成・シーケンス(設計用)
 ・命令_制御信号表(全命令)
 ・命令_制御信号表(2語型命令)
 ・命令分岐用コード(設計用)


◆命令

●SVC adr,x 命令の機能定義

 COMETUの仕様には、SVC adr,x 命令の機能は「実効アドレスを引数として割出しを行う」と有りますが詳細の記述が有りません。COMETUでは、スーパバイザを呼び出して入出力の役割を主に担っているものと思われる。

 MYマイコンComet2eでは、この SVC adr,x 命令を入出力ポート、スタックポインタ SP のアクセス用に拡張します。

入出力ポートと制御関連をを追加したComet2eの内部構成を次に示します。





●命令シーケンスの見直し

 SVC adr,x 命令の機能を定義したことと MYマイコンを作る(6)Comet2eの構成と命令シーケンス で検討した内容を見直したら不具合箇所が有るので次の様に修正します。

順序操作グループ毎の命令シーケンス分類を見直したものを下記します。
又、PDFにしたものをここに置きます





●命令の内部動作を見る

 命令の内部動作を見てみましょう。内部動作を見るのは、代表的な2語型順序操作の命令です。
 2語型順序操作シーケンスを持つ命令を次に示します。

 ・LD r,adr,x ・ADDA r,adr,x ・ADDL r,adr,x ・SUBA r,adr,x ・SUBL r,adr,x
 ・AND r,adr,x ・OR r,adr,x   ・XOR r,adr,x  ・CPA r,adr,x  ・CPL r,adr,x

下図で下の記号で示す番号の順にシーケンスを見ていきます。
の場合は、番号1を示す。

1、前命令の最後のサイクルでPRの内容をメモリのアドレスに与え、命令読出し準備をします。
2、Q1の立上りで
  ・アドレスに与えられたPRの内容をメモリに取り込み、メモリから命令の読出し開始します
  ・PRの内容を+1します
  ・Q1期間の途中にメモリから読み出される命令をデコードして2語型命令情報を得ます
  ・Q2の立上りで読出した命令をIRに格納します
  ・Q2の立上りで2語型命令情報の型で分岐して、2語型順序操作の命令のQ2に移ります
3、Q2の立上りで
  ・メモリから命令の2語目の読出し開始します
  ・Q3の立上りで、読出した命令をMDR/IR2に格納します
  ・Q3の立上りで、PRの内容を+1します
4、Q3の期間で
  ・命令が指定する x レジスタの内容と命令の2語目の adr を加算して実行アドレスを作り、   その実行アドレスをメモリのアドレスに与えます
  ・次のQ4の立上りで、実行アドレスをアドレスとしてメモリ読出しを起動します
5、Q5の立上りでメモリから読み出した実行アドレスの内容をMDR/IR2に格納します
6、IRの命令の演算操作内容に従って、rが指定するレジスタの内容とMDR/IR2に格納した
  実行アドレスの内容を演算します。
  その結果は、命令に応じてr指定のレジスタとFRに格納します
7、PRの内容をメモリのアドレスに与え、次命令読出し準備をします

他の順序操作シーケンスについても同様な手順で資料を参考に見てください。




◆Comet2eの制御

●Comet2eの制御方式

 VerilogHDLを使ってマイコンの命令を処理する制御方式は次のものが考えられます。


MYマイコン Comet2eの制御方式 は、マイクロプログラムによる制御が必要なほど複雑な命令が無いのと、ハードウエアの勉強や頭の体操のためVerilogHDLで記述が容易なはステートマシンによる制御方式とします。


●命令実行のステートと制御信号

 命令の内部動作を上の「●命令の内部動作を見る」で使った2語型順序操作の命令で見ましょう。
 一つの2語型順序操作の命令を実行する内部の動作は、ステートと制御信号からなります。
 ステートで、メモリを読むとか加算をするような働きをします。制御信号は、一つのステートの働きを行うためにアチコチの回路を制御する信号です。次の表は、2語型順序操作命令を実行するためのステートと制御信号の組合せの表です。

  注:次の表のステートは、上の順序操作シーケンスのサイクルと同じです。
    次の表では、ステートマシンのステートで表示しています。

順番にステートと制御信号を見ていきます。

1、前命令の最後のサイクルでPRの内容をメモリのアドレスに与え、命令読出し準備を
  しているとします。次の表の場合、前命令の最後のサイクルは、I2go Q5 になります。
  Madr選択の PR でPRの内容をメモリのアドレスに与え
  M制御の リード で命令読出し準備
  PR格納の PR+C で PRの内容を+1 の準備

2、Q1の立上りで
  ・アドレスに与えられたPRの内容をメモリに取り込み、メモリから命令の読出し開始します
  ・PRの内容を+1します
  ・Q1期間の途中にメモリから読み出される命令をデコードして2語型命令情報を得ます
  ・Q2の立上りで読出した命令をIRに格納します
   次表では、IR格納の MDout で読出した命令をIRに格納準備
  ・Q2の立上りで2語型命令情報の型で分岐して、2語型順序操作の命令のQ2に移ります
   次表では、順序操作の I分岐 で2語型命令情報の型で分岐準備

  以下も同様に見てください。

3、Q2の立上りで
  ・メモリから命令の2語目の読出し開始します
  ・Q3の立上りで、読出した命令をMDR/IR2に格納します
  ・Q3の立上りで、PRの内容を+1します
4、Q3の期間で
  ・命令が指定する x レジスタの内容と命令の2語目の adr を加算して実行アドレスを作り、   その実行アドレスをメモリのアドレスに与えます
  ・次のQ4の立上りで、実行アドレスをアドレスとしてメモリ読出しを起動します
5、Q5の立上りでメモリから読み出した実行アドレスの内容をMDR/IR2に格納します
6、IRの命令の演算操作内容に従って、rが指定するレジスタの内容とMDR/IR2に格納した
  実行アドレスの内容を演算します。
  その結果は、命令に応じてr指定のレジスタとFRに格納します
7、PRの内容をメモリのアドレスに与え、次命令読出し準備をします


次表をPDFにしたものをここに置きます




他のステートと制御信号についても同様な手順で見てください。
全命令の 命令_制御信号表のPDFをここに置きます


●順序操作のI分岐について

 上記の、 「2、Q1の立上りで」にある、「2語型命令情報の型で分岐」の
動作は、メモリから読み出されている命令の内容で命令ステートを分岐することです。
 次の図は、Q1命令情報の型で分岐の流れを示しています。「2語型命令情報の型で分岐」の場合は、上から3番目に移ります。




ホームへ戻る