Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебники / Язык AHDL.DOC
Скачиваний:
56
Добавлен:
13.06.2014
Размер:
995.84 Кб
Скачать
      1. Комбинаторная логика

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

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

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

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

SUBDESIGN boole1

(

a0, a1, b : INPUT;

out1, out2 : OUTPUT;

)

BEGIN

out1 = a1 & !a0;

out2 = out1 # b;

END;

В этом файле выход out1 является логическим И входов а1 и инверсии а0, а выход out2 логическим ИЛИ out1 и b. Порядок следования их в файле не важен.

        1. Именование булевых операторов и компараторов

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

Файл boole3.tdf, приведенный ниже, идентичен с файлом boole1.tdf, но использует именованные операторы. Имя оператора отделяется от оператора знаком двоеточия; имя может содержать до 32 символов.

SUBDESIGN boole3

(

a0, a1, b : INPUT;

out1, out2 : OUTPUT;

)

BEGIN

out1 = a1 tiger:& !a0;

out2 = out1 panther:# b;

END;

Следующие отрывки из файла отчета показывают различие между boole3.rpt и boole1.rpt для первых двух уравнений.

-- boole3.rpt equations:

-- Node name is 'out1' from file "boole3.tdf" line 7, col 2

-- Equation name is 'out1', location is LC3_A1, type is output

out1 = tiger~0;

-- Node name is 'tiger~0' from file "boole3.tdf" line 7, column 18

-- Equation name is 'tiger~0', location is LC2_A1, type is buried

tiger~0 = LCELL( _EQ002);

_EQ002 = !a0 & a1;

-- boole1.rpt equations:

-- Node name is 'out1' from file "boole1.tdf" line 7, col 2

-- Equation name is 'out1', location is LC3_A1, type is output

out1 = _LC2_A1;

-- Node name is ':33' from file "boole1.tdf" line 7, col 12

-- Equation name is '_LC2_A1', type is buried

LC2_A1 = LCELL( _EQ001);

_EQ001 = !a0 & a1;

В зависимости от логики уравнения именованный оператор может представлять несколько имен узлов, однако, все имена относятся к имени оператора и, поэтому, узлы легче распознаются в файле отчета. В файле boole3.rpt единственный узел, tiger~0, создается для первого уравнения. В файле boole1.tdf компилятор связывает цепь ID :33 с тем же самым узлом.

После того, как Вы откомпилировали проект Вы можете использовать имена узлов, приведенные в файле отчета, для введения присваивания ресурса для дальнейшей компиляции, даже если логика проекта изменена. Имена логических ячеек, созданные из именованных операторов, остаются постоянными, если Вы изменили несвязанную с ними логику в файле. Например, Вы можете ввести присваивание для узла tiger~0. В противоположность этому, если операторы неименованы, доступны только ID номера цепей, и эти имена произвольно переназначаются при каждой компиляции.