Почему я получаю ошибки в строках 56-61? - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь настроить проблему для конечных автоматов в лаборатории и продолжаю получать сообщения об ошибках при попытке компиляции в Quartus

Я пытался использовать запятые, операторы else, и кажется, что ничего не работает

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.All;

ENTITY SM_VHDL IS  -- Do not modify this entity statement!
  PORT(X       : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
       RESETN,
       CLOCK   : IN  STD_LOGIC;
       Z       : OUT STD_LOGIC;
       Q       : OUT STD_LOGIC_VECTOR(1 DOWNTO 0)  );
END SM_VHDL;       -- Do not modify this entity statement!


ARCHITECTURE behavior of SM_VHDL IS
  TYPE STATE_TYPE IS (A, B, C);
  SIGNAL state : STATE_TYPE;

BEGIN
    PROCESS(CLOCK, RESETN)
      BEGIN
        IF RESETN = '0' THEN
          state <= A;
        ELSIF CLOCK'EVENT AND CLOCK = '1' THEN
          CASE state IS
            WHEN A =>
              CASE X IS
                WHEN "00"   =>
                                        state <= B;
                                WHEN "11"   =>
                                        state <= C;
                                WHEN OTHERS =>
                                        state <= A;
              END CASE;
            WHEN B =>
              CASE X IS
                WHEN "10"   =>
                                        state <= A;
                                WHEN "11"   =>
                                        state <= C;
                                WHEN OTHERS =>
                                        state <= B;
              END CASE;
            WHEN C =>
              CASE X IS
                WHEN "00"   =>
                                        state <= B;
                                WHEN "01"   =>
                                        state <= A;
                                WHEN OTHERS =>
                                        state <= C;
              END CASE;
          END CASE;
        END IF;
      END PROCESS;

    Z  <= '1' WHEN C;
                  '0' WHEN A;
                  '0' WHEN B;

    Q  <= "00" WHEN A;
                  "01" WHEN B;
                  "10" WHEN C;
                  "11" WHEN "-";

END behavior;

Мне нужно это скомпилировать

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

КОГДА можно использовать только в логических условиях.A / B / C - все литералы STATE_TYPE.Вам нужно создать логический результат, сравнив сигнал состояния:

Z <=      '1' when STATE = C
     else '0' when STATE = A    -- This state not actually needed as a single ELSE would cover it
     else '0';

Я позволю вам разработать оператор для Q

0 голосов
/ 13 февраля 2019

Синтаксис для присвоения Z и Q неправильный для нескольких проблем:

  • Отсутствует WITH state SELECT ... до назначения
  • Использует ";"между when частями, используйте , вместо
  • Не могу использовать "-" (все равно) после последнего when, используйте OTHERS вместо

Обновленокод:

WITH state SELECT Z <=
      '1' WHEN C,
      '0' WHEN A,
      '0' WHEN B;

WITH state SELECT Q <=
      "00" WHEN A,
      "01" WHEN B,
      "10" WHEN C,
      "11" WHEN OTHERS;

Кстати.рассмотрите возможность использования ModelSim Starter Edition в качестве компилятора / симулятора перед переходом на Quartus, поскольку время компиляции быстрее, а сообщения часто лучше.

...