Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AHDL.doc
Скачиваний:
20
Добавлен:
08.11.2018
Размер:
869.89 Кб
Скачать

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]