Смекни!
smekni.com

Блок-схема вычитание чисел в форме плавающая точка, сдвиг вправо на один, два разряда (стр. 1 из 2)

Московский Государственный Институт Радиотехники, Электроники, Автоматики

(Технический Университет)

Кафедра вычислительной техники

курсовой проект по теме

ПРОЕКТИРОВАНИЕ ВЫЧИСЛИТЕЛЬНОГО УСТРОЙСТВА

(на основе курса “Прикладная теория цифровых автоматов”)

Студент Лещинский И.

Вариант 16

Группа АВ-7-92

Преподаватель Антик М.И.

Москва

1995

СОДЕРЖАНИЕ

Задание 3

Интерфейс разрабатываемого устройства 3

Математические обоснования используемых алгоритмов 4

Примеры выполнения задач 5

Алгоритм работы вычислительного устройства 6

Микропрограмма в содержательном виде 7

Особенности работы некоторых узлов устройства 8

Описание сигналов управляющего автомата 9

Таблица заполнения управляющей памяти 10

Задание

Разработать вычислительное устройство, состоящее из двух взаимосвязанных частей: операционного и управляющего автоматов и выполняющее следующие операции с контролем:

1. Нахождение минимального в группе чисел (5)

2. Перевод правильной двоичной дроби в десятичную (3)

Контроль осуществляется разбиением данных на группы чисел по два двоичных разряда с последующим их суммированием по модулю три.

Числа 24-разрядные.

Суммарное число входных и выходных контактов - 30.

В задании используется управляющий автомат с естественной адресацией.

Ограничения:

1. В операционном автомате можно использовать не более двух сумматоров;

2. Управляющий автомат должен проектироваться с использованием ПЗУ.

Интерфейс разрабатываемого устройства

Исходя из задания, целесообразно использовать следующий интерфейс вычислителя.

Входные сигналы:

1. Сигнал SLCT - управляет выбором задачи; “0” - нахождение минимального в группе чисел, “1” - перевод правильной двоичной дроби в десятичную.

2. Сигнал

- обозначает готовность операнда; “0” - операнд готов, “1” - операнд не готов (используется в обеих задачах).

3. Сигнал S/S - указывает вычислительному устройству на продолжение/конец последовательности чисел; “0”- последовательность не закончена, “1” - последовательность закончена (используется в первой задаче).

Выходные сигналы:

1. Сигнал

- указывает на готовность вычислителя выполнять задачу; “0” - вычислитель готов, "1” - вычислитель не готов.

2. Сигнал

- указывает внешнему устройству на готовность ответа; “0”- ответ готов,”1”- ответ не готов.

3. Сигнал

- указывает внешнему устройству на наличие/отсутствие ошибки; “0” - ошибка есть, “1” - ошибки нет. Этот сигнал действует только при условии, что сигнал
установлен в “0”. В остальных случаях
установлен в “1”.

Для передачи данных и результатов используется 24-разрядная двунаправленная шина данных. Установленный в “0” сигнал

означает прием операнда, а установленный в “0” сигнал
выдачу результата. Оба эти сигнала не могут быть одновременно установлены в “0”.

Математические обоснования используемых алгоритмов

Рассмотрим принцип выполнения автоматом задач, указанных в задании.

1. Нахождение минимального числа из последовательно поступающих чисел.

Для определения минимального числа из двух чисел A и B необходимо вычислить разность A-B и по ее знаку сделать вывод о том, какое число является меньшим. Для этого A и B представляются в модифицированном дополнительном коде, причем устройство, передающее вычислителю эти операнды, представляет их в дополнительном коде, а далее, в операционном автомате у A знаковый разряд расширяется влево, разряды B инвертируются, полученный новый знаковый разряд расширяется влево, и к B добавляется “1”. Затем к полученному таким образом числу добавляется A,и результат представляет собой разность A-B. Старший разряд говорит о знаке разности - “1” - разность отрицательная, следовательно A<B, “0” - разность положительная, то есть A>B. Равенство разности нулю говорит о равенстве A и B, при этом минимальным числом считается любое из них.

Значение второго после знакового разряда говорит о выходе разности за разрядную сетку операционного автомата, однако справедливость знака разности по-прежнему имеет место.

Таким образом, можно определить минимальное из двух целых чисел (положительных или отрицательных).

Далее операционный автомат ожидает поступление следующего числа и сравнивает его с уже имеющимся и т.д. пока не будет получен сигнал о завершении последовательности.

2. Перевод правильной двоичной дроби в десятичную

Здесь будем предполагать, что поступающее в операционный автомат число A представляет собой 24 разряда некоторой правильной двоичной дроби.

Под десятичной дробью будем понимать совокупность двоично-десятичных цифр в коде 8-4-2-1. Тогда для перевода необходимо проделать следующие действия:

1. Умножить число A на двоичное число 1010 (десятичное 10).

2. Запомнить старшие 4 разряда результата

3. Взять дробную часть результата и умножить ее на двоичное 1010

4. Повторить пункты 2-4 еще 23 раза.

23 раза повторять пункты 2-4, вообще говоря, необязательно. При 24-разрядной шине данных повторять данные операции можно лишь 6 раз (4X6=24). Однако для выполнения контроля данных по модулю 3 необходимо получить десятичную дробь со 100% точностью.

Примеры выполнения задач

Рассмотрим по одному примеру на выполнение каждой из задач.

1. Пусть вычислительное устройство принимает последовательность чисел, из которых необходимо найти минимальное.

1110’0010’1101’1110’1010’0001 (-1909087) число A

0001’0110’1111’0110’1010’1101 (1504941) число B

1010’1100’1110’0111’0011’1000 (-5445832) число C

Инвертируя B и расширяя знаковый разряд у A и B, операционный автомат вычисляет сумму:

1’1110’0010’1101’1110’1010’0001

1’1110’1001’0000’1001’0101’0010

0’0000’0000’0000’0000’0000’0001

1’1’1100’1011’1110’0111’1111’0100 = -3414028

Самая левая единица отбрасывается, следующая за ней единица говорит об отрицательности результата, что действительно верно. A<B и следующее число C будет сравниваться с числом A.

1’1110’0010’1101’1110’1010’0001

0’0101’0011’0001’1000’1100’0111

0’0000’0000’0000’0000’0000’0001

1’0’0011’0101’1111’0111’0110’1001 = 3536745

Как видим, результат получился положительным, следовательно A>C и следующее число будет сравниваться с C.

2. Пусть необходимо перевести в десятичное число двоичную дробь:0.1110’0010’1101’1110’1010’0001 (0.886209...). Отметим, что соответствующая десятичная дробь конечна.

Умножая на двоичное 1010 получим 1000.1101’1100’1011’0010’0100’1010, следовательно первая двоично-десятичная цира 1000 (8). Далее умножаем дробную часть на 1010. Получим 1000.1001’1110’1111’0110’1110’0100, следовательно вторая двоично-десятичная цифра - тоже 8. Еще раз умножим дробную часть полученного числа на 1010. Результат - 0110.0011’0101’1010’0100’1110’1000, и третья двоично-десятичная цира - 6 и т.д. Опреационный автомат будет вычислять результат, пока дробная часть множимого не станет нулевой. Первые 24 разряда полученного числа будут выданы на шину данных. Все 24X4=96 разрядов нужны для контроля данных по модулю три, однако запоминать 72 “лишних” разряда нет необходимости, так как узел, отвечающий за контроль, содержит сумматор с памятью.

Алгоритм работы вычислительного устройства.

Алгоритм состоит из двух основных ветвей. Левая - соответстветствует решению задачи о нахождении минимального числа, правая - задаче перевода двоичной дроби в десятичную. В данный алгоритм не входит описание поведения некоторых сигналов, о котрых будет сказано далее.

В алгоритме используются обозначения:

d1d0:=d1d0(X) - вычисление двух контрольных разрядов регистра X по модулю три. В регистре X находится исходный операнд;

d1’d0’:=d1’d0’(Y) - вычисление двух контрольных разрядов регистра Y по модулю три. В регистре Y находится промежуточный или конечный результат.

(d1’d0’)* - предыдущее значение контрольных разрядов результата.

d1, d1’ - старший разряд, d0, d0' - младший разряд двоичного числа от 0 до 2

В задаче нахождения минимума нулевой разряд A и B - младший, разряд № 23- старший. В задаче перевода дробей нулевой разряд старший, разряд № 3 (у A1) и разряд № 23 (у A2 и B) - младший.

Микропрограмма в содержательном виде

Здесь действуют те же обозначения, что и в алгоритме.

g1 <<GO (SLCT; m1, m9)>>

m1 {

:=0;
:=1}

g2 <<GO (

; m2, g3)>>

g3 <<GO (S/S; g2, j1)>>

j1 <<GO (0; m8)>>

m2 {

:=1; A2[0-23]:=X[0-23]}

m3 {d1d0:=d1d0(A2)}

m4 {

:=0}

g4 <GO (

; m5, g5)>>

g5 <<GO (S/S; m4, m20)>>

m20 {d1’d0’:=d1’d0’(A2)}

m8 {Y[0-23]:=A2[0-23];

:=0}