Содержание
Задание 2
Введение 3
1 Разработка микропрограммы выполнения операции деления c восстановлением остатка сосдвигом делителя…………………….3
1.1 Метод выполнения операции деления с восстановленияостатка со сдвигом делителя вдвоично-десятичном коде 8421+3…………….3
1.2 Контрольный пример………………………………………………….5
1.3 Определение структуры операционного автомата ………………..11
1.4 Разработка блок схемы алгоритма ………………………………….12
1.5 Описание моделирующей программы………………………………13
1.6 Оценка времени выполнения операции и оценкааппаратурных затрат ………………………………………………………………….14
1.7 Контроль выполнения операции по модулю………………………..16
2 Синтез управляющего микропрограммного автомата……………..17
2.1 Кодирование микропрограммы и получение отмеченной ГСА…...17
2.2 Переход от начального языка задания автомата к стандартному...18
2.3 Синтез структурного микропрограммного автомата……………...20
2.4 Формирование выходных функций и функцийпереключения элементов памяти……………………………………………………..21
2.5 Описание функциональной схемы, схема запуска…………………22
2.6 Расчет тактаработы управляющего автомата……………………...23
Заключение…………………………………………………………………24
Списоклитературы………………………………………………………...25
ПриложениеА
Приложение Б
ЗАДАНИЕ
Код 18-Б-а-II-а-2-III-R
18 —Деление с восстановлением остатка со сдвигом делителя
Б — В форме с фиксированной запятой, формат {1,16}
a — Впрямом коде
II — Двоично-десятичная система счисления (в коде8421+3)
а — Контрольпо модулю
2 — Синхронныйавтомат Мура
III — Элементы «ИЛИ», «НЕ»
R — RS-триггер
Заданиевыдал «___» ____________ 2001 г. преподаватель Дрогнова Н.Ф.
Задание принял «___» _____________2001 г. студент Пожитков Д. В.
Введение
Поскольку дисциплина «Прикладнаятеория цифровых автоматов» посвящена изучению информационных, арифметических илогических основ цифровых автоматов основной целью данного курсового проектаявляется объединить все полученные знания по пройденному курсу и применить ихна практике. Эти знания станут базой придальнейшем обучении в КазНТУ и изучении предметов «Технические средства защитыинформации», «Проектирование систем защиты безопасности», «Вычислительныекомплексы, системы и сети» и д.р., а также для выполнения контрольных заданий икурсовых проектов по вышеуказанным дисциплинам.
1. Разработка микропрограммывыполнения операции деления c восстановлением остатка со сдвигом делителя
1.1 Метод выполнения операции деления свосстановления остатка со сдвигом делителя в двоично-десятичном коде 8421+3
В машинах с запятой,фиксированной перед самым старшим разрядом любого слова, деление, так же как иумножение, наиболее просто производить в прямом коде. Но в отличии отумножения, при котором принципиально невозможно переполнение разрядной сетки,если машина оперирует с дробями, деление дробных операндов может привести кпереполнению сетки машины и, следовательно, к грубому искажению результата.Поэтому в задачах, где есть деление, нужно тщательно следить, чтобы делимое поабсолютной величине было меньше делителя.
Признаком переполнения являетсяформирование единицы в знаковом разряде модуля частного, поскольку обычнооперация деления производится только над модулями исходных чисел. Определениезнака частного, таким образом, является самостоятельной операцией. Обычноделение в машинах с фиксированной запятой выполняется в 2 этапа.
Первый этап – определяется знакчастного путем сложения знаковых цифр делимого и делителя по модулю два.
Второй этап – производится деление модулейисходных чисел, округление модуля частного, после чего к нему приписывается знак, определенный напервом этапе.
Метод выполнения операцииделения с восстановлением остатка со сдвигом делителя можно сформулировать так:сдвигаем делитель на 1 разряд вправо, из предыдущего остатка вычитаетсяделитель, в результате чего формируется текущий остаток; цифра, взаимообратнаязнаковой цифре текущего остатка, записывается в соответствующий разрядчастного; если текущий остаток положителен, то он становится предыдущимостатком для следующего шага, а данный шаг на этом заканчивается; если жетекущий остаток отрицателен, то к нему прибавляется делитель для восстановленияпредыдущего, который становится предыдущим остатком для следующего шага.Операции сдвига, вычитания, а в случае необходимости и восстановленияповторяются до тех пор, пока в частном не получится требуемое количествозначащих цифр. После этого производится округление частного. Обычно в частномформируется (n+1)значащих цифр, после чего к (n+1)-ойцифре прибавляется единица для округления частного до n цифр.
Понятие «логическийсдвиг», в отличие от арифметического сдвига, означает, что сдвигу подвергается вся кодовая комбинацияцеликом без выделения знаковых и значащих цифр.
На нулевом шаге, когдаделитель вычитается из делимого, фактически определяется псевдознаковая цифрамодуля частного, которая обязательно должна равняться нулю; если же онаоказалась равной 1, то это говорит о том, что произошло переполнение разряднойсетки частного.
У данного способа деления можно выявить следующие недостатки:
1. Ацикличность процесса деления, обусловленнаянерегулярностью появления микрооперации восстановления остатков, что приводит кусложнению устройства управления делением;
2. Относительно малая скорость деления, так как в среднемтолько половина шагов будет состоять из двух микроопераций (вычитания исдвига), а в другие шаги будет входить дополнительная микрооперация сложения для восстановления остатка. Такимобразом, время деления оказывается сравнительно большой величиной.
Для двоично-десятичного кода 8421+3 характерны следующие особенности: присложении двух чисел в коде 8421 с избытком 3 необходимо произвести их потетрадное суммирование по правилам двоичной арифметики с передачей единицпереноса между тетрадами, после чего к тем тетрадам, на выходе которыхвырабатывалась единица переноса, добавляется код поправки, равный 3(10)=0011(2), а ко всем остальным тетрадам добавляется код поправки,равный 13 (10)=1101(2). Возникшие вторичные межтетрадные переносы блокируются.С учетом особенности метода деления свосстановлением остатка со сдвигомостатка, а так же особенностей системысчисления 8421+3, можно сделать вывод, что коррекция будет производится накаждом шаге деления, а в тетраду частного предварительно будут занесены нули вкоде 8421+3 (0011) и к ним будут прибавляться 1 в коде 8421 (0001), этопозволит не производить коррекцию тетрад частного, что приведет к снижениювременных и аппаратных затрат.
1.2 Контрольный пример
а) Возьмемдля примера любых два десятичных числа: А=1286 и В=6324
|0,6234 0000
|1 0 1 1
1 1 1
2 1 1
3 3
Cm: 0,1286 0000
9,3676 0000
9,4962 0000 R0
0,6324 0000восст.
0,1286 0000 сдв.1 сдвиги:
9,9367 6000 0) 0,6324 0000пк=9,36760000дк
Продолжение примера вдесятичной системе исчисления:
0,0653 6000 R1>0 сдв.1) 0,0632 4000пк=9,93676000дк
9,9367 6000 сдв.2) 0,0063 2400пк=9,99367600дк
0,0021 2000 R2>0 сдв.3) 0,0006 3240пк=9,99936760дк
9,9367 6000 сдв.4) 0,0000 6324пк=9,99993676дк
9,9388 8000 R3
0,0632 4000восст.
0,0021 2000 сдв.2
9,9936 7600
9,9957 9600 R4
0,0063 2400восст.
0,0021 2000 сдв.3
9,9993 6760
0,0014 8760 R5>0
9,9993 6760
0,0008 5520 R6>0
9,9993 6760
0,0002 2280 R7>0
9,9993 6760
9,9995 9040 R8
0,0006 3240восст.
0,0002 2280 сдв.4
9,9999 3676
0,0001 5956 R9>0
9,9999 3676
0,0000 9632 R10>0
9,9999 3676
0,0000 3308 R11>0
9,9999 3676
9,9999 6984 R12
Мывзяли два числа (А-делимое, В-делитель), и разделили их модули по следующему алгоритму:
1) Делительвычитается из делимого и определяется остатокR0. Если R0>0, товырабатывается признак переполнения и деление прекращается. Если R02) Делительсдвигается вправо на 1 разряд;
3) Производитсявычитание делителя и определяется знак остатка Ri. Если Ri>0, то кразряду частного прибавляется 1, иначе завершается формирование разрядачастного (переходим формировать следующий разряд) и выполняется восстановлениеотрицательного остатка путем прибавления делителя в пк;
4) Пункты 2 и3 выполняются nраз чтобыполучить n разрядов частного
б)Рассмотрим теперь пример для этих же чисел в двоично-десятичной системе:
(Используемалгоритм деления с учетом следующих особенностей:
1) Тетрада рассматривается как единое целое и сдвигвыполняется на тетраду;
2) Для формирования тетрады частного из делимоговычитается делитель и если остаток положительный, то в формируемую тетрадучастного прибавляется 1 в младший разряд;
3) Вычитание делителя выполняется до тех пор, пока непоявиться отрицательный остаток, в этом случае остаток восстанавливается и выполняется сдвиг на тетраду;
4) После каждого алгебраического сложения необходимакоррекция (если был перенос 1 в сл. тетраду то коррекия 0011, если не было, токоррекция 1101)
A пк =0,0100 0101 1011 1001 0011 0011 0011 0011 8421+3
B пк =0,1001 0110 0101 0111 0011 0011 0011 0011 8421+3
В дк =1,0110 1001 1010 1000 1100 1100 1100 11018421+3
Продолжение примера вдвоично-десятичной системе счисления:СМ: 0,0100 0101 1011 10010011 0011 0011 0011
1,0110 1001 1010 1000 1100 1100 11001101
1,1010 1111 0110 0010 0000 0000 00000000 (кр.)
1101 1101 0011 0011 0011 0011 00110011
1,0111 1100 1001 0101 0011 0011 00110011 R0
0,1001 0110 0101 0111 0011 0011 00110011восст.
0,00010010 1110 1100 0110 0110 0110 0110
0011 0011 1101 1101 1101 11011101 1101(кр.)
0,0100 0101 1011 1001 0011 0011 00110011 сдв.1
1,1100 0110 1001 1010 1000 1100 11001101
0,0000 1100 0101 0011 1100 0000 00000000
0011 1101 0011 0011 1101 0011 0011 0011(кр.)
0,0011 1001 1000 0110 1001 0011 00110011 R1>0
1,1100 0110 1001 1010 1000 1100 11001101
0,0000 0000 0010 0001 0010 0000 00000000
0011 0011 0011 0011 0011 0011 0011 0011(кр.)
0,00110011 0101 0100 0101 0011 0011 0011 R2>0
1,1100 01101001 1010 1000 1100 1100 1101
1,11111001 1110 1110 1110 0000 0000 0000
1101 1101 1101 1101 1101 00110011 0011 (кр.)
1,1100 0110 1011 1011 1011 0011 00110011 R3
0,0011 1001 0110 0101 0111 0011 00110011восст.
0,0000 0000 0010 0001 0010 0110 01100110
0011 0011 0011 0011 0011 1101 1101 1101(кр.)
0,0011 0011 0101 0100 0101 0011 00110011 сдв.2
1,1100 1100 0110 1001 1010 1000 11001101
1,1111 1111 1011 1101 1111 1100 00000000
1101 1101 1101 1101 1101 1101 0011 0011(кр.)
1,1100 1100 1000 1010 1100 1001 00110011 R4
Продолжение примера вдвоично-десятичной системе счисления:
0,0011 0011 1001 0110 0101 0111 00110011восст.
0,0000 0000 0010 0001 0010 0000 01100110
0011 0011 0011 0011 0011 0011 1101 1101(кр.)
0,0011 0011 0101 0100 0101 0011 00110011 сдв.3
1,1100 1100 1100 0110 1001 1010 10001101
0,0000 0000 0001 1010 1110 1101 11000000
0011 0011 0011 1101 1101 1101 1101 0011(кр.)
0,0011 0011 0100 0111 1011 1010 10010011 R5>0
1,1100 1100 1100 0110 1001 1010 10001101
0,0000 0000 0000 1110 0101 0101 00100000
0011 0011 0011 1101 0011 0011 0011 0011(кр.)
0,0011 0011 0011 1011 1000 1000 01010011 R6>0
1,1100 1100 1100 0110 1001 1010 10001101
0,0000 0000 0000 0010 0010 0010 11100000
0011 0011 0011 0011 0011 0011 1101 0011 (кр.)
0,0011 0011 0011 0101 0101 0101 10110011 R7>0
1,1100 1100 1100 0110 1001 1010 10001101
1,1111 1111 1111 1011 1111 0000 01000000
1101 1101 1101 1101 1101 0011 0011 0011(кр.)
1,1100 1100 1100 1000 1100 0011 01110011 R8
0,0011 0011 0011 1001 0110 0101 01110011восст.
0,0000 0000 0000 0010 0010 1000 11100110
0011 0011 0011 0011 0011 1101 1101 1101 (кр.)
0,0011 0011 0011 0100 1000 1100 10001001 R9>0
1,1100 1100 1100 1100 0110 1001 10101001
0,0000 0000 0000 0000 1111 0110 00110010
0011 0011 0011 0011 1101 0011 0011 0011(кр.)
0,0011 0011 0011 0011 1100 1001 01100101 R10>0
1,1100 1100 1100 1100 0110 1001 10101001
Продолжение примера вдвоично-десятичной системе счисления:
0,0000 0000 0000 0000 0011 0011 00001110
0011 0011 0011 0011 0011 0011 0011 1101(кр.)
0,0011 0011 0011 0011 0110 0110 00111011 R11>0
1,1100 1100 1100 1100 0110 1001 10101001
1,1111 1111 1111 1111 1100 1111 11100100
1101 1101 1101 1101 1101 1101 1101 0011 (кр.)
1,1100 1100 1100 1100 1001 1100 10110111 R12
Преобразованияделителя во время деления:
0) 0,1001 0110 0101 0111 0011 0011 0011 0011 пк
1,0110 1001 1010 1000 1100 1100 1100 1101 дк
сдв.1) 0,0011 1001 0110 0101 0111 0011 0011 0011 пк
1,1100 0110 1001 1010 1000 11001100 1101 дк
сдв.2) 0,0011 0011 1001 0110 0101 0111 00110011 пк
1,1100 1100 0110 1001 1010 10001100 1101 дк
сдв.3) 0,0011 0011 0011 1001 0110 0101 01110011 пк
1,1100 1100 1100 0110 1001 10101000 1101 дк
сдв.4) 0,0011 0011 0011 0011 1001 0110 01010111 пк
1,1100 1100 1100 1100 0110 10011010 1001 дк
Формированиечастного в процессе деления:
0, 0011 0011 0011 0011
0001 0001 0001
0001 0001 0001
0101 0001 0001
0110 0110
С=0,0101 0011 0110 0110=0,2033
1.3 Определениеструктуры операционного автомата Рассмотрим структура операционного автомата:Рг 1
40 СМ
40
СМК СчT Сч Рг 2
40 А
С
R4
L8
УА ВРисунок 1.1
Операционный автоматнеобходим для того, чтобы определить количество и размерность регистров исумматора.
Рг1 – в этот регистр мы заносим делитель.
Рг2 – в этот регистр мы получим частное.
СМ – в сумматор заносим делимое.
СМК – сумматор коррекции.
СЧТ – счетчик тетрад.
СЧ – счетчик для коррекции.1.4 Разработкаблок схемы алгоритмаАлгоритм для деления со сдвигом делителя в коде8421+3:
1) Делитель вычитается из делимого и определяетсяостатокR0. Если R0>0, то вырабатывается признакпереполнения и деление прекращается. Если R0
2) Делитель сдвигается вправо на 1 тетраду;
3) Для формирования тетрады частного из делимоговычитается делитель и если остаток положительный, то в формируемую тетрадучастного прибавляется 1 в младший разряд;
4) Вычитание делителя выполняется до тех пор, пока непоявиться отрицательный остаток, в этом случае остаток восстанавливается ивыполняется сдвиг делителя на тетраду;
5) После каждого алгебраического сложения необходимакоррекция (если был перенос 1 в сл. тетраду то коррекия 0011, если не было, токоррекция 1101)
6) Пункты 2,3 и 4 выполняются 4 раза чтобы получить 4тетрадычастного
Реализуем алгоритм в видесодержательного графа микропрограммы для двоично-десятичной системы исчисления.Согласно ГОСТа язык ГСА используется для формальной записи алгоритмов операцияи имеет 1 начальную и 1 конечную вершину.
Структура ГСА находится в приложении В, лист 1.
Таблица 1.1
№ блока
Описание
A02
Заносим в СМ делимое обходя контрольные разряды, в Рг1 заносим делитель, обходя контрольные разряды, Сч, СчТ, Рг2 и контрольные разряды в СМ и Рг1 – обнуляем.
А05
Выясняем знак частного путем сложения знаковых разрядов делимого и делителя по модулю два.
№ блока
Описание
А07
Обнуляем знаковый разряд в СМ и Рг1.
А09
Производим пробное вычитание: к СМ прибавляем Рг1 в дк. Для последующей операции коррекции заводим временную переменную i и присваиваю ей значение 1.
С01-С07
Блоки коррекции: с помощью переменной i проверяем чему равны кр. разряды в СМ, если 1, т.е. был перенос, то прибавляем 0011, иначе 1101
С09
Проверяем равен ли СчТ нулю, если да, то мы формируем только знаковый разряд частного, иначе тетраду № СчТ
Е01
Сравниваем знак сумматора с 0
Е03
Знак частного обнуляем
Е05
Наращиваем СчТ на 1, Сч присваиваем 0011, и восстанавливаем СМ делителем в пк
Е07-G03
Пошаговая коррекция сумматора (корректируем каждую тетраду в отдельности)
G05
Сдвигаю делитель на тетраду
G07
Сравниваем Счт с 5, если равен, то сформированы все тетрады частного и деление завершено, иначе продолжаем деление
G09
Заносим в С полученное частное из Рг2
1.5 Описание моделирующей программы.
Моделирующая программа разработана на языке Borland Turbo Assembler v.4.1(16bit). Вмоделирующей программе регистрами Рг1, Рг2, сумматором СМ, а так же счётчикомСЧ ОА являются регистры самой ЭВМ и оперативная память.
Общееописание программы:
Определениепеременных в сегменте данных (A, B, C).
Впроцедуре Vvod_Dannih осуществляется ввод чисел A и B с клавиатуры и перевод их в код8421+3.
Производимсдвиг делителя в процедуре Sdvig.
Коррекцию осуществляет процедура Korek.
В процедуре PK_TO_DK осуществляется перевод чисел из ПК в ДК
В процедуре Vivod выполняется перевод произведенияв десятичный код и выводится на экран.
Конец.
Болееподробно (с комментариями) программа представлена в Приложении А.
1.6 Оценкавремени выполнения операции и оценка аппаратурных затрат .
Время выполнения операции.
Время выполненияоперации оценивается в условных единицах времени. Так как выполнение операциисостоит из выполнения микрооперации сложения и сдвига, то за условную единицувремени принимается время, необходимое для выполнения микрооперации сдвига наодин двоичный разряд (
Время,затрачиваемое на выполнение операции в ОА равно:
где Pk–вероятность выполнения коррекции, Tk– время, затрачиваемое на коррекцию. Так как в системе 8421+3коррекция нужна всегда, то вероятность равна единице. Коррекция выполняется сразу отдельно по 1 тетраде (и так 4 раза),поэтому:
Время деления в двоичном коде равно:
Сучетом этого получаем, время проведение операции деления будет равно
Аппаратные затраты:
Аппаратные затраты.
Оценкааппаратных затрат ОА QОА производится в условных единицах элементов памятиоперационных элементов ОА, т.е. триггерах. При этом логические элементы неучитываются.
QРг1=QРг2=QСМ=41
QРгК=4
QОА=QСМ+QРг1+QРг2+QРгК1+QРгК2=127 э.п.
Есть важная причина, в связи с которой используются 2-10системы счисления. Это то, что в двоичной системе счисления необходим переводдесятичных чисел в двоичные коды и наоборот. Для перевода десятичного числа вдвоичный код, необходимо делить число на основание системы, т.е. на 2,получившийся остаток делить еще раз, и так до тех пор пока остаток не будетменьше основания системы. В двоично-десятичной системе счисления каждое числокодируется своим определенным двоичным кодом занимающим одну тетраду. Но, т.к.в двоично-десятичной системе счисления существуют не используемые комбинации, то часто приходится делатькоррекцию числа. Сравнивая эти два метода, можно сделать вывод что,двоично-десятичная система счисления быстрее, т.к. на коррекцию уходит на многоменьше времени, чем на перевод числа.
1.7 Контроль выполнения операции по модулю
Влюбом вычислительном устройстве существует система контроля и диагностики. Этосовокупность методов и средств, обеспечивающих определение правильности работыустройства, локализации неисправностей и автоматическое исправление ошибок.Решение задач контроля всегда связана с решением задач избыточности. Одним извидов контроля является контроль по модулю.
Контролируемуюинформацию надо представить в некоторой промежуточной системе счисления. Выборпромежуточной системы счисления определяется величиной модуля Р. К модулю Рпредставляют следующие общие требования:
1.Должен обеспечивать обнаружение, как можно большого числа ошибок, приобязательном обнаружении одиночных ошибок.
2.Должен быть таким, чтобы остаток от деления на него числа определялся простым ибыстрым методом без непосредственного деления.
3.Должен быть небольшим, чтобы остатки получались малоразрядными, в противномслучае потребуются большие дополнительные затраты оборудования.
Втеории кодирования указано, что модуль можно выбирать из условия РSYMBOL177 f «Symbol» s 12±1), где SSYMBOL179 f «Symbol» s 12і2. Учитывая правила записанные выше выбираем модуль,он будет равен Р=3, а степень будет равна S=2.
Свертывание– процесс разбиения кодовой комбинации на группы и получения контрольного кода.Свертки образуются в результате суммирования выделенных групп (диад, триад и т.п.)по модулю Р.
Найдемконтрольные коды для чисел N1(п.к.), N2(п.к.) и N3(п.к.):
где- это остаток от деления Ni – того числа на модуль P (контрольные коды).
Используяследующее соотношение теории кодирования
сравниваемнаши коды:
Отсюдаследует, что операция сложения прошла успешно, т.е. без ошибок.
2. Синтез управляющего микропрограммного автомата2.1.Кодированиемикропрограммы и получение отмеченной ГСА (см.приложение В).
Вэтом разделе осуществляется переход непосредственно к синтезу микропрограммногоавтомата по граф – схеме алгоритма (ГСА).
Начатьследует с синтеза абстрактного автомата, который осуществляется по кодированнойГСА. Кодированная ГСА получается путём отметки каждой операторной вершины всодержательной ГСА (для автомата Мура).
Чтобыполучить отмеченную ГСА, необходимо воспользоваться следующими правилами:
1. начальная и конечная вершины обозначаются символом А0
2. каждая операторная вершина отмечается символами А1,А2, и т.д.
3. каждая операторная вершина отмечается не болееодного раза.
Врезультате получаем алфавит состоянии А={А0, А1, …, Аm}.
Используявышесказанные правила, получаем отмеченную ГСА (см. Приложение В, лист 2).