Язык AHDL

       

Порты


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

·     Порт, который является входом или выходом текущего файла, объявляется в разделе Subdesign.

·     Порт, который является входом или выходом экземпляра примитива или файла разработки более  низкого уровня, используется в разделе Logic.

Порты текущего файла

Порт, который является входом или выходом текущего файла объявляется в следующем формате в разделе Subdesign:

<имя порта>: <тип порта> [ = <значение по умолчанию> ]

Доступны следующие типы портов:

INPUT               MACHINE INPUT

OUTPUT                       MACHINE OUTPUT

BIDIR

Когда текстовой файл проекта является старшим в иерархии, имя порта синонимично с именем вывода. Дополнительное значение порта по умолчанию, которое может быть или VCC или GND, можно определить для типов портов INPUT и BIDIR. Это значение используется только если слева порт не подсоединен, когда экземпляр TDF применяется в файле разработки более высокого уровня.

Например:

SUBDESIGN top

(

foo, bar, clk1, clk2, c[4..0][6..0] : INPUT = VCC;

a0, a1, a2, a3, a4                       : OUTPUT;



b[7..0]                                       : BIDIR;

)

Вы можете импортировать и экспортировать конечные автоматы между TDF и другими файлами разработки, описывая входы и выходы как MACHINE INPUT или MACHINE OUTPUT в разделе Subdesign. Прототип функции, который представляет файл, должен указывать, какие порты принадлежат конечному автомату. MACHINE INPUT и MACHINE OUTPUT можно использовать только в файлах более низкого уровня в иерархии проекта.

Порты экземпляров

Порт, который является входом или выходом экземпляра логической функции присоединяется в разделе Logic. Для соединения логической функции с другими частями TDF, Вы вставляете экземпляр функции с помощью подставляемой ссылки, объявления Instance или конечного автомата с помощью State Machine и затем используете порты функции в разделе Logic.




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

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

В следующем примере D триггер объявляется как переменная reg в разделе Variable, а затем используется в разделе Logic:

VARIABLE

            reg : DFF;

BEGIN

            reg.clk = clk

            reg.d   = d

            out     = reg.q

END;

Имена портов используются в следующем формате в разделе Logic:

<имя экземпляра>.<имя порта>

<имя экземпляра> - это имя функции, данное пользователем. <имя порта> идентично с именем порта, который объявляется как вход или выход файла в разделе Subdesign TDF файла более низкого уровня или имя вывода в файле разработки другого типа. <имя порта> синонимично с именем порта символа (pinstub),  который представляет экземпляр файла разработки в GDF.

Все функции, поставляемые Altera, имеют предопределенные имена портов (pinstub), которые показываются в прототипе функции. Наиболее используемые имена портов примитивов показаны в следующей таблице:

Имя порта        Описание

.q                     Выход триггера или защелки

.d                     Вход данных триггера или защелки

.t          Вход T триггера

.j          J вход JK триггера

.k         K вход JK триггера

.s         Вход установки SR триггера

.r          Вход очистки SR триггера

.clk       Тактовый вход триггера

.ena     Вход разрешения тактирования триггера, разрешения фиксации защелки разрешения конечного автомата

.prn      Активный низкий вход предустановки триггера

.clrn     Активный низкий вход очистки триггера

.reset   Активный высокий вход сброса конечного автомата

.oe       Вход разрешения выхода  TRI примитива

.in        Первичный вход CARRY, CASCADE, EXP, TRI, OPNDRN, SOFT, GLOBAL, и LCELL примитивов

.out      Выход TRI, OPNDRN, SOFT, GLOBAL, и LCELL примитивов


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