制御信号生成の記述例
制御信号の記述方法について、LD即値 (LD Imm.) および LDインデクス修飾 (LD
Indexed)命令を例として簡単に説明します。
LD即値(LD Imm.)命令の場合、3バス構成の実行フェーズ表でフェーズ1(`LDI_1)が
Acc <- IR
となっています。つまり、IR(命令レジスタ)の値をAcc(アキュムレータ)へ
転送する訳ですが、この部分を Verilog HDL ソースでは、
//
// LD Imm.
//
`LDI_1 : begin IR_R8P1<=1; ACC_W<=1; ICS<=1; end
と記述しています。KITEマイクロプロセッサの3バス構成図と対応させると、
IR_R8P1<=1 によりIRの内容をデータバス1へ出力し(4ビットopコードを持つ直
接アドレッシングの命令場合はIR_R12を使う)、ALU の左オペランドをスルーし
て(ALUのデフォルトはパス演算(IPAS))、ACC_W<=1によりACCに書き込まれま
す。
なお、命令の最後のサイクルであることを示すために ICS<=1 を出力します。
また、LDインデックス修飾(LD Indexed)命令の場合は、3バス実行フェーズ表で、
フェーズ1:ALU <- IXR, ALU <- IR, AR <- ALU
フェーズ2:Mem <- MREQ
フェーズ3:Acc <- Mem, Mem <-MREQ
となっています。この部分をVerilog HDLソースでは
//
// LD index
//
`LDX_1 :
begin
IXR_R<=1; AR_W1<=1;
IR_R8P2 <= !SIGN;
IR_R8M2 <= SIGN;
ALU <= `IADD;
end
`LDX_2 : MREQ<=1;
`LDX_3 : begin MREQ<=1; ACC_W<=1; DBI1<=1; ICS<=1; end
と記述しています。
3バス構成図と対応させると、フェーズ1(LDX_1)では、IXR_R<=1によりIXRの
内容をデータバス1へ出力し、R_R8P2 <= !SIGN または IR_R8M2 <= SIGN; によっ
てIRの下位8ビットの内容を16ビットに符号拡張したディスプレースメントとし
てデータバス2へ出力しています。ALU の演算は、ALU <= `IADD により加算と
なっておりIXRとIR内のディスプレースメントの内容が加算され、その結果は
AR_W1<=1 によりARへ書き込まれまれ、AR の内容がアドレスとしてメモリへ出力
されます。
フェーズ2(LDX_2)では、AR で示されているアドレス内に保存されているデー
タを読み出すための要求を MREQ<=1 として出力します。
フェーズ3(LDX_3)では、LDX_2から続く MREQ<=1 の要求により、メモリの
内容が外部データバスに出力されています。メモリの内容を DBI1<=1 として内
部データバス1に取り込み、ALUの左オペランドを通じて ACC_W<=1 によりACCへ
書き込みます。
以上の例を参考にして、他の制御信号の部分を記述してください。
もどる
| CAD Home |