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

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

dr[15..0], которые начинаются с 00. Поэтому вам нужно только указать общую для всех вариантов часть кода, те 00, а в остальных разрядах кода поставить X Такой прием позволит сделать проект, требующий меньше устройств и ресурсов

Приведенный ниже пример decode4.tdf показывает использование Стандартной параметризируемой функции lpm decode в задаче разработки дешифратора, аналогичной примеру decodel .tdf

INCLUDE Ipmdecode. Д.ПС ;

SUBDESIGN decode4

address[15..0] : INPUT; chi.p enable . OUTPUT;

BEGIN

chip enable = lpin decode (.data[] =address [ ]) WITH (LPM WIDTH=16, LPM DECODES=210) RETURNS (.eqtH 0370 ]); END;

3.3.6, Использование для переменных значений по умолчанию

Можно определить значения по умолчанию для узла или группы, которые будут автоматически использоваться, если в файле их значения не будут заданы Язык AHDL позволяет присваивать значение узлу или группе в файле неоднократно Если при этом произойдет конфликт, система автоматически будет использовать значения по умолчанию Если значения по умолчанию не были заданы, используется значение GND

Объявление значений по умолчанию DEFAULTS можно использовать для задания переменных в таблице истинности, операторах IF и CASE

Примечание. Не следует путать значения по умолчанию для переменных со значениями по умолчанию для портов которые задаются в секции SUBDESIGN

Ниже приводится файл defaultl.tdf, в котором происходит оценка входов и выбор соответствующего ASCII кода

SUBDESIGN defaultl

1[3..0] : INPUT;

ascii code[7. 0] . OUTPUT,

BEGIN

DEFAULTS

ascii code[] = B 00111111 ;% ASCII question mark % END DEFAULTS, TABLE

i[3 0] => ascii code[]; B 1000 => B 01100001 , % a % B 0100 => B 01100010 ; % b % BOOIO => B 01100011 ; % c % BOOOl => B 01100100 , % d % END TABLE,

END,

Если значение входа совпадает с одним из значений в левой части таблицы, код на выходе приобретает соответствующее значение ASCII кода в правой части таблицы Если входное значение не совпадает ни с одним из (левых) табличных значений, выходу будет присвоено значение по умолчанию В 00111111 (вопросительный знак)

В приведенном ниже файле default2.tdf показано, как при многократном присваивании узлу разных значений возникает конфликт, и как он разрешается средствами AHDL

SUBDESIGN default2 (

а, b, с . INPUT,

select a, select b, select c INPUT; wire or, wire and . OUTPUT, )

BEGIN

DEFAULTS

wire or = GND,

wire and = VCC, END DEFAULTS, IF select a THEN

wire or = a; wireand = a,

END IF, IF select b THEN

wire or = b; wire and = b,

END IF,

IF select c THEN

wire or = c; wire and = c;

END IF,

END;

В данном примере выход wire or устанавливается равным а, Ь, или с в зависимости от состояния входных сигналов select a, se-lect b и select c. Если ни один из них не равен VCC, то выход wire or принимает значение по умолчанию, равное GND

Если более чем один сигнал (select a, select b или select e) равен VCC, то wire or равно результату логической операции ИЛИ над соответствующими входными сигналами Например, если se-lect a и select b равны VCC, то wire or равно а ИЛИ b

С сигналом wlre and производятся аналогичные действия, но он Становится равным VCC, когда входные сигналы select равны VCC, и равен логическому И от соответствующих входных сигналов, если более чем один из них равен VCC

3.3.7. Реализация логики с активным низким уровнем

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

Ниже приводится файл daisy.tdf, который представляет модуль арбитражной схемы для соединения цепочкой (daisy chain) Данный модуль делает запрос на доступ к шине для предыдущего (в цепочке) модуля Он получает запрос на доступ к шине от самого себя и от следующего (в цепочке) модуля Доступ к шине предоставляется тому модулю, у которого приоритет выше

SUBDESIGN daisy (

/local request . INPUT; /local grant OUTPUT,

/request in . INPUT; % from lower priority % /request out OUTPUT; % to higher priority %

/grant in INPUT; % from higher priority % /grant out OUTPUT. % to lower priority % )



BEGIN

DEFAULTS

/local grant = VCC; % active-low output % /request out = VCC; % signals should default % /grant out = VCC; % to VCC % END DEFAULTS; IF /request in = GND 4t /local request = GND THEN

/request out = GND; END IF;

IF /grant in = GND THEN IF /local reque8t == GND THEN

/local grant = GND; ELSIF /request in = GND THEN

/grant out = GND; END IF;

END IF; END;

Bee сигналы в данном файле имеют активный низкий уровень фирма Altera рекомендует помечать имена сигналов с низким активным уровнем, например первым символом в имени ставить символ который не является оператором, и использовать его постоянно

В операторе IF проверяется, является ли модуль активным, те равен ли он GND Если модуль оказывается активным, реализуются действия, записанные в операторе IF

В объявлении по умолчанию DEFAULTS считается, что сигналу присваивается значение VCC, если он не активен

3.3.8. Реализация двунаправленных выводов

Система MAX+PLUS II позволяет конфигурировать порты ввода/вывода (I/O) в устройствах Altera как двунаправленные порты. Двунаправленный вывод задается как порт BIDIR, который подсоединяется к выходу примитива TRI Сигнал между этим выводом и буфером стремя состояниями является двунаправленным, и его можно использовать в проекте для запуска других логических схем

Приводимый ниже файл bus reg2.tdf реализует регистр, который производит выборку значения, найденного на шине с тремя состояниями, а также может передать обратно на шину хранимое значение

SUBDESIGN bus reg2

FUNCTION bus reg2 (elk, SUBDESIGN bidirl

oe) RETURNS (io);

elk oe . lo :

INPUT; INPUT; BIDIR;

BEGIN

lo = TRI(DFF(io, elk ), oe) ; END,

Двунаправленный сигнал io, запускаемый примитивом TRI, используется в качестве входа d для D-триггера (DFF) Запятые в конце списка параметров отделяют места для сигналов триггера cirn и рт Эти сигналы по умолчанию установлены в неактивное состояние

Двунаправленный вывод можно также использовать для подсоединения TDF-ФАЙЛа более низкого уровня к выводу с высоким уровнем Прототип функции для TDF-ФАЙЛа более низкого уровня должен содержать двунаправленный вывод в предложении RETURNS. В приведенном ниже файле bidirl .tdf даны четыре примера использования макрофункции bus reg2

elk, oe : io[3..0]

INPUT; ; BIDIR;

BEGIN

100 = bus reg2(elk, oe);

101 = bus reg2(elk, oe);

102 = bus reg2(elk, oe);

103 bus reg2 (elk, oe); END,

3.4. ПОСЛЕДОВАТЕЛЬНОСТНАЯ ЛОГИКА

Логическая схема называется последовательностной, если выходы в заданный момент времени являются функцией входов не только в тот же момент, но и во все предыдущие моменты времени Таким образом, в последовательностную схему должны входить некоторые элементы памяти (триггеры) В языке AHDL последова-тельностная логика реализована цифровыми автоматами с памятью (state machines), регистрами и триггерами При этом средства описания цифровых автоматов занимают особое место. Кроме того, к последовательностным логическим схемам относятся различные счетчики и контроллеры.

3.4.1. Объявление регистров

Регистры используются для хранения значений данных и промежуточных результатов счетчика, тактирование осуществляется синхросигналом Регистр создается его объявлением в секции VARIABLE

Для подсоединения примера примитива, макрофункции или цифрового автомата к другой логике в TDF-ФАЙЛ можно использовать порты Порт примера описывается в следующем формате <имя примера>.<имя порта>.

Имя порта - это вход или выход примитива, макрофункции или цифрового автомата, что является синонимом имени вывода в файлах Проектов (GDF-файл), *.WDF и других.

Ниже приводится файл bur reg.tdf, содержащий байтовый регистр, который фиксирует значения на входах d по выходам q на фронте синхроимпульса, когда уровень загрузки высокий

SUBDESIGN bur reg (

elk, load, d[7..0] : INPUT; q[7..0] : OUTPUT;

VARIABLE

£f[7..0] BEGIN

ff [] .elk

ff [] .ena

ff[].d =

q[] = [] -q;

END;

; DFFE;

= elk; = load; d[];

Как видно из файла, регистр объявлен в секции VARIABLE как D-триггер с разрешением (DFFE). В первом булевом уравнении в логической секции происходит соединение входа тактового сигнала



подпроекта к портам тактового сигнала триггеров ff[7 0] Во втором уравнении отпирающий тактовый сигнал соединяется с загрузкой В третьем уравнении входы данных подпроекта соединяются с портами данных триггеров U[7 0]. В четвертом уравнении выходы подпроекта соединяются с выходами триггеров Все четыре уравнения выполняются одновременно

Можно также в секции VARIABLE объявить Т-, JK- и SR-триггеры и затем использовать их в логической секции При использовании Т-триггеров придется в третьем уравнении изменить порт d на t. При использовании JK- и SR-триггеров вместо третьего уравнения придется записать два уравнения, в которых происходит соединение портов j и к или S и г с сигналами

Примечание. При загрузке регистра по заданному фронту глобального тактового сигнала фирма Altera рекомендует использовать вход разрешения одного из регистров: DFFE, TFFE. JKFFE или SRFFE. чтобы контролировать загрузку регистра

3.4.2. Объявление регистровых выходов

Можно объявить регистровые выходы, если объявить выходы подпроекта как D-триггеры в секции VARIABLE

Приведенный ниже файл reg out.tdf выполняет те же функции, что и предыдущий файл bur.reg.tdf, но имеет регистровые выходы

StreDESIGN reg out (

elk, load, d[7 0] . INPUT, q[7 .0] OUTPUT,

VARIABLE

q[7 .0] . DFFE,

BEGIN

q[].elk = elk, q[].ena = load, qCl = d[b

END,

При присвоении значения регистровому выходу в логической секции это значение формирует входные d сигналы регистров Выход регистра не изменяется до тех пор, пока не придет фронт синхросигнала Для определения тактирующего сигнала регистра нужно использовать описание в следующем формате <имя выходного вывода> elk для входа тактирующего сигнала регистра в логической секции Глобальный синхросигнал можно реализовать примитивом GLOBAL или выбором в диалоговом окне компилятора Logic Synthesis {логический синтез) опции Automatic Global Clock

Каждый отпирающий D-триггер-защелка, объявленный в секции VARIABLE, возбуждает выход с таким же именем, поэтому можно обращаться к q выходам объявленных триггеров без использования q порта этих триггеров

3.4.3. Создание счетчиков

Счетчиками называются последовательностные логические схемы для счета тактовых импульсов В некоторых счетчиках реализован счет вперед и назад (реверсивные счетчики), в некоторые счетчики можно загружать данные, а также обнулять их Счетчики обычно определяют как D-триггеры (DFF и DFFE) и используют операторы IF

Ниже приведен файл ahdient.tdf, который реализует 16-битовый загружаемый счетчик со сбросом

SUBDESIGN ahdlent (

elk, load, ena, elr, d[15..0] : INPUT; q[15..0] : OUTPUT;

VARIABLE

eountllS..0] . DFF,

BEGIN

count[J.elk = elk, count[].elrn = elr; IF load THEN

eount[] .d = d[];

ELSIF ena THEN count[].d = count[] q + 1, ELSE

count[].d = count[] q, END IF;

q[] = count!J;

END,

В данном файле в секции VARIABLE объявлены 16 D-триггеров и им присвоены имена от eountO до eounti 5. В операторе IF определяется значение, загружаемое в триггеры по фронту синхросигнала (например, если сигнал загрузки имеет высокий уровень, то триггерам присваивается значение d[ ])

3.5. ЦИФРОВЫЕ АВТОМАТЫ С ПАМЯТЬЮ (STATE MASHINE)

Цифровые автоматы так же, как таблицы истинности и булевы уравнения, легко реализуются в языке AHDL Язык структурирован, поэтому пользователь может либо сам назначить биты и значения состояний, либо предоставить эту работу компилятору системы MAX+PLUS

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

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

♦ назначает биты, выбирая для каждого бита либо Т-триггер, либо D-триггер,

присваивает Значения состояний,

♦ применяет сложные методы логического синтеза для попуче-ния уравнений возбуждения

По желанию пользователя можно задать в TDF-файле переходы в машине состояний с помощью объявления таблицы истинности

В языке AHDL для задания цифрового автомата нужно включить в TDF-файл следующие элементы

объявление цифрового автомата (в секции VARIABLE),

* булевы уравнения управления (в логической секции),

переходы между состояниями (в логической секции) Цифровые автоматы в языке AHDL можно также экспортировать

и импортировать, совершая обмен между файлами типа TDF и (GDF-файл) или * WDR при этом входной или выходной сигнал задается как порт цифрового автомата в секции SUBDESIGN



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 - 2021 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.