ロード命令の説明,実行フェーズ ,バス動作を参照しながら,ロード命令(インデックス修飾)の状態遷移を記述しましょう.
それではロード命令(インデックス修飾)の実行フェーズの状態をより詳細に図解します.
演習5:ではLD_IX1からLD_IX5までの状態で必要となる各種制御信号を記述します.
when LD_IX1 => ;
when LD_IX2 => ;
when LD_IX3 => ;
when LD_IX4 => ;
when LD_IX5 => ;
それではロード命令(インデックス修飾)の状態遷移と各ステートでの実行動作を確認しましょう.必要となる制御信号を確認し適切な値を記述しましょう.
インデックスアドレスを計算するためにインデックスレジスタ (IXR)の値をバッファ1 (BUF1) に転送します.
このステートで必要となる制御信号はインデックスレジスタの読み出し制御信号 (IX_R) とバッファ1の書き込み制御信号 (BUF1_W) です.
when LD_IX1 => IX_R <= ;
BUF1_W <= ;
データバスに命令レジスタ (IR) の下位8ビットを出力し,バッファ1 (BUF1) の値との加算演算を 行いバッファ2 (BUF2) に書き込みます.ただし、命令レジスタの下位8ビットは符号拡張を行ってデータ・バスに出力する必要があります.
このステートで必要となる制御信号は命令レジスタの読み出し制御信号 (IR_R) とバッファ2の書き込み制御信号(BUF2_W)です.算術論理演算回路の演算制御信号 (S_ALU) はデフォルトでは常に加算を行う状態になっているのでこのステートでは特に指定する必要はありません.
when LD_IX2 => BUF2_W <= ;
if () then IR_R <= ;
else IR_R <= ;
end if;
計算されたインデックスアドレスをバッファ2 (BUF2) からアドレスレジスタ (MAR) に転送します.
このステートで必要となる制御信号はバッファ2の読み出し制御信号 (BUF2_R) とアドレスレジスタの書き込み制御信号 (MAR_W) です.
when LD_IX3 => BUF2_R <= ;
MAR_W <= ;
ロード命令(直接)の場合と同様にアドレスレジスタの値の番地に対してメモリ読み出しサイクルを開始します.
このステートで必要となる制御信号はメモリ・リクエスト信号 (MREQ) です.
when LD_IX4 => MREQ <= ;
データ・バスの読み込み制御信号 S_DBI を用いてデータ・バスに導き メモリから読み出した値を アキュムレータ (ACC) に書き込みます.
また,このステートでロード命令(インデックス修飾)が完了しますので,命令完了信号 (ICS) をアクティブにします.
このステートで必要となる制御信号はステートLD_IX4に引き続きメモリ・リクエスト信号 ()とアキュムレータ書き込み制御信号 (),データ・バスの読み込み制御信号 (),ならびに命令完了信号 () です.
when LD_IX5 => MREQ <= ;
ACC_W <= ;
S_DBI <= ;
ICS <= ;
インデックスレジスタ(IXR)からの読み出し制御信号
バッファ1(BUF1)への書き込み制御信号
バッファ2(BUF2)からの読み出し制御信号
バッファ2(BUF2)への書き込み制御信号
命令レジスタ(IR)からの読み出し制御信号.
アドレスレジスタ(MAR)への書き込み制御信号
アキュムレータ(ACC)への書き込み制御信号
メモリリクエスト信号
命令完了信号
算術論理演算回路の演算制御信号
1バス構成のKITE-1マイクロプロセッサでは,メモリアクセスとレジスタ間転送のためにデータ・バスを共用する必要があります. このためデータ・バスはマイクロプロセッサ外部と3ステートバッファによって分離されています. このデータ・バスへの入力用3ステートバッファを制御するのが S_DBI
信号です.