状態フラグの動作定義


では,状態フラグの生成を行いましょう.KITE-1マイクロプロセッサでは,状 態フラグとしてキャリー,オーバフロー,ゼロ,サインフラグがあります.さっ そく,順をおって設計していきましょう.


キャリーフラグ

キャリーフラグは,算術演算,シフト命令,及び回転命令で変化します.他の 命令では,キャリーフラグはクリアされます.先ほど命令の動作を記述しまし たが,その時に既にTMP(16)にキャリーがセットされるように記述 していますから,TMP(16)Carry信号代入文 を用いて出力します.


オーバフローフラグ

オーバフローフラグは,算術演算,算術シフト命令で変化します.他の命令 では,オーバフローフラグはクリアされます.オーバフローフラグは,以下の条件 を満たした時にセットされ,満たさない時にはクリアされます.条件は 関係演算子 を用いて記述してください.

  1. 算術論理演算回路の制御信号が加算 であり,かつ被加算数と加算数が同符合であり,かつ被加算数と加算結果が異 符合であるとき.

  2. 算術論理演算回路の制御信号が減算 であり,かつ被減算数と減算数が異符合であり,かつ被減算数と減算結果が異 符合であるとき.

  3. 算術論理演算回路の制御信号がインクリ メントであり,かつ被加算数が正の数であり,かつ演算結果が負の数であ るとき.

  4. 算術論理演算回路の制御信号がデクリメ ントであり,かつ被減算数が負の数であり,かつ演算結果が正の数である とき.

  5. 算術論理演算回路の制御信号が算術左シ フトであり,かつ被演算数と演算結果が異符合であるとき.
では, 条件付き信号代入文 を用いて記述してみましょう.
    
    	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で宣言してありますか ら,ビットの並びに注意して下さい.

これで,算術論理演算回路は完成しました.では, alu.vhdという名前でファイルを保存してくださ い.

さぁ,算術論理演算回路の動作検証を行ってみましょう.

算術論理演算回路のシミュレーション



ホーム シミュレーション 辞書
This is my e-mail address:
arch_www < www@cs.kumamoto-u.ac.jp >
Copyright (C) KITE Microprocessor Project, 1996