Реализация FSM в VHDL

Просто интересно, реализую ли я конечный автомат на VHDL, нужно ли мне указывать, какие все выходы являются во всех возможных состояниях? Даже если я знаю, что некоторые выходы не переходят из одного состояния в другое, и я знаю, что порядок состояний также будет в том же порядке?

Например, в этом (принудительном) примере:

entity test is
    port (
        clk : in std_logic;
        a : in std_logic;
        b: out std_logic;
        c: out std_logic;
    );
end test;

architecture Behavioral of test is

type executionStage is (s1,s2,s3);
signal currentstate, nextstate: executionStage;

begin
    process (clk)
    begin
          if(rising_edge(clk)) then
                 currentstate <= nextstate;
          else 
                 currentstate <= currentstate;
          end if;
    end process;

    process(currentstate)
    begin
        case currentstate is
            when s1 =>
                if (a = '1') then
                    b <= '1';
                    c <= '0';
                else
                    b <= '1';
                    c <= '1';
                end if;

                nextstate <= s2;

            when s2 =>
                -- b doesnt change state from s1 to here, do I need to define what it is here?
                if (a = '1') then
                    b <= '1';
                    c <= '1';
                else
                    b <= '1';
                    c <= '0';
                end if;

                nextstate <= s3;

            when s3 =>
                if (a = '1') then
                    b <= '0';
                    c <= '0';
                else
                    b <= '1';
                    c <= '1';
                end if;

                nextstate <= s1;
        end case;
    end process;
end Behavioral;

Насколько я понимаю, если я этого не сделаю, будут созданы защелки?

Это не имеет большого значения в чем-то вроде этого примера, но если у меня есть машина с более чем 10 выходами и более чем 10 состояниями, мои файлы VHDL начинают выгляжу невероятно грязно, и я ' Я уверен, что это плохая практика - копировать и вставлять одно и то же снова и снова. Есть ли лучший способ сделать это?

edit: Могу ли я определить состояние «по умолчанию» для вывода? IE устанавливает b равным 1 вне всех процессов, а затем определяет только то, что это такое, в операторах case, где это 0? Это сработает?

6
задан Nick Larsen 15 May 2011 в 13:25
поделиться