Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Двоично-десятичный сумматор




 

Рассмотрим схему двоично-десятичного сумматора, работающую с коррекцией результата. Эта схема представлена на рис 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...