LATCH Primitive отключает выходы?

Итак, я понимаю концепцию защелки, но я не понимаю, как я вывожу ее здесь, поскольку мое условие else должно охватывать все возможные пути в этом процессе. Quartus сообщает мне, что он отключает зеленые и красные светодиоды из-за примитива LATCH, а также из-за того, что на них есть предполагаемая защелка. Я что-то упустил здесь?

process(current,advance,playerWins,dealerWins) begin
  if(advance) then
        case current is
          when START =>
                deal           <= '1';
                dealTo         <= '1';
                dealToCardSlot <= "00";
                greenLeds <= (others => '0');
                redLeds <= (others => '0');
          when PT1 =>
                deal           <= '1';
                dealTo         <= '1';
                dealToCardSlot <= "01";
                greenLeds <= (others => '0');
                redLeds <= (others => '0');
          when DT1 =>
                deal           <= '1';
                dealTo         <= '0';
                dealToCardSlot <= "00";
                greenLeds <= (others => '0');
                redLeds <= (others => '0');
          when PT2 =>
                deal           <= '1';
                dealTo         <= '1';
                dealToCardSlot <= "10";
                greenLeds <= (others => '0');
                redLeds <= (others => '0');
          when PT3 =>
                deal           <= '1';
                dealTo         <= '1';
                dealToCardSlot <= "11";
                greenLeds <= (others => '0');
                redLeds <= (others => '0');
          when DT2 =>
                deal           <= '1';
                dealTo         <= '0';
                dealToCardSlot <= "01";
                greenLeds <= (others => '0');
                redLeds <= (others => '0');
          when DT3 =>
                deal           <= '1';
                dealTo         <= '0';
                dealToCardSlot <= "10";
                greenLeds <= (others => '0');
                redLeds <= (others => '0');
          when DT4 =>
                deal           <= '1';
                dealTo         <= '0';
                dealToCardSlot <= "11";
                greenLeds <= (others => '0');
                redLeds <= (others => '0');
          when WIN =>
                deal           <= '0';
                dealTo         <= '0';
                dealToCardSlot <= "00";
                if(playerWins) then
                    greenLeds <= (others => '1');
                elsif(dealerWins) then
                    redLeds <= (others => '1');
                else
                    greenLeds <= (others => '0');
                    redLeds <= (others => '0');
                end if;
          when ENDGAME =>
                deal           <= '0';
                dealTo         <= '1';
                dealToCardSlot <= "00";
                greenLeds <= (others => '0');
                redLeds <= (others => '0');
          when others =>
                deal           <= '0';
                dealTo         <= '0';
                dealToCardSlot <= "00";
                greenLeds <= (others => '0');
                redLeds <= (others => '0');
          end case;
  else
    deal           <= '0';
    dealTo         <= '0';
    dealToCardSlot <= "00";
    greenLeds <= (others => '0');
    redLeds <= (others => '0');
  end if;
end process;

person Community    schedule 01.06.2015    source источник


Ответы (1)


      when WIN =>
            deal           <= '0';
            dealTo         <= '0';
            dealToCardSlot <= "00";
            if(playerWins) then
                greenLeds <= (others => '1');
            elsif(dealerWins) then
                redLeds <= (others => '1');
            else
                greenLeds <= (others => '0');
                redLeds <= (others => '0');
            end if;

Вы не назначаете redLeds, если playerWins ложно, а dealerWins истинно. Точно так же вы не назначаете greenLeds, если playerWins истинно.

person Jonathan Drolet    schedule 01.06.2015