- •Предисловие
- •1. Структура проекта на ahdl
- •Оператор options
- •Оператор assert
- •Раздел variable используется для описания и/или генерации переменных, используемых в разделе Logic.
- •Раздел Variable может также содержать операторы If Generate, которые могут быть использованы для генерирования объектов, узлов, регистров, конечных автоматов, и псевдоимен конечных автоматов.
- •2. Элементы языка ahdl
- •2.1. Зарезервированные слова и идентификаторы
- •2.2. Символы
- •2.3. Строковые и символьные имена
- •2.4. Числа
- •2.5. Арифметические и логические выражения
- •2.6. Встроенные оценочные функции
- •2.7. Шины (группы), диапазоны и поддиапазоны шин
- •3. Примитивы и мегафункции
- •3.1. Обращение к примитивам и мегафункциям
- •1. Непосредственное обращение
- •2. Использование элемента как переменной
- •3.2. Примитивы
- •Примитивы триггеров
- •3.3. Библиотека параметризуемых функций (lpm)
- •1. Пример использования lpm_and, _or, _xor, _inv функций
- •2. Пример использования функции lpm_decode
- •3. Пример использования функций lpm_mux, busmux, mux
- •Пример использования функций lpm_counter, _latch, _ff,
- •5. Пример использования функций lpm_add_sub, _compare, _mult
- •6. Пример использования функции lpm_ram_dq
- •4. Описание логических схем
- •4.1. Операторы Оператор if then
- •Оператор case
- •Оператор defaults
- •Оператор if generate
- •Оператор for generate
- •Оператор truth table
- •4.2. Конечные автоматы
- •5. Основы проектирования плис с
- •Текстовой редактор
- •Литература
- •Прототипы примитивов буферов
- •Приложение 2 Прототипы примитивов триггеров
- •Приложение 3 Прототипы мегафункций
- •Содержание
- •Основы языка описания аппаратуры
- •Методические указания
- •630092, Г. Новосибирск, пр. К. Маркса, 20
3. Примитивы и мегафункции
Примитив – простейший блок, не содержащий параметров и выполняющий только определенную функцию.
Мегафункция – сложный или высокоуровневый блок, который можно использовать совместно с примитивами вентилей и триггеров и/или с макрофункциями
Параметризуемая функция – логическая функция, использующая параметры для достижения масштабируемости, адаптируемости и эффективной реализации в ПЛИС.
Библиотека параметризуемых функций (LPM) – технологически-независимая библиотека логических функций, параметризуемая для достижения масштабируемости и адаптируемости.
3.1. Обращение к примитивам и мегафункциям
В отличие от мегафункций при обращении к примитивам не требуется указывать ссылку на библиотечный файл (include «имя.inc») и параметры. В остальном обращение к примитиву и мегафункции подобно. Можно выделить два основных типа вызова.
1. Непосредственное обращение
Пример:
Прототип D триггера в AHDL имеет вид
FUNCTION DFF (D, CLK, CLRN, PRN) RETURNS (Q)
Мегафункция lpm_ff имеет вид
FUNCTION lpm_ff (data[LPM_WIDTH-1..0], clock, enable, sclr, sset,
sload, aclr, aset, aload)
WITH (LPM_WIDTH, LPM_AVALUE, LPM_SVALUE,
LPM_PVALUE, LPM_FFTYPE)
RETURNS (q[LPM_WIDTH-1..0])
Существует два варианта непосредственного обращения:
1.1. В логической секции на месте входных сигналов примитива DFF и мегафункции указываются сигналы, описанные в секциях subdesign и variable:
My_out_Dtrig = DFF ( data_in, clock, reset, set)
Out_FF[7..0] = lpm_ff(dataRG[], clock) WITH(LPM_WIDTH = 8)
RETURNS(.q[])
1.2. В логической секции входным сигналам примитива DFF и мегафункции (.входной сигнал вызываемого элемента = сигнал) присваиваются сигналы, описанные в секциях subdesign и variable:
My_out_Dtrig = DFF ( .clrn = reset, .clk = clock, .D = data_in,
prn = set )
Out_FF[7..0] = lpm_ff(.data[] = dataRG[], .clock = clock)
WITH(LPM_WIDTH = 8) RETURNS(.q[])
2. Использование элемента как переменной
Пример:
Include “lpm_ff.inc”;
Subdesign example
(
Data, clock, reset,set :input;
Out_Dtrig, out_RG[7..0] :output;
dataRG[7..0] :input;
)
Variable
Dtrig :DFF;
REG :lpm_ff () WITH (LPM_WIDTH = 8);
Begin
-- обращение к D триггеру
Dtrig.D = Data;
Dtrig.clk = clock;
Dtrig.(prn, clrn) = ( set, reset);
Out_Dtrig = Dtrig.q;
-- обращение к lpm_ff
REG..data[] = dataRG[];
REG..clock = clock;
out_RG[] = REG..q[];
End;
При объявлении мегафункции как переменной необходимо указать используемые параметры.
3.2. Примитивы
В AHDL примитивы делятся на примитивы буферов и примитивы триггеров.
Примитивы буферов
CARRY – буфер цепочечного переноса;
LCELL – неудаляемый буфер размещения логической ячейки;
SOFT –удаляемый буфер размещения логической ячейки;
CASCADE – буфер каскадного наращивания логической функции;
EXP – буфер логического расширителя;
TRI – буфер выхода с Z-состоянием;
OPNDRN – буфер выхода с открытым коллектором;
GLOBAL – буфер глобальной цепи распространения управляющего сигнала.
Прототипы примитивов буферов приведены в прил. 1.