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

Чем сигнал отличается от переменной в VHDL

В предыдущем уроке мы узнали, как объявить переменную в процессе. Переменные хороши для создания алгоритмов внутри процесса, но они недоступны для внешнего мира. Если область действия переменной находится только в пределах одного процесса, как она может взаимодействовать с любой другой логикой? Решением для этого является сигнал .

Сигналы объявляются между architecture <architecture_name> of <entity_name> is строка и begin операторы в файле VHDL. Это называется декларативной частью архитектуры.

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

Синтаксис объявления сигнала:
signal <name> : <type>;

При желании сигнал может быть объявлен с начальным значением:
signal <name> : <type> := <initial_value>;

Упражнение

В этом видеоуроке мы научимся объявлять сигнал. Мы также узнаем основное различие между переменной и сигналом:

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

06

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

15 

Анализ

Мы создали сигнал и переменную с одинаковым начальным значением 0. В нашем процессе мы обращались с ними точно так же, но распечатки показывают, что они вели себя по-разному. Сначала мы увидели, что присваивание переменной и сигналу в VHDL записывается по-разному. Присвоение переменной использует := оператор, в то время как назначение сигнала использует <= оператор.

MyVariable ведет себя так, как можно было бы ожидать от переменной. В первой итерации цикла оно увеличивается до 1, а затем до 2. Последняя распечатка из первой итерации показывает, что его значение по-прежнему равно 2, как и следовало ожидать.

MySignal ведет себя немного иначе. Первое приращение +1, похоже, не имеет никакого эффекта. Распечатка показывает, что его значение по-прежнему равно 0, начальному значению. То же самое верно и после второго приращения +1. Теперь значение MyVariable равно 2, но значение MySignal по-прежнему 0. После wait for 10 ns; третья распечатка показывает, что значение MySignal теперь равно 1. Последующие распечатки также следуют этому шаблону.

Что это за колдовство? Я дам вам подсказку, wait for 10 ns; имеет какое-то отношение к этому. Сигналы обновляются только тогда, когда процесс приостановлен. Наш процесс приостанавливается только в одном месте, в wait for 10 ns; . Таким образом, значение сигнала меняется только каждый раз, когда эта линия попадает. 10 наносекунд — это произвольное значение, это может быть что угодно, даже 0 наносекунд. Попробуйте!

Другим важным наблюдением является то, что событие, несмотря на то, что сигнал был дважды увеличен до wait , его значение увеличивается только один раз. Это связано с тем, что при назначении сигналу в процессе последнее назначение «выигрывает». <= оператор только назначает новое значение на сигнал, оно не изменяется до тех пор, пока не будет wait . Следовательно, при втором приращении MySignal , 1 добавляется к его старому ценность. При повторном увеличении первое приращение полностью теряется.

Вывод

  • Переменная может использоваться в рамках одного процесса, тогда как сигналы имеют более широкий охват.
  • Назначение переменной вступает в силу немедленно, а сигналы обновляются только тогда, когда процесс приостанавливается.
  • Если сигнал назначается несколько раз без wait , последнее задание «выигрывает»

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


VHDL

  1. Подписанный и неподписанный в VHDL
  2. Переменные — пример VHDL
  3. Чем облачные вычисления отличаются от традиционных вычислений?
  4. Как создать список строк в VHDL
  5. Как остановить симуляцию в тестовом стенде VHDL
  6. Как создать ШИМ-контроллер на VHDL
  7. Как генерировать случайные числа в VHDL
  8. Как использовать процедуру в процессе в VHDL
  9. Как использовать функцию в VHDL
  10. Что такое навигационная спутниковая система BeiDou? Чем он отличается от GPS?