演習2:順次処理文による組合せ回路の記述法(命令デコーダ)


算術論理演算回路では, 同時処理文 を用いて組合せ回路を設計しました.今度は, 順次処理文 を用いて組合せ回路を設計してみましょう.設計対象は,命令デコーダです.

先ほどダウンロードしたidc_seq.vhdファイルの命令デコード部 (118行目)を御覧下さい.ここでは,順次処理文であるプロセス文を用いて 命令デコーダの設計を行っています.プロセス文中の動作記述は,プロセス文 中で使用できるif文およびcase文を用いて定義しています.組合せ回路を設計 する際に問題になるのは,プロセス文のセンシティビティ リストです.センシティビティリストとは,プロセス文を評価するタ イミングを示す信号のリストです.言い換えれば,センシティビティリスト中 の信号が変化すると,プロセス文が実行されます.つまり,組合せ回路をプロ セス文を用いて設計するには,センシティビティリストにプロセス文中の式 (expression)で用いられる信号をすべて記述する必要があります.

では,センシティビティリストを書いてみましょう!

    DECODE_PROC : process(センシティビティリスト)
    begin
    	case IR(15 downto 12) is
    		when "0000" => PRESENT_INST <= LD_D; 
    		when "0001" => PRESENT_INST <= ST_D;  
    		when "0010" => PRESENT_INST <= CALL;
    		when "0011" => PRESENT_INST <= JP;  
    			.
    			.
    			.
    
    

では,次にデコード部の動作を記述してみましょう.デコードの記述は, idc_seq.vhdの120行目から186行目までで記述しています.KITE-1 マイクロプロセッサの命令では,命令アドレッシングによって命令のオペレー ションコード長(4ビット[直接],6ビット[レジスタ,含意],8ビット[インデッ クス修飾,即値])が異なります.そこで,3つのcase文を用いて定義しています.

では,ロード命令(インデックス修飾)のためのデコードを行いましょう.ロー ド命令(インデックス修飾)のオペレーションコードは"11000010",その時の PRESENT_INSTはLD_IXと宣言してください.

    case IR(15 downto 8) is
            when "11000001" => PRESENT_INST <= LD_IM;
            when "10010001" => PRESENT_INST <= OR_IM;
            when "10000001" => PRESENT_INST <= ADD_IM;
            when "10000101" => PRESENT_INST <= SUB_IM;
            when "10010101" => PRESENT_INST <= EOR_IM;
            when "10011001" => PRESENT_INST <= AND_IM;
    	-- ここを記述してください. 
            when "11000110" => PRESENT_INST <= ST_IX;
            when "10000010" => PRESENT_INST <= ADD_IX;
            when "10000110" => PRESENT_INST <= SUB_IX;
            when "10011010" => PRESENT_INST <= AND_IX;
            when "10010010" => PRESENT_INST <= OR_IX;
            when "10010110" => PRESENT_INST <= EOR_IX;
            when others     => NULL;
    end case;
    
演習3:順次処理文による順序回路の記述法(ステートマシンその1)へ

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