歩き遍路 平成19年春(J1) 記録の準備

MySOC USBHostとLCD制御を組込( 1)
          SPUの方式設計


 悩んだ末に考えたシーケンス・プロセッサ・ユニット(SPU)の方式設計します。MYマイコン Comet2eを参考に設計しましたので、要点だけを記録しました。詳しくは、MYマイコン Comet2eを参考にします。

 以下を整理した物をここに置きます

■SPUの方式設計

 SPUは、FPGAに組み込むシーケンサの代わりです。シーケンサは、一クロック毎に制御が可能で高速ですが複雑な制御は苦手です。SPUもシーケンサと同じように、単純機能を高速に処理することとします。次に仕様を記録します。

 ・2クロックで1命令を処理:命令読み出しと演算を同時処理するハーバードアーキテクチャとします。
 ・演算速度:80MHz以上のクロックの演算速度を目指します。
 ・命令幅は、18ビット:MYマイコン Comet2eと同じCyclon FPGAに組み込むので、Cyclon のメモリを有効利用します。
 ・データ幅は、8ビット:ハードウエア量を小さくするため演算は、8ビット幅にします。
 ・データの記憶:4つのアキュームレータに加え、プログラムメモリを利用する。
 ・命令は、3種類27命令:演算して結果をレジスタに格納する命令が19命令、レジスタをレジスタやメモリに
  書き込む命令が2命令、条件判定してジャンプする命令が6命令。

■SPU81の構成

 SPU81の構成と概要を次に示します。シーケンサの代わりなのでシンプルな構成です。

●制御用の構成は、次の4つです。
 ・プログラムアドレスを記憶するプログラムレジスタ(PR)
 ・命令を記憶するインストラクションレジスタ(IR)
 ・メモリから読み出したデータを記憶するメモリデータレジスタ(MDR)
 ・命令をデコードして、各種制御信号を発生する制御部

●演算関係の構成は、次の5つです。
 ・算術演算やロジック演算を行うALUユニット
 ・演算用レジスタの4つのアキュームレータ
 ・ビットデータを作成する、ビットデコーダ
 ・演算結果のステータスを記憶するステータスレジスタ
 ・ALUユニットのA入力を一時記憶するレジスタ(RAluAIn)

●外部インターフェースのレジスタは、次の3つです。
 ・出力レジスタ(RpOut20h)
 ・出力レジスタ(RpOut21h)
 ・入力レジスタ(RpOut21h)







■SPU81の命令

 SPU81の命令を次に示します。分類すると、演算命令、ストア命令、ジャンプ命令の3種類になります。

●機械語命令のビット割り振りは次の様にしています
 ・ビット17〜12のの6ビットは、命令の種類を示します。
 ・ビット11〜8のの4ビットは、アキュームレータやビット指定を示します。ALUのA入力の制御です。
 ・ビット7〜0のの8ビットは、レジスタやメモリを示します。ALUのB入力の制御です。

命令の種類を見てみます。
 ・番号1〜16は、演算結果をレジスタに格納します。
  演算内容は、加減算、論理積、論理和、排他的論理和です。
 ・番号17と18は、アキュームレータの内容をメモリやレジスタに格納します。
 ・番号19〜21は、指定レジスタの指定ビットをテストしたりセットやリセットします。
  テスト結果は、ステイタスレジスタに格納します。
 ・番号22〜27は、ジャンプ条件によって指定のアドレスにジャンプします。




レジスタとメモリのMAP

 レジスタとメモリは、次の様に別々の空間にあります。すなわち、同時にレジスタとメモリを使うことができます。
 ・レジスタ空間は、8ビットのレジスタを最大64個設定できます。
  00h番地〜1Fh番地は、システム用のSFレジスタで、システムで使いますので
  周辺回路用には使えません。指定のアドレスは、10ビットですが上位5ビットは固定です。
 ・メモリ空間は、18ビットx256ワードのRAMです。
  プログラム開始アドレスは、0番地からです。
  LD a,M 命令と ST a,M 命令でアクセス可能です。






■SPU81の内部制御

 SPU81が命令を実行する内部処理について考えます。
 考え方は、以前開発したMYマイコン Comet2e と同様で、演算操作と順序操作に分けて考えます。

●機械語命令と演算操作
 次の図は、機械語命令を元に、演算制御の種類と信号を抽出して演算回路との関係を示しています。
 「命令とALU制御」の表は、左側に機械語命令を、右側にALUの入出力と演算内容を示しています。又、中央部にグループ分けした命令のグループ名を示します。
 「IRの命令をデコードしてALUを制御する」表は、生成するALU制御信号との関係を示しています。又、生成した制御信号とALUの制御ポイントとの関係も示しています。
 




●シーケンサの状態遷移と割り付け
 命令の順序操作は、シーケンサを使って行います。次の図は、シーケンサの状態遷移とステート割り付け表です。
 シーケンサの状態遷移は、次の動作をします。
 ・S00〜S06は、開始処理や終了処理をします。
 ・S08とS09は、Ild命令グループの処理です。1命令を2ステートで実行します。
 ・S0AとS0Bは、Ist命令グループの処理です。
 ・S0CとS0Dは、Ijmp命令グループの処理です。
 ・S0EとS0Fは、Inop命令グループの処理です。これは、不正な命令をNOPにするために使います。

 シーケンサは、5ビットのシーケンスカウンタで制御を管理します。
 右の「ステート割り付け表」に割り付けの状況を示します。空欄は、未使用です。




















●命令のシーケンス制御
 命令グループ毎の代表的なシーケンスです。
 横軸は、シーケンサのステートです。前命令の最終ステート Q−1で、前命令の処理と命令読み出しを並列に処理しています。Q1とQ2ステートの2ステートで命令を実行します。
 縦軸は、制御項目です。ALUの演算制御やメモリとレジスタの制御項目を示しています。
 シーケンサの状態遷移は、次の動作をします。





●命令のシーケンス
 命令グループ毎の代表的な命令のシーケンスです。上の「命令のシーケンス制御」をシーケンス表記しました。
 2ステートで命令を実行するため、命令読み出しステートで命令をデコードしています。














ホームへ戻る