では,状態フラグの生成を行いましょう.KITE-1マイクロプロセッサでは,状 態フラグとしてキャリー,オーバフロー,ゼロ,サインフラグがあります.さっ そく,順をおって設計していきましょう.
キャリーフラグは,算術演算,シフト命令,及び回転命令で変化します.他の 命令では,キャリーフラグはクリアされます.先ほど命令の動作を記述しまし たが,その時に既にTMP(16)にキャリーがセットされるように記述 していますから,TMP(16)をCarryに 信号代入文 を用いて出力します.
オーバフローフラグは,算術演算,算術シフト命令で変化します.他の命令 では,オーバフローフラグはクリアされます.オーバフローフラグは,以下の条件 を満たした時にセットされ,満たさない時にはクリアされます.条件は 関係演算子 を用いて記述してください.
OFLOW <= '1' when ( ((S_ALU = IADD) and (DATA_A(15) = DATA_B(15) ) and (DATA_A(15) /= TMP(15))) or OFLOWの条件2 or OFLOWの条件3 or . . . ) else '0';
算術右シフトでは,オーバフローは必ず'0'になりま す.
ゼロフラグは演算結果の状態を示します.つまり,命令に依存することなく演 算結果がゼロであれば'1'にゼロ以外であれば'0'になります.
サインフラグは演算結果の状態を示します.つまり,命令に依存することなく 演算結果が負の数であれば'1'に正の数であれば'0'になります. しかし,ここでは無効な命令が実行されたことを考慮して,ここでは 条件付き信号代入文 を使用して,上記の命令実行時にサインフラグが出力されるように設計してみ ましょう.
最後に,出力したフラグを & (連接演算子)を用いて接続し,算術論理演算回路の出力ポートである FLAG_OUTに 信号代入文 を用いて出力すると算術論理演算回路の設計は終了です.なお, FLAG_OUTへの出力は,0ビット目からキャリー,オーバフロー,ゼ ロ,サインの順番です.FLAG_OUTはdowntoで宣言してありますか ら,ビットの並びに注意して下さい.
これで,算術論理演算回路は完成しました.では, という名前でファイルを保存してくださ い.
さぁ,算術論理演算回路の動作検証を行ってみましょう.