- •Общие сведения о языке описания аппаратуры ahdl
- •"Золотые правила ahdl"
- •Использование чисел и констант в языке ahdl
- •Врезка 2
- •Комбинационная логика
- •Врезка 3
- •Врезка 4
- •Логика оператора if
- •Врезка 5
- •Логика оператора case
- •Врезка 6
- •Врезка 7
- •Врезка 8
- •Врезка 9
- •Врезка 10
- •Врезка 11
- •Врезка 12
- •Врезка 13
- •Врезка 14
Использование чисел и констант в языке ahdl
Числа используются для представления констант в булевых выражениях и уравнениях. Язык AHDL поддерживает все комбинации десятичных, двоичных, восьмеричных и шестнадцатеричных чисел.
На врезке 2 привед╦н файл decode1.tdf, который представляет собой дешифратор адреса, генерирующий высокий активный уровень сигнала разрешения доступа к шине, если адрес равен шестнадцатеричному числу 370h.
Врезка 2
SUDESIGN decode1 ( address[15..0] : INPUT; chip_enable : OUTPUT; ) BEGIN chip_enable = (adress[15..0] == H"0370"); END; |
В этом примере десятичные числа использованы для указания размерности массива бит, которым записывается адрес шины. Шестнадцатеричным числом H"0370" записано значение адреса, при котором обеспечивается высокий уровень сигнала.
В файле AHDL можно использовать константы для описательных им╦н разных чисел. Такое имя, используемое на протяжении всего файла, может быть более информативным, чем число; например, имя UPPER_LI нес╦т больше информации, чем число 103. В языке AHDL константы вводятся объявлением CONSTANT.
Преимущество использования констант особенно заметно, если одно и то же число используется в файле несколько раз. Тогда, если его нужно изменить, его меняют только один раз в объявлении константы.
Комбинационная логика
Как известно, логическая схема называется комбинационной, если состояния выходов являются только функциями входов независимо от момента времени. Комбинационная логика в языке AHDL реализована булевыми выражениями и уравнениями, таблицами истинности и большим количеством макрофункций. В число примеров комбинаторных логических функций входят дешифраторы, мультиплексоры и сумматоры.
Булевы выражения _ это множества узлов, чисел, констант и других булевых выражений, выделяемых операторами, компараторами и, возможно, сгруппированных в заключающих круглых скобках. Булево уравнение устанавливает равенство между узлом или группой и булевым выражением. В качестве примера на врезке 3 привед╦н файл boole1.tdf, в котором даны два простых булевых выражения, представляющих два логических элемента.
Врезка 3
SUBDESIGN boole1 ( a0, a1, b : INPUT; out1, out2 : OUTPUT; ) BEGIN out1 = a1 & !a0; out2 = out1 # b; END; |
Здесь выход out1 получается в результате логической операции И, примен╦нной ко входу a1 и инвертированному входу a0, а выход out2 получается в результате применения логической операции ИЛИ к выходу out1 и входу b. Поскольку эти уравнения обрабатываются одновременно, последовательность их следования в файле не важна.
Узел, который объявляется в секции переменных VARIABLE в объявлении NODE, можно использовать для хранения промежуточных выражений.
Это полезно делать, если булево выражение повторяется несколько раз и его целесообразно заменить именем узла. Файл boole1.tdf можно переписать по-другому (врезка 4).