Автор работы: Пользователь скрыл имя, 22 Ноября 2011 в 20:29, курсовая работа
Цель курсового проекта: разработать вычислительное устройство для выполнения операции умножения двоичных чисел.
Исходные данные:
числа с фиксированной запятой со знаком, представленные в прямом коде;
количество разрядов: 4;
алгоритм умножения: на один разряд множителя, начиная со старших;
разрядов множителя, со сдвигом частного произведения влево.
ВВЕДЕНИЕ 4
1 СЛОВЕСНОЕ ОПИСАНИЕ ОПЕРАЦИИ УМНОЖЕНИЯ 5
2 БЛОК-СХЕМА АЛГОРИТМА ВЫПОЛНЕНИЯ ОПЕРАЦИИ 8
3 ОПРЕДЕЛЕНИЕ НАБОРА УПРАВЛЯЮЩИХ СИГНАЛОВ 9
4 СИНТЕЗ АЛУ 10
5 ВРЕМЕННАЯ ДИАГРАММА УПРАВЛЯЮЩИХ СИГНАЛОВ 12
6 СХЕМНОЕ РЕШЕНИЕ УСТРОЙСТВА УПРАВЛЕНИЯ 13
7 МИКРОПРОГРАММА ВЫПОЛНЕНИЯ КОМАНДЫ УМНОЖЕНИЯ 16
ЗАКЛЮЧЕНИЕ 18
ПРИЛОЖЕНИЕ 1 Структурная схема арифметического устройства 19
ПРИЛОЖЕНИЕ 2 Листинг программы 20
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 23
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ 4
1 СЛОВЕСНОЕ ОПИСАНИЕ ОПЕРАЦИИ УМНОЖЕНИЯ 5
2 БЛОК-СХЕМА АЛГОРИТМА ВЫПОЛНЕНИЯ ОПЕРАЦИИ 8
3 ОПРЕДЕЛЕНИЕ НАБОРА УПРАВЛЯЮЩИХ СИГНАЛОВ 9
4 СИНТЕЗ АЛУ 10
5 ВРЕМЕННАЯ ДИАГРАММА УПРАВЛЯЮЩИХ СИГНАЛОВ 12
6 СХЕМНОЕ РЕШЕНИЕ УСТРОЙСТВА УПРАВЛЕНИЯ 13
7 МИКРОПРОГРАММА ВЫПОЛНЕНИЯ КОМАНДЫ УМНОЖЕНИЯ 16
ЗАКЛЮЧЕНИЕ 18
ПРИЛОЖЕНИЕ 1 Структурная схема арифметического устройства 19
ПРИЛОЖЕНИЕ 2 Листинг программы 20
СПИСОК
ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 23
Язык ассемблера — язык программирования "низкого уровня". В отличие от языка машинных кодов позволяет использовать более удобные для человека мнемонические (символьные) обозначения команд. При этом для перевода с языка ассемблера в понимаемый процессором машинный код требуется специальная программа, также называемая ассемблером.
Ассемблер — родной язык компьютера. Можно сказать, что компьютер «думает» на ассемблере. Поэтому программы, написанные на других языках, таких как Си, нужно сначала перевести на ассемблер, чтобы компьютер их понял и смог исполнить.
Цель курсового проекта:
Исходные данные:
Операция
умножения является наиболее частой
после сложения. Умножение может
выполняться суммированием
При точном умножении двух чисел количество значащих цифр произведения может в пределе достичь двойного количества значащих цифр сомножителей. Еще сложнее возникает ситуация при умножении нескольких чисел. Поэтому в произведении только в отдельных случаях используют двойное количество разрядов.
Наиболее просто операция умножения выполняется в прямом коде. При этом на первом этапе определяется знак произведения путем сложения знаковых разрядов сомножителей по модулю 2, затем производится перемножение модулей сомножителей согласно двоичной таблице умножения. Результату присваивается полученный знак.
Так как умножение производится в двоичной системе счисления, частные произведения либо равны 0 (при умножении на 0), либо самому сомножителю (при умножении на 1), сдвинутому на соответствующее количество разрядов.
Произведение можно получить двумя путями:
Причем
каждый из этих методов может различаться
еще и тем, с младших или
со старших разрядов начинается умножение.
Пример
А=0,1101; В=0,1011;
1а) 0,1101 1б)
0,1011 0,
1101 1101
1101 0000
0000 1101
1101 1101
10001111 10001111
Основываясь на вышеизложенном можно создать 4 основных метода машинного умножения в прямом коде:
Эти
методы можно представить в виде схемы
(рисунок 1.1).
Рисунок
1.1– Схема
алгоритмов умножения
Обозначения, используемые на рисунке: - частичное произведение, - частичная сумма.
В данном курсовом проекте используется 3 метод умножения.
Умножение, начиная со старших разрядов множителя при сдвиге суммы частичных произведений влево
Регистр
множителя и сумматор частичных
произведений должны иметь цепи сдвига
влево. Регистр множимого не имеет
цепей сдвига. Последовательность действий
в каждом цикле выполнения умножения
определяется старшим разрядом регистра
множителя. При этом методе сумматор
частичных произведений должен иметь
двойную длину. И данный метод
требует дополнительного по сравнению
с первым методом оборудования. Но
он применяется в некоторых АЛУ,
т.к. позволяет без дополнительных
цепей сдвига выполнять и деление
(а при первом методе для выполнения
деления необходимы дополнительные
цепи сдвига влево в регистре множимого
(частного) и в сумматоре частичных
произведений (разностей).
Рисунок
2.1 – Алгоритм
операции умножения
чисел с фиксированнойзапятой,
заданных в прямом коде,
со старших разрядов
множителя
Каждой переменной, представленной в алгоритме, в схеме должен соответствовать элемент хранения. Разрядность модуля произведения равна сумме разрядностей сомножителей.
Исходя
из этого, определим состав оборудования,
необходимого для реализации АЛУ заданного
типа для n
= 4 (таблица 3.1).
Таблица 3.1 – Состав оборудования
Схема | Разрядность | Функции | Управляющий сигнал |
Регистр модуля множимого RGX | 8 | Загрузка. Сдвиг в сторону младших разрядов. | УС1 УС2 |
Регистр модуля множителя RGY | 4 | Загрузка. Сдвиг в сторону старших разрядов. | УС3 УС4 |
Регистр модуля результата RGZ | 8 | Загрузка. Установка в "0". | УС5 УС6 |
Триггер знака множимого TX | Загрузка | УС7 | |
Триггер знака множителя TY | Загрузка | УС8 | |
Триггер знака результата TZ | Загрузка | УС9 | |
АЛУ | 8 | Комбинационный сумматор | – |
Комбинационные схемы | Получение на входе АЛУ сигналов "0" или RGX в зависимости от значения yi |
Синтез АЛУ проходит в несколько этапов:
Пусть операнды имеют вид:
[X]пк = x0x1x2…xn
[Y]пк = y0y1y2…yn
где x0, y0 – знаковые разряды, ПК – прямой код.
Операция умножения чисел с фиксированной запятой, заданных в прямом коде, со старших разрядов множителя выполняется по следующей формуле:
Sign Z = Sign X Å Sign Y
|Z| = y1•|X|•2-1+ y2•|X|•2-2 +…+yn•|X|•2-n
Рассмотрим алгоритм решения задачи. Пусть имеется два числа:
[X]пк = 0.1101; SignX = 0
[Y]пк = 1.1011; SignY = 1
Алгоритм решения задачи имеет вид:
Вычисление знака числа
SignZ = 0 Å 1 = 1
Модули исходных чисел имеют вид:
|X| = 0. 1 1 0 1
|Y| = 0. 1 0 1 1
где y1=1, y2=0, y3=1, y4=1.
Пошаговая операция вычисление произведения двух чисел в соответствии с приведенной формулой выглядит следующим образом:
+0.00000000 |Z| = 0
y1 = 1 0.01101000 1•|X|•2-1
+0.01101000 |Z| = |Z| + |X|•2-1
y2 = 0 0.00000000 0*|X |•2-2
+0.01101000 |Z| = |Z| + 0
y3 = 1 0.00011010 1•|X|•2-3
+0.10000010 |Z| = |Z| + |X|•2-3
y4 = 1 0.00001101 1•|X|•2-4
-0.10001111 |Z| = |Z| + |X|•2-4