- •1 Основні вимоги до змісту розділів пояснювальної записки
- •1.1 Особливості виконання основних арифметичних операцій в еом
- •Операція алгебраїчного додавання
- •1.1.2 Операція множення
- •1.1.3 Операція ділення
- •1.2 Поняття граф-схеми алгоритму та правила її складання
- •1.3 Основні поняття теорії цифрових автоматів
- •1.4 Синтез керуючого автомата
- •1.5 Контроль виконання арифметичних операцій
- •1.6 Завдання на курсову роботу (табл. 3)
- •Приклад виконання завдання
- •2 Основні вимоги до вмісту пояснювальної записки
- •2.1 Вміст пояснювальної записки
- •2.2 Титульний лист
- •2.3 Індивідуальне завдання
- •2.5 Вступ
- •2.6 Висновки
- •2.7 Список використаної літератури
- •2.8 Додатки
- •Основні вимоги до оформлення тексту та рисунків пояснювальної записки
- •3.1 Загальні правила
- •3.2 Вимоги до оформлення розділів та підрозділів
- •3.3 Правила написання тексту
- •3.4 Оформлення формул
- •3.5 Оформлення ілюстрацій
- •3.6 Оформлення таблиць
- •Додатки
- •Додаток а
- •Зразок титульного аркуша курсової роботи
- •Міністерство освіти і науки України
- •Розробив студент гр. ______
Приклад виконання завдання
Завдання: синтезувати операційний та керуючий автомати для виконання операції множення чисел на суматорі оберненого коду, починаючи з молодших розрядів множника з пропуском тактів додавання. Числа представлені у формі з фіксованою комою. Тип керуючого автомату – Мілі, розрядність операндів 16. цифровий метод контролю за модулем 9. Контрольні числа : А=-31, В=678. Тип елементів пам’яті – RS-тригер.
Cформулюємо словесний алгоритм виконання заданої операції. Множення виконується зі молодших розрядів, тому будем аналізувати молодший розряд множника РгВ[0] – якщо він дорівнює 1, то додаємо до вмісту суматора регістр множеного РгА; якщо РгВ[n] дорівнює 0, то пропускаємо такт додавання (звідки і назва методу). В обох випадках виконуємо:
зсув регістра РгВ на 1 розряд вправо, щоб проаналізувати наступний розряд множника;
зсув суматора СМ на 1 розряд вправо.
В результаті множення ми отримаємо добуток подвійної точності – розрядністю в 2 рази більшою, ніж розрядність регістрів операндів.
Опишемо покроково наш алгоритм.
Необхідно:
Два 16-ти розрядних регістри для зберігання порядків операндів.
2. Двійковий чотирьох розрядний лічильник для підрахунку кількості ітерацій алгоритму.
32-розрядний регістр для зберігання інверсного коду множеного.
Схема порівняння.
Схема формування оберненого коду.
Суматор.
Алгоритм:
В шину вхідних даних надходять числа А і В. Під час цього отримуємо інверсний код множника.
Заносимо значення чисел А і В в регістри РгА і РгВ відповідно.
Присвоюємо суматору СМ значення 0 і в лічильник заносимо число кількості тактів множення.
Якщо регістр РгА = 0, то йдемо в пункт 12.
Якщо регістр РгВ = 0, то йдемо в пункт 12.
Якщо множник РгА від’ємний, то додаємо поправку СМ:=СМ+(не)РгА.
Аналізуємо молодший розряд числа в регістрі РгВ[0], якщо він дорівнює 1, то до суматора СМ додаємо РгА і переходимо в пункт 9, якщо молодший розряд дорівнює 0 - переходимо в пункт 8.
Аналізуємо розряд РгВ[1], якщо він дорівнює 1, то виконуємо пункт 9, інакше виконуємо зсув на два розряди вправо суматора СМ і регістру РгВ. Вміст лічильника зменшуємо на 2.
Виконуємо зсув на один розряд вправо суматора СМ і РгВ. Вміст лічильника зменшуємо на 1 і переходимо в пункт 10 нашого алгоритму.
Аналізуємо вміст лічильника, якщо він більше 0, то переходимо в пункт 7.
Якщо множник РгА від’ємний, то додаємо поправку СМ:=СМ+РгА.
Видаємо результат СМ на шину даних.
Кінець алгоритму.
Тепер необхідно побудувати блок-схему алгоритму. Блок-схема алгоритму - орієнтований зв'язаний граф, в якому є одна початкова вершина, довільна кількість умовних та операційних вершин і одну кінцеву вершину. Така блок-схема представлена на рисунку 3.
1
0
1
0
1
0
0
1
1
0
1
0
1
0
Рис.
3 - Граф-схема
алгоритму
Побудуємо структурну схему операційного автомата. Для цього визначимо набір вхідних і вихідних сигналів (таблиця 4).
Таблиця 4 - Набір вхідних і вихідних сигналів для структурної схеми
операційного автомата
Вихідні сигнали |
Вхідні сигнали |
||
Позначення |
Виконувана дія |
Позначення |
Умова |
Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Y11 Y12 Y13 |
РгА:=ШДвх РгВ:=ШДвх НСМ:=0 НСМ:=НСМ+(не)РгА Ліч:=16 НСМ:=НСМ+РгА РгВ:=R2РгВ НСМ:=R2НСМ Ліч: = Ліч – 2 РгВ:=R1РгВ НСМ:=R1НСМ Ліч: = Ліч - 1 ШДвих:=НСМ |
X1 X2 X3 Х4 Х5 X6
|
Рг А = 0 Рг В = 0 РгB > 0 РгВ [0]=1 РгВ [1]=1 Ліч>0
|
Для реалізації множення чисел у формі з фіксованою комою, починаючи зі молодших розрядів у множнику з пропусків тактів додавання, потрібні такі функціональні вузли:
Вхідні дані - множене і множник, які надходять в пристрій через шину вхідних даних Швх; результат - добуток видається з пристрою через шину вихідних даних Швих.
Для зберігання операндів потрібні регістри РгА, РгВ.
Для накопичення часткових добутків необхідно використати накопичувальний суматор СМ оберненого коду.
Для формування поправки (не)РгА використовується схема формування оберненого коду СхФОК.
Для підрахування кількості кроків множення використовується лічильник (ЛІЧ).
Структурна схема операційного автомата наведена в рис. 4.
Шдвих
Y13
НСМ
0
31
15
0
0
15
1
2
Шдвх
Рис. 4 - Структурна схема операційного автомата
Виконаємо множення за розробленим алгоритмом для чисел
А = -3110
В = 67810
Переведемо їх в двійкову систему числення і запишемо їх у вигляді з фіксованою комою:
Апр = -3110 = – 0,00000000000111112
Впр = 67810 = 0,0000010101001102
Запишемо машинне зображення операндів в оберненому коді, відводячи два розряди на знак і 8 модуль числа:
= 11,11111111100000
= 00,000010101001102
Виконаємо множення (вміст регістрів і виконані операції приведені в таблиці 5).
Таблиця 5 - Приклад виконання множення за розробленим алгоритмом
НСМ |
РгВ |
Примітки |
11,111111.11111111.11111111.11111111
11,111111.11111111.11111111.11111111 + 11,111111.11100000.11111111.11111111
11,111111.11100000.11111111.11111111
11,111111.11110000.01111111.11111111 + 11,111111.11100000.11111111.11111111 11,111111.11010001.01111111.11111111
11,111111.11101000.10111111.11111111
11,111111.11111010.00101111.11111111 + 11,111111.11100000.11111111.11111111 11,111111.11011011.00101111.11111111
11,111111.11101101.10010111.11111111
11,111111.11110110.11001011.11111111 + 11,111111.11100000.11111111.11111111
11,111111.11010111.11001011.11111111
11,111111.11101011.11100101.11111111
11,111111.11110101.11110010.11111111 + 11,111111.11100000.11111111.11111111
11,111111.11010110.11110010.11111111
11,111111.11101011.01111001.01111111
11,111111.11111010.11011110.01011111
11,111111.11111110.10110111.10010111
11,111111.11111111.10101101.11100101 |
0,0000001010100110 |
СМ=0; РгВ:=В |
РгВ[0]=0; РгВ[1]=1; РгВ:=R1РгВ; НCM:=R1НСМ |
||
0,_000000101010011 |
РгВ[0]=1; НCM:=НCM+РгА РгВ:=R1РгВ; НCM:=R1НСМ |
|
0,__00000010101001 |
РгВ[0]=1; НCM:=НCM+РгА РгВ:=R1РгВ; НCM:=R1НСМ |
|
0,___0000001010100 |
РгВ[0]=0; РгВ[1]=0; РгВ:=R2РгВ; НCM:=R2НСМ |
|
0,_____00000010101 |
РгВ[0]=1; НCM:=НCM+РгА РгВ:=R1РгВ; НCM:=R1НСМ |
|
0,______0000001010 |
РгВ[0]=0; РгВ[1]=1; РгВ:=R1РгВ; НCM:=R1НСМ |
|
0,_______000000101 |
РгВ[0]=1; НCM:=НCM+РгА РгВ:=R1РгВ; НCM:=R1НСМ |
|
0,________00000010 |
РгВ[0]=0; РгВ[1]=1; РгВ:=R1РгВ; НCM:=R1НСМ |
|
0,_________0000001 |
РгВ[0]=1; НCM:=НCM+РгА РгВ:=R1РгВ; НCM:=R1НСМ |
|
0,__________000000 |
РгВ[0]=0; РгВ[1]=0; РгВ:=R2РгВ; НCM:=R2НСМ |
|
0,____________0000 |
РгВ[0]=0; РгВ[1]=0; РгВ:=R2РгВ; НCM:=R2НСМ |
|
0,______________00 0,_______________ |
РгВ[0]=0; РгВ[1]=0; РгВ:=R2РгВ; НCM:=R2НСМ |
Отримано результат в оберненому коді. Переведемо його в прямий код і в десяткову систему числення:
[А·В]пр= – 0,101001000011010
А·В = – 2101810
Отже, ми отримали вірний результат, що підтверджує правильність розробленого алгоритму.
Закодуємо граф-схему алгоритму виконання операції (рис. 3) за правилами кодування ГСА. Кодовану граф-схему алгоритму множення наведено на рисунку 5.
а0
а1
а2
1
0
1
0
1
а3
0
а4
0
а5
1
а6
1
а7
0
а10
а8
а11
а9
1
0
1
а12
0
а13
а0
Рис. 5 - Кодована граф-схема алгоритму
Складемо таблицю переходів та виходів цифрового автомата (табл. 6).
Таблиця 6 – Таблиця переходів і виходів автомата
t |
t+1 |
Тригери |
||||||||||||||
ai |
xi |
ai |
yi |
RS0 |
RS1 |
RS2 |
RS3 |
|||||||||
R0 |
S0 |
R1 |
S1 |
R2 |
S2 |
R3 |
S3 |
|||||||||
a0 |
- |
a1 |
y1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|||||
a1 |
- |
a2 |
y2 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
|||||
a2 |
|
a3 |
y3 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|||||
a3 |
- |
a4 |
y4 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
|||||
a2 |
|
a4 |
y3 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||||
a4 |
|
a5 |
y5 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|||||
a9 |
|
a5 |
y9 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||||
a11 |
|
a5 |
y12 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||||
a5 |
- |
a6 |
y6 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
|||||
a9 |
|
a6 |
y9 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||||
a11 |
|
a6 |
y12 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||||
a4 |
|
a6 |
y5 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||||
a4 |
|
a7 |
y5 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|||||
a9 |
|
a7 |
y9 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||||
a11 |
|
a7 |
y12 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||||
a7 |
- |
a8 |
y7 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
|||||
a8 |
- |
a9 |
y8 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|||||
a6 |
- |
a10 |
y10 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
|||||
a10 |
- |
a11 |
y11 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|||||
a9 |
|
a12 |
y9 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
|||||
a11 |
|
a12 |
y12 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||||
a12 |
- |
a13 |
y6 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|||||
a11 |
|
a13 |
y12 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||||
a9 |
|
a13 |
y9 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||||
a2 |
|
a13 |
y3 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||||
a2 |
|
a13 |
y3 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||||
a13 |
- |
a0 |
y13 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
Проаналізувавши таблицю 6, запишемо функції збудження тригерів:
та функції виходів цифрового автомата:
Отримані функцій збудження та виходів не є мінімальними формами, тому виконаємо їхню мінімізацію.
Для функцій збудження тригерів:
та для функцій виходів цифрового автомата:
Отримавши мінімальні форми функцій збудження тригерів та вихідних сигналів, будуємо комбінаційну схему керуючого автомата (див. вкладку).
Виконаємо числовий контроль виконання операції множення за модулем р=9 для заданих чисел:
А= -31
В= 678
= (3+1)-
= (6+7+8)-
Виконаємо перевірку правильності визначення контрольних кодів множення :
= 53 = 15-р=15-9=6.
АВ = 31(-678) =-21018
= (2+1+0+1+8)-
Оскільки = , множення виконано вірно.