【目次に戻る】

1. KUE-CHIP2の構造と動作


ASICデザインコンテストの課題 では,KUE-CHIP2の命令セットと外部端子が規定されていますが,内部の構造 と各命令の動作のタイミングなどには自由度があります.SFL記述を始める前 に,これらの詳細をここで決定します.

構成要素 [TOP]

図1.1に今回設計するKUE-CHIP2のブロック図を示します.この図には, KUE-CHIP2がどのようなハードウェア資源から構成されているかということが 書いてあります.

[図 1.1] ブロック図

KUE-CHIP2はACC(アキュームレータ)とIX(インデックスレジスタ)という2つの8 ビットレジスタを持ちます.これらのレジスタに対しては,加減算や論理演算 を施したり,その値をシフトをすることもできます.そのために,加減算や論 理演算を施すALUと,シフトを行うSHIFTERを用意します.また,演算結果を示 すフラグとしては,CF(桁上げフラグ),VF(桁あふれフラグ),NF(ネガティブ フラグ),ZF(零フラグ)が必要です.

KUE-CHIP2のプログラムはメモリの0番地から255番地に置くことができるので, プログラムの実行位置を示すPC(プログラムカウンタ)は8ビット幅のものとな ります.また,プログラムの逐次実行と共にPCの値を1ずつ増やしていくため に,INCという8ビットのインクリメンタを用意します.

KUE-CHIP2の命令には,1バイトのものと2バイトのものがあります.いずれも, 1バイト目は命令の種類を示し,2バイト目にはアドレス情報が格納されていま す.ここでは,メモリから読み出した命令の1語目を格納するために,8ビッ トのIR(インストラクションレジスタ)を用意します.また,命令の2語目から 生成される実効アドレスを格納するために,8ビットのMAR(メモリアドレスレ ジスタ)を用意します.

外部端子 [TOP]

次に,KUE-CHIP2の外部端子を見てみます.

KUE-CHIP2のプログラムは0番地から255番地までの間(プログラム領域)に しか置けませんが,データならば,256番地から511番地の間(データ領域)に 置いてもアクセスすることができます.そのため,アドレスバスabは8ビット ではなく9ビットになっています.abに値を供給するPCやMARは8ビットですが, abの9ビット目(プログラム領域かデータ領域かを指定する)は,制御系から 状況に応じて0か1が指定されます.

dbiはメモリやIBUF(入力用バッファ)の内容を読み込むための入力データ バスです.また,dboはメモリやOBUF(出力用バッファ)にデータを書き込む ための出力データバスです.これらは共に8ビットの幅を持ちます.

メモリを制御する外部端子としては,mem_reとmem_weがあります.mem_re により,メモリからdbiに値を転送します.また,mem_weにより,dboの値をメ モリに書き込みます.

IBUF_FLAG,OBUF_FLAGは,IBUFやOBUFに値が書き込まれた後,その値が読 み出されたかどうかを示すフラグです.IBUF_FLAG,OBUF_FLAGの値は, ibuf_flg_inやobuf_flg_inを通じてKUE-CHIP2に入力され,分岐命令の条件判 断に利用されます.

IBUFやOBUFおよびそれらのフラグを制御する外部端子としては,ibuf_re, ibuf_flg_clr,obuf_weがあります.ibuf_reにより,IBUFの値をdbiに転送し ます.ibuf_reとmem_reは同時にアクティブになってはいけません. ibuf_flg_clrは,IBUF_FLAGを0にするためのもので,IBUFの値をdbiに読み込 んだ後に,これをアクティブにします.obuf_weは,dboの値をOBUFに書き込む と同時に,OBUF_FLAGを1にします.

命令の分類 [TOP]

KUE-CHIP2の構成要素と外部端子は, 図1.1 のようにだいたい決定しました.あとは,図1.1に示されたハードウェア資源 (レジスタ,メモリ,モジュール,端子など)を,どのタイミングでどのよう に利用するかということ決めていきます.その前に,表1.1に示すように, KUE-CHIP2の命令を分類します.

[表 1.1] フェーズ表

NOP, HLT, OUT, IN命令はそれぞれ独自のものとして分類します.RCF, SCF 命令は1つにまとめてSRCFとします.Bcc命令は条件によって様々なものがあり ますが,これらをすべて1つにまとめてBRANCHとします.Ssm命令とRsm命令も すべてを1つにまとめてSHIFTとします.

LD, ST命令は,アドレスの指定方法により,LD_REG, LD_IMM, LD_MA, ST_MAと細分化して考えます.ここで,_REGはレジスタ指定(register),_IMM は即値指定(immediate),_MAは絶対アドレスとインデックス修飾アドレス指定 (memory address)を表します.

SBC, ADC, SUB, ADD, EOR, OR, AND, CMP命令はすべてALUを使用する命令 なので1つにまとめて考えますが,LD, ST命令と同様にアドレスの指定方法が いろいろあるので,AL_REG, AL_IMM, AL_MAと分類します.

アドレス・モード [TOP]

先ほど,命令を分類した際に,_REG, _IMM, _MAと,アドレスの指定方法に よっても分類しました.ここでは,それらのアドレスの指定方法について詳し く見ていきます.

KUE-CHIP2は表1.2に示すようなアドレスモードを持ちます._REGでは,命 令コードのbによって指定されたレジスタの値が対象となります._IMMでは, 命令コードの2語目の値そのものが対象となります._MAでは,実効アドレス が指すメモリの番地が対象となります.

[表 1.2] アドレスモード

_MAでは,実効アドレスを生成しますが,その方法が命令コードのxやrによっ て異なります.xが0であれば,命令コードの2語目をそのままMARに書き込みま すが,xが1であれば,命令コードの2語目にIXの値を加えた値をMARに書き込み ます.また,命令コードのrは,メモリのプログラム領域(0)かデータ領域(1) のどちらにアクセスするかということを示します.つまり,rがそのまま実効 アドレスの9ビット目になります.KUE-CHIP2のメモリ空間は512バイトで,0 番地から255番地はプログラム領域,256番地から511番地はデータ領域と区別 されています.

各命令の動作 [TOP]

以上で,命令の分類が終わりましたので,各命令の動作を決めていきます. 表1.1 に示すように,今回の設計では,p1, p2, p3という3つのフェーズを用意しま す.各フェーズの動作は,すべて1クロック内に終了します.p1では,メモリ から読み出した命令コードをIRに格納します.この動作は,命令の種類によら ず同じです.なお,MEM(0,PC)は,アドレスの9ビット目が0(プログラム領域) で,残りのアドレス8ビットがPCの値であるようなメモリの番地を意味します. 一方,p2とp3では,命令に応じて動作が異なってきます.p2だけでその動作を 終える命令もかなりあります.それでは,各命令の動作について見ていきましょ う.

NOPでは何もしません.HLTでは停止します.

OUTでは,OBUFにACCの値を,OBUF_FLAGに1を書き込みます.INでは,p2で IBUFの値をACCに読み込み,p3でIBUF_FLAGに0を書き込みます.

SRCFでは,CF(桁上げフラグ)に命令コードのvの値を書き込みます.

BRANCHでは,命令コードのccccが示す条件を満たしていれば,2語目が示 すアドレスに分岐します.ccccと分岐条件の対応については, 規定課題の資料 を見てください.

SHIFTでは,SHIFTERを用いて,命令コードのsssが示すようにシフトを行い ます.sssが示すシフトの種類ついては, 規定課題の資料 を見てください.なお,命令コードのaまたはbは,AまたはBがACCかIXのどち らであるかを示します.aが0ならばAはACC,1ならばAはIXとします.bに関し ても同様です.

LD_REGでは,レジスタBの値をレジスタAに書き込みます.

AL_REGでは,レジスタA, Bに対し算術論理演算を行い,結果をレジスタAに 書き込みます.

LD_IMMでは,2語目そのものの値をレジスタAに書き込みます.

AL_IMMでは,レジスタAと2語目そのものの値に対し算術論理演算を行い, 結果をレジスタAに書き込みます.

_MAでは,まず,p2で実行アドレスの9ビット目以外をMARに書き込みます. そして,p3においては,LD_MAでは,実行アドレスが示すメモリの番地の値を レジスタAに書き込みます.ST_MAでは,レジスタAの値を実行アドレスが示す メモリの番地に書き込みます.AL_MAでは,レジスタAの値と実行アドレスが示 すメモリの番地の値に対し算術論理演算を行い,結果をレジスタAに書き込み ます.

ALでは,ALUを用いて,命令コードのmmmが示す算術論理演算を行います. mmmとALUの動作の対応は, 規定課題の資料 を見てください.なお, 表1.1 には書いていませんが,シフト命令や算術論理演算命令が行われた際には,そ の結果に従ってCF, VF, NF, ZFの値を更新します.


以上が今回設計するKUE-CHIP2のアーキテクチャの詳細です.次の章からは, これをSFLで表現していきます.まず2章では,シフト命令を処理するSHIFTER を,SFLのモジュールkueshiftとして設計します.3章では,算術論理演算命令 を行うALUを,SFLのモジュールkuealuとして設計します.4章では,これらの モジュールをそれぞれサブモジュールshifter, aluとして用いて,KUE-CHIP2 全体のSFL記述を完成させます.