デコーダの記述  
先の例で示したように、デコーダの記述は状態遷移の際にデコードのステート
に当たる部分でも記述することが可能です。しかし、場合によっては組合せ回
路として別途記述した方が良い場合もあります。以下ように分岐するかしない
かを決定する制御信号である BRANCH や 命令レジスタから 8ビットの値を読
出す際に上位8ビットの値を全て0にするか1にするかを決定する制御信号で
あるSIGNなどがその例です。
  reg       BRANCH;	// Branch TRUE for decode
  reg       SIGN;	// Sign Extention mode for decode
  always @( IR or FR )
    begin
      BRANCH = 1'bx;
      SIGN   = 1'bx;
      case ( `OP_4 )
      `IR_JP   : BRANCH = 1;
      `IR_JPS  : BRANCH = FR[3];
      `IR_JPZ  : BRANCH = ...
      `IR_JPV  : BRANCH = ...
      `IR_JPC  : BRANCH = ...
      default :
        case ( `OP_6 )
	`IR_ADD  : SIGN=IR[7];
	`IR_SUB  : ...
	`IR_OR   : if ( `OP_M==`IMM ) SIGN=0;    else SIGN=IR[7];
	`IR_EOR  : ...
	`IR_AND  : ...
	`IR_LD   : ...
	`IR_ST   : ...
        endcase
      endcase
    end
考え方
-  BRANCH : 5種類の分岐命令において、分岐する場合のみ“1”になる
ようなデコード出力です。後に設計する制御信号生成において分岐命令の制御
信号を生成する際に、この BRANCH 信号を参照することで簡単に生成すること
ができます。
 -  SIGN : 命令レジスタから8ビットの値を読出す際に上位8ビットの値を
全て0にするか1にするかを決定する制御信号として用います。この制御は命
令の種類やアドレッシングモードにより異なります。以下に注意して、作成し
て下さい。
-  インデクス修飾アドレッシング:この場合、命令レジスタから出力する
値は必ず符号拡張になります。正の値の場合は上位8ビットの値を全て“0”
にするので“0拡張”、負の値の場合は上位8ビットの値を全て“1”にする
ので“1拡張”になります。
 -  即値アドレッシングの場合は、命令レジスタから出力する値がそのまま
オペランドになりますが、命令によって上位8ビットとして出力する値が異な
ります。加算および減算命令の場合は“符号拡張”です。また論理和、論理積
および排他的論理和の各論理演算は、アキュムレータの上位8ビットがそのま
ま残るように“0拡張”または“1拡張”します。LD即値では、上位8ビットは
全て“0”にします。
 
 
次は、  制御信号生成の記述  についてみていきます。
|    Back      |
  CAD Home  |
My mail address is
 kuga@cs.kumamoto-u.ac.jp .
Last modified on