演習4:順序回路における状態遷移の記述法(ステートマシンその2) |
各命令はデコードステート(DECO)から遷移した先頭
ステートから始まり,最後は次命令のフェッチステート(F0)に戻ります.
インデックス修飾のロード命令も同様にデコードステート(DECO)から先頭のステート(LD_IX1)に遷移して命令の実行を開始します.但し,無条
件で次ステートに遷移するステートと,条件付きで遷移するステートがありま
すので注意して下さい.
遷移するステートの条件等は,LD(インデックス修飾)
命令の動作を参照して下さい.
case PRESENT_STATE is when V0 => --ベクトルスタート (中略) when F0 => PRESENT_STATE <= F1; --命令フェッチ when F1 => if ACK = '1' then PRESENT_STATE <= DECO; end if; when DECO => --命令デコード case PRESENT_INST is when LD_IM => PRESENT_STATE <= LD_IM; when LD_D => PRESENT_STATE <= LD_D1; when LD_IX => PRESENT_STATE <= LD_IX1; (中略) when others => PRESENT_STATE <= HALT1; end case; when LD_IM => PRESENT_STATE <= F0; --LD Immediate when LD_D1 => PRESENT_STATE <= LD_D2; --LD Direct when LD_D2 => if ACK = '1' then PRESENT_STATE <= LD_D3; end if; when LD_D3 => PRESENT_STATE <= F0; -- 演習4 : 状態遷移の記述法 when LD_IX1 => when LD_IX2 => when LD_IX3 => when LD_IX4 => if ACK = '1' then end if; when LD_IX5 => when ST_D1 => PRESENT_STATE <= ST_D2; --ST Direct when ST_D2 => PRESENT_STATE <= ST_D3; when ST_D3 => if ACK = '1' then PRESENT_STATE <= ST_D4; end if; when ST_D4 => PRESENT_STATE <= F0; when ST_IX1 => PRESENT_STATE <= ST_IX2; --ST Index when ST_IX2 => PRESENT_STATE <= ST_IX3; when ST_IX3 => PRESENT_STATE <= ST_IX4; when ST_IX4 => PRESENT_STATE <= ST_IX5; when ST_IX5 => if ACK = '1' then PRESENT_STATE <= ST_IX6; end if; when ST_IX6 => PRESENT_STATE <= F0; (中略) when others => PRESENT_STATE <= V0; end case;