user4907284
user4907284

Reputation:

LATCH Primitive disables outputs?

So I understand the concept of a latch, but I'm not seeing how I am inferring one here as my else condition should cover all the possible paths through this process. Quartus is telling me it is disabling the greenLEDS and redLEDs because of LATCH primitive, as well as there is an inferred latch on them. Am I missing something here?

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;

Upvotes: 0

Views: 327

Answers (1)

Jonathan Drolet
Jonathan Drolet

Reputation: 3388

      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;

You do not assign redLeds if playerWins is false and dealerWins is true. Likewise, you do not assign greenLeds if playerWins is true.

Upvotes: 2

Related Questions