Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kr2.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
215.89 Кб
Скачать

1 Аналіз завдання і вибір методу синтезу

Згідно із завданням до курсової роботи, необхідно спроектувати процесор для виконання арифметичної операції ділення без відновлення остачі з фіксованою комою без округлення результату в двійковій системі числення. Необхідно побудувати операційний автомат, який реалізує даний алгоритм, а також керуючий автомат Мілі[2].

Для синтезу керуючого автомата буде використано канонічний метод, який зводить його до синтезу комбінаційної схеми шляхом побудови системи логічних функцій, які виражаються залежністю вихідних сигналів та сигналів збудження пам’яті від вхідних сигналів і станів автомата.

Алгоритм синтезу керуючого автомата наступний:

  1. Побудова графічної схеми (блок-схеми) виконання арифметичної операції в двійковій системі числення.

  2. Перехід від змістовної графічної схеми автомата (ГСА) до закодованої.

  3. Розмітка закодованої ГСА станами автомата.

  4. Побудова графа переходів автомата.

  5. Вибір елементів пам’яті для реалізації запам’ятовуючої частини.

  6. Побудова суміщеної таблиці переходів та виходів.

  7. Визначення та мінімізація логічних функцій для забезпечення вхідних сигналів тригерів та вихідних сигналів.

  8. Приведення логічної функції до певного базису (за необхідності).

  9. Побудова функціональної схеми автомата.

  10. Аналіз та визначення основних параметрів пристрою.

2 Реалізація методу виконання арифметичної операції в двійковій системі числення

2.1 Розробка алгоритму виконання операції ділення в двійковій системі числення

Для того, щоб поділити двійкові числа без відновлення остачі необхідно виконати такі операції:

  1. Визначити знак результату та записати його в тригер. Для визначення знаку використовується правило:

, (2.1)

де ⊕ - сума за модулем 2.

  1. У суматор 1 записати прямий код числа А.

  2. У регістр В записати прямий код числа В.

  3. У регістр С записати доповняльний код числа В.

  4. У суматор 2 записати 0. У ньому зберігатиметься результат.

  5. Присвоїти лічильнику точність операції ділення (у даному випадку – 16 знаків після коми).

  6. Зсунути значення обох суматорів на один розряд вліво.

  7. Проаналізувати знаковий розряд суматора 1. Якщо в знаковому розряді – “0”, то до суматора 1 додати значення регістра С, якщо – “1”, то до суматора 1 додати значення регістра В.

  8. Якщо в результаті додавання у знаковому розряді суматора 1 буде “0”, то до суматора 2 додати 1.

  9. Зменшити значення лічильника на одиницю.

  10. Повторювати кроки 7-10, поки значення лічильника не буде рівним 0.

  11. Отримати результат у вигляді

, (2.2)

де C – результат, SC – знак результату, SM2 – кінцеве значення суматора 2.

Наочно описаний вище алгоритм можна побачити на структурній блок-схемі[3] алгоритму (рис. 2.1).

Рисунок 2.1 – Блок-схема алгоритму виконання операції ділення

2.2 Приклад виконання операції ділення

Для прикладу виконаємо ділення чисел А = 0.10010110, В = 1.11110011.

Прямим кодом від‘ємного числа називається його зображення в природній формі, при цьому в знаковому розряді проставляється одиниця. Прямий код додатного числа збігається з його звичайним зображенням у природній формі[4].

Доповняльним кодом від‘ємного двійкового числа називається його доповнення, яке отримується за таким правилом: у знаковому розряді записується одиниця, а в усіх інших розрядах цифри замінюються на взаємно обернені, після чого до молодшого розряду числа додається одиниця. Доповняльний код додатного числа збігається з його прямим кодом[4].

Визначимо прямі та доповняльні коди операндів. Оскільки для виконання операції ділення знак результату підраховується окремо, тому прямий код від’ємного числа братимемо за модулем:

Апр = |А|пр = 00.10010110; Bпр = |B|пр = 00.11110011.

Доповняльний код визначаємо за вищенаведеним правилом:

Aдоп = 00.10010110; Bдоп = 11.00001101.

Визначимо знак результату за формулою (2.1):

Отже, знак відповіді – від’ємний.

Ділення за алгоритмом, представленим в розділі 2.1, наведене в табл. 2.1.

Таблиця 2.1 – Ділення двійкових чисел з фіксованою комою

Суматор 1 (SM1)

Суматор 2 (SM2)

Примітки

00. 10010110

0000000000000000

[SM1]:=[A]пр; [RgB]:=[B]пр;

[RgC]:=[B] доп; [SM2]:=0

01.00101100

000000000000000_

[SM1]←1; [SM2]←1

+ 11.00001101

100.00111001

0000000000000001

[SM1]:=[SM1]+[RgC];

[SM2]:=[SM2]+1

00.01110010

000000000000001_

[SM1]←1; [SM2]←1

Продовження таблиці 2.1

Суматор 1 (SM1)

Суматор 2 (SM2)

Примітки

+ 11.00001101

11.01111111

0000000000000010

[SM2]:=[SM2]+[RgC]

10.11111110

000000000000010_

[SM1]←1; [SM2]←1

+ 00.11110011

11.11110001

0000000000000100

[SM2]:=[SM2]+[RgB]

11.11100010

000000000000100_

[SM1]←1; [SM2]←1

+ 00.11110011

100.11010101

0000000000001001

[SM1]:=[SM1]+[RgB];

[SM2]:=[SM2]+1

01.10101010

000000000001001_

[SM1]←1; [SM2]←1

+ 11.00001101

100.10110111

0000000000010011

[SM1]:=[SM1]+[RgC];

[SM2]:=[SM2]+1

01.01101110

000000000010011_

[SM1]←1; [SM2]←1

+ 11.00001101

100.01111011

0000000000100111

[SM1]:=[SM1]+[RgC];

[SM2]:=[SM2]+1

00.11110110

000000000100111_

[SM1]←1; [SM2]←1

+ 11.00001101

100.00000011

0000000001001111

[SM1]:=[SM1]+[RgC];

[SM2]:=[SM2]+1

00.00000110

000000001001111_

[SM1]←1; [SM2]←1

+ 11.00001101

11.00010011

0000000010011110

[SM1]:=[SM1]+[RgC]

10.00100110

000000010011110_

[SM1]←1; [SM2]←1

+ 00.11110011

11.00011001

0000000100111100

[SM1]:=[SM1]+[RgB]

10.00110010

000000100111100_

[SM1]←1; [SM2]←1

+ 00.11110011

11.00100101

0000001001111000

[SM1]:=[SM1]+[RgB]

10.01001010

000001001111000_

[SM1]←1; [SM2]←1

+ 00.11110011

11.00111101

0000010011110000

[SM1]:=[SM1]+[RgB]

10.01111010

000010011110000_

[SM1]←1; [SM2]←1

+ 00.11110011

11.01101101

0000100111100000

[SM1]:=[SM1]+[RgB]

10.11011010

000100111100000_

[SM1]←1; [SM2]←1

Продовження таблиці 2.1

Суматор 1 (SM1)

Суматор 2 (SM2)

Примітки

+ 00.11110011

11.11001101

0001001111000000

[SM1]:=[SM1]+[RgB]

11.10011010

001001111000000_

[SM1]←1; [SM2]←1

+ 00.11110011

100.10001101

0010011110000001

[SM1]:=[SM1]+[RgB]; [SM2]:=[SM2]+1

01.00011010

010011110000001_

[SM1]←1; [SM2]←1

+ 11.00001101

100.00100111

0100111100000011

[SM1]:=[SM1]+[RgC]; [SM2]:=[SM2]+1

00.01001110

100111100000011_

[SM1]←1; [SM2]←1

+ 11.00001101

11.01011011

1001111000000110

[SM1]:=[SM1]+[RgC]

Кінцевий результат отримуємо за формулою (2.2):

.

Виконаємо перевірку результату, перейшовши до десяткової системи числення[5]:

А = (0.10010110)2 = (150)10;

В = (1.11110011)2 = (243)10;

C = (1.1001111000000110)2 = 0.617279052734375;

A/B = 150/243 = 0.617283950617283…

Оскільки C ≈ A/B, можемо вважати, що обчислення виконані правильно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]