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

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

Общие золотые правиле системы MAX+PLUS II:

♦ в начале работы над новым проектом рекомендуется сразу же задать его имя как имя нового проекта с помощью меню Project Name, для того чтобы в дальнейшем его было бы легко компилировать Позже разработчик всегда может изменить имя проекта,

♦ используйте иерархические возможности системы MAX+PLUS II для перемещения между файлами проекта Для открытия файла нижнего уровня иерархии откройте файл верхнего уровня и затем используйте окно Hierarchy Display или Hierarchy Down и откройте файл более низкого уровня. Если разработчик выберает Open или Retrieve для открытия файла нижнего уровня, считается, что он является файлом верхнего уровня нового дерева и все назначения ресурсов, устройств и зондов сохраняются только для этой новой иерархии, а не для текущего проекта,

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

♦ не рекомендуется редактировать системные файлы MAX+PLUS II, в том числе файлы с расширением .ргЬ, файлы HIF или maxplus2.ini либо файлы <имя проекта>.п1,

♦ если разработчик желает переименовать файл проекта или вспомогательный файл, следует использовать команду Save As... Не рекомендуется переименовывать файлы проекта вне среды MAX+PLUS II {например, из MS-DOS или Windows File Manager),

♦ после завершения работы над проектом рекомендуется выполнить команду архивирования проекта Project Archive для создания резервной копии всего проекта (всех его файлов) На архивированную копию не повлияют никакие последующие редактирования

3.2. ИСПОЛЬЗОВАНИЕ ЧИСЕЛ И КОНСТАНТ В ЯЗЫКЕ AHDL

3.2.1. Использование чисел

Числа используются для представления констант в булевых выражениях и уравнениях Язык AHDL поддерживает все комбинации десятичных, двоичных, восьмеричных и шестнадцатеричных чисел Ниже приведен файл decodel .tdf, который представляет собой дешифратор адреса, генерирующий высокий активный уровень сигнала разрешения доступа к шине, если адрес равен шестнадца-теричному числу 370h

SUBDESIGN decodel t

address[15..0] : INPUT; chip enable . OUTPUT;

BEGIN

chip enable = (address[15..0] = H 0370 );

END;

B ЭТОМ примере десятичные числа использованы для указания размерности массива бит, которым записывается адрес шины Ше-стнадцатеричным числом Н 0370 записано значение адреса, при котором устанавливается высокий уровень сигнала

3.2.2. Использование констант

В файле AHDL можно использовать константы для описательных имен разных чисел. Такое имя, используемое на протяжении всего файла, может быть более информативным, чем число, например, имя UPPER LI несет больше информации, чем, например, число 103. В языке AHDL константы вводятся объявлением CONSTANT

Приведенный выше файл можно записать по-другому, используя вместо числа Н 0370 константу IO ADDRESS. CONSTANT IO ADDRESS = Н 0370 ; SUBDESIGN decodeZ (

a[15..0] : INPUT; ce ; OUTPUT;

BEGIN

ce = ( [15..0] == IO ADDRESS); END;

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

3.3. КОМБИНАЦИОННАЯ ЛОГИКА

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

3.3,1. Реализация булевых выражений и уравнений

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

В качестве примера приведен файл boolel .tdf, в котором даны два простых булевых выражения, представляющих два логических элемента

SUBDESIGN boolel

аО, al, b : INPUT; outl, out2 OUTPUT,

BEGIN

outl - al & <aO;

out2 = outl # b; END;

Здесь на выход outl выдается результат логической операции И, примененной ко входу al и инвертированному входу аО, а на выход out2 выдается результат применения логической операции И ЛИ к выходу outl и входу Ь Поскольку эти уравнения обрабатываются одновременно, последовательность их следования в файле не важна



3.3.2. Объявление NODE (узел)

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

Это полезно делать, если булево выражение повторяется несколько раз и его целесообразно заменить именем узла. Приведенный выше файл boolel tdf можно переписать по-другому. S(№DESIGN booleZ (

аО, al, b : INPtTP, out : OtJTPtJT,

VARIABLE

a equale 2 : NODE; BEGIN

e equal8 2 = al £ aO, out = a equals 2 # b, END,

Здесь объявляется узел a equals 2 и ему присваивается значение выражения al & !аО. Использование узлов помогает экономить ресурсы устройств, если узел используется в нескольких выражениях

3.3.3. Определение групп

Группа может включать в себя до 256 элементов (бит), рассматриваться как совокупность узлов и участвовать в различных действиях как единое целое В булевых уравнениях группа может быть приравнена булевому выражению, другой группе, одному узлу, VCC, GND.I или О В каждом случае значения группы разные.

Если группа определена, для краткого указания всего диапазона ставят две квадратные скобки [ ] Например, группу а[4 1] можно кратко записать как а[ ]

Примеры определения групп:

♦ при выполнении присваивания операции для двух групп обе должны иметь одинаковое число бит В приводимом ниже примере каждый бит первой группы соединяется с соответствующим битом второй группы, а именно d2 соединяется с р8, d1 cq7Md0cq6

d[2. 0] = q[8..6]

♦ при назначении группы одному узлу все биты группы присоединяются к узлу В приводимом ниже примере d1, d2 и dO присоединяются все вместе к п

d[2 .0] = п

♦ при выполнении операции присваивания группы значения VCC или GND все биты группы присоединяются к этому значению В приводимом ниже примере d1, d2 и dO присоединяются все вместе к VCC

d[2..0] = VCC

♦ при присваивании группе значения 1 младший бит группы присоединяется к VCC, а все другие биты - к значению GND В приводимом ниже примере только dO присоединяется к VCC, значение 1 расширяется до представления В 001

d[2 .0] = 1

3.3.4. Реализация условной логики

Условная логика делает выбор между режимами в зависимости от состояния сигнала на логических входах Для реализации условной логики используются операторы IF или CASE

В операторе IF оценивается одно или несколько булевых выражений и затем описываются режимы для разных значений этих выражений

В операторе CASE дается список альтернатив, которые имеются для каждого возможного значения некоторого выражения Оператор оценивает значение выражения и по нему выбирает режим в соответствии со списком

334 1 логика оператора if

В качестве примера рассмотрим файл priority.tdf, в котором описан кодировщик приоритета, который преобразует уровень самого приоритетного активного входа в значение Он генерирует двухразрядный код, показывающий вход с наивысшим приоритетом, имеющий уровень VCC

SUBDESIGN priority (

low, middle, high INPUT; highe8t level[l. 0] . OUTPUT,

BEGIN

IF high THEN

highest level[] = 3; ELSIF middle THEN

highe8t level[] = 2, ELSIF low THEN

highest level[] = 1;

ELSE

highest level [] = 0, END IF, END;

Здесь оцениваются входы low, middle и high, чтобы определить, равны ли они VCC На выходе получится код, соответствующий приоритету того входа, который был равен VCC Если ни один вход не запущен, значение кода станет О

3342 логика оператора case

в качестве примера рассмотрим файл decoder.tdf, реализующий функции дешифратора, преобразующего код из двухразрядного в четырехразрядный Дешифратор преобразует двухразрядное число в прямом коде в четырехразрядный код 1 из 4

SUBDESIGN decoder (

codetl..O] . INPUT, out[3. .0] . OtrrpUT,

BEGIN

CASE code[] IS WHEN 0 => outr] = B 0001 , WHEN 1 => out[] = B 0010 ; WHEN 2 => out[] = B 0100 , WHEN 3 => outr] = B 1000 ,

END CASE, END;

Здесь группа входа code [1..2] может принимать значения О, 1, 2, 3. В зависимости от реального кода активизируется только одна соответствующая ветвь оператора в данный моменг времени На-

3-4921



пример, если на входе code [] сигнал принимает значение 1, на выходе out устанавливается значение В 0010

3 34 3 СРАВНтЕ0ПЕРАТ0Р0В1ГИСА5Е

Операторы IF и CASE похожи Иногда использование любого из них приводит к одним и тем же результатам

If Then

IF в[] = О THEN

у = С S d; ELSIF а[] - 1 THEN

у = е s f,

ELSIF a[] - 2 THEN

У = g S h; ELSIF a[J = 3 THEN

У = i;

ELSE

у = GND; END IF;

Case

CASE a[]

ШВЫ 0 у = с S d, WHEN 1 у = e S f; WHEN 2 у = g & h WHEN 3 у = i;

WHEN OTHERS => у = GND; END CASE;

Однако между этими двумя операторами существует несколько важных различий

♦ в операторе IF можно использовать любое булево выражение Каждое выражение, записываемое в предложении, следующем за IF или ELSBF, может не быть связанным с другими выражениями в операторе В операторе CASE одно единственное выражение сравнивается с проверяемым значением,

♦ в результате интерпретации оператора IF может быть сгенерирована логика, слишком сложная для компилятора системы MAX+PLUS II В приведенном ниже примере показано, как компилятор интерпретирует оператор IF Если а и b - сложные выражения, то инверсия каждого из них даст еще более сложное выражение

. THEN d,

ELSIF Ь THEN С = е.

ELSE с = f; END IF;

IF a THEN

С = d; END IF;

IF la S b THEN

с = e, END IF;

IF a t Ъ THEN

с = f; END IF;

3,3.5. Описание дешифраторов

Дешифратор содержит комбинаторную логику, которая преобразует входные сигналы схемы в выходные значения или задает выходные значения для входных сигналов Для создания дешифратора в языке AHDL используется объявление таблицы истинности TABLE

Ниже приведен файл 7segment.tdf, представляющий собой дешифратор, который задает схему управления светодиодами Светодиоды светятся на семисегментном дисплее для индикации шестнадцатеричной цифры (от О до 9 и буквы от А до F)

% -а- %

% f b %

% -g- %

% el c %

% -d- %

%0123456789AbCdE % %

SUBDESIGN 7seginent (

iI3..0] : INPUT;

a, b, c, d, e, f, g : OUTPUT;

BEGIN

TABLE

1[3.

=>

B 0

=>

H l

=>

H 2

=>

H 3

=>

H !

=>

H 5

=>

H 6

=>

B 7

=>

H 8

=>

H 9

=>

H A

=>

=>

H C

=>

H-D

=>

B E

=>

H F

=>

END TABLE,

END,

В ЭТОМ примере учтены все возможные шестнадцатеричные цифры (i[3..0]) и соответствующие состояния светодиодов (а, Ь, с,

е, f, g), которые обеспечивают начертание цифры на дисплее Изображение светодиодов на дисплее дано в виде комментария перед файлом

Ниже приведен файл дешифратора адреса decode3.tdf для шестнадцатиразрядной микропроцессорной системы SUBDESIGN decode3 (

addr[15..0], m/io : INPUT;

rom, ram, print, sp[2..1] : OUTPUT;

BEGIN TABLE

m/io, addr[15..0] => rom, ram, print, sp[]; 1, B OOXXXXXXXXXXXXXX => 1, 0, 0, В 00 ;

1, B iooxxxxxxxxxxxxx => 0, i, o, в 00

0, B 0000001010101H0 => 0, 0, 1, B 00 0, B 00000010H011110 => 0, 0, 0, B 01

0, B ooooooiiomoooo => o, o, o, b 10

END TABLE; END;

в данном примере существуют тысячи возможных вариантов входа (адреса), поэтому было бы непрактично сводить их все в таблицу Вместо этого, можно пометить символом X несущественные, не влияющие на выход, разряды Например, выходной сигнал rom (ПЗУ) будет высоким для всех 16384 вариантов адреса ad-



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