Двоично-десятичный сумматор
Рассмотрим схему двоично-десятичного сумматора, работающую с коррекцией результата. Эта схема представлена на рис 2.1.2.
Рис. 2.1.1 Двоично-десятичный сумматор, работающей по схеме с коррекцией результата. Данный сумматор выполняет сложение двух двоично-десятичных тетрад A[3..0] и B[3..0]. На выходах S[3..0] и P формируется двоично-десятичная сумма. На представленной схеме сумматор sum4 (1) выполняет обычное двоичное сложение чисел A[3..0] и B[3..0]. Сумматор sum4 (2) выполняет коррекцию: добавляет к сумме число 6, задаваемое подключением его входов B к земле или питанию. Схема комбинационной логики, построенная на элементах OR2 и AND2, управляет работой выходных мультиплексоров мux2 (9)¸ мux2 (12), мux2 (18). Если результат на выходе sum4 (1) оказывается меньше 10, мультиплексоры пропускают на выход результат без коррекции (входы В), в противном случае - скорректированный результат (входы А). Коррекция осуществляется так же в случае если результат меньше десяти, но был сформирован сигнал переноса схемой sum4 (2). Временная диаграмма работы двоично-десятичного сумматора представлена на рис 2.1.2.
Рис 2.1.2. Временная диаграмма работы двоично-десятичного сумматора.
На рис 2.1.2. следует обратить внимание, что группа SUM представлена в шестнадцатеричном виде, а результат выглядит так, как будто она имеет десятичный вид. Это стандартная ситуация для схем, работающих в двоично-десятичной арифметике. На языке AHDL двоично-десятичные сумматоры описываются достаточно просто. Для описания условий и вариантов коррекции результата используется либо оператор IF THEN либо оператор CASE. Рассмотрим пример описания восьмиразрядного двоично-десятичного сумматора, работающего в диапазоне десятичных чисел от 1 до 99.
SUBDESIGN ADD210 (A[7..0],B[7..0]:INPUT; OUT[8..0]: OUTPUT;) 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. Временная диаграмма работы восьмиразрядного двоично-десятичного сумматора.
Двоично-десятичный вычитатель
Для реализации схем двоично-десятичных вычитателей используется подход аналогичный к подходу, реализуемому при постоении двоично-десятичных сумматоров. Только в случае вычитателей коррекция результата сводится не к прибавлению числа 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. Временная диаграмма работы восьмиразрядного двоично десятичного вычитателя.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|