You are on page 1of 48

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

ОДЕСЬКИЙ ДЕРЖАВНИЙ ЕКОЛОГІЧНИЙ УНІВЕРСИТЕТ

Факультет комп’ютерних наук,


управління та адміністрування
Кафедра інформаційних технологій

Курсова робота
З дисципліни: «Комп'ютерна Схемотехніка Та Архітектура Комп'ютерів»
на тему: Однотактний процесор MIPS з обмеженим набором команд RISC
Вариант 13

Виконав студент групи


122 «Комп’ютерні науки»
Рачинський Володимир
Перевірив: д.т.н., професор
Зайцев Дмитро Анатолійович

Одеса 2022
ЗМІСТ

Реферат ..................................................................................................................... 3
Вступ ......................................................................................................................... 9
1. Архітектура процесора ................................................................................... 15
1.1. Архітектура процесора............................................................................. 15
1.2. Структурна схема процесора і характеристика її елементів ................ 20
1.3. Структурні схеми основних блоків ........................................................ 23
2. Виконання завдання........................................................................................ 26
2.1. Докладний проект однотактного процесора mips з обмеженим
набором команд RISC ........................................................................................ 27
2.2. Результати тестування процесора та його блоків ................................. 37
Висновки ................................................................................................................ 40
Перелік джерел ...................................................................................................... 41
Додатки................................................................................................................... 42

2
Реферат
Зазвичай, коли нова архітектура створюється одним архітектором або
групою архітекторів, її окремі частини дуже добре підігнані один до одного і
вся архітектура може бути описана досить пов'язано. Цього не можна сказати
про архітектуру 80x86, оскільки це продукт кількох незалежних груп
розробників, які розвивали цю архітектуру більше 15 років, додаючи нові
можливості до початкового набору команд.
У 1978 році була анонсована архітектура Intel 8086 як сумісний вгору
розширення в той час успішного 8-біт мікропроцесора 8080. 8086 являє собою
16-бітову архітектуру з усіма внутрішніми регістрами, що мають 16-бітову
розрядність. Мікропроцесор 8080 був просто побудований на базі
нагромаджуючого суматора (акумулятора), але архітектура 8086 була
розширена додатковими регістрами. Оскільки майже кожен регістр в цій
архітектурі має певне призначення, 8086 за класифікацією частково можна
віднести до машин з накопичують суматором, а частково - до машин з
регістрами загального призначення, і його можна назвати розширеної
машиною з накопичують суматором. Мікропроцесор 8086 (точніше його
версія 8088 з 8-бітової зовнішньою шиною) став основою завоювала надалі
весь світ серії комп'ютерів IBM PC, що працюють під управлінням операційної
системи MS-DOS.
У 1980 році був анонсований співпроцесор плаваючою точки 8087. Ця
архітектура розширила 8086 майже на 60 команд плаваючою точки. Її
архітектори відмовилися від розширених накопичують суматорів для того,
щоб створити якийсь гібрид стеків і регістрів, по суті розширену стекову
архітектуру. Повний набір стекових команд доповнено обмеженим набором
команд типу регістр-пам'ять.
Анонсований в 1982 році мікропроцесор 80286, ще далі розширив
архітектуру 8086. Була створена складна модель розподілу та захисту пам'яті,
розширено адресний простір до 24 розрядів, а також додана невелика кількість
додаткових команд. Оскільки дуже важливо було забезпечити виконання без
3
змін програм, розроблених для 8086, в 80286 був передбачений режим
реальних адрес, що дозволяє машині виглядатиме майже як 8086. У 1984 році
компанія IBM оголосила про використання цього процесора у своїй новій серії
персональних комп'ютерів IBM PC / AT.
У 1987 році з'явився мікропроцесор 80386, який розширив архітектуру
80286 до 32 біт. На додаток до 32-бітової архітектури з 32-бітовими регістрами
і 32-бітовим адресним простором, в мікропроцесорі 80386 з'явилися нові
режими адресації і додаткові операції. Всі ці розширення перетворили 80386 в
машину, за ідеологією близьку до машин з регістрами загального призначення.
На додаток до механізмів сегментації пам'яті, в мікропроцесор 80386 була
додана також підтримка сторінкової організації пам'яті. Також як і 80286,
мікропроцесор 80386 має режим виконання програм, написаних для 8086.
Хоча в той час базовою операційною системою для цих мікропроцесорів
залишалася MS-DOS, 32-розрядна архітектура і сторінкова організація пам'яті
послужили основою для перенесення на цю платформу операційної системи
UNIX. Слід зазначити, що для процесора 80286 була створена операційна
система XENIX (сильно урізаний варіант системи UNIX).
Ця історія ілюструє ефект, викликаний необхідністю забезпечення
сумісності з 80x86, оскільки існуюча база програмного забезпечення на
кожному кроці була надто важливою. На щастя, наступні процесори (80486 в
1989 і Pentium в 1993 році) були націлені на збільшення продуктивності і
додали до видимого користувачем набору команд лише три нові команди, що
полегшують організацію багатопроцесорної роботи.
Що б не говорилося про незручності архітектури 80x86, слід мати на
увазі, що вона переважає у світі персональних комп'ютерів. Майже 80%
встановлених малих систем базуються саме на ній. Спори щодо переваг CISC
і RISC архітектур поступово стихають, оскільки сучасні мікропроцесори
намагаються увібрати в себе найкращі властивості обох підходів.
Сучасне сімейство процесорів i486, в якому збереглися система команд
і методи адресації процесора i386, вже має деякі властивості RISC-
4
мікропроцесорів. Найбільш уживані команди виконуються за один такт.
Компанія Intel для оцінки продуктивності своїх процесорів ввела у вживання
спеціальну характеристику, яка називається рейтингом iCOMP. Компанія
сподівається, що ця характеристика стане стандартною тестової оцінкою і
буде застосовуватися іншими виробниками мікропроцесорів, однак останні зі
зрозумілою обережністю ставляться до системи вимірювань продуктивності,
введеної компанією Intel. В таблиці наведено порівняльні характеристики.
Процесор Тактова частота (МГц) Рейтинг iCOMP
386SX 25 39
386SL 25 41
386DX 25 49
386DX 33 68
i486SX 20 78
i486SX 25 100
i486SX 33 136
i486DX 33 166
i486DX2 50 231
i486DX 50 249
i486DX2 66 297
i486DX4 75 319
i486DX4 100 435
Pentium 60 510
Pentium 66 567
Pentium 90 735
Pentium 100 815
Pentium 120 1000
Pentium 133 1200
Процесори i486SX і i486DX - це 32-бітові процесори з внутрішньої
кеш-памятью ємністю 8 Кбайт і 32-бітової шиною даних. Основна відмінність
між ними полягає в тому, що в процесорі i486SX відсутня інтегрований
5
співпроцесор плаваючою точки. Тому він має меншу ціну і застосовується в
системах, для яких не дуже важлива продуктивність при обробці дійсних
чисел. Для цих систем звичайно можливе розширення за допомогою
зовнішнього співпроцесора i487SX.
Процесори Intel OverDrive і i486DX2 практично ідентичні. Однак
кристал OverDrive має корпус, який може встановлюватися в гніздо
розширення співпроцесора i487SX, що застосовується в ПК на базі i486SX. У
процесорах OverDrive і i486DX2 застосовується технологія подвоєння
внутрішньої тактової частоти, що дозволяє збільшити продуктивність
процесора майже на 70%. Процесор i486DX4/100 використовує технологію
потроєння тактової частоти. Він працює з внутрішньою тактовою частотою 99
МГц, в той час як зовнішня тактова частота (частота, на якій працює зовнішня
шина) складає 33 МГц. Цей процесор практично забезпечує рівні можливості
з машинами класу 60 МГц Pentium, будучи їх повноцінної і доступної за ціною
альтернативою.
З'явився в 1993 році процесор Pentium ознаменував собою новий етап у
розвитку архітектури x86, пов'язаний з адаптацією багатьох властивостей
процесорів з архітектурою RISC. Він виготовлений по 0.8 микронной БіКМОП
технології і містить 3.1 мільйона транзисторів. Первісна реалізація була
розрахована на роботу з тактовою частотою 60 і 66 МГц. В даний час є також
процесори Pentium, що працюють з тактовою частотою 75, 90, 100, 120, 133,
150 і 200 МГц. Процесор Pentium у порівнянні зі своїми попередниками
володіє цілим рядом поліпшених характеристик. Головними його
особливостями є: двохпотокові суперскалярна організація, що допускає
паралельне виконання пари простих команд; наявність двох незалежних
двоканальних множинно-асоціативних кешей для команд і для даних, що
забезпечують вибірку даних для двох операцій в кожному такті; динамічне
прогнозування переходів; конвеєрна організація пристрою плаваючої крапки
з 8 ступенями; двійкова сумісність з існуючими процесорами сімейства 80x86.

6
Перш за все нова мікроархітектура цього процесора базується на ідеї
суперскалярной обробки (правда з деякими обмеженнями). Основні команди
розподіляються по двох незалежних виконавчим пристроям (конвеєрам U і V).
Конвеєр U може виконувати будь-які команди сімейства x86, включаючи
цілочисельні команди і команди з плаваючою точкою. Конвеєр V призначений
для виконання простих цілочисельних команд і деяких команд з плаваючою
крапкою. Команди можуть направлятися в кожне з цих пристроїв одночасно,
причому при видачі пристроєм управління в одному такті пари команд більш
складна команда надходить в конвеєр U, а менш складна - в конвеєр V. Така
попарно видача команд можлива правда тільки для обмеженого підмножини
цілочисельних команд. Команди арифметики з плаваючою точкою не можуть
запускатися в парі з цілочисельними командами. Одночасна видача двох
команд можлива тільки за відсутності залежностей по регістрах. При зупинці
команди з будь-якої причини в одному конвеєрі, як правило зупиняється і
другий конвеєр.
Решта пристрої процесора призначені для постачання конвеєрів
необхідними командами і даними. На відміну від процесорів i486 в процесорі
Pentium використовується роздільна кеш-пам'ять команд та даних ємністю по
8 Кбайт, що забезпечує незалежність звернень. За один такт з кожної кеш-
пам'яті можуть зчитуватися два слова. При цьому кеш-пам'ять даних
побудована на принципах дворазового розшарування, що забезпечує
одночасне зчитування двох слів, що належать одному рядку кеш-пам'яті. Кеш-
пам'ять команд зберігає відразу три копії тегів, що дозволяє в одному такті
зчитувати два командні слова, які належать або одному рядку, або суміжних
рядках для забезпечення попарної видачі команд, при цьому третя копія тегів
використовується для організації протоколу спостереження за когерентністю
стану кеш-пам'яті.Для підвищення ефективності перезавантаження кеш-
пам'яті в процесорі застосовується 64-бітова зовнішня шина даних.
У процесорі передбачений механізм динамічного прогнозування
напрямку переходів. З цією метою на кристалі розміщена невелика кеш-
7
пам'ять, яка називається буфером цільових адрес переходів (BTB), і дві
незалежні пари буферів попередньої вибірки команд (по два 32-бітових буфера
на кожен конвеєр). Буфер цільових адрес переходів зберігає адреси команд, які
знаходяться в буферах попередньої вибірки. Робота буферів попередньої
вибірки організована таким чином, що в кожний момент часу здійснюється
вибірка команд тільки в один з буферів відповідної пари. При виявленні в
потоці команд операції переходу обчислений адреса переходу порівнюється з
адресами, що зберігаються в буфері BTB. У разі збігу передбачається, що
перехід буде виконаний, і дозволяється робота іншого буфера попередньої
вибірки, який починає видавати команди для виконання у відповідний
конвеєр. При розбіжності вважається, що перехід виконуватися не буде і
буфер попередньої вибірки не перемикається, продовжуючи звичайний
порядок видачі команд. Це дозволяє уникнути простоїв конвеєрів при
правильному прогнозі напрямки переходу. Остаточне рішення про
направлення переходу природно приймається на підставі аналізу коду умови.
При неправильно зробленому прогнозі вміст конвеєрів анулюється і видача
команд починається з необхідної адреси. Неправильний прогноз призводить
до припинення роботи конвеєрів на 3–4 такту.

8
ВСТУП

Центральний процесор — функціональна частина комп'ютера, що


призначена для інтерпретації команд. Його функції: бробка даних по заданій
програмі шляхом виконання арифметичних і логічних операцій; програмне
керування роботою пристроїв комп'ютера.

Архітектура процесора
Архітектура системи команд
З погляду програмістів, під архітектурою процесора мається на увазі
його здатність виконувати певний набір машинних кодів. Більшість сучасних
десктопних процесорів відносяться до сімейства x86, або Intel-сумісних
процесорів архітектури IA32 (архітектура 32-бітових процесорів Intel). Її
основа була закладена компанією Intel в процесорі i80386, проте в подальших
поколіннях процесорів вона була доповнена і розширена як самою Intel
(введені нові набори команд MMX, SSE, SSE2 і SSE3), так і сторонніми
виробниками (набори команд EMMX, 3DNow! і Extended 3DNow!, розроблені
компанією AMD).

Мікроархітектура
Розробники комп'ютерного устаткування вкладають в поняття
«Архітектура процесора» основні принципи внутрішньої організації
конкретних сімейств процесорів. Наприклад, архітектура процесорів Intel
Pentium позначалася як Р5, процесорів Pentium II і Pentium III — Р6, а Pentium
4 відносилися до архітектури NetBurst. Після того, як компанія Intel закрила
архітектуру Р5 для сторонніх виробників, її основний конкурент — компанія
AMD розробляла власні архітектури — K5, K6, К7 (для процесорів Athlon і
Athlon XP), і К8 (для Athlon 64).

Ядро
В рамках однієї і тієї ж архітектури різні процесори можуть досить
сильно відрізнятися один від одного. І відмінності ці утілюються в
9
різноманітних процесорних ядрах, що мають певний набір суворо
обумовлених характеристик. Найчастіше ці відмінності втілюються в різних
частотах системної шини (FSB), розмірах кешу другого рівня, підтримці тих
або інших нових систем команд або технологічних процесах, за якими
виготовляються процесори. Нерідко зміна ядра в одному і тому ж сімействі
процесорів спричиняє за собою заміну процесорного роз'єму (англ. socket), з
чого витікають питання подальшої сумісності материнських плат. Проте в
процесі вдосконалення ядра виробникам доводиться вносити до нього
незначні зміни, які не можуть претендувати на «власне ім'я». Такі зміни
називаються ревізіями ядра і, найчастіше, позначаються цифро-буквеними
комбінаціями. Проте в нових ревізіях одного і того ж ядра можуть зустрічатися
досить помітні нововведення. Так, компанія Intel ввела підтримку 64-бітової
архітектури EM64T в окремі процесори сімейства Pentium 4 саме в процесі
зміни ревізії. 32-бітові та 64-бітові процесори 64-бітові процесори простіше і
ефективніше адресують великі обсяги пам'яті (понад 4 гігабайти), що є
перевагою у разі їх використання у високопродуктивних серверах, для роботи
великих баз даних, програм класу CAD/CAE, а також програм для роботи з
цифровим контентом.

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

Конвеєр команд
Конвеєр команд — апаратна структура в обчислювальних пристроях
ЕОМ, призначена для прискорення виконання машинних команд шляхом
суміщення певних стадій їх виконання в часі.

10
Багатоядерні процесори
Перший багатоядерний процесор створила Rockwell у 1984 році,
об'єднавши два ядра R6502.
В 2005 році з'явились перші двоядерні мікропроцесори архітектури x86
— Intel Pentium D та AMD Athlon 64 X2. До того часу класичні одноядерні
CPU певною мірою вичерпали резерви зростання продуктивності за рахунок
підвищення робочої частоти. Каменем спотикання стало не тільки дуже високе
тепловиділення процесорів, що працюють на високих частотах, але і проблеми
з їхньою стабільністю. Отже, екстенсивний шлях розвитку процесорів
вичерпався і виробникам довелося освоювати новий, інтенсивний шлях
підвищення продуктивності продукції.

Будова

Intel Core i7 2600K Socket LGA1155, вигляд знизу

Внутрішні спільно працюючі пристрої.


Моделі процесорів включають такі спільно працюючі пристрої:
• Пристрій керування. Здійснює координацію роботи всіх інших
пристроїв, виконує функції керування пристроями, керує обчисленнями в
комп'ютері.
• Дешифратор інструкцій (команд). Аналізує інструкції з метою
визначення операцій, що відповідають інструкції, виділення операндів і адрес,
за якими розміщуються операнди. В системах з конвеєром команд дешифратор
здійснює дешифрування наступної команди одночасно з виконанням поточної
(для завантаження усіх виконавчих пристроїв) і може дешифрувати одночасно

11
декілька інструкцій, наприклад, для готовності здійснити перехід відповідно
до результату, який найближчим часом буде отриманий з конвеєра.
• Арифметико-логічний пристрій (АЛП). Так називається пристрій
для цілочислових операцій. Арифметичні операції, такі як додавання,
множення і ділення, а також логічні операції (OR, AND, ASL, ROL і ін.)
обробляються за допомогою АЛП. Ці операції складають переважну більшість
програмних кодів у більшості програм. Всі операції в АЛП обробляються в
регістрах — спеціально відведених чарунках АЛП. У процесорі може бути
декілька АЛП. Кожен здатний виконувати арифметичні або логічні операції
незалежно від інших, що дозволяє виконувати декілька операцій одночасно.
Арифметико-логічний пристрій виконує арифметичні і логічні дії. Логічні
операції поділяються на дві прості операції: «Так» і «Ні» («1» і «0»). Звичайно,
ці два пристрої виділяються суто умовно, конструктивно вони не розділені.
• AGU (Address Generation Unit) — пристрій генерації адрес. Це
пристрій не менш важливий, ніж АЛП, тому що він відповідає за коректну
адресацію при завантаженні або збереженні даних.
• Математичний співпроцесор (FPU). Процесор може містити
декілька математичних співпроцесорів. Кожний з них здатний виконувати,
щонайменше, одну операцію з рухомою комою, незалежно від того, що
роблять інші АЛП. Метод конвеєрної обробки даних дозволяє одному
математичному співпроцесорові виконувати декілька операцій одночасно.
Співпроцесор підтримує високоточні обчислення як цілочислені, так і з
рухомою комою і, крім того, містить набір корисних констант, що
прискорюють обчислення. Співпроцесор працює паралельно з центральним
процесором, забезпечуючи, таким чином, високу продуктивність.

Пам'ять
• Кеш-пам'ять. Особлива високошвидкісна пам'ять процесора. Кеш
використовується як буфер для прискорення обміну даними між процесором і
оперативною пам'яттю, а також для збереження копій інструкцій і даних, що

12
недавно використовувалися процесором. Значення з кеш-пам'яті витягаються
прямо, без звертання до основної пам'яті.
Кеш першого рівня (L1 cache). Кеш-пам'ять, що знаходиться усередині
процесора. Вона швидша за всі інші типи пам'яті, але менша за обсягом.
Зберігає нещодавно використану інформацію, яка знову може бути
використана при виконанні коротких програмних циклів.
Кеш другого рівня (L2 cache). Також знаходиться усередині процесора.
Інформація, що зберігається в ній, використовується рідше, ніж інформація,
що зберігається в кеш-пам'яті першого рівня, проте обсяг пам'яті у ній
більший. Також у наш час в процесорах використовується кеш третього рівня.
• Оперативна пам'ять. Набагато більша за обсягом, ніж кеш-пам'ять,
і значно менш швидкодіюча.
• Регістри — це внутрішня пам'ять процесора. Являють собою ряд
спеціалізованих додаткових комірок пам'яті, а також є внутрішніми носіями
інформації мікропроцесора. Регістр є пристроєм тимчасового зберігання
даних, числа або команди і використовується з метою полегшення
арифметичних, логічних і пересильних операцій. Основним елементом
регістра є електронна схема, яку називають тригером, що здатна зберігати
одну двійкову цифру (розряд).
Деякі важливі регістри мають свої назви, наприклад:
• суматор — регістр АЛП, що бере участь у виконанні кожної операції;
• лічильник команд — регістр УП, вміст якого відповідає адресі чергової
виконуваної команди, служить для автоматичної вибірки програми з
послідовних комірок пам'яті;
• регістр команд — регістр УП для збереження коду команди на період
часу, що необхідний для її виконання. Частина його розрядів використовується
для збереження коду операції, інші — для збереження кодів адрес операндів.

Шини

13
Шина — це канал пересилання даних, який використовується спільно
різними блоками системи. Шина може являти собою набір провідних ліній у
друкованій платі, проводи, припаяні до виводів роз'ємів, у які вставляються
друковані плати, або плоский кабель. Інформація передається по шині у виді
груп бітів. До складу шини для кожного біта слова може бути передбачена
окрема лінія (паралельна шина), або всі біти слова можуть послідовно в часі
використовувати одну лінію (послідовна шина).
За функціональним призначенням можуть бути виділені шини:
• Шина даних. Служить для пересилання даних між процесором і
пам'яттю або процесором і пристроями введення-виведення. Ці дані можуть
являти собою як команди мікропроцесора, так і інформацію, що він посилає в
порти введення-виведення або приймає звідти.
• Шина адрес. Використовується ЦП для вибору необхідної комірки
пам'яті або пристрою введення-виведення шляхом установки на шині
конкретної адреси, що відповідає одній з комірок пам'яті або одному з
елементів введення-виведення, що входять у систему.
• Шина керування. По ній передаються сигнали керування,
призначені пам'яті і пристроям введення-виведення. Ці сигнали вказують
напрямок передачі даних (у процесор або з нього).

Буфер цілей розгалуження


BTB (Branch Target Buffer). Це таблиця, в якій знаходяться всі адреси,
куди буде або може бути зроблений перехід.

Метою даної курсової роботи є вивчення архітектури центрального


процесора, структурних схем процесора і його основних блоків, розробка та
тестування проекту однотактного процесора MIPS з обмеженим набором
команд RISC за допомогою певного вказаного інструментарію.

14
1. АРХІТЕКТУРА ПРОЦЕСОРА
1.1. Архітектура процесора

Під архітектурою процесора розуміється його програмна модель,


тобто програмно-видимі властивості. У цій книзі розглядаються тільки
процесори х86 з архітектурою IA-32 (Intel Architecture 32 bit) 6-8-го поколінь
зі всіма їх мультимедійними, потоковими та 64-бітними розширеннями (AMD
х86-64 і Intel ЕМ64Т). Архітектура IA-64 (процесори Itanium) у персональних
комп'ютерах не використовується і тут не розглядається.
Основні програмно-видимі властивості процесора - це набір його
регістрів, система команд (визначальна також роботу з пам'яттю) і механізм
обробки переривань. Процесори х86 є явно вираженими представниками
CISC-архітектури: за складністю системи команд їм немає рівних, при цьому
базових архітектурних регістрів досить мало. У міру розвитку сімейства в
процесори вводять все більш потужні команди, що дозволяють скорочувати
число інструкцій, необхідний для вирішення одних і тих же завдань. Однак ці
команди все складніше виконувати. Кількість архітектурних регістрів
збільшується: з'явилися блоки ММХ, ХММ, а в 64-бітових розширеннях ще й
8 додаткових спільних регістрів.
Під мікроархітектурою розуміється внутрішня реалізація програмної
моделі. Для однієї і тієї ж архітектури IA-32 різними фірмами і в різних
поколіннях застосовуються істотно розрізняються мікроархітектурние
реалізації: при цьому, природно, прагнуть до максимального підвищення
продуктивності (швидкості виконання програм). Починаючи з процесорів Р6
(і AMD К5), в мікроархітектурі застосовується RISC-ядро, що виконує
мікрооперації (uOps), на які розкладаються складні інструкції х86. У
результаті продуктивність процесора (за швидкістю виконання інструкцій
х86) залежить від способу розкладання і швидкості виконання
мікроінструкцій. При цьому підвищувати продуктивність можна різними
способами: прискорювати виконання мікрооперацій (за рахунок підвищення
15
тактової частоти), по можливості распараллелівать виконання мікрооперацій,
скорочувати число мікрооперацій, необхідних для виконання однієї інструкції
х86. У лідерів «процесоробудування» - Intel і AMD - підходи до оптимізації
різняться: при порівнянній продуктивності процесори AMD працюють на
більш низьких тактових частотах. Однак зауважимо, що підвищення
продуктивності процесорів х86 обходиться занадто дорого (в порівнянні з
«чистими» RISC-архітектурами) - вимагає дуже складних керуючих
пристроїв, на які і йде значна частина транзисторів процесора і які, до того ж,
виділяють значну потужність. Комп'ютери на «чистих» RISC-процесорах
(наприклад, Power MAC) забезпечують ту ж прикладних продуктивність, що і
IBM PC на Pentium 4, але при цьому тактова частота RISC-процесорів у кілька
разів нижче частоти CISC-процесорів Pentium 4.
Пояснимо основні поняття, пов'язані з конвеєризації і
розпаралелюванню виконання інструкцій (точніше, мікрооперацій).
Конвейеризация (pipelining) передбачає, що кожна інструкція
обробляється за кілька етапів, причому кожен етап виконується на своїй
ступені конвеєра процесора. При виконанні інструкція просувається по
конвеєру в міру звільнення наступних ступенів. Таким чином, на конвеєрі
одночасно може оброблятися декілька послідовних інструкцій.
У сучасних процесорах паралельно можуть працювати кілька
конвеєрів, так що продуктивність процесора можна оцінювати темпом виходу
виконаних інструкцій з усіх його конвеєрів. Для досягнення максимальної
продуктивності процесора - забезпечення повного завантаження конвеєрів -
програма повинна складатися з урахуванням мікроархітектурних
особливостей процесора. Звичайно, і код, згенерований звичайним способом,
буде виконуватися на більш нових процесорах досить швидко (за рахунок
більш високої тактової частоти). Проте ряд програм на процесорах Pentium III
працює швидше, ніж на Pentium 4, при однакових тактових частотах:
наддовгий конвеєр Pentium 4 на «поворотах» непередбачувано розгалужених
програм «заносить», що призводить до його простоїв. Конвеєр «класичного»
16
процесора Pentium має п'ять щаблів. Конвеєри процесорів Р6 з
суперконвейерною архітектурою (superpipelined) мають більше число ступенів
(10–12), що дозволяє спростити кожну з них і, отже, скоротити час
перебування в них інструкцій. Гіперконвейер Pentium 4 має вже 20 ступенів
для повторно виконуваних ділянок програмного коду (з кеша трас), а якщо
його вважати повну довжину (починаючи з декодування), то набереться
близько 30 ступенів.
Скалярним називають процесор з єдиним конвеєром, до цього типу
відносяться всі процесори Intel до класу 486 включно. Суперскалярний
(superscalar) процесор має більше одного конвеєра (Pentium - два); ці конвеєри
здатні обробляти інструкції паралельно.
Інструкції переходів і особливо розгалужень порушують
безперервність роботи початкових ступенів конвеєра, оскільки вони повинні
починати вибірку і декодування інструкцій з нового, заздалегідь невідомої
адреси. Передбачення переходів (branch prediction) дозволяє продовжувати
вибірку і декодування потоку інструкцій після вибірки інструкції
розгалуження (умовного переходу), не чекаючи перевірки самого умови. У
процесорах колишніх поколінь інструкція переходу припиняла конвеєр
(вибірку інструкцій) до виконання власне переходу, на чому, природно,
губилася продуктивність.
Передбачення переходів спрямовує потік вибірки й декодування по
одній з гілок, при цьому використовується ряд методів передбачення:
• При статичному пророкуванні (схема закладена в процесор)
переходи з одним умовам, найімовірніше, відбудуться, а за іншими - ні.
Переходи тому швидше відбудуться (це типовий цикл), вперед - ні (типово для
обробки помилок).
• Динамічне передбачення спирається на передісторію
обчислювального процесу - для кожної конкретної команди переходу (її
адреси в пам'яті) накопичується статистика поведінки, на основі якої
передбачається перехід. Для динамічного передбачення в процесор вводять
17
таблицю ВТВ (Branch Table Buffer - буфер таблиці переходів), що нагадує кеш
з асоціативним пошуком.
• Програмні «натяки» (hints) - нові префікси інструкцій (з'явилися у
Р4), що перекривають статичне пророцтво. Натяки закладаються в програмний
код на етапі компіляції.
Конвейерация в процесорах х86 ускладнюється архітектурними
особливостями: великим розкидом інструкцій по складності і, відповідно, за
часом виконання. Для підвищення продуктивності ті сходи конвеєра, на яких
проводиться найбільш складна робота, намагаються распараллелівать. При
цьому в процесор вводиться велика кількість виконавчих елементів, які
можуть одночасно обробляти різні інструкції (або різні частини однієї
складної інструкції, розбитою на декілька більш простих).
Для того щоб процесор міг паралельно обробляти декілька
інструкцій, програмний код повинен бути написаний так, щоб у «поле зору»
процесора виявлялося побільше фактично незалежних один від одного
інструкцій. У процесорах RISC-архітектур, як правило, багато універсальних
регістрів, що має в своєму розпорядженні до написання коду, зручного для
паралельного виконання. Мале число і нерівноправність основних регістрів
х86 не мають до програмування з урахуванням паралельності виконання.
Проте якщо кілька інструкцій, що звертаються до одного й того ж регістру, не
мають фактичних залежностей за даними (не використовують результати один
одного), їх можна виконувати одночасно в різних фізичних регістрах, яких
може бути багато. Це робиться шляхом перейменування регістрів -
тимчасового зіставлення фізичних регістрів логічним з відображенням
правильної послідовності зміни складаний архітектурних регістрів.
Просування даних (data forwarding) має на увазі початок виконання
інструкції до готовності всіх операндів. При цьому виконуються всі можливі
дії, і декодувати інструкція з одним операндом поміщається в виконавчий
пристрій, де чекає готовності другого операнда, що виходить з іншого
виконавчого пристрою.
18
При виконанні за припущенням, званому також спекулятивним
(speculative execution), використовується результат передбачень переходів:
інструкції з передвіщеної гілки переходу не тільки декодуються, але і по
можливості виконуються до перевірки умови переходу. Якщо пророцтво
збувається, то праця виявляється не марним, якщо не збувається, доводиться
виконувати відкат - в цьому випадку конвеєр виявляється недовантаженим і
простоює кілька тактів (як мінімум стільки, скільки ступенів біля конвеєра).
Виконання зі зміною послідовності інструкцій (out-of-order
execution), властиве RISC-архітектурі, тепер реалізується і для процесорів х86.
При цьому змінюється порядок внутрішніх маніпуляцій даними, а зовнішні
(шинні) операції введення-виведення і запису в пам'ять виконуються,
звичайно ж, в порядку, встановленому програмним кодом. Однак ця здатність
процесора найбільшою мірою може блокуватися недосконалістю програмного
коду (особливо 16-бітних додатків), якщо він генерується без урахування
можливості зміни порядку виконання інструкцій.
Описані терміни та технології вкладаються у загальне поняття
«динамічного виконання» (dynamic execution), введене фірмою Intel з появою
процесорів Р6. Поліпшене динамічне виконання (enhanced dynamic execution)
відрізняється поліпшеннями різних сторін, зокрема, поліпшенням
передбачень переходів.
Завдяки ускладнення мікроархітектури від покоління до покоління
зростає продуктивність процесорів, причому це зростання забезпечується
двома факторами. По-перше, зростає тактова частота ядра. По-друге,
збільшується відносний темп виконання інструкцій. Так, в середньому
процесори 1 -, 2 -, 3 -, 4 -, 5 -, 6 - і 7-го поколінь завершують чергову посібник
з інтервалом 12, 5, 4, 2, 1, 1 / 2 і 1 / 3 тактів . Півтакта і третина такту на
інструкцію - звучить, звичайно, дивно. Але якщо згадати про 8-байтной шині
даних, що дозволяє за один такт завантажити фрагмент коду, що містить кілька
команд, і про кількох виконавчих пристроях, одночасно приступають до їх
виконання, то питання розсіюються. Звичайно ж, час, потрібний для повного
19
проходження інструкції від її вибірки до виконання, вимірюється десятками
тактів (і зростає з подовженням конвеєра).

1.2. Структурна схема процесора і характеристика її елементів

Пристрій керування процесором, Пристрій управління (ПУ) здійснює


координацію роботи всіх інших пристроїв, виконує функції керування
пристроями, керує обчисленнями в комп'ютері.

Арифметико-логічний пристрій (АЛП) – пристрій для цілочисельних


операцій. Арифметичні операції, такі як додавання, віднімання, множення і
ділення, а також логічні операції (OR, AND, ASL, ROL і ін.) обробляються за
допомогою АЛП. Ці операції складають переважну більшість програмного
коду в більшості програм. Всі операції в АЛП виробляються в регістрах –
спеціально відведених осередках АЛП. У процесорі може бути декілька АЛП.
Кожне здатне виконувати арифметичні або логічні операції незалежно від
інших, що дозволяє виконувати кілька операцій одночасно. Арифметико-
логічний пристрій виконує арифметичні і логічні дії. Логічні операції діляться
на дві прості операції: "Так" і "Ні" ("1" і "0"). Зазвичай ці два пристрої (ПУ та
АЛП) виділяються чисто умовно, конструктивно вони не розділені.
Блок генерації адрес (БГА, Address Generation Unit – AGU) – не менш
важливий пристрій, ніж АЛП, тому що він відповідає за коректну адресацію
при завантаженні або збереженні даних. Абсолютна адресація в програмах
використовується тільки в рідкісних винятках. Як тільки беруться масиви

20
даних, в програмному коді використовується непряма адресація, що змушує
працювати БГА.
Математичний співпроцесор, або модуль (блок) операцій з рухомою
комою (Floating point unit, FPU) – процесор може містити кілька математичних
співпроцесорів. Кожен з них здатний виконувати, щонайменше, одну
операцію з плаваючою точкою незалежно від того, що роблять інші АЛП.
Метод конвеєрної обробки даних дозволяє одному математичному
співпроцесору виконувати кілька операцій одночасно. Співпроцесор
підтримує високоточні обчислення як цілочисельні, так і з плаваючою точкою
і, крім того, містить набір корисних констант, що прискорюють обчислення.
Система виконує команди співпроцесора в тому порядку, в якому вони
з'являються в потоці. Співпроцесор працює паралельно з центральним
процесором, забезпечуючи, таким чином, високу продуктивність.
Дешифратор інструкцій (команд) – аналізує інструкції з метою
виділення операндів і адрес, за якими розміщуються результати. Потім слідує
повідомлення іншому незалежному пристрою про те, що необхідно зробити
для виконання інструкції. Дешифратор допускає виконання декількох
інструкцій одночасно для завантаження усіх виконуючих пристроїв.
Кеш-пам'ять – особлива високошвидкісна пам'ять процесора. Кеш
використовується як буфер для прискорення обміну даними між процесором і
оперативною пам'яттю, а також для зберігання копій інструкцій і даних, які
недавно використовувалися процесором. Значення з кеш-пам'яті витягуються
безпосередньо, без звернення до основної пам'яті. Пам'ять усередині
мікропроцесора може працювати зі швидкістю самого процесора – це Кеш
першого рівня (L1 cache). Кеш-пам'ять, що знаходиться всередині процесора.
Вона швидше всіх інших типів пам'яті, але менше за обсягом. Зберігає зовсім
недавно використану інформацію, яка може бути використана при виконанні
коротких програмних циклів. Кеш другого рівня (L2 cache). Також
знаходиться усередині процесора. Інформація, що зберігається в ній,
використовується рідше, ніж інформація, що зберігається в кеш-пам'яті
21
першого рівня, але зате за обсягом пам'яті він більше. Також в даний час в
процесорах використовується кеш третього рівня.
Основна пам'ять – набагато більше за обсягом, ніж кеш-пам'ять, і
значно менш швидкодіюча. Кеш-пам'ять, як відомо, може досить сильно
впливати на продуктивність процесора в залежності від типу виконуваних
операцій, однак її збільшення зовсім не обов'язково принесе збільшення
загальної продуктивності роботи процесора. Все залежить від того, наскільки
додаток оптимізований під дану структуру і використовує кеш, а також від
того, поміщаються чи різні сегменти програми в кеш цілком або частинами.
Кеш-пам'ять не тільки підвищує швидкодію мікропроцесора при операції
читання з пам'яті, але в ній також можуть зберігатися значення, що
записуються процесором в основну пам'ять; записати ці значення можна буде
пізніше, коли основна пам'ять буде не зайнята.
Шина – це канал пересилання даних, використовуваний спільно
різними блоками системи. Шина може являти собою набір провідних ліній в
друкованій платі, проводу, припаяні до висновків роз'ємів, в які вставляються
друковані плати, або плоский кабель. Інформація передається по шині у
вигляді груп бітів. До складу шини для кожного біта слова може бути
передбачена окрема лінія (паралельна шина), або всі біти слова можуть
послідовно в часі використовувати одну лінію (послідовна шина). До шині
може бути підключено багато прийомних пристроїв – одержувачів. Зазвичай,
дані на шині призначаються тільки для одного з них. Поєднання керуючих та
адресних сигналів, визначає для кого саме. Керуюча логіка подає сигнали, щоб
вказати одержувачу, коли йому слід приймати дані. Однак найшвидша
процесорна шина не сильно допоможе, якщо пам'ять не зможе доставляти дані
з відповідною швидкістю. Є такі типи шин: шина даних, шина адрес, шина
управління.
Регістри – це внутрішня пам'ять процесора. Являють собою ряд
спеціалізованих додаткових комірок пам'яті, а також внутрішні носії
інформації мікропроцесора. Регістр є пристроєм тимчасового зберігання
22
даних, числа або команди і використовується з метою полегшення
арифметичних, логічних і пересильних операцій. Основним елементом
регістра є електронна схема, яка називається тригером, яка здатна зберігати
одну двійкову цифру 1 або 0 (розряд). Регістр є сукупність тригерів, пов'язаних
один з одним певним чином загальною системою управління. Існує кілька
типів регістрів, що відрізняються видом виконуваних операцій. Деякі важливі
регістри мають свої назви, наприклад:
Суматор – регістр АЛП, що бере участь у виконанні кожної операції.
Лічильник команд – регістр ПУ, вміст якого відповідає адресі чергової
виконуваної команди; служить для автоматичної вибірки програми з
послідовних комірок пам'яті.
Регістр команд – регістр ПУ для зберігання коду команди на період
часу, необхідний для її виконання. Частина його розрядів використовується
для зберігання коду операції, інші – для збереження кодів адрес операндів. Та
інші типи регістрів, усі вони є важливими.

1.3. Структурні схеми основних блоків

Структурна схема
Структурна схема — схема, яка визначає основні функціональні
частини виробу, їх взаємозв'язки та призначення. Під функціональною
частиною розуміють складову частину схеми: елемент, пристрій,
функціональну групу, функціональну ланку.
Структурна схема призначена для відображення загальної структури
пристрою, тобто його основних блоків, вузлів, частин та головних зв'язків між
ними. Із структурної схеми повинно бути зрозуміло, навіщо потрібний даний
пристрій і як він працює в основних режимах роботи, як взаємодіють його
частини. Позначення елементів структурної схеми можуть обиратись
довільно, хоча загальноприйнятих правил виконання схем слід дотримуватись.

23
Структурна схема однокристальної ЕОМ типу AT89LV51

Структурні електричні схеми


На структурних електричних схемах (ГОСТ 2.702-75) у вигляді
прямокутників або умовних графічних познак зображають всі основні частини
виробу (елементи, пристрої, функціональні групи) і показують взаємозв'язок
між ними. При цьому графічна побудова схеми має давати наочне уявлення
про послідовність взаємодії функціональних частин виробу, яка
простежується за допомогою стрілок, що наносяться на лініях взаємозв'язку.

24
У разі виконання функціональних частин у вигляді прямокутників
найменування функціональної частини, тип елемента і позначення документа
записують всередині них. При великій кількості функціональних частин
допускається замість найменування, типів і позначень проставляти порядкові
номери справа від зображення або над ним, як правило, зверху вниз в напрямку
зліва направо. В цьому випадку найменування, типи і позначення записують у
вигляді таблиці, розміщеній на полі схеми.
У схемотехніці разом із структурною розглядають також принципову
та функціональну схему. З поміж всіх цих схем структурна найменш
деталізована. Структурну схему розробляють при проєктуванні виробів
(устаткування) на стадіях, що передують розробці схем інших типів, і
користуються ними для загального ознайомлення з виробом (устаткуванням).
У теорії автоматичного керування
Елементарні функціональні ланки зображаються прямокутниками, а
зв'язки між ними — суцільними лініями зі стрілками, що показують напрям дії
ланки. Іноді в полі прямокутника вписують математичний вираз закону
перетворення сигналу в ланці, у цьому випадку схему іноді називають
алгоритмічною.

25
2. ВИКОНАННЯ ЗАВДАННЯ

Завдання: Розробити проект однотактного процесора MIPS з


обмеженим набором команд RISC.
Варіант 13
Характеристики варіанта завдання:
1. набір команд;
2. формат представлення даних для арифметичних операцій;
3. кількість регістрів;
4. алгоритм (схема) прискореної реалізації зазначеної
арифметичної операції.
Використовуємий інструментарій:
1. мова проектування цифрової апаратури System Verilog;
2. система моделювання цифрових пристроїв ModelSim.
Рівень деталізації:
Окремі логічні вентилі і тригери.
Для побудови схем множення і ділення використовуються готові блоки
додавання і віднімання.
Загальні характеристики:
шини даних і адреси - 8 розрядні;
команди – lw, sw, not
формат даних – integer
кількість регістрів – 4
Індивідуальні характеристики варіанта завдання:
Алгоритм (схема) прискореної реалізації
Варіант Команди
арифметичної операції
13 and, add, bne Блочний випереджуючий перенос

26
2.1. Докладний проект однотактного процесора MIPS з обмеженим
набором команд RISC

Мікроархітектура — це спосіб, яким дана архітектура системи команд


реалізована в процесорі.
Процесор:
− Тракт даних: функціональніблоки обробки і передачіданих (арифметико-
логічний пристрій, реєстровий файл, мультиплексори.)
− Пристрій керування: формує керуючі сигнали для функціональних блоків

Можливі кілька апаратних реалізацій однієї і тієї ж архітектури:


− Однотактна реалізація: кожна інструкція виконується за один такт
− Багатотактна реалізація: кожна інструкція розбивається на кілька кроків і
виконується за кілька тактів
− Конвеєрна реалізація: кожна інструкція розбивається на кілька кроків і
кілька інструкцій виконуються одночасно.
Однотактний процесор MIPS складається з:
− Тракт даних
− Пристрій управління (ПУ)

Архітектурний стан
Визначається за:
− Вмістом лічильника команд (PC – program counter)
− Вмістом 32-х регістрів загального призначення
− Вмістом пам'яті (команд, даних).
Про алгоритм (схему) прискореної реалізації арифметичної операції,
який зазначено в варіанті.
Алгоритм (схема) прискореної реалізації арифметичної операції – з
поділом блочний випереджуючий перенос (block carry lookahead) у порівнянні
з додаванням і відніманням, множення – складніша операція як у разі

27
програмного, так і в разі апаратного втілення. В комп’ютерах застосовуються
різні алгоритми реалізації операції множення і, відповідно, декілька схем
побудови операційних блоків, що забезпечують виконання операції множення.
Традиційна схема множення схожа на відому процедуру запису «в стовпчик».
Обчислення добутку Р ( p2n-1 p2n-2 ... p1 p0 ) двох n-розрядних двійкових
чисел без знака A ( an-1 an-2 ... a1 a0 ) і В ( bn-1 bn-2 ... b1 b0 ) зводиться до
формування часткових добутків (ЧД) Wi , поодинці на кожну цифру
множника, з подальшим підсумовуванням отриманих ЧД. Перед
підсумовуванням кожен частковий добуток повинен бути зсунутим на один
розряд щодо попереднього згідно з вагою цифри множника, якій цей ЧД
відповідає. Оскільки операндами є двійкові числа, обчислення ЧД
спрощується – якщо цифра множника bi дорівнює 0, то Wi теж дорівнює 0, а
при bi = 1 частковий добуток дорівнює множеному (Wі = A). Множення двох
nрозрядних двійкових чисел Р = А × В приводить до отримання результату, що
містить 2n бітів. Таким чином, алгоритм множення припускає послідовне
виконання двох операцій – додавання і зсуву.
Підсумовування ЧД зазвичай проводиться не на завершальному етапі,
а в міру їх отримання. Це дозволяє уникнути необхідності зберігання всіх ЧД,
тобто скорочує апаратні витрати. Згідно з даною схемою пристрій множення
припускає наявність регістрів множеного, множника і суми часткових
добутків, а також суматора ЧД і схем зсуву.
Залежно від способу отримання суми часткових добутків (СЧД)
можливі чотири варіанти реалізації «традиційної» схеми множення:
1. Множення починається з молодших розрядів множника, і зсув суми
часткових добутків відбувається вправо у разі нерухомого
множеного.
2. Множення починається із старших розрядів множника, і зсув суми
часткових добутків відбувається вліво у разі нерухомого множеного.

28
3. Множення починається з молодших розрядів множника, і зсув
множеного відбувається вліво у разі нерухомої суми часткових
добутків.
4. Множення починається із старших розрядів множника, і зсув
множеного відбувається вправо у разі нерухомої суми часткових
добутків.
Варіанти із зсувом множеного на практиці не використовуються,
оскільки для їх реалізації регістр множеного, регістр СЧД і суматор повинні
мати розрядність 2n, тому зупинимося на найбільш розповсюдженому 1-му
варіанті, який має назву алгоритм із зсувом вправо (алгоритм А).

Час затримки блочного випереджуючого переносора суматора


пропорційний довжині слова операндів. Щоб додати число n біт, потрібно n
циклів, що, очевидно незалежать від k. Однак при ближчому розгляді, ми
можемо виявити, що період кожного циклу пов'язаний з k.
Коли n більше, суматор може бути додатково розбитий на «групи», де
кожна група містить m бітових фрагментів.
Час затримки такого суматора може бути виражений як:

29
в загальному. Коли m = 3, ∆T = 4 цикли. Знову ж таки, загальний час
затримки не залежить від кількості вхідних операндів k.

Графіки функцій наведених в таблиці нижче.


Поширеним критерієм оцінки алгоритмів є час роботи та порядок
зростання тривалості роботи в залежності від обсягу вхідних даних.
Кожній конкретній задачі зіставляють деяке число, яке називають її
розміром. Наприклад, розміром задачі обчислення добутку матриць може бути
найбільший розмір матриць-множників, для задач на графах розміром може
бути кількість ребер графу.
Час, який витрачає алгоритм як функція від розміру задачі n, називають
часовою складністю цього алгоритму T(n). Асимптотику поведінки цієї
функції при збільшенні розміру задачі називають асимптотичною часовою
складністю, а для її позначення використовують нотацію Ландау (велике O).
Саме асимптотична складність визначає розмір задач, які алгоритм
здатен обробити. Наприклад, якщо алгоритм обробляє вхідні дані розміром n
за час cn², де c — деяка стала, то кажуть, що часова складність такого
алгоритму O(n²).
Часто, під час розробки алгоритму намагаються зменшити
асимптотичну часову складність для найгірших випадків. На практиці ж,

30
трапляються випадки, коли достатнім є алгоритм, який «зазвичай» працює
швидко.
Грубо кажучи, аналіз середньої асимптотичної часової складності
можна поділити на два типи: аналітичний та статистичний. Аналітичний метод
дає точніші результати, але складний у використанні на практиці. Натомість
статистичний метод дозволяє швидше здійснювати аналіз складних задач.
В наступній таблиці наведено поширені асимптотичні складності з
коментарями.

Складність Коментар Приклади

Сталий час роботи не Очікуваний час пошуку в


and
залежно від розміру задачі хеші

Очікуваний час роботи


Дуже повільне зростання
add інтерполюючого пошуку n
необхідного часу
елементів

Логарифмічне зростання —
Обчислення xn; двійковий
подвоєння розміру задачі
bne пошук в масиві з n
збільшує час роботи на сталу
елементів
величину

Додавання/віднімання
Лінійне зростання —
чисел з n цифр; лінійний
O(n) подвоєння розміру задачі
пошук в масиві з n
подвоїть і необхідний час
елементів

Лінеаритмічне зростання — Сортування злиттям або


подвоєння розміру задачі купою n елементів; нижня
O(n log n)
збільшить необхідний час границя сортування
трохи більше ніж вдвічі порівнянням n елементів

Квадратичне зростання — Елементарні алгоритми


O(n²)
подвоєння розміру задачі сортування

31
вчетверо збільшує
необхідний час

Кубічне зростання —
подвоєння розміру задачі Звичайне множення
O(n³)
збільшує необхідний час у матриць
вісім разів

Експоненціальне зростання
— збільшення розміру задачі
на 1 призводить до c- Деякі задачі комівояжера,
O(cn) кратного збільшення алгоритми пошуку повним
необхідного часу; подвоєння перебором
розміру задачі підносить
необхідний час у квадрат

32
Представлення алгоритмів

Блок-схема алгоритму визначення дієвідміни в дієслові.

У процесі розробки алгоритму можуть використовуватись різні


способи його опису, які відрізняються за простотою, наочністю,
компактністю, мірою формалізації, орієнтації на машинну реалізацію тощо.
Форми запису алгоритму:
− словесна або вербальна (мовна, формульно-словесна);
− псевдокод (формальні алгоритмічні мови);
− схемна:
▪ структурограми (схеми Нассі-Шнайдермана);
▪ графічна (блок-схема, виконується за вимогами стандарту).

33
Властивості алгоритмів
Алгоритми мають ряд важливих властивостей:
Скінченність — алгоритм має завжди завершуватись після виконання
скінченної кількості кроків. Процедуру, яка має решту характеристик
алгоритму, без, можливо, скінченності, називають методом обчислень.
Дискретність — процес, що визначається алгоритмом, можна
розчленувати (розділити) на окремі елементарні етапи (кроки), кожен з яких
називається кроком алгоритмічного процесу чи алгоритму.
Визначеність — кожен крок алгоритму має бути точно визначений. Дії,
які необхідно здійснити, повинні бути чітко та недвозначно визначені для
кожного можливого випадку.
Вхідні дані — алгоритм має деяку кількість (можливо, нульову)
вхідних даних, тобто, величин, заданих до початку його роботи або значення
яких визначають під час роботи алгоритму.
Вихідні дані — алгоритм має одне або декілька вихідних даних, тобто,
величин, що мають досить визначений зв'язок із вхідними даними.
Ефективність — алгоритм вважають ефективним, якщо всі його
оператори досить прості для того, аби їх можна було точно виконати за
скінченний проміжок часу з допомогою олівця та аркушу паперу.
Масовість — властивість алгоритму, яка полягає в тому, що алгоритм
повинен забезпечувати розв'язання будь-якої задачі з класу однотипних задач
за будь-якими вхідними даними, що належать до області застосування
алгоритму.

Приклад

функція нсд(a, b)
якщо b = 0
поверни a
інакше
поверни нсд(b, a mod b)

34
Спочатку множене і множник заносяться в n-розрядні регістри
множеного (РМн) і множника (РМк) відповідно, а всі розряди 2n-розрядного
регістра суми часткових добутків (РЧД) встановлюються в 0.
Множення відбувається за n кроків.
На кожному кроці, залежно від стану молодшого розряду регістра
множника, який керує мультиплексором, на один з входів n-разрядного
суматора подається або множене, або 0.
На другий вхід поступає вміст n старших розрядів РЧД.
Новий частковий добуток з суматора пересилається в старші розряди
РЧД.
Далі вміст РЧД зсовується на один розряд вправо, причому в старший
розряд регістра, що звільнився, заноситься значення переносу із старшого
розряду суматора.
Оскільки мультиплексор управляється молодшим розрядом РМк, то і
вміст цього регістра також зсовується на один розряд вправо.
Описана послідовність повторюється n разів [9].

35
Економічнішим у плані апаратури є інше рішення, коли замість двох
регістрів – n-розрядного РМк і 2n-розрядного РЧД – використовується один
комбінований 2n-розрядний регістр.
Множник спочатку заноситься в молодші n розрядів цього регістра, а
старші розряди обнуляються.
В міру зсуву вправо молодші, вже проаналізовані розряди множника
виштовхуються з регістра, звільняючи місце для чергової цифри СЧД.
Зазвичай такий регістр будується з двох n-розрядных регістрів,
об’єднаних ланцюгами зсуву.
Додатково відзначимо, що якщо чергова цифра множника дорівнює 1,
то для обчислення суми ЧД потрібні операції додавання і зсуву, а при нульовій
цифрі множника в принципі можна обійтися без додавання, обмежившись
тільки зсувом

36
2.2. Результати тестування процесора та його блоків

RTL ДІАГРАМА (Register transfer level) — рівень регістрових


передач.

37
Вид ззовні RTL.

Технологічна карта

38
Пам’ять даних:
Location 00 01 02 03 04
Data 01 02 03 04 05
Пам’ять команд:
Location 0 1 2 3 4 5 6 7 8 9
Instruction 00 21 42 63 84 A4 C4 EA 00 E0
(работа з аккумулятором з розташованим в послідовних 5 бітах)
В 16 – нім форматі 00 01 FF 03 07 FA FF 05 06 07

39
ВИСНОВКИ

Структура комп'ютера – це деяка модель, що встановлює склад,


порядок і принципи взаємодії вхідних в неї компонентів. Процесор має
ключове положення в комп’ютері.
Процесор, як прийнято казати, є мозком комп'ютера. І насправді, в
цілому це є вірним твердженням. Центральний процесор – це транзисторна
мікросхема, яка є головним обчислювальним і керуючим елементом
комп'ютера. Саме цей пристрій здійснює обробку інформації, виконує
команди користувача і керує іншими частинами комп'ютера та інших
пристроїв.
В цій курсовій роботі, ми детально розглянули процесор, його
функції, характеристики, архітектуру, будову та призначення в цілому. Більш
детально розглянули архітектуру та структуру процесору і його основних
блоків. Розробили та протестували проект однотактного процесора з
архітектурою MIPS з обмеженим набором команд RISC за допомогою
певного вказаного інструментарію.

40
ПЕРЕЛІК ДЖЕРЕЛ

1. Rockwell R65C00/21 DUAL CMOS MICROCOMPUTER AND


R65C29 DUAL CMOS MICROPROCESSOR (англ.). Архів оригіналу за 11
червня 2016. Процитовано 3 січня 2017.
2. Папушин Ю. Л., Білецький В. С. Основи автоматизації гірничого
виробництва. — Донецьк : Східний видавничий дім, 2007. — 168 с. — ISBN
978-966-317-004-6.
3. Іванов А. О. Теорія автоматичного керування: Підручник. —
Дніпропетровськ: Національний гірничий університет. — 2003. — 250 с.
4. Хэррис Д., Хэррис С. Цифровая схемотехника и архитектура
компьютера, Учебник. – 2-е издание – Morgan Kaufman, 2012. –1684 с.
5. Mi Lu. Arithmetic and Logic in Computer Systems. John Wiley &
Sons: New Jersey, 2004.
6. Центральный процессор. Википедия (рус.) : вебсайт (свободная
интернет-энциклопедия). URL: https://ru.wikipedia.org/wiki/
Центральный_процессор.
7. Шауцукова Л.З. Информатика 10 - 11. Информатика. Теория (с
задачами и решениями). – М.: Просвещение, 2000 г. (Интернет-версия
издания, веб-сайт ВГСПУ).
8. Акулов О. А., Медведьев Н. В. Информатика: базовый курс. –
Москва.: Омега-Л, 2006.
9. Макарова Н.В., Николайчук Г.С., Титова Ю.Ф. Компьютерное
делопроизводство. – СПб.: Издательский дом «Питер», 2002.

41
ДОДАТКИ

КОД НА VERILOG:
module ProgramCounter
input [4:0]d_in,
input reset, clk,
output reg [4:0] d_out
);
always @(posedge clk)
if (reset)
d_out <= 5'b00000;
else
d_out <= d_in;
endmodule
КОД АККУМУЛЯТОРА
module Accumulator
(input [7:0] d_in,
input load, clk,
output reg [7:0] d_out
always @(posedge clk)
if (load)
d_out <= d_in;
initial
d_out=8'h00;
endmodule
АЛУ КОД
module ALU (
input [7:0]a, input [7:0]b,input [2:0]opcode,
output reg [7:0]alu_out
always @(opcode,a,b)
42
case(opcode)
3'b000:alu_out = a + b; //ADD ДЛЯ LW, SW
3'b001:alu_out = a - b; //SUBTRACT
3'b010:alu_out = a&b; //AND
3'b011:alu_out = a|b; //OR
3'b100:alu_out = ~b; //NOT
3'b101:alu_out = a^b;//XOR
3'b110:alu_out = a~^b;//XNOR
default:alu_out = 0;
endcase
endmodule
КОД СУММАТОРА
module CounterIncrement (
input [4:0]a, input [4:0]b,
output[4:0] adder_out
assign adder_out = a + b;
endmodule
MUX-1 (МУЛЬТИПЛЕКСОР-1) КОД
module Mux2to1_6Bit
input [4:0] i0, i1,input sel,
output[4:0] mux_out
assign mux_out = sel ? i1 : i0;
endmodule
MUX-2 (МУЛЬТИПЛЕКСОР-2) КОД
module Mux2to1_8Bit
input [7:0]i0,i1,input sel,
output [7:0]mux_out
assign mux_out =sel?i1:i0;
endmodule
КОД КОНТРОЛЛЕРА
43
module Controller(
input [2:0] opcode,
output reg rd_mem,wr_mem,ac_src,ld_ac,pc_src,jmp_uncond);
always @(opcode)
begin
rd_mem = 1'b0;
wr_mem = 1'b0;
ac_src = 1'b0;
pc_src = 1'b0;
ld_ac = 1'b0;
jmp_uncond=1'b0;
case (opcode)
3'b000: //загрузить аккумулятор из памяти
begin
rd_mem = 1'b1;
wr_mem = 1'b0;
ld_ac = 1'b1;
ac_src = 1'b0;
end
3'b001:
begin
rd_mem = 1'b1;
wr_mem = 1'b0;
ld_ac = 1'b1;
ac_src = 1'b0;//SUBTRACT
end
3'b010:
begin
rd_mem = 1'b1;
wr_mem = 1'b0;
44
ld_ac = 1'b1;
ac_src = 1'b0;//AND
end
3'b011:
begin
rd_mem = 1'b1;
wr_mem = 1'b0;
ld_ac = 1'b1;
ac_src = 1'b0;//OR
end
3'b100:
begin
rd_mem = 1'b1;
wr_mem = 1'b0;
ld_ac = 1'b1;
ac_src = 1'b0;//NOT
end
3'b101:
begin
rd_mem = 1'b1;
wr_mem = 1'b0;
ld_ac = 1'b1;
ac_src = 1'b0;//XOR (Исключающее «ИЛИ»)
end
3'b110:
begin
rd_mem = 1'b1;
wr_mem = 1'b0;
ld_ac = 1'b1;
ac_src = 1'b0;//XNOR (Исключающее «ИЛИ-НЕ»)
45
end
3'b111:
Begin
rd_mem = 1'b0;
wr_mem = 1'b0;
ld_ac = 1'b0;
ac_src = 1'b0;
pc_src=1'b1;
jmp_uncond=1'b1;//JUMP
end
default:
begin
rd_mem = 1'b0;
wr_mem = 1'b0;
ac_src = 1'b0;
pc_src = 1'b0;
ld_ac = 1'b0;
end
endcase
end
endmodule
КОД ПАМЯТИ ДАННЫХ
module DataMemory (
input rd, wr,
input [4:0] abus,
input [7:0] in_dbus,
output reg [7:0] out_dbus);
reg [7:0] dm_array [0:31];
always @(rd,abus)
begin
46
if (rd)
out_dbus = dm_array [abus];
end
always @(wr,in_dbus) //always @(wr or abus or in_dbus)
begin
if (wr)
dm_array [abus] = in_dbus;
end
initial
begin
dm_array[0] = 8'h01;
dm_array[1] = 8'h02;
dm_array[2] = 8'h03;
dm_array[3] = 8'h04;
dm_array[4] = 8'h05;
end
endmodule
КОД ИНСТРУКЦИЙ ПАМЯТИ
module InstructionMemory (input [4:0] abus, output reg [7:0] dbus);
reg [7:0] im_array [0:12];
always @(abus)
dbus = im_array [abus];
initial
begin
im_array[0]= 8'h00; // Инициализировать Аккумулятор с 0 и добавить
содержимому DataMemory по адресу 0.
im_array [1] = 8'h21; // Вычитаем содержимое аккумулятора с
содержимым DataMemory по адресу 1.
im_array [2] = 8'h42; // Логическое «И» аккумулятора с содержимым
DataMemory по адресу 2.
47
im_array [3] = 8'h63; // Логическое «ИЛИ» аккумулятора с содержимым
DataMemory по адресу 3.
im_array [4] = 8'h84; // Логическое «НЕ» аккумулятора с содержимым
DataMemory по адресу 4.
im_array [5] = 8'hA4; // Логическое «XOR» (Исключающее «ИЛИ»)
аккумулятора с содержимым DataMemory по адресу 4.
im_array [6] = 8'hC4; // Логический «XNOR» (Исключающее «ИЛИ-
НЕ») аккумулятора с содержимым DataMemory по адресу 4.
im_array [7] = 8'HEA; // Безусловный переход к 01010 адресу памяти
команд.
im_array [10] = 8:00; // Дополнение содержимым DataMemory по адресу
0.
im_array [11] = 8'hE0; // Безусловный переход к 00000 адресу памяти
команд.
end
endmodule

Схема отриманого однотактного процесора:

48

You might also like