MYマイコンを作る(7)
Comet2eの命令とシーケンスの制御
今まで考えたり検討したことを基にMYマイコンComet2eの命令とシーケンスの制御を検討すると共に、作成してきた資料の不都合個所の修正と不足部分の補足をします。
次に、以下で検討した資料をPDFにして置きます。
・Comet2eの構成・シーケンス(設計用)
・命令_制御信号表(全命令)
・命令_制御信号表(2語型命令)
・命令分岐用コード(設計用)
◆命令
●SVC adr,x 命令の機能定義
COMETUの仕様には、SVC adr,x 命令の機能は「実効アドレスを引数として割出しを行う」と有りますが詳細の記述が有りません。COMETUでは、スーパバイザを呼び出して入出力の役割を主に担っているものと思われる。
MYマイコンComet2eでは、この SVC adr,x 命令を入出力ポート、スタックポインタ SP のアクセス用に拡張します。
- レジスタ入力
SVC adr,x 命令の adr,x が指す実行アドレスが 20h〜3Fhの場合、実行アドレスが指すレジスタの内容を GR1 に格納する。
- レジスタ出力
SVC adr,x 命令の adr,x が指す実行アドレスが 40h〜5Fhの場合、GR1 の内容を実行アドレスが指すレジスタに格納する。
- SVC adr,x 命令のレジスタ割り当て
・30h,31h :入力ポート
・52h,53h :出力ポート
・21h,41h :スタックポインタ SP
入出力ポートと制御関連をを追加したComet2eの内部構成を次に示します。

●命令シーケンスの見直し
SVC adr,x 命令の機能を定義したことと MYマイコンを作る(6)Comet2eの構成と命令シーケンス で検討した内容を見直したら不具合箇所が有るので次の様に修正します。
- SVC adr,x 命令のシーケンスを追加
- 処理手順で無理や矛盾を解消した
- Q1 の動作を同じにした
- Q1 の命令デコードを命令グループ単位にした
当初、命令デコードを1語と2語の2種類から命令グループ単位にした
- Q1 の命令デコード方法の修正
命令1語目の上位をデコードすることにより未定義コードをNOP命令と見なした。これによりNOP命令を独立した命令グループにした
- その他 シーケンスを見やすいようにした
順序操作グループ毎の命令シーケンス分類を見直したものを下記します。
又、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を使ってマイコンの命令を処理する制御方式は次のものが考えられます。
- シーケンスを管理するカウンタと制御信号を生成するデコーダによる制御方式
古くから使われている制御方式で、細かい制御ができます。
- ステートマシンでシーケンスを管理する制御方式
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番目に移ります。
ホームへ戻る