Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичкаКУРС_ПТЦА.doc
Скачиваний:
7
Добавлен:
04.05.2019
Размер:
762.37 Кб
Скачать
    1. Приклад виконання завдання

Завдання: синтезувати операційний та керуючий автомати для виконання операції множення чисел на суматорі оберненого коду, починаючи з молодших розрядів множника з пропуском тактів додавання. Числа представлені у формі з фіксованою комою. Тип керуючого автомату – Мілі, розрядність операндів 16. цифровий метод контролю за модулем 9. Контрольні числа : А=-31, В=678. Тип елементів пам’яті – RS-тригер.

Cформулюємо словесний алгоритм виконання заданої операції. Множення виконується зі молодших розрядів, тому будем аналізувати молодший розряд множника РгВ[0] – якщо він дорівнює 1, то додаємо до вмісту суматора регістр множеного РгА; якщо РгВ[n] дорівнює 0, то пропускаємо такт додавання (звідки і назва методу). В обох випадках виконуємо:

  1. зсув регістра РгВ на 1 розряд вправо, щоб проаналізувати наступний розряд множника;

  2. зсув суматора СМ на 1 розряд вправо.

В результаті множення ми отримаємо добуток подвійної точності – розрядністю в 2 рази більшою, ніж розрядність регістрів операндів.

Опишемо покроково наш алгоритм.

Необхідно:

  1. Два 16-ти розрядних регістри для зберігання порядків операндів.

2. Двійковий чотирьох розрядний лічильник для підрахунку кількості ітерацій алгоритму.

  1. 32-розрядний регістр для зберігання інверсного коду множеного.

  2. Схема порівняння.

  3. Схема формування оберненого коду.

  4. Суматор.

Алгоритм:

  1. В шину вхідних даних надходять числа А і В. Під час цього отримуємо інверсний код множника.

  2. Заносимо значення чисел А і В в регістри РгА і РгВ відповідно.

  3. Присвоюємо суматору СМ значення 0 і в лічильник заносимо число кількості тактів множення.

  4. Якщо регістр РгА = 0, то йдемо в пункт 12.

  5. Якщо регістр РгВ = 0, то йдемо в пункт 12.

  6. Якщо множник РгА від’ємний, то додаємо поправку СМ:=СМ+(не)РгА.

  7. Аналізуємо молодший розряд числа в регістрі РгВ[0], якщо він дорівнює 1, то до суматора СМ додаємо РгА і переходимо в пункт 9, якщо молодший розряд дорівнює 0 - переходимо в пункт 8.

  8. Аналізуємо розряд РгВ[1], якщо він дорівнює 1, то виконуємо пункт 9, інакше виконуємо зсув на два розряди вправо суматора СМ і регістру РгВ. Вміст лічильника зменшуємо на 2.

  9. Виконуємо зсув на один розряд вправо суматора СМ і РгВ. Вміст лічильника зменшуємо на 1 і переходимо в пункт 10 нашого алгоритму.

  10. Аналізуємо вміст лічильника, якщо він більше 0, то переходимо в пункт 7.

  11. Якщо множник РгА від’ємний, то додаємо поправку СМ:=СМ+РгА.

  12. Видаємо результат СМ на шину даних.

  13. Кінець алгоритму.

Тепер необхідно побудувати блок-схему алгоритму. Блок-схема алгоритму - орієнтований зв'язаний граф, в якому є одна початкова вершина, довільна кількість умовних та операційних вершин і одну кінцеву вершину. Така блок-схема представлена на рисунку 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)-

Виконаємо перевірку правильності визначення контрольних кодів множення :

 = 53 = 15-р=15-9=6.

АВ = 31(-678) =-21018

 = (2+1+0+1+8)-

Оскільки  = , множення виконано вірно.