Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> VHDL

Как создать процесс со списком конфиденциальности в VHDL

Всегда следует использовать список деликатности. запускать процессы в производственных модулях. Списки чувствительности — это параметры процесса, в которых перечислены все сигналы, к которым этот процесс чувствителен. Если какой-либо из сигналов изменится, процесс проснется, и код внутри него будет выполнен.

Мы уже научились использовать wait on и wait until операторы для пробуждения процесса при изменении сигнала. Однако, если честно, я не так пишу большинство своих процессов.

Эта запись в блоге является частью серии учебных пособий по основам VHDL.

При написании кода VHDL стиль написания зависит от того, предназначен ли код для запуска только в симуляторе. Если я пишу код моделирования, как мы делали в этой серии руководств, я всегда используйте wait заявления для управления процессами. Если я пишу код, который собираюсь реализовать на физическом уровне, я никогда используйте wait заявления.

Синтаксис процесса со списком конфиденциальности:
process(<signal1>, <signal2>, ..) is
begin
    <main logic here>
end process;

Важной особенностью списка конфиденциальности является то, что все сигналы, которые считываются в процессе, должны быть в списке чувствительности. Однако симулятор не сообщит вам, если вы не добавите сигнал в список чувствительности, потому что это допустимо на языке VHDL. Проблема в том, что если вы этого не сделаете, код будет вести себя иначе при синтезе и использовании в физической реализации.

В VHDL-2008 ключевое слово all разрешено использовать вместо перечисления каждого сигнала. К сожалению, большинство программ для синтеза не поддерживают эту новую версию языка VHDL.

Упражнение

В этом видеоуроке мы узнаем, как создать процесс, используя список конфиденциальности в VHDL:

Окончательный код, который мы создали в этом руководстве:

entity T09_SensitivityListTb is
end entity;

architecture sim of T09_SensitivityListTb is

    signal CountUp   : integer := 0;
    signal CountDown : integer := 10;

begin

    process is
    begin

        CountUp   <= CountUp + 1;
        CountDown <= CountDown - 1;
        wait for 10 ns;

    end process;

    -- Process triggered using Wait On
    process is
    begin

        if CountUp = CountDown then
            report "Process A: Jackpot!";
        end if;

        wait on CountUp, CountDown;

    end process;

    -- Equivalent process using a sensitivity list
    process(CountUp, CountDown) is
    begin

        if CountUp = CountDown then
            report "Process B: Jackpot!";
        end if;

    end process;

end architecture;

Вывод в консоль симулятора, когда мы нажали кнопку запуска в ModelSim:

VSIM 2> run
# ** Note: Process A: Jackpot
#    Time: 40 ns  Iteration: 1  Instance: /t09_sensitivitylisttb
# ** Note: Process B: Jackpot
#    Time: 40 ns  Iteration: 1  Instance: /t09_sensitivitylisttb

Анализ

Из распечаток видно, что оба процесса ведут себя одинаково. Это связано с тем, что процесс со списком конфиденциальности по определению эквивалентен процессу с wait on в конце процесса.

Процессы со списками конфиденциальности обычно используются в коде, предназначенном для синтеза. Такой код обычно называют кодом уровня передачи регистров (RTL). Это условность, но на это есть веские причины. Хотя некоторые wait on и wait until операторы могут быть синтезированы, трудно сказать, какое оборудование это создаст.

Вывод

Перейти к следующему руководству »


VHDL

  1. Как создать список строк в VHDL
  2. Как создать управляемый Tcl тестовый стенд для модуля кодовой блокировки VHDL
  3. Как создать ШИМ-контроллер на VHDL
  4. Как создать кольцевой буфер FIFO в VHDL
  5. Как создать самопроверяющийся тестовый стенд
  6. Как создать связанный список в VHDL
  7. Как использовать процедуру в процессе в VHDL
  8. Как использовать нечистую функцию в VHDL
  9. Как использовать функцию в VHDL
  10. Как создать конечный автомат на VHDL