- •Аннотация
- •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
Variable
TA[4..0],TAK[4..0]:NODE;
TB[4..0],TBP[4..0],TBK[4..0]:NODE;
BEGIN
TA[] = (GND,B[3..0])+(GND,A[3..0]);
IF(TA[]>9 ) THEN TAK[]=TA[]+6;
ELSE TAK[]=TA[];
END IF;
TB[]=(GND,A[7..4])+(GND,B[7..4]);
TBP[]=TB[]+(GND,GND,GND,GND,TAK[4]);
IF(TBP[]>9) THEN TBK[]=TBP[]+6;
ELSE TBK[]=TBP[];
END IF;
OUT[]=(TBK[4..0],TAK[3..0]);
END;
Данный сумматор имеет входные вектора сигналов слагаемых A[7..0], B[7..0] и выходной сигнала суммы OUT[8..0].
Кроме того, он содержит несколько векторов для хранения промежуточных результатов:
TA[4..0] – первая не скорректированная тетрада суммы;
TAК[4..0] – первая скорректированная тетрада суммы;
TВ[4..0] – вторая не скорректированная тетрада суммы;
TВP[4..0] – вторая не скорректированная тетрада суммы с учётом переноса;
TВK[4..0] – вторая скорректированная тетрада суммы.
Окончательный результат, получающийся после коррекции старшей тетрады, записывается в выходной вектор OUT[].
Условия коррекции результатов отрабатываются с помощью операторов IF THEN. Для упрощения записи при описании используется оператор арифметического сложения «+».
Временная диаграмма работы такого сумматора представлена на рис 2.1.3.
Рис 2.1.3. Временная диаграмма работы восьмиразрядного двоично-десятичного сумматора.
2.2. Двоично-десятичный вычитатель
Для реализации схем двоично-десятичных вычитателей используется подход аналогичный к подходу, реализуемому при постоении двоично-десятичных сумматоров. Только в случае вычитателей коррекция результата сводится не к прибавлению числа 6 к тетраде, большей девяти, а к его вычитанию.
Например, при вычитании из двоично-десятичного числа 12 (10010) числа 5 (101) получается число D (1101), которое больше 9. После проведения коррекции т.е. вычитания числа 6 получается правильный результат 7 (111).
Рассмотрим пример восьмиразрядного двоично-десятичного вычитателя, описанного на языке AHDL.
SUBDESIGN RAZ210
(U[7..0],V[7..0]:INPUT;
R[8..0]: OUTPUT;)
Variable
TA[4..0],TAK[4..0]:NODE;
TB[4..0],TBP[4..0],TBK[4..0]:NODE;
BEGIN
TA[] = (GND,U[3..0])-(GND,V[3..0]);
IF(TA[]>9 ) THEN TAK[]=TA[]-6;
ELSE TAK[]=TA[];
END IF;
TB[]=(GND,U[7..4])-(GND,V[7..4]);
TBP[]=TB[]-(GND,GND,GND,GND,TAK[4]);
IF(TBP[]>9) THEN TBK[]=TBP[]-6;
ELSE TBK[]=TBP[];
END IF;
R[]=(TBK[4..0],TAK[3..0]);
END;
Данный вычитатель имеет входные вектора сигналов уменьшаемого U[7..0], и вычитаемого V[7..0] а так же сигнала разности R[8..0].
Кроме того, он содержит несколько векторов для хранения промежуточных результатов:
TA[4..0] – первая не скорректированная тетрада разности;
TAК[4..0] – первая скорректированная тетрада разности;
TВ[4..0] – вторая не скорректированная тетрада разности;
TВP[4..0] – вторая не скорректированная тетрада разности учётом переноса;
TВK[4..0] – вторая скорректированная тетрада разности.
Окончательный результат, получающийся после коррекции старшей тетрады, записывается в выходной вектор OUT[].
Условия коррекции результатов отрабатываются с помощью операторов IF THEN. Для упрощения записи при описании используется оператор арифметического вычитания «-».
Временная диаграмма работы вычитателя приведена на рис.2.2.1.
Рис 2.2.1. Временная диаграмма работы восьмиразрядного двоично десятичного вычитателя.