ステートマシンをVHDLで書き換える

今度はステートマシン(pp.120-123)。テキストはhalt命令用の回路も同じブロックに分けてあるので、ここでもそれに倣った。

図29 (p.122)の回路をそのままVHDLで表現した。

library ieee;
use ieee.std_logic_1164.all;

entity state_machine is
    port(
        halt_n    : in std_logic;
        pc_ld     : in std_logic;
        clk_inside: in std_logic;
        aclr_n    : in std_logic;

        clk_en: out std_logic;
        halt  : out std_logic;
        pc_up : out std_logic;
        ld_en : out std_logic
    );
end entity;

architecture rtl of state_machine is
    signal halt_temp : std_logic;
    signal pc_up_temp: std_logic;
begin
    process(all)
    begin

        halt_temp  <= halt_n nor pc_up; 
        pc_up_temp <= pc_ld  nor pc_up;

        if aclr_n = '0' then
            halt   <= '0';
            clk_en <= '1';
            pc_up  <= '0';
            ld_en  <= '1';

        elsif rising_edge(clk_inside) then
            halt   <=     halt_temp;
            clk_en <= not halt_temp;
            pc_up  <=     pc_up_temp;
            ld_en  <= not pc_up_temp;
        end if;

    end process;
end architecture;