Professional Documents
Culture Documents
КП
КП
Курсова робота
З дисципліни: «Комп'ютерна Схемотехніка Та Архітектура Комп'ютерів»
на тему: Однотактний процесор MIPS з обмеженим набором команд RISC
Вариант 13
Одеса 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 певною мірою вичерпали резерви зростання продуктивності за рахунок
підвищення робочої частоти. Каменем спотикання стало не тільки дуже високе
тепловиділення процесорів, що працюють на високих частотах, але і проблеми
з їхньою стабільністю. Отже, екстенсивний шлях розвитку процесорів
вичерпався і виробникам довелося освоювати новий, інтенсивний шлях
підвищення продуктивності продукції.
Будова
11
декілька інструкцій, наприклад, для готовності здійснити перехід відповідно
до результату, який найближчим часом буде отриманий з конвеєра.
• Арифметико-логічний пристрій (АЛП). Так називається пристрій
для цілочислових операцій. Арифметичні операції, такі як додавання,
множення і ділення, а також логічні операції (OR, AND, ASL, ROL і ін.)
обробляються за допомогою АЛП. Ці операції складають переважну більшість
програмних кодів у більшості програм. Всі операції в АЛП обробляються в
регістрах — спеціально відведених чарунках АЛП. У процесорі може бути
декілька АЛП. Кожен здатний виконувати арифметичні або логічні операції
незалежно від інших, що дозволяє виконувати декілька операцій одночасно.
Арифметико-логічний пристрій виконує арифметичні і логічні дії. Логічні
операції поділяються на дві прості операції: «Так» і «Ні» («1» і «0»). Звичайно,
ці два пристрої виділяються суто умовно, конструктивно вони не розділені.
• AGU (Address Generation Unit) — пристрій генерації адрес. Це
пристрій не менш важливий, ніж АЛП, тому що він відповідає за коректну
адресацію при завантаженні або збереженні даних.
• Математичний співпроцесор (FPU). Процесор може містити
декілька математичних співпроцесорів. Кожний з них здатний виконувати,
щонайменше, одну операцію з рухомою комою, незалежно від того, що
роблять інші АЛП. Метод конвеєрної обробки даних дозволяє одному
математичному співпроцесорові виконувати декілька операцій одночасно.
Співпроцесор підтримує високоточні обчислення як цілочислені, так і з
рухомою комою і, крім того, містить набір корисних констант, що
прискорюють обчислення. Співпроцесор працює паралельно з центральним
процесором, забезпечуючи, таким чином, високу продуктивність.
Пам'ять
• Кеш-пам'ять. Особлива високошвидкісна пам'ять процесора. Кеш
використовується як буфер для прискорення обміну даними між процесором і
оперативною пам'яттю, а також для збереження копій інструкцій і даних, що
12
недавно використовувалися процесором. Значення з кеш-пам'яті витягаються
прямо, без звертання до основної пам'яті.
Кеш першого рівня (L1 cache). Кеш-пам'ять, що знаходиться усередині
процесора. Вона швидша за всі інші типи пам'яті, але менша за обсягом.
Зберігає нещодавно використану інформацію, яка знову може бути
використана при виконанні коротких програмних циклів.
Кеш другого рівня (L2 cache). Також знаходиться усередині процесора.
Інформація, що зберігається в ній, використовується рідше, ніж інформація,
що зберігається в кеш-пам'яті першого рівня, проте обсяг пам'яті у ній
більший. Також у наш час в процесорах використовується кеш третього рівня.
• Оперативна пам'ять. Набагато більша за обсягом, ніж кеш-пам'ять,
і значно менш швидкодіюча.
• Регістри — це внутрішня пам'ять процесора. Являють собою ряд
спеціалізованих додаткових комірок пам'яті, а також є внутрішніми носіями
інформації мікропроцесора. Регістр є пристроєм тимчасового зберігання
даних, числа або команди і використовується з метою полегшення
арифметичних, логічних і пересильних операцій. Основним елементом
регістра є електронна схема, яку називають тригером, що здатна зберігати
одну двійкову цифру (розряд).
Деякі важливі регістри мають свої назви, наприклад:
• суматор — регістр АЛП, що бере участь у виконанні кожної операції;
• лічильник команд — регістр УП, вміст якого відповідає адресі чергової
виконуваної команди, служить для автоматичної вибірки програми з
послідовних комірок пам'яті;
• регістр команд — регістр УП для збереження коду команди на період
часу, що необхідний для її виконання. Частина його розрядів використовується
для збереження коду операції, інші — для збереження кодів адрес операндів.
Шини
13
Шина — це канал пересилання даних, який використовується спільно
різними блоками системи. Шина може являти собою набір провідних ліній у
друкованій платі, проводи, припаяні до виводів роз'ємів, у які вставляються
друковані плати, або плоский кабель. Інформація передається по шині у виді
груп бітів. До складу шини для кожного біта слова може бути передбачена
окрема лінія (паралельна шина), або всі біти слова можуть послідовно в часі
використовувати одну лінію (послідовна шина).
За функціональним призначенням можуть бути виділені шини:
• Шина даних. Служить для пересилання даних між процесором і
пам'яттю або процесором і пристроями введення-виведення. Ці дані можуть
являти собою як команди мікропроцесора, так і інформацію, що він посилає в
порти введення-виведення або приймає звідти.
• Шина адрес. Використовується ЦП для вибору необхідної комірки
пам'яті або пристрою введення-виведення шляхом установки на шині
конкретної адреси, що відповідає одній з комірок пам'яті або одному з
елементів введення-виведення, що входять у систему.
• Шина керування. По ній передаються сигнали керування,
призначені пам'яті і пристроям введення-виведення. Ці сигнали вказують
напрямок передачі даних (у процесор або з нього).
14
1. АРХІТЕКТУРА ПРОЦЕСОРА
1.1. Архітектура процесора
20
даних, в програмному коді використовується непряма адресація, що змушує
працювати БГА.
Математичний співпроцесор, або модуль (блок) операцій з рухомою
комою (Floating point unit, FPU) – процесор може містити кілька математичних
співпроцесорів. Кожен з них здатний виконувати, щонайменше, одну
операцію з плаваючою точкою незалежно від того, що роблять інші АЛП.
Метод конвеєрної обробки даних дозволяє одному математичному
співпроцесору виконувати кілька операцій одночасно. Співпроцесор
підтримує високоточні обчислення як цілочисельні, так і з плаваючою точкою
і, крім того, містить набір корисних констант, що прискорюють обчислення.
Система виконує команди співпроцесора в тому порядку, в якому вони
з'являються в потоці. Співпроцесор працює паралельно з центральним
процесором, забезпечуючи, таким чином, високу продуктивність.
Дешифратор інструкцій (команд) – аналізує інструкції з метою
виділення операндів і адрес, за якими розміщуються результати. Потім слідує
повідомлення іншому незалежному пристрою про те, що необхідно зробити
для виконання інструкції. Дешифратор допускає виконання декількох
інструкцій одночасно для завантаження усіх виконуючих пристроїв.
Кеш-пам'ять – особлива високошвидкісна пам'ять процесора. Кеш
використовується як буфер для прискорення обміну даними між процесором і
оперативною пам'яттю, а також для зберігання копій інструкцій і даних, які
недавно використовувалися процесором. Значення з кеш-пам'яті витягуються
безпосередньо, без звернення до основної пам'яті. Пам'ять усередині
мікропроцесора може працювати зі швидкістю самого процесора – це Кеш
першого рівня (L1 cache). Кеш-пам'ять, що знаходиться всередині процесора.
Вона швидше всіх інших типів пам'яті, але менше за обсягом. Зберігає зовсім
недавно використану інформацію, яка може бути використана при виконанні
коротких програмних циклів. Кеш другого рівня (L2 cache). Також
знаходиться усередині процесора. Інформація, що зберігається в ній,
використовується рідше, ніж інформація, що зберігається в кеш-пам'яті
21
першого рівня, але зате за обсягом пам'яті він більше. Також в даний час в
процесорах використовується кеш третього рівня.
Основна пам'ять – набагато більше за обсягом, ніж кеш-пам'ять, і
значно менш швидкодіюча. Кеш-пам'ять, як відомо, може досить сильно
впливати на продуктивність процесора в залежності від типу виконуваних
операцій, однак її збільшення зовсім не обов'язково принесе збільшення
загальної продуктивності роботи процесора. Все залежить від того, наскільки
додаток оптимізований під дану структуру і використовує кеш, а також від
того, поміщаються чи різні сегменти програми в кеш цілком або частинами.
Кеш-пам'ять не тільки підвищує швидкодію мікропроцесора при операції
читання з пам'яті, але в ній також можуть зберігатися значення, що
записуються процесором в основну пам'ять; записати ці значення можна буде
пізніше, коли основна пам'ять буде не зайнята.
Шина – це канал пересилання даних, використовуваний спільно
різними блоками системи. Шина може являти собою набір провідних ліній в
друкованій платі, проводу, припаяні до висновків роз'ємів, в які вставляються
друковані плати, або плоский кабель. Інформація передається по шині у
вигляді груп бітів. До складу шини для кожного біта слова може бути
передбачена окрема лінія (паралельна шина), або всі біти слова можуть
послідовно в часі використовувати одну лінію (послідовна шина). До шині
може бути підключено багато прийомних пристроїв – одержувачів. Зазвичай,
дані на шині призначаються тільки для одного з них. Поєднання керуючих та
адресних сигналів, визначає для кого саме. Керуюча логіка подає сигнали, щоб
вказати одержувачу, коли йому слід приймати дані. Однак найшвидша
процесорна шина не сильно допоможе, якщо пам'ять не зможе доставляти дані
з відповідною швидкістю. Є такі типи шин: шина даних, шина адрес, шина
управління.
Регістри – це внутрішня пам'ять процесора. Являють собою ряд
спеціалізованих додаткових комірок пам'яті, а також внутрішні носії
інформації мікропроцесора. Регістр є пристроєм тимчасового зберігання
22
даних, числа або команди і використовується з метою полегшення
арифметичних, логічних і пересильних операцій. Основним елементом
регістра є електронна схема, яка називається тригером, яка здатна зберігати
одну двійкову цифру 1 або 0 (розряд). Регістр є сукупність тригерів, пов'язаних
один з одним певним чином загальною системою управління. Існує кілька
типів регістрів, що відрізняються видом виконуваних операцій. Деякі важливі
регістри мають свої назви, наприклад:
Суматор – регістр АЛП, що бере участь у виконанні кожної операції.
Лічильник команд – регістр ПУ, вміст якого відповідає адресі чергової
виконуваної команди; служить для автоматичної вибірки програми з
послідовних комірок пам'яті.
Регістр команд – регістр ПУ для зберігання коду команди на період
часу, необхідний для її виконання. Частина його розрядів використовується
для зберігання коду операції, інші – для збереження кодів адрес операндів. Та
інші типи регістрів, усі вони є важливими.
Структурна схема
Структурна схема — схема, яка визначає основні функціональні
частини виробу, їх взаємозв'язки та призначення. Під функціональною
частиною розуміють складову частину схеми: елемент, пристрій,
функціональну групу, функціональну ланку.
Структурна схема призначена для відображення загальної структури
пристрою, тобто його основних блоків, вузлів, частин та головних зв'язків між
ними. Із структурної схеми повинно бути зрозуміло, навіщо потрібний даний
пристрій і як він працює в основних режимах роботи, як взаємодіють його
частини. Позначення елементів структурної схеми можуть обиратись
довільно, хоча загальноприйнятих правил виконання схем слід дотримуватись.
23
Структурна схема однокристальної ЕОМ типу AT89LV51
24
У разі виконання функціональних частин у вигляді прямокутників
найменування функціональної частини, тип елемента і позначення документа
записують всередині них. При великій кількості функціональних частин
допускається замість найменування, типів і позначень проставляти порядкові
номери справа від зображення або над ним, як правило, зверху вниз в напрямку
зліва направо. В цьому випадку найменування, типи і позначення записують у
вигляді таблиці, розміщеній на полі схеми.
У схемотехніці разом із структурною розглядають також принципову
та функціональну схему. З поміж всіх цих схем структурна найменш
деталізована. Структурну схему розробляють при проєктуванні виробів
(устаткування) на стадіях, що передують розробці схем інших типів, і
користуються ними для загального ознайомлення з виробом (устаткуванням).
У теорії автоматичного керування
Елементарні функціональні ланки зображаються прямокутниками, а
зв'язки між ними — суцільними лініями зі стрілками, що показують напрям дії
ланки. Іноді в полі прямокутника вписують математичний вираз закону
перетворення сигналу в ланці, у цьому випадку схему іноді називають
алгоритмічною.
25
2. ВИКОНАННЯ ЗАВДАННЯ
26
2.1. Докладний проект однотактного процесора MIPS з обмеженим
набором команд RISC
Архітектурний стан
Визначається за:
− Вмістом лічильника команд (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-му
варіанті, який має назву алгоритм із зсувом вправо (алгоритм А).
29
в загальному. Коли m = 3, ∆T = 4 цикли. Знову ж таки, загальний час
затримки не залежить від кількості вхідних операндів k.
30
трапляються випадки, коли достатнім є алгоритм, який «зазвичай» працює
швидко.
Грубо кажучи, аналіз середньої асимптотичної часової складності
можна поділити на два типи: аналітичний та статистичний. Аналітичний метод
дає точніші результати, але складний у використанні на практиці. Натомість
статистичний метод дозволяє швидше здійснювати аналіз складних задач.
В наступній таблиці наведено поширені асимптотичні складності з
коментарями.
Логарифмічне зростання —
Обчислення xn; двійковий
подвоєння розміру задачі
bne пошук в масиві з n
збільшує час роботи на сталу
елементів
величину
Додавання/віднімання
Лінійне зростання —
чисел з n цифр; лінійний
O(n) подвоєння розміру задачі
пошук в масиві з 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. Результати тестування процесора та його блоків
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
ВИСНОВКИ
40
ПЕРЕЛІК ДЖЕРЕЛ
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