Главная страница  Автономные управляющие системы 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [ 23 ] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

BEGIH

counter.elk = elk; counter.dnup GND;

decoder.(d,c,b,a) = counter.(qd,gc,qb,ga); outC15..01 decoder.qClS..0]; END;

В данном файле используются директивы INCLUDE для импортирования прототипов функций для двух макрофункций фирмы Altera 4count и 16dmux В секции VARIABLE объявляются две переменные counter и decoder как примеры этих макрофункций В логической секции определяются входные порты для обеих макрофункций в формате <имя переменной-примера>.<имя порта> (Они ставятся в левой части булевых уравнений, а выходные порты - справа ) Порядок портов в прототипе функции не важен, так как имена портов в логической секции перечисляются явно

Ниже приведен файл mecroZ.tdf, выполняющий те же функции, что и предыдущий, но макрофункции в нем вызываются непосредственной ссылкой.

INCLUDE 4oount ;

INCLUDE 16dinux ,

SUBDESIGN шасго2

elk : INPUT;

out[15..0] : OUTPUT;

VARIABLE

q[3..0] : NODE;

BEGIN

(q[3..0], ) = 4count (dk, , , , , GND,

out[15..0I 16dmux (.(d, c, b, a)=q[3..0]), % equivalent in-line ref. with positional port association %

% out[15..0] = 16dmux (q[3..0]);

END;

Вызов макрофункций 4oount и 16dmux осуществляется в логической секции непосредственной ссылкой (в правой части булевых уравнений)

Ниже приведены прототипы этих макрофункций, записанные в файлах 4count.inc 16dmux.inc:

FUNCTION 4count (elk, elrn, setn, Idn, cin, dnup, d, c, b, a)

RETURNS (qd, qc, qb, qa, OOut); FUNCTION 16dmux (d, c, b, a) RETURNS (q[15 .0));

Соединение портов показано в логической секции файла maoro2.tdf Порядок портов важен, так как должно быть однозначное соответствие между портами, описанными в прототипе функции и при ее реализации в логической секции В данном примере запятыми отделяются (но не перечисляются) порты, для которых не делается явного подключения

3.6.2. Создание и применение пользовательских макрофункций

В файлах, написанных на AHOL, можно легко создавать и использовать пользовательские макрофункции, выполнив следующие действия

♦ создать логику для макрофункции в файле проекта;

♦ определить порты макрофункции в объявлении прототипа функции

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

Объявление прототипов функций может быть размещено в 1п-clucle-файле, который вызывается в пользовательском файле. Используя команду Create Default Include File, можно автоматически создавать lnclude-файл с прототипом функции для любого файла проекта

♦ вставить в файл пример макрофункции с помощью объявления примера в секции VARIABLE или с помощью непосредственной ссылки в тексте,

♦ использовать макрофункцию в файле

3.6.3, Определение пользовательской макрофункции

Для использования макрофункции ее нужно либо включить в описание прототипа функции в TDF-файле, либо указать в директиве INCLUDE файла TDF имя lnclude-файла, содержащего прототип этой макрофункции Как уже упоминалось выше, lnclude-файлы можно создавать автоматически

Ниже приводится файл keyboard tdf, в котором реализован кодировщик для 16-клавишной клавиатуры

TITLE Keyboard Encoder ; INCLUDE 74151 ; INCLUDE 74154 ; INCLUDE 4oount ;

FUNCTION debounoe (oik, key pressed)

RETURNS (pulse); SUBDESIGN keyboard (

elk . INPUT, % 50-KHz clock % col[3..0] INPUT, % keyboard oolunms % row[3. 0], dC3..0] : OUTPUT, % keyboard rows, key code % strobe OUTPUT; % key code is valid % )

VARIABLE

key pressed NODE; % VCC when key d[3 0] is pressed % mux : 74151;

decoder 74154, counter : 4count; opened[3. .0] : TRI;

BEGIN

% Drive keyboard rows with a decoder and % % open-collector outputs. %

row[] = openool[].out; opened [ ] . in = GND; opened!] oe = decoder. (o0n,oln,o2n,o3n) ; decoder (b,a) = counter.(qd,qo);

% Sense keyboard columns with a multiplexer % mux.d[3..0] = ool[3 0], mux. (b,a) = counter. (<,qa); key pressed = mux y; % Scan keyboard until a key is pressed. % % Drive keys code onto d[] outputs % counter.oik = oik;



counter.oin = key pressed; dt] = counter.(qd,qo,qb,qa), % Generate strobe when key has settled %

strobe = debounce(elk, key pressed);

END;

В данном примере в директивах INCLUDE указываются файлы прототипов функции для стандартных макрофункций фирмы Altera 4count, 74151 и 74154

Отдельно в файле дан прототип функции для макрофункции de-bounce, в котором описаны входы elk и key pressed и выход pulse

Примеры макрофункций 4count, 74151 и 74154 вызываются объявлением примеров в секции VARIABLE Пример макрофункции debounce вызывается непосредственной ссылкой в тексте логической секции

3.6.4. Импорт и экспорт цифровых автоматов (state machine)

Операции импорта и экспорта цифровых автоматов осуществляются между файлами TDF и другими файлами проекта путем задания входного или выходного порта как входа автомата (MACHINE INPUT) и его выхода (MACHINE OUTPUT) в секции SUBDESIGN Прототип функции, который представляет собой файл, содержащий мащину состояний, должен указывать, какие входы и выходы принадлежат машине состояний Это осуществляется снабжением имен сигналов префиксом - ключевым словом Machine

Замечание. Порты типа MACHINE INPUT и MACHINE OUTPUT нельзя использовать в файле проекта верхнего уровня

Можно переименовать автомат, дав ему временное имя псевдоним) в объявлении MACHINE в секции VARIABLE Псевдоним цифрового автомата можно использовать в том файле, где создается цифровой автомат (state machine), или в том файле, где используется порт MACHINE INPUT для импортирования цифрового автомата Это имя можно потом использовать вместо первоначального имени цифрового автомата

Ниже приводится файл ss def.tdf, который определяет и экспортирует цифровой автомат ss с портом ss out типа MACHINE OUTPUT

StIBDESIGN ss def (

elk, reset, count INPUT, ss out MACHINE OUTPUT,

VARIABLE

ss MACHINE WITH STATES (sl, s2, s3, s4,

s5),

BEGIN

ss out = ss, CASE ss IS

WHEN sl=>

IF count THEN ss = s2, ELSE ss = sl, END IF, WHEN s2=>

IF count THEN ss = s3, ELSE ss = s2; END IF, WHEN s3=>

IF count THEN ss = s4; ELSE ss = s3, END IF, WHEN s4=>

IF count THEN ss = s5; ELSE ss = s4, END IF; WHEN s5=>

IF count THEN ss = sl, ELSE ss = s5; END IF, END CASE;

ss. (elk, reset) = (elk, reset);

END,

Ниже приводится файл ss use.tdf, который импортирует цифровой автомат с портом ss in типа MACHINE INPUT SUBDESIGN ss use

ss in out .

: MACHINE INPUT; OUTPUT;

BEGIN

out = (ss in = s2) OR (ss in = s4) ;

END;

Ниже приведен файл topi.tdf, в котором используются непосредственные ссылки в тексте для вставки примеров функций ss def и ss use В прототипах этих функций содержится ключевое слово MACHINE для указания, какие входы и выходы являются цифровыми автоматами с памятью (state machine)

FUNCTION ss def (elk, reset, count) RETURNS (MACHINE ss out),

FUNCTION ss use (MACHINE ss in) RETURNS (out) ; DESIGN IS topi DEVICE IS AUTO , SUBDESIGN topi

sys clk, /reset, hold INPUT; sync out OUTPUT,

VARIABLE

ss re£ MACHINE; % Machine Alias Declaration %

BEGIN

ss ref = ss def(sy8 clk, /reset, hold); syno out = ss use(ss ref),

END,

Внешний цифровой автомат можно также реализовать в TDF-файле верхнего уровня с объявлением примера в секции VARIABLE

Ниже приведен файл top2.tdf, который имеет туже функцию, что и файл topi.tdf, но для вызова макрофункций используется объявление примеров

FUNCTION ss def (elk, reset, count) RETURNS (MACHINE ss out) ,

FUNCTION ss use (MACHINE ss in) RETURNS (out) ; DESIGN IS top2 DEVICE IS AUTO ; SUBDESIGN top2

sys olk, /reset, hold OUTPUT,

INPUT;

sync out

VARIABLE

sin inacro : S8 def; sync : ss use, BEGIN

sin inaoro. (elk, reset /reset, hold) ,

syno.ss in = sin inaoro. ss out, syno out = sync.out;

END,

count) = {sys olk.



3.7. УПРАВЛЕНИЕ СИНТЕЗОМ

3.7.1. Реализация примитивов LCELL и SOFT

Можно ограничить логический синтез с помощью замены переменных типа узел (NODE) примитивами SOFT и LCELL Переменные NODE и примитивы LCELL обеспечивают наилучшее управление логическим синтезом Примитивы SOFT обеспечивают более слабое управление логическим синтезом

Переменные NODE, которые объявляются в секции VARIABLE, не накладывают больших ограничений на логический синтез Во время синтеза модуль логического синтеза компилятора системы MAX+PLUS II заменяет каждый пример использования переменной NODE логикой, которую она представляет. Затем происходит минимизация логики до одной логической ячейки Этот метод обычно приводит к ускорению работы схемы, но в результате может получиться слишком сложная логика или же ее трудно свести к одной ячейке

Буферы SOFT обеспечивают лучшее управление использованием ресурсов, чем переменные NODE Модуль логического синтезатора выбирает, когда заменить примеры использования примитивов SOFT примитивами LCELL

Буферы SOFT могут помочь уничтожить логику, которая оказалась слишком сложной, и сделать проект проще, однако при этом может быть увеличено число логических операций и скорость выполнения программы соответственно уменьшится

Наиболее сильное управление процессом логического синтеза обеспечивается примитивами LCELL Модуль логического синтезатора минимизирует всю логику, которая запускает примитив LCELL, таким образом, чтобы можно было свести ее к одной логической ячейке Примитивы LCELL реализуются в виде одной логической ячейки (их нельзя убрать из проекта, даже если они имеют единственный вход). Если проект минимизирован до такой степени, что один примитив LCELL имеет единственный вход, в этом случае вместо примитивов LCELL можно использовать примитивы SOFT,

которые убираются в процессе логического синтеза Примечание При многоуровневом синтезе компилятор системы MAX+PLUS II автоматически помещает буферы SOFT в более выгодное место проекта, если включить опцию SOFT Buffer Insertion logic. Ниже приводятся две версии файла TDF - с переменными NODE и с примитивами SOFT В версии nodevar переменная odd parity объявлена как NODE, затем ей присваивается булево выражение dO $ d1 $... $ d8 В версии softbuf компилятор заменит некоторые примитивы SOFT примитивами LCELL во время обработки данных для лучшего использования ресурсов устройства

TDF with NODE TDF

Variables. StJBDESIGN nodevar

VARIABLE

odd parity : NODE; BEGIN

odd parity = dO 5 dl $ d2 5 d3 $ d4 5 d5 $ d6 5 d7 ? d8; END;

TDF with SOFT PrimitiveB StreDESIGN softbuf

VARIABLE

odd parity : NODE; BEGIN

odd parity = SOFT(dO ? dl $ d2) $ S0PT(d3 $ di $ d5) $ S0FT(d6 $ d? $ d8) ; END;

НИ одно из условий входа таблицы Для присвоения выходам таблицы истинности значения VCC можно использовать одно или несколько объявлений языка AHDL по умолчанию С помощью этих объявлений можно задать значения по умолчанию для соответствующих выходов

Например, если большинство выходов таблицы истинности равны 1, можно задать значение по умолчанию VCC. Примечание. Не следует путать значения по умолчанию для переменных

и портов которые присваиваются в секции SUBDESIGN

3.7.3. Присвоение битов и значений в цифровом автомате

Логический синтезатор автоматически минимизирует число битов состояния, требуемое для цифрового автомата При этом оптимизируется как использование устройства, так и характеристики его работы Однако некоторые цифровые автоматы могут работать быстрее, при значениях состояния, использующих число битов, большее минимального Для контроля этих случаев пользователь сам объявляет биты и значения для цифрового автомата

3.8. ЭЛЕМЕНТЫ ЯЗЫКА AHDL

3.8.1. Зарезервированные ключевые слова

Зарезервированные ключевые слова используются для следующих целей-

♦ для обозначения начала, конца и переходов в объявлениях языка AHDL,

♦ для обозначения предопределенных констант, т е GND и VCC

Ключевые слова можно использовать как символические имена только если они заключены в одинарных кавычках () Их можно также использовать в комментариях

Для того чтобы получить контекстовую помощь по ключевому слову, убедитесь, что ваш файл сохранен с расширением tdf, затем нажмите одновременно две кнопки Shift+F1 в окне текстового редактора Text Editor и щелкните кнопкой мыши Button 1 на ключевом слове

Aitera рекомендует все ключевые слова набирать прописными буквами.

Список всех зарезервированных ключевых слов языка AHDL

3.7.2. Значения констант по умолчанию

Логический синтезатор автоматически выполняет подключение к GND всех выходов таблицы истинности, если не удовлетворяется

FUNCTION

OTHERS

CASE

TABLE

JKFFE

BITS

SRFFE

NCLUDE

NODE

DFFE

WHEN

ELSE

WITH

XNOR

OPTIONS

GLOBAL

OUTPUT

BEGIN

RETURNS

BURIED

INPUT

SOFT

BIDIR

SRFF

CARRY

STATES

CASCADE

JKFF

SUBDESIGN

CLIQUE

LATCH

C0NNECTED P1NS

LCELL

TFFE

CONSTANT

MACHINE

THEN

DEFAULTS

MACRO

TITLE

DESIGN

MCELL

DEVICE

NAND

VARIABLE

ELSIF



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [ 23 ] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.