Язык AHDL

       

Подставляемая ссылка для реализации логической функции (In-Line Logic Function Reference)


Подставляемая ссылка для реализации логической функции представляет собой булевское выражение. Это быстрый способ для реализации логической функции, требующий лишь одну строку  в разделе Logic и не требующий объявления переменной.

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

Для реализации объекта примитива также используется подставляемая ссылка или производится описание в разделе объявления объектов. Однако в отличие от мега - и макрофункций логика функционирования примитивов предопределена, то есть нет необходимости определять логику функционирования примитива в отдельном файле проекта. В большинстве случаев нет необходимости использовать оператор Function Prototype для определения прототипа функции.

Следующие примеры демонстрируют прототипы функций compare

и lpm_add _sub. Функция compare  имеет входные порты a[3..0] и b[3..0], а также выходные порты less, equal, greater; функция lpm_add_sub имеет входные порты dataa[LPM_WIDTH-1..0], cin и add_sub, а также выходные порты result[LPM_WIDTH-1..0], cout и overflow.

FUNCTION compare (a[3..0], b[3..0])

            RETURNS (less, equal, greater);

FUNCTION lpm_add_sub (cin, dataa[LPM_WIDTH-1..0], datab[LPM_WIDTH-1..0],  add_sub)

            WITH (LPM_WIDTH, LPM_REPRESENTATION)

            RETURNS (result[LPM_WIDTH-1..0], cout, overflow);

Подставляемые ссылки  (in-line logic function references) для функций compare и lpm_add_sub

указываются в правой части показанного ниже выражения:

(clockwise, , counterclockwise) = compare(position[], target[]);

sum[] = lpm_add_sub (.datab[] = b[], .dataa[] = a[])

   WITH (LPM_WIDTH = 8)

   RETURNS (.result[]);



Подставляемая ссылка для логической функции имеет следующие характеристики:




¨    За именем функции справа от символа равенства (=) следует заключенный в круглые скобки список сигналов, содержащий символические имена, десятичные числа или группы разделенные между собой запятыми. Все эти компоненты описывают входные порты функции.

¨    В списке сигналов имена портов могут иметь позиционное соответствие, либо соответствие по имени:

*    В примере, показанном выше и демонстрирующем использование функции compare, имена переменных position[] и target[] имеют позиционное соответствие портам a[3..0] и b[3..0]. При использовании позиционного соответствия можно применять запятые для резервирования места под выходы, не подсоединяемые к конкретным переменным. В функции compare выход equal не подключается к переменным, поэтому необходимо использовать запятую для резервирования его места в правой части выражения.

*    В примере, показанном выше и демонстрирующем использование функции lpm_add_sub, входы .datab[] и .dataa[] соединяются соответственно с переменными b[] и a[] путем установления соответствия по имени. Соответствие между переменными и портами устанавливается посредством использования символа (=).

1.   Имена портов должны иметь следующий формат .<имя порта> как в правой, так и в левой  части подставляемой ссылки, использующей способ установления соответствия портов переменным по имени.

2.   Установление соответствия портов переменным по имени возможно лишь в правой части подставляемой ссылки. В левой части подставляемой ссылки всегда используется позиционное соответствие.

¨    В параметризируемой функции, за ключевым словом WITH и списком имен параметров следует список входных портов. Этот список заключается в круглые скобки, а имена параметров разделяются запятыми. Декларируются лишь те параметры, которые используются объектом; значения параметров отделяются от имен параметров посредством символа равенства. В примере, показанном выше и демонстрирующим использование функции lpm_add_sub, параметру LPM_WIDTH присвоено значение 8.



Если какому- либо параметру не присвоено никакого значения, то компилятор осуществляет поиск значений для этих параметров в том порядке, который описан в разделе “Оператор Parameters”.

¨    В левой части подставляемой ссылки выходы функции ставятся в соответствие переменным. В примере, показанном выше и демонстрирующем использование функции compare выходы less и greater поставлены в соответствие переменным clockwise и counterclockwise с использованием позиционного соответствия. Подобным же образом в примере для функции lpm_add_sub выходы result[]

поставлены в соответствие группе sum[]

с использованием позиционного соответствия.

¨    Значения переменных, которые определены где-либо в разделе Logic, являются значениями связанными с соответствующими им входами и выходами. В примере, показанном выше для функции compare,  значения position[]

и target[] являются значениями, подаваемыми на соответствующие входы функции compare. Значения выходных портов less и greater связаны с clockwise и counterwise, соответственно. Эти переменные могут быть использованы в других выражениях раздела Logic.


Содержание раздела