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

Как использовать функцию в VHDL

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

Если вы знакомы с функциями или методами из других языков программирования, вам должно быть легко понять функции VHDL. В VHDL мы не можем опускать возвращаемое значение или возвращать void, функция всегда должна что-то возвращать, а возвращаемое значение должно чему-то присваиваться.

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

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

Синтаксис объявления функции в VHDL:

06

Ключевое слово pure/impure является необязательным, хотя по умолчанию оно будет чистым, если ключевое слово опущено. Все параметры рассматриваются как константы внутри функции. Таким образом, их нельзя изменить. Значения по умолчанию являются необязательными, и функция всегда должна заканчиваться на 05. заявление.

У функций есть собственная декларативная область между 13 и 26 ключевые слова. Константы, сигналы или переменные, объявленные здесь, действительны только внутри самой функции, и они не сохранят свои значения при последующих вызовах функции.

Упражнение

В этом уроке мы сосредоточимся на чистой функции, нечистые функции будут рассмотрены в одном из следующих уроков этой серии.

В предыдущем уроке мы создали модуль контроллера светофора с помощью конечного автомата (FSM). Мы скопировали и вставили многие строки, содержащие расчеты таймера из одного состояния в другое, лишь слегка изменив одну константу.

Узнайте, как можно упростить код конечного автомата с помощью функции:

Окончательный код функции testbench :

15 

Окончательный код для модуля светофора :

23

Форма волны после ввода 38 команда в консоли ModelSim:

Форма волны с курсорами, добавленными при переходах к 44 и обратно. состояние:

Анализ

Мы заменили вычисления таймера из предыдущего урока 54 с вызовом нового 62 функция, которую мы создали:79 .

На первом скриншоте формы волны видно, что функция модуля не изменилась. Использование функций для повторяющихся задач — хорошая практика проектирования. Особенно, если вы можете заменить расчеты более читаемыми строками, содержащими такие термины, как 84. и 99 .

Еще одним преимуществом использования функций является то, что мы можем изменить реализацию всех таймеров сразу, вместо того, чтобы делать это построчно. Например, если бы мы написали 101 в 114 функции, все таймеры проработали бы на один такт слишком долго. Затем мы могли бы изменить это значение на 120. в 134 функция, и все таймеры будут зафиксированы сразу.

Если мы посмотрим на последний снимок экрана сигнала, то увидим, почему нам нужно вычесть 1 из значения таймера, возвращаемого из 141. функция. Этот сигнал проверяет продолжительность 152 состояние, оно должно длиться ровно пять секунд. Когда 167 сигнал меняется на 174 , 184 значение равно 0, и оно изменяется только после следующего такта. Итак, если бы мы насчитали до 500 тактов, 193 состояние на самом деле длилось бы 501 цикл. Если наш тестовый стенд работает на частоте 100 Гц, 500 тактовых циклов составляют ровно пять секунд.

Вывод

  • Функции могут принимать ноль или более параметров, но они всегда возвращают значение
  • Функции не могут содержать 206 заявления
  • Чистые функции не могут иметь побочных эффектов, а нечистые — могут.

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


VHDL

  1. Как мы используем молибден?
  2. Как создать список строк в VHDL
  3. Как остановить симуляцию в тестовом стенде VHDL
  4. Как создать ШИМ-контроллер на VHDL
  5. Как генерировать случайные числа в VHDL
  6. Как использовать процедуру в процессе в VHDL
  7. Как использовать нечистую функцию в VHDL
  8. Функция realloc() в библиотеке C:как использовать? Синтаксис и пример
  9. Функция free() в библиотеке C:как использовать? Учитесь на примере
  10. Как использовать шлифовальный станок