【目次に戻る】

1. KUE-CHIP2の構造と動作


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

構成要素 [TOP]

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

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

外部端子 [TOP]

次に,KUE-CHIP2の外部端子を見てみます.これらについても図1に示して います.

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と OBUF_WEがあります.IBUF_REは,IBUFの値をDBiに転送すると同時に, IBUF_FLAGを0にします.IBUF_REとMEM_REは同時にアクティブになってはいけ ません.OBUF_WEは,DBoの値をOBUFに書き込むと同時に,OBUF_FLAGを1にしま す.

命令の分類 [TOP]

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

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

表2: アドレスモード

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

各命令の動作 [TOP]

以上で,命令の分類が終わりましたので,各命令の動作を決めていきます. 表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では, IBUFの値をACCに読み込み,IBUF_FLAGを0にします.

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

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

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

図2: シフト命令

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の動作の対応は,図3を見てください.なお,シフ ト命令や算術論理演算命令が行われた際には,その結果に従ってCF, VF, NF, ZFの値を更新します.

図3: ALUの動作

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

図4: モジュール構成図