Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРС_ПКИМС_ПЛИС.doc
Скачиваний:
35
Добавлен:
05.06.2015
Размер:
1.85 Mб
Скачать

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. Временная диаграмма работы восьмиразрядного двоично десятичного вычитателя.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]