フラグの記述


演算後のフラグを生成する記述を追加しましょう。

フラグは4種類あり、符号フラグ"S"、零フラグ"Z"、オーバーフローフラグ"V"、 キャリーフラグ"C"があります。バスにおけるビットの順序は自由です。フラ グの変化は各命令で異なり、以下のようになっています。

算術系命令
演算種類 S Z V C
加算(ADD) 結果に応じて変化 結果に応じて変化 結果に応じて変化 結果に応じて変化
デクリメント(DEC) 結果に応じて変化 結果に応じて変化 結果に応じて変化 結果に応じて変化
インクリメント(INC) 結果に応じて変化 結果に応じて変化 結果に応じて変化 結果に応じて変化
減算(SUB) 結果に応じて変化 結果に応じて変化 結果に応じて変化 結果に応じて変化

論理系命令
演算種類 S Z V C
論理和(OR) 結果に応じて変化 結果に応じて変化 常に0 常に0
排他的論理和(XOR) 結果に応じて変化 結果に応じて変化 常に0 常に0
論理積(AND) 結果に応じて変化 結果に応じて変化 常に0 常に0
論理否定(NOT) 結果に応じて変化 結果に応じて変化 常に0 常に0

シフト系命令
演算種類 S Z V C
算術右シフト(ASR) 結果に応じて変化 結果に応じて変化 常に0 結果に応じて変化
算術左シフト(ASL) 結果に応じて変化 結果に応じて変化 結果に応じて変化 結果に応じて変化
論理右シフト(LSR) 常に0 結果に応じて変化 常に0 結果に応じて変化
論理左シフト(LSL) 結果に応じて変化 結果に応じて変化 常に0 結果に応じて変化
右回転(ROR) 結果に応じて変化 結果に応じて変化 常に0 結果に応じて変化
左回転(ROL) 結果に応じて変化 結果に応じて変化 常に0 結果に応じて変化
バイトスワップ(SWP) 結果に応じて変化 結果に応じて変化 常に0 常に0

特別な演算機能
演算種類 S Z V C  
パス(PAS) フラグレジスタに記憶されないので、ALUからフラグ出力はdon't careです。

各フラグは以下のようにすれば生成できます。


  reg V;				// for Overflow

  always @( 変数 or 変数 or ... )	// オーバーフローフラグ
    case ( CB )
    `IADD   : V = ( 条件式 ) ? 1 : 0;
    `ISUB   : V = ( 条件式 ) ? 1 : 0;
    `IINC   : V = ( 条件式 ) ? 1 : 0;
    `IDEC   : V = ( 条件式 ) ? 1 : 0;
    `IASL   : V = ( 条件式 ) ? 1 : 0;
    default : V = 0;
    endcase

  assign F[3] = ...... ;	// 符号フラグ
  assign F[2] = ...... ;	// 零フラグ
  assign F[1] = V ;		// オーバーフローフラグ
  assign F[0] = ...... ;	// キャリーフラグ


次は、 シミュレーション により正しく動作するかどうか確認します。

シミュレーションが終了したら、 テストボードへの実装 を行ってみましょう。


| Back | CAD Home |

My mail address is kuga@cs.kumamoto-u.ac.jp .
Last modified on