You are on page 1of 22

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

ДЕРЖАВНИЙ ВИЩИЙ НАВЧАЛЬНИЙ ЗАКЛАД


«УЖГОРОДСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ»
ІНЖЕНЕРНО-ТЕХНІЧНИЙ ФАКУЛЬТЕТ
КАФЕДРА КОМП’ЮТЕРНИХ СИСТЕМ І МЕРЕЖ

КУРСОВИЙ ПРОЕКТ
з дисципліни «Архітектура комп’ютера»
на тему:
«RISC-процесор із заданим набором команд та підсистемою кеш-
пам’яті згідно варіанту.»
Варіант 4

Студентки 2-го курсу ст


спеціальності 123 ―
«Комп’ютерна інженерія»
Кучінки Вікторії Петрівни
Керівник: ст.

Національна шкала: ______________


К-сть балів:____ Оцінка ECTS:_____

м. Ужгород — 2023 р.
Завдання на проектування
1 етап
Вивчення підмножини інструкцій скалярного RISC-комп’ютера
Дано. Підмножина інструкцій скалярного RISC-комп’ютера, яка включає:
- базовий набір інструкцій: add, sub, and, or, slt, lw, sw, beq, addi, jal, andi, ori,
slti
- додаткові інструкції згідно варіанту завдання.
1. Використовуючи Асемблер, регістри та модель пам’яті RISC-V для:
однієї базової інструкції згідно варіанту завдання: or
- навести загальний асемблерний запис інструкції,
- пояснити призначення та особливості виконання інструкції,
- вказати спосіб адресації операндів,
- навести приклади використання інструкції,
- зобразити структуру машинного коду інструкції відповідно до її типу,
- навести приклади двійкового кодування інструкції.
2. Матеріал проілюструвати прикладами у симуляторі Асемблера.

2 етап
Вихідні дані для проектування:
- схема інформаційного тракту та пристрою керування однотактного
процесора, який може виконувати базовий набір інструкцій: or, blt
- таблиця істинності дешифратора АЛП;
- таблиця істинності основного дешифратора;
- схема арифметико-логічного пристрою.
Завдання 1. Визначити, які частини тракту даних беруть участь у виконанні
базової інструкції згідно варіанту (див. 1 етап), описати виконання інструкції та
вказати значення керуючих сигналів.
Завдання 2. Розширити функціональність процесора, додавши до системи
команд нову команду згідно варіанту завдання (див 1 етап). Навести схеми
інформаційного тракту, пристрою керування та схему АЛП, заповнити таблиці
істинності для процесора, який може виконувати базові команди та додану у
результаті проектування.

3 етап
Вихідні дані для проектування:
- схема інформаційного тракту та пристрою керування багатотактного
процесора, який може виконувати базовий набір інструкцій: or, blt
- таблиця істинності дешифратора АЛП;
- діаграма станів керуючого автомата;
- схема арифметико-логічного пристрою.
Завдання 1. Визначити, які частини тракту даних беруть участь у виконанні
базової інструкції згідно варіанту (див. 1 етап), описати виконання інструкції,
діаграму станів та вказати значення керуючих сигналів.
Завдання 2. Розширити функціональність процесора, додавши до системи
команд нову команду згідно варіанту завдання (див 1 етап). Навести схеми
інформаційного тракту, пристрою керування та схему АЛП, заповнити таблиці
істинності та побудувати діаграми станів для процесора, який може виконувати
базові команди та додану у результаті проектування.

4 етап
Вихідні дані для проектування:

- схема інформаційного тракту, пристрою керування та блоку вирішення


конфліктів конвеєрного процесора, який може виконувати базовий набір
інструкцій: ori

- таблиці істинності основного дешифратора та дешифратора АЛП;

- схема арифметико-логічного пристрою.


Завдання 1. Визначити, які частини тракту даних беруть участь у виконанні
базової інструкції згідно варіанту (див. 1 етап), описати виконання інструкції,
таблиці істинності та вказати значення керуючих сигналів.

Завдання 2. Розширити функціональність процесора, додавши до системи


команд нову команду згідно варіанту завдання (див 1 етап). Навести схеми
інформаційного тракту, пристрою керування та схему АЛП, заповнити таблиці
істинності та вказати особливості вирішення конфліктів для процесора, який
може виконувати базові команди та додану у результаті проектування.
ВСТУП
У світі сучасних обчислювальних систем та мікропроцесорів, архітектура
RISC (Reduced Instruction Set Computing) займає важливе місце,
забезпечуючи ефективну та швидку обробку інструкцій. Однією з ключових
характеристик RISC-процесорів є їхній простий та обмежений набір команд,
що спрощує виконання операцій та підвищує продуктивність.
Набір Команд:
Набір команд RISC-процесора визначається мікроархітектурою та
призначенням пристрою. Він включає в себе основні операції, які може
виконувати процесор, такі як арифметичні операції, операції роботи з пам'яттю
та управління потоком виконання.
Підсистема Кеш-пам'яті:
Однією з ключових складових сучасних RISC-процесорів є їхня підсистема
кеш-пам'яті, яка відіграє важливу роль у забезпеченні швидкого доступу до
даних та інструкцій. У контексті цієї теми, розглядаємо два типи відображення
адрес в кеш-пам'яті: пряме відображення та частково-асоціативне
відображення.
Пряме відображення:
В схемі прямого відображення, кожній локації пам'яті в основній пам'яті
відповідає конкретний рядок (way) у кеш-пам'яті. Це ефективно для простих
систем, але може призвести до конфліктів при доступі до декількох рядків
основної пам'яті, які відображаються в один і той самий рядок кешу.
Частково-асоціативне відображення:
У випадку частково-асоціативного відображення, кожна локація пам'яті
може бути відображена в певну "множину" рядків (set) у кеші, дозволяючи
певну гнучкість та уникнення деяких конфліктів. Це розв'язує недоліки прямого
відображення, зберігаючи при цьому ефективність доступу до даних.
У наступних розділах буде розглянуто деталі цих двох методів
відображення адрес в кеш-пам'яті, а також їх вплив на продуктивність та
ефективність RISC-процесора.
Розділ 1.
Проектування інформаційного тракту та пристрою керування
1.1. Базовий набір команд
RISC (Reduced Instruction Set Computing) є архітектурою процесора,
яка використовує обмежений набір команд для виконання операцій. Основна
ідея полягає в тому, щоб зменшити кількість операцій, доступних для
процесора, та спростити їх виконання. Це дозволяє підняти частоту
тактування процесора та поліпшити продуктивність.
RISC-V (Reduced Instruction Set Computing - V) - це відкрита
архітектура команд для проектування процесорів. Базовий набір команд
RISC-V включає такі основні інструкції:
1. add (додавання): Ця інструкція виконує операцію додавання,
призначену для складання значень двох регістрів і зберігає результат у
третьому регістрі.
2. sub (віднімання): Виконує операцію віднімання, віднімаючи значення
одного регістра від значення іншого та зберігаючи результат у третьому
регістрі.
3.and (логічне І): Виконує логічну операцію "І" над бітами двох регістрів
та зберігає результат у третьому регістрі.
4.or (логічне АБО): Виконує логічну операцію "АБО" над бітами двох
регістрів та зберігає результат у третьому регістрі.
5. slt (set less than): Порівнює два регістри; якщо значення першого
менше за значення другого, то встановлюється відповідний біт результату.
6. lw (завантаження слова): Завантажує значення з пам'яті у регістр.
Зазвичай використовується для завантаження даних з пам'яті в регістр для
подальшого використання.
7. sw (збереження слова): Зберігає значення з регістра в пам'яті. Зазвичай
використовується для збереження результатів обчислень назад у пам'ять.

6
8. beq (гілка при рівності): Виконує гілку (перехід) до вказаної адреси,
якщо значення двох регістрів рівні.
9. addi (додавання негайного): Додає константу до значення регістра і
зберігає результат у регістрі.
10. jal (перехід і збереження адреси повернення): Переводить
управління до вказаної адреси та зберігає адресу наступної інструкції для
подальшого використання при поверненні з підпрограми.
11. andi (логічне І з негайним): Виконує логічне "І" з константою та
значенням регістра.
12. ori (логічне АБО з негайним): Виконує логічне "АБО" з константою
та значенням регістра.
13. slti (set less than immediate): Порівнює значення регістра зі
згенерованою константою; якщо значення регістра менше, то встановлює
відповідний біт результату.
Ці інструкції представляють базовий набір для багатьох архітектур
процесорів і використовуються для побудови більш складних програм.

1.2. Додаткові команди


У базовий набір команд RISC-V входять не лише арифметичні, логічні, та
управлінські операції, але також інші команди для різноманітних завдань.
Ось деякі додаткові команди:
blt (branch if less than): Ця інструкція вказує на те, що перший операнд
менший за другий. Якщо це умова виконується, відбувається гілка, тобто
здійснюється перехід до іншої частини програми або підпрограми.
- Загальний асемблерний запис додаткової інструкції: blt rs1, rs2, label
- Призначення: Інструкція blt (Branch Less Than) перевіряє, чи є значення
в регістрі rs1 меншим за значення в регістрі rs2, і, якщо умова виконується,
здійснює безумовний перехід на мітку (label).

7
- Особливості виконання: Якщо значення rs1 менше за значення rs2, то
виконується безумовний перехід на мітку, в іншому випадку виконання
програми продовжується на наступній інструкції після blt.
- Спосіб адресації операндів: rs1 та rs2 - джерела порівнюваних значень.
- Приклад використання:

Рисунок 1.2.1 - інструкція blt

У даному прикладі, інструкція blt порівнює значення регістрів x1 і x2.


Якщо значення регістра x1 менше значення регістра x2, виконання
переходить до мітки label1, в іншому випадку виконання продовжується з
наступної інструкції після блоку умовного переходу.

У цьому прикладі, якщо значення регістра x1 менше значення регістра x2,


то виконується інструкція add x3, x4, x5, а потім виконання продовжується з
інструкції після мітки label1. У зворотному випадку, якщо значення регістра
x1 не менше значення регістра x2, то виконання переходить до мітки label1 і
виконується інструкція sub x6, x7, x8.

Таким чином, виконання інструкції blt дозволяє здійснити умовний


перехід в залежності від порівняння двох значень.

8
Рисунок 1.2.2 - інструкція blt для перевірки умови "x4 < x5"

У другому прикладі, ми використовуємо інструкцію blt для перевірки


умови "x4 < x5". Якщо умова виконується, то виконується перехід на мітку
label. Якщо умова не виконується, то виконується інструкція addi, яка
зберігає значення 1 в регістр x6. Після виконання переходу на мітку label,
виконується інструкція addi, яка зберігає значення 2 в регістрі x7.

Рисунок 1.2.3 - I-Type

Якщо розглядати приклад blt x4, x5, label1, де мітка label1 має адресу
0x100, то при перетворенні цієї інструкції в машинний код, ми отримаємо:
0x01024363
В двійковій формі: 00000001000000100010001101100011

1.3. інформаційний тракт


- особливості реалізації в однотактному, багатотактному та
конвеєрному процесорі
Інформаційний тракт, який включає в себе передачу та обробку даних у
процесорі, може відрізнятися в залежності від типу архітектури процесора.
Розглянемо особливості реалізації інформаційного тракту в однотактному,
багатотактному та конвеєрному процесорах:
Однотактний процесор (Single-Cycle Processor):
OR
ALU Operation:

9
Рисунок 1.3.1 - АЛП однотактного процесора
У даному випадку АЛП є спеціальний блок який буде давати на виході
регуляції сигналів 1.0

10
BLT

1.4. пристрій керування


- особливості реалізації в однотактному, багатотактному та
конвеєрному процесорі
Базова інструкція or виконує логічну операцію "або" над двома
операндами. Ця інструкція використовується в багатьох архітектурах
процесорів та мовах програмування.

11
Дано команди: ORI та BLTU
У однотактовому процесорі, можуть виникати деякі ключові
проблеми при виконанні базових інструкцій, таких як or та blt (менше
ніж).
1. Проблема зависимості даних (Data Dependency): Якщо наступна
інструкція залежить від результату попередньої, наприклад,
використовується результат операції or, що зберігається в регістрі, то
виникає залежність даних. Це може призвести до конфлікту даних та
вимушеної затримки в виконанні наступної інструкції.
2. Проблема гілковання (Branching): Інструкція blt передбачає перехід
до іншої частини програми, якщо умова "менше ніж" виконується. Проте в
однотактовому процесорі не можна відразу визначити, чи виконувати гілку,
оскільки це потребує порівняння та прийняття рішення про перехід. Це може
призвести до затримки в виконанні наступних інструкцій.
3. Проблема конфлікту ресурсів (Resource Conflict): Однотактовий
процесор має обмежену кількість ресурсів, таких як ALU, реєстри та шини.
Якщо інструкції or та blt вимагають одночасного використання одних і тих
самих ресурсів, то виникає конфлікт, що призводить до затримки в виконанні
інструкцій або вимагає додаткових механізмів обробки конфлікту.
Для подолання цих проблем у більш ефективних процесорах
використовуються різні техніки, такі як архітектура з піпелайном (pipeline),
використання кеш-пам'яті для зменшення затримок у доступі до даних та
методи виявлення гілкового прогнозування (branch prediction) для міні.
У багатотактовому процесорі також можуть виникати деякі ключові
проблеми при виконанні базових інструкцій, таких як or і blt (менше
ніж). Основні проблеми включають:
1. Проблема зависимості даних (Data Dependency): Якщо наступна
інструкція залежить від результату попередньої, наприклад,
використовується результат операції or, що зберігається в регістрі, то

12
виникає залежність даних. Це може призвести до конфлікту даних та
вимушеної затримки в виконанні наступної інструкції.
2. Проблема гілковання (Branching): Інструкція blt передбачає перехід
до іншої частини програми, якщо умова "менше ніж" виконується. У
багатотактовому процесорі виконання гілки може призвести до зупинки
виконання поточної послідовності інструкцій, поки не буде прийняте
рішення про перехід. Це може вплинути на продуктивність процесора.
3. Проблема конфлікту ресурсів (Resource Conflict): Багатотактовий
процесор має обмежену кількість ресурсів, таких як ALU, реєстри та шини.
Якщо інструкції or і blt вимагають одночасного використання одних і тих
самих ресурсів, то виникає конфлікт, що призводить до затримки в виконанні
інструкцій або вимагає додаткових механізмів обробки конфлікту.
Для подолання цих проблем у багатотактових процесорах
використовуються різні техніки, такі як піпелайнінг (pipeline), використання
кеш-пам'яті для зменшення затримок у доступі до даних, спекулятивне
виконання інструкцій (speculative execution) та методи виявлення та
вирішення гілкових проблем (branch prediction).
Мінус такого підходу: багаторазове накладання додаткових витрати на
послідовність.
Тепер наш процесор буде мати всього три головні елементи: PC
(лічильник), Instr/Data Memory (пам’ять даних та інструкцій), Register File
(регістровий файл).

13
На першому кроці початковий стан PCWrite = 0, на другому 1. На
картинці зроблене відповідне позначення (1(перший крок):0, 2(другий
крок):1) для всіх елементів Control Unit’а.
14
На наступній сторінці зображено діаграму, на якій розбито команду на
кілька етапів.

BLT

1.5. блок вирішення конфліктів

15
Блок вирішення конфліктів (Conflict Resolution Unit) в комп'ютерній
архітектурі відповідає за управління ситуаціями конфліктів, які можуть
виникнути при виконанні інструкцій процесором. Цей блок займається
вирішенням різних видів конфліктів, таких як конфлікти в доступі до
ресурсів, конфлікти в читанні та записі, інструкції залежності і т. д.
Особливості реалізації блоку вирішення конфліктів можуть змінюватися в
залежності від типу архітектури процесора та його режиму роботи:
Однотактний процесор (Single-Cycle Processor):
Управління ресурсами:
Ресурси регістрів: Оскільки кожна інструкція використовує регістри,
необхідно мати механізм для вирішення конфліктів, коли дві чи більше
інструкції намагаються отримати доступ до одного й того ж регістру.
Ресурси функціональних блоків: Якщо різні інструкції конфліктують за
використання функціональних блоків (наприклад, арифметичних логічних
блоків), то необхідно вирішити ці конфлікти.
Керування потоком інструкцій:
Очікування (Stall): В однотактному процесорі може бути введений сталінг
(stalling), тобто призупинення виконання на один або декілька тактів. Це
може бути використано для вирішення конфліктів, наприклад, конфліктів
даних чи гілкових конфліктів.
Зміна порядку виконання (Reordering): Іншим підходом є зміна порядку
виконання інструкцій для уникнення конфліктів. Наприклад, може бути
змінений порядок виконання інструкцій, які конфліктують, щоб дозволити їх
виконання без сталінгу.
Управління гілками:
Вирішення гілкових конфліктів: У випадку гілкових інструкцій важливо
правильно визначити, яка гілка буде виконана, і відповідно адаптувати
подальшу роботу конвеєра.
Багатотактний процесор (Multi-Cycle Processor):
Вирішення конфліктів доступу до ресурсів:
16
Керування доступом до спільних ресурсів, таких як пам'ять, кеш-пам'ять,
або інші спільні пристрої.
Встановлення правил приоритету або розподіл ресурсів між різними
процесорами.
Керування конфліктами даних:
Реалізація механізмів вирішення конфліктів, пов'язаних із конкурентним
доступом до даних.
Використання алгоритмів та методів, таких як блокування, оптимістичне
визначення конфліктів та інші, для управління даними між різними ядрами.
Синхронізація та взаємодія:
Забезпечення синхронізації роботи різних ядер чи процесів.
Реалізація механізмів взаємодії та обміну даними між різними частинами
системи.
Керування управлінням потоками:
Контроль конфліктів, що виникають при використанні потоків виконання
або паралельних завдань.
Реалізація механізмів динамічного призначення завдань та управління
потоками.
Вирішення конфліктів управління:
Керування конфліктами, пов'язаними з управлінням ресурсами,
призначенням завдань та розподілом роботи між різними ядрами чи
процесорами.
Арбітраж і прийняття рішень:
Вирішення конфліктів через механізми арбітражу та прийняття рішень,
які враховують пріоритети, стан системи та інші параметри.
Конвеєрний процесор (Pipelined Processor):

17
Блок вирішення конфліктів у конвеєрному процесорі відіграє ключову
роль у вирішенні конфліктів даних та управління. Основні завдання цього
блоку включають в себе забезпечення правильного порядку виконання
інструкцій, управління конфліктами даних та управління вирішенням гілок.
Визначення частин тракту даних, що беруть участь у виконанні
базової інструкції ori:
Fetch (Отримання):
Читання інструкції з пам'яті: Звернення до адреси пам'яті, що містить
наступну інструкцію для виконання.
Збереження інструкції: Отримана інструкція зберігається у внутрішньому
регістрі процесора для подальшого виконання.
Decode (Декодування):
Розбір інструкції: Внутрішній блок декодування аналізує отриману
інструкцію та визначає операцію, яку потрібно виконати.
Отримання операндів: Інструкція може вимагати отримання даних з
регістрів або пам'яті, необхідних для виконання операції.
Execute (Виконання):
Виконання операції: Процесор виконує вказану операцію над
операндами, отриманими під час декодування.

18
Запис результату: Результат виконання операції записується у
відповідний регістр або пам'ять.
Виконання інструкції ori:
Отримання інструкції ori з пам'яті.
Декодування інструкції ori, визначення операції та операндів.
Отримання значення зазначеного операнду.
Виконання операції "логічне або" (bitwise OR) між отриманим операндом
та зазначеним регістром або значенням.
Запис результату відповідно до вказаного регістра або пам'яті.

19
Таблиця істинності для операції "логічне або" (bitwise OR):

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


залежати від конкретної архітектури процесора та його мікрокоду.
Наприклад, це можуть бути сигнали для вибору операції "логічне або",
вибору регістра для запису результату, а також сигнали для зчитування
операндів з регістрів або пам'яті. Значення цих сигналів будуть унікальними
для кожної конкретної реалізації процесора.
BLT
В базовій інструкції BLT (Branch if Less Than) беруть участь наступні
частини тракту даних:
Fetch (Отримання):
Читання інструкції з пам'яті.
Збереження інструкції у внутрішньому регістрі процесора.
Decode (Декодування):
Розбір інструкції, визначення операції та джерел даних.
20
Execute (Виконання):
Виконання операції, у даному випадку перевірка умови "менше ніж".
Вирішення умови переходу, якщо умова виконується.
Виконання інструкції BLT включає отримання інструкції з пам'яті, її
декодування та виконання. Операція BLT порівнює два операнди і виконує
перехід (скок) до певної адреси, якщо перший операнд менше за другий. Ця
умова переходу розраховується на підставі значень керуючих сигналів.
Таблиця істинності для операції BLT:

Значення керуючих сигналів:


З Fetch до Decode: Сигнал для передачі отриманої інструкції до блоку
декодування.
З Decode до Execute: Сигнал для визначення умови переходу, сигнал для
виконання переходу (якщо умова виконується).
Ось деякі особливості реалізації блоку вирішення конфліктів:
Попередження конфліктів даних:
Data Forwarding (Введення даних): Використовується для передачі даних
з одного етапу конвеєра до іншого без очікування запису в пам'ять. Це
дозволяє уникнути конфліктів даних та зменшити затримки.
Out-of-Order Execution (Виконання не в порядку): В деяких випадках
конвеєр може виконувати інструкції не в порядку їхнього отримання для
уникнення конфліктів.
Попередження конфліктів управління:
Branch Prediction (Передбачення гілок): Використовується для
передбачення вибору гілки до того, як фактичне рішення буде відоме. Це
дозволяє уникнути затримок, пов'язаних з очікуванням вирішення гілки.

21
Speculative Execution (Спекулятивне виконання): Якщо є висока
ймовірність, що певний шлях виконання буде вибраний, то інструкції можуть
виконуватися спекулятивно до фактичного вирішення гілки.
Очікування та призупинення конвеєра:
Stall (Призупинення): При конфліктах або несприятливих умовах може
виникати необхідність призупинення конвеєра, щоб уникнути
неправильностей.
Pipeline Bubbles (Пусті місця в конвеєрі): Це може включати в себе
вставку "пузирів" (пустих тактів) для вирішення конфліктів та забезпечення
правильного порядку виконання.
Відновлення після гілкового переходу:
Reorder Buffer (Буфер перестановки): Використовується для вирішення
проблем, пов'язаних з виконанням інструкцій не в порядку в разі гілкових
переходів.
Rollback Mechanism (Механізм відкату): У випадку невірного
передбачення гілки виконані інструкції можуть бути відкриті та повторно
виконані.
Керування внутрішніми та зовнішніми інтерфейсами:
Інтерфейси пам'яті та вводу/виводу: Забезпечення взаємодії конвеєра з
пам'яттю та зовнішніми пристроями для забезпечення потоку даних та
інструкцій.
Обробка інтерруптів: Пристрій керування повинен взаємодіяти з
системою обробки інтерруптів та винятків для забезпечення коректного
перехіду до відповідного обробника.

22

You might also like