- •Аннотация
- •1.1. Прототип модуля
- •1.2. Структура иерархического проекта
- •1.3. Иерархическое описание накапливающего сумматора.
- •Variable tr[8..1] : dff;
- •Variable tr[9..1] : dff;
- •Include "rg_a.Inc";
- •Include "add.Inc";
- •Include "rg_out.Inc";
- •Variable
- •2. Проектирование схем двоично-десятичной арифметики.
- •2.1. Двоично-десятичное представление схем.
- •2.2. Двоично-десятичный сумматор
- •Variable
- •2.2. Двоично-десятичный вычитатель
- •Variable
- •2.3. Двоично-десятичные счетчики
- •3.1. Способы задания абстрактных автоматов.
- •3.2. Описание работы автоматов на языке ahdl
- •Init, Working, Waiting, Resuming, Ending.
- •Variable
- •3.3. Проектирование счетчиков на базе абстрактных автоматов
- •Variable
- •4. Проектирование типовых схемотехнических узлов
- •Дешифратора
- •Считается, что одновременно может быть нажата только одна кнопка клавиатуры.
- •Variable
- •4.2. Схемы вычисления функций
- •4.3. Счетчики расхода, пробега
- •Variable
- •Variable
- •Include "t210.Inc";
- •Variable
- •4.4. Узлы обработки сигналов локаторов
- •Include "t210.Inc";
- •Variable
- •4.5. Часы, счетчики времени, календари
- •Variable
- •Variable
- •4.6. Частотомеры
- •Variable
- •4.7. Умножители
- •Input_b_is_constant)
- •5 Проектирование схем с магистральным вводом выводом данных
- •5.1 Правила работы с магистралью, арбитр.
- •Variable
- •5.2 Подготовка временных диаграмм.
- •5.3. Пример сумматора с магистральным вводом-выводом данных.
- •Variable
1.1. Прототип модуля
Язык AHDL позволяет при описании модуля использовать в качестве его компонентов созданные ранее модули. Для этого текстовое описание модуля верхнего уровня иерархии должно содержать описание прототипов этих модулей.
Прототип задается с помощью оператора Function Prototype Statement, который может быть расположен либо непосредственно в текстовом описании, либо в файле включения (Include File) содержимое которого подсоединяется к текстовому описанию на этапе компиляции.
Файл включения (Include File) с описанием прототипа модуля создается с помощью команды Create Default Include File (меню File) выполняемой в окне текстового редактора пакета MAX+PLUSII и содержащего описание модуля.
В языке AHDL определены два способа обращения к прототипу модуля:
непосредственное обращение (In_Line Reference);
присвоение прототипу символического имени, т.е. объявление его переменной, и обращение к нему как к переменной.
Отметим, что указанные способы обращения к прототипу совпадают со способами обращения к примитиву.
1.2. Структура иерархического проекта
Язык позволяет создавать иерархическое описание модуля, в котором выделяются:
модуль нижнего уровня (либо нескольких нижних уровней);
модуль верхнего уровня иерархии.
В языке AHDL определены два типа модулей:
параметризованные(Parameterized);
непараметризованные (Unparameterized).
1.3. Иерархическое описание накапливающего сумматора.
Рассмотрим пример иерархического описания накапливающего сумматора. Схема сумматора приведена на рис. 1.3.1.
Rg_a
OUT[8..1] D[8..1] CLC R Add A[8..1] B[9..1]
Rg_out
OUT[9..1] D[9..1] CLC R
Рис. 1.3.1. Схема накапливающего сумматора.
Как видно из рисунка 1.3.1. накапливающий сумматор состоит из входного регистра Rg_a, собственно сумматора Add и выходного регистра Rg_out, в котором собственно и накапливается сумма входных чисел. Сумматор имеет вход сброса накопленной суммы R. На каждом такте своей работы накапливающий сумматор записывает в регистр Rg_a входное число а в регистр Rg_out – накопленную сумму предыдущих чисел. Модуль Add формирует сумму текущего слагаемого с ранее накопленной суммой чисел.
Структурно описание накапливающего сумматора включает следующие файлы.
Файл входного регистра Rg_a.tdf, содержащий следующее текстовое описание:
SUBDESIGN RG_A
(D[8..1],CLK,Reset:INPUT = GND;
OUT[8..1] : OUTPUT;)
Variable tr[8..1] : dff;
BEGIN
TR[].(CLK,CLRn) = (CLK,!Reset);
TR[].D = D[];
OUT[] = TR[].Q;
END;
Модуль имеет входную шину данных D[8..1], тактовый вход CLK и вход сброса Reset. Выходные данные выводятся на шину OUT[8..1]. Запись информации в регистр осуществляется по положительному фронту сигнала CLK.
Регистр реализован на базе стандартных примитивов DFF.
Файл двоичного сумматора Add.tdf, содержащий следующее текстовое описание:
SUBDESIGN ADD
(A[8..1],B[9..1]:INPUT;
OUT[9..1] : OUTPUT;)
BEGIN
OUT[] = B[]+(GND,A[]);
END;
Модуль имеет входные шины данных A[8..1], и B[9..1]. Сумма формируется на выходной шине OUT[9..1]. При описании функционирования сумматора на языке AHDL используется знак арифметической операции «+». По этому знаку происходит автоматическое формирование необходимой схемы сумматора. Для выравнивания числа разрядов слагаемых во временную группу (GND,A[]), добавлен нулевой старший разряд.
Файл входного регистра Rg_out.tdf, содержащий следующее текстовое описание:
SUBDESIGN RG_OUT
(D[9..1],CLK,Reset:INPUT = GND;
OUT[9..1] : OUTPUT;)