Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
1998
Тип роботи:
Інші
Предмет:
Архітектура обчислювальних машин і систем

Частина тексту файла (без зображень, графіків і формул):

̲ÍÎѲÒÈ ÓÊÐÀ¯ÍÈ ÄÅÐÆÀÂÍÈÉ ÓͲÂÅÐÑÈÒÅÒ "ËܲÂÑÜÊÀ ÏÎ˲ÒÅÕͲÊÀ" Êîìï'þòåðíèé ôàêóëüòåò ÊÀÔÅÄÐÀ ÅËÅÊÒÐÎÍÍÈÕ ÎÁ×ÈÑËÞÂÀËÜÍÈÕ ÌÀØÈÍ Дîöåíò к.т.н. Òðîöåíêî Â.Â. ÊÓÐÑÎÂÀ ÐÎÁÎÒÀ ÍÀ ÒÅÌÓ ÏÐÎÅÊÒÓÂÀÍÍß ÏÐÎÒÎÒÈÏÓ ÑÊÀËßÐÍÎÃÎ RISC-ÊÎÌÏ'ÞÒÅÐÀ Курс – “Архітектура обчислювальних машин і систем” Ìåòîäè÷í³ âêàç³âêè ³ çàâäàííÿ íà ïðîåêòóâàííÿ Âåðñ³ÿ 2.2 від 25 âåðåñíÿ 1998 ðîêó Ëüâ³â - 1998 Ç̲ÑÒ ÂСТУП ІНФОРМАЦІЙНИЙ ТРАКТ КЕШ ПАМ’ЯТЬ КЕРУВАННЯ ГЕНЕРАЛЬНА СТРУКТУРА ÂИХІДНІ ДАНІ НА ПРОЕКТУВАННЯ ÂИМОГИ ЩОДО ОФОРМЛЕННЯ МАТЕРІАЛІВ ПРОЕКТУ ËІТЕРАТУРА 1. ÂÑÒÓÏ Ìåòà êóðñîâîãî ïðîåêòóâàííÿ ïîëÿãຠâ îïàíóâàíí³ ñòóäåíòîì çíàíü ïðî ïðèíöèïè 䳿 òà àðõ³òåêòóðó ïðîòîòèïíèõ âàð³àíò³â сучасних RISC-êîìï'þòåð³â (Reduced Instruction Set Computing), ñèñòåì, ðîçòàøîâàíèõ íà ìåæ³ ñòàðèõ CISC (Complex Instruction Set Computing) òà íîâèõ архітектур. Сутність RISC підходу полягає у перерозподілі складності в парі апаратура – системні програми в спосіб спрощення системи інструкцій процесора, збільшення тактової частоти, уведення конвейєрного принципу виконання інструкцій послідовного програмного потоку з одночасним підвищення складності компілятора,. За рахунок перерозподілу та перекладання додаткової частки часових витрат на етап підготування програми (compile time) скорочують часові витрати на виконання машинного коду (run-time). Öüîãî äîñÿãàþòü íàâ³òü çà óìîâè збільшення кількості спрощених машинних інструкцій в програмі. Проте RISC напрямок вдосконалення комп’ютерних засобів не є безперечним. Зараз він спровокував досить суперечливий напрямок безмежного нарощування складності і апаратури, і системних програм новітніх конвейєрних суперскалярних RISC машин. Наприклад, îñòàííÿ ðîçðîáêà процесора Merced ô³ðìè INTEL (²ÍÒòåãðîâàíà ÅËåêòðîí³êà) ñâ³ä÷èòü ïðî â³äìîâó ö³º¿ ô³ðìè òà ¿¿ êîìïàíüîíà ô³ðìè Hewlett-Packard (ïðîìîâëÿòи як Õ'þëåòò-Ïàêêàðä) â³ä RISC-ï³äõîäó íà êîðèñòü "íå-ð³ñêîâî¿" òðèãåð-òðанñïîðòíî¿ àðõ³òåêòóðè ç ïðÿìèì ïàðàëåëüíèì, à íå лише êîíâåéºðíèì îïðàöþâàííÿì ³íñòðóêö³é. Але òðèãåð-òðàíñïîðòíà àðõ³òåêòóðà ïîêè ùî ëèøàºòüñÿ ïîçà ìåæàìè êóðñîâîãî ïðîåêòóâàííÿ. Розглянемо ілюстративний приклад програмування RISC машини, а саме, запрограмуємо С-оператор А = B + С. Фрагмент асемблерної програми має вид: LW R1, B LW R2, C ADD R3, R1, R2 SW A, R3 У фрагменті через A, B, C ïîçíà÷åíî àäðåñè êîì³ðîê ïàì/яті даних, де зберігають відповідно збіжні за назвою операнди і результат. LW є інструкцією завантаження операнду з комірки пам’яті до регістра, інструкція SW виконує зворотню дію, ADD є інструкцією додавання. Бачимо, що дії з завантаження операндів до регістрів з комірок пам’яті та збереження результату у комірці пам’яті відокремлено від виконання власне операції додавання. Функції інструкцій різних типів зараз мають наближено однакову складність, що є необхідною передумовою виконання послідовного потоку таких інструкцій на конвеєрі з метою суттєвого прискорення опрацювання програмного коду. Як правило, у RISC-машинах довжини форматів усіх інструкцій є сталими, а кількість адресувальних режимів – мінімальна. Інтуітивно зрозуміло, що обмеження складності є запорукою прискореного опрацювання спрощених інструкцій в процесорі. В основу курсового проектування покладено результати роботи [1]. 2. ІНФОРМАЦІЙНИЙ ТРАКТ 2.1. Сòðóêòóðа ïðîòîòèïó ñêàëÿðíîãî RISC-êîìï'þòåðà Ïåðøèé êðîê ðîçðîáêè ïðîòîòèïíîãî (íåêîíâåéºðíîãî) âàð³àíòó ñêàëÿðíîãî RISC-êîìï'þòåðà - öå ñèíòåç ñòðóêòóðíî¿ ñõåìи ìàøèíè.Ñèíòåç ãðóíòóºòüñÿ íà ÷àñîâ³é ä³àãðàì³ âèêîíàííÿ ðåïðåçåíòàòèâíî¿ ³íñòðóêö³¿ ïðîöåñîðà, òîáòî òàêî¿ ³íñòðóêö³¿, ùî ìຠíàéá³ëüøó ÷àñîâó ñêëàäí³ñòü âèêîíàííÿ.  íàøîìó âèïàäêó òàêîþ ³íñòðóêö³ºþ º інструкція çàâàíòàæåííÿ словного îïåðàíäó ç ïàì'ÿò³ даних äî áóäü-ÿêîãî ðåã³ñòðó з ðåã³ñòðîâîãî ôàéëà ÷è ð³çíîâèä ö³º¿ ³íñòðóêö³¿, наприклад, LW R7, 14(R5). ×àñîâèé îïèñ âèêîíàííÿ відповідних çàçíà÷åíій ³íñòðóêö³¿ çàâàíòàæåííÿ 32-õ á³òîâîãî ñëîâà ç êîì³ðêè ïàì'ÿò³ çà àäðåñîþ ADDRESS=(R5)+14 äî ðåã³ñòðу R7 íàäàють íàñòóïíîþ âïîðÿäêîâàíîþ ïîñë³äîâí³ñòþ âèêîíàííÿ ì³êðîä³é (тобто, мікропрограмою): âèáèðàííÿ ³íñòðóêö³¿ ç ïàì'ÿò³ інструкцій çà àäðåñîþ, ÿêó ì³ñòèòü ë³÷èëüíèê êîìàíä PC Program Counter); âèáèðàííÿ âì³ñòèìîãî êîì³ðêè R5 ç ðåã³ñòðîâîãî ôàéëà; îáðàõóâàííÿ çíà÷åííÿ åôåêòèâíî¿ àäðåñè (значення çì³ííої ADDRESS); âèáèðàííÿ ç ïàì'ÿò³ даних çà âèçíà÷åíîþ åôåêòèâíîþ àäðåñîþ îïåðàíäà òà òèì÷àñîâèé çàïèñ éîãî äî програмно недосяжного ðåã³ñòðу äàíèõ ïàì'ÿò³ LMD Load Memory Data); наступне ïåðåñèëàííÿ âì³ñòèìîãî ðåã³ñòðу äàíèõ ïàì'ÿò³ LMD äî êîì³ðêè R7 ðåã³ñòðîâîãî ôàéëà. ßêùî êîæíèé îêðåìèé ì³êðîêðîê ó ùîéíî íàâåäåí³é мікропрограмі íàçâàòè öèêëîì ì³êðîïðîãðàìè, òîä³ ÷àñîâà ä³àãðàìà âèêîíàííÿ ³íñòðóêö³¿ çàâàíòàæåííÿ îïåðàíäа ñêëàäàòèìåòüñÿ ç ïðèïàñîâàíî¿ ó ÷àñ³ ïîñë³äîâíîñò³ ï'ÿòè öèêë³â (÷àñîâà ñêëàäí³ñòü º ï'ÿòü). Ç àíàë³çó íàâåäåíî¿ у таблиці 2 ñèñòåìè ³íñòðóêö³é êîìï'þòåðà ìîæíà ä³éòè âèñíîâêó, ùî òåçà ïðî íàéá³ëüøó ñêëàäí³ñòü ³íñòðóêö³¿ òèïó LW º êîðåêòíîþ. Çàóâàæèìî íàñòóïíå. Ïî-ïåðøå, ïðîåêòóâàííÿ ìàøèíè ñó÷àñíî¿ àðõ³òåêòóðè ù³ëüíî ïîâ'ÿçàíî ç ¿¿ ÷àñîâîþ ïîâåä³íêî¿. Ïî-äðóãå, ç òî÷êè çîðó ïðîãðàì³ñòà ÷è ³íòåëåêòóàëüíîãî транслятора з ìîâè âèñîêîãî ð³âíÿ, ³ñíóº ìíîæèíà ðåã³ñòð³â. В íàñ öå програмно досяжні ðåã³ñòðè R0,...,R31. Ïðîòå êîìï'þòåðíèé ³íæåíåð ö³ ðåã³ñòðè íå ïðîåêòóº через те, ùî ðåàëüíî çàñòîñîâóº ìíîæèíó êîì³ðîê ³ç çá³æíèìè äî íàçâ ðåã³ñòð³â àäðåñàìè {R0,...,R31} âíóòð³øíüî¿ ïàì'ÿò³. Ця пам’ять ìຠíàçâó ðåã³ñòðîâèé ôàéë. Êîíöåïö³ÿ ðåã³ñòðîâîãî ôàéëà (ç íàøî¿, íå ïðîãðàì³ñòñüêî¿ òî÷êè çîðó) º òåõíîëîã³÷íîþ. Âîíà äîçâîëÿº çá³ëüøèòè ê³ëüê³ñòü ëîã³÷íèõ ðåã³ñòð³â çàãàëüíîãî ïðèçíà÷åííÿ Rõ (äî 256 ó ïðîöåñîðàõ ô³ðìè SUN). Âîäíî÷àñ, êîì³ðêè ðåã³ñòðîâîãî ôàéëà íå ïîñòóïàþòüñÿ ó øâèäêî䳿 "ñïðàâæí³ì" ðåã³ñòðàì, àäæå такий ôàéë ðîçòàøîâàíî íà êðèñòàë³ ïðîöåñîðà. Ãðàô³÷íå уявлення часових витрат та їхнє впорядкування при âèêîíàííі ³íñòðóêö³¿ LW містить ðèñ.1.  Ðèñ.1. ×àñîâà ä³àãðàìà âèêîíàííÿ п’ятициклової ³íñòðóêö³¿ “çàâàíòàæåííÿ” LW На рис. 1 застосовано íàñòóïí³ ñêîðî÷åí³ íàçâè öèêë³â: IF : âèáèðàííÿ ïîòî÷íî¿ ³íñòðóêö³¿ ç ïàì'ÿò³ ³íñòðóêö³é (instruction memory чи IM); íàçâà öèêëó - Instruction Fetch; ID : äåêîäóâàííÿ ³íñòðóêö³¿ (Instruction Decoding) та вибірання операндів; EX : âèêîíàííÿ ä³é, ïðèòàìàíèõ ³íñòðóêö³¿, що виконується (EXecution); MEM: ÷èòàííÿ àáî çàïèñ îïåðàíä³â/ðåçóëüòàò³â (access) ç/äî ïàì'ÿò³ äàíèõ (data memory); íàÿâí³ñòü відокремлених пристроїв instruction memory та data memory ïðèòàìàíå ãàðâàðäñüê³é àðõ³òåêòóð³ Harvard Architecture; WB: çâîðîòí³é çàïèñ (Write Back) ðåçóëüòàò³â ÀËÏ-îïåðàö³é àáî îòðèìàíèõ ç ïàì'ÿò³ кодів îïåðàíä³â äî êîì³ðîê ðåã³ñòðîâîãî ôàéëà. ÀËÏ - öå ñêîðî÷åííÿ íàçâè "àðèôìåòè÷íèé ³ ëîã³÷íèé ïðèñòð³é". Застосовані назви öèêë³â (³íêîëè êàæóòü - ôàç) äåùî óçàãàëüíþють ïðèòàìàíó ëèøå ³íñòðóêö³¿ LW ñåìàíòèêó êîæíî¿ îêðåìî¿ ôàçè. Öå êîðåêòíî, áî íàøîþ ìåòîþ º íàáëèæåííÿ äî òàêî¿ циклової ïîñë³äîâíîñò³, ÿêà çàäîâ³ëüíÿº âèìîãàì áóäü-ÿêî¿ ³íñòðóêö³¿ ç çàäàíî¿ äî ðåàë³çàö³¿ ìíîæèíè ç ìåòîþ äîñÿãíåííÿ íàéá³ëüøî¿ øâèäêî䳿. Водночас, ми орієнтуємося на найскладнішу інструкцію. Çàóâàæèìî òàêîæ, ùî в нашому випадку ô³çè÷íî êîæíèé öèêë ó ÷àñ³ â³äïîâ³äຠîäíîìó òàêòîâîìó ³íòåðâàëó, à ê³ëüê³ñòü òàêòîâèõ ³íòåðâàë³â, ùî ìຠâèòðà÷àòèñÿ íà âèêîíàííÿ áóäü-ÿêî¿ ³íñòðóêö³¿ ïðîöåñîðà, ïåðåäáà÷àюòü ñòàëîþ (класично – це ï'ÿòü ³íòåðâàë³â). Можливо, що при зазначеному підході деякі інструкції матимуть порожні (не потрібні ним, зайві) цикли. ßêùî вíóòð³øíÿ òàêòîâà ÷àñòîòà ïðîöåñîðà äîð³âíþâàòèìå 500 ÌÃö, òîä³ íà êîæíèé òàêò чи однотактовий цикл ïðèïàäå 2 íñ, à ÷àñ âèêîíàííÿ êîæíî¿ ³íñòðóêö³¿ ñêëàäàòèìå 2*5=10 íñ. За цієї умови у ïðîòîòèïíîìó âàð³àíò³ äîñÿãàюòü øâèäêîä³ї 100 ì³ëüéîí³â ³íñòðóêö³é íà ñåêóíäó (100 MIPS) Íà ðèñ. 2 íàâåäåíî âàð³àíò (by J. Hennessy and D. Patterson, Stanford University та Berkeley University, USA) ïîáóäîâè ³íôîðìàö³éíîãî òðàêòó ïðîòîòèïó ñêàëÿðíîãî RISC êîìï'þòåðà. Останній â³äîìèé у світі ï³ä íàçâîþ DLX (DeLuXe) процесор (машина). Íàçâà ³íôîðìàö³éíèé òðàêò (Datapath) âèíèêëà ÷åðåç ³íòåãðàëüíå ïîäàííÿ òà ðîçãëÿä ðåã³ñòðîâî¿ ñòðóêòóðè ïðîöåñîðà ðàçîì ³ç ïðèñòðîÿìè ïàì'ÿò³ äàíèõ DM ³ ïàì'ÿò³ ³íñòðóêö³é (êîìàíä) IM. Çðîçóì³ëî, ùî тут ðåàë³çовано Ãàðâàðäñüêу (Harvard University in the USA) àðõ³òåêòóðу.  Ðèñ. 2. Ñòðóêòóðà ³íôîðìàö³éíîãî òðàêòó ïðîòîòèïó ñêàëÿðíîãî RISC êîìï'þòåðà Ñêîðî÷åííÿм PC ïîçíà÷ено ë³÷èëüíèê ³íñòðóêö³é (Program Counter). Âì³ñòèìå ÐÑ визначає àäðåсу ³íñòðóêö³¿ в ïàì'ÿò³ ³íñòðóêö³é ²Ì. Кîìá³íàö³éíèé äîäàâà÷ Adder îáðàõîâóº àäðåñó (íàñòóïíî¿ çà ÷åðãîþ âèêîíàííÿ) ³íñòðóêö³¿. Пðè öüîìó враховано, що âïîðÿäêîâàíà ïîñë³äîâí³ñòü ³íñòðóêö³é, або ïðîãðàìà, ñêëàäàºòüñÿ ç ÷îòèðüîõáàéòîâèõ ³ ò³ëüêè ÷îòèðüîõáàéòîâèõ ³íñòðóêö³й (усі інструкції мають формати з довжиною 32 біти), ÿê³ розміщено â IM çà ïîñë³äîâíèìè àäðåñàìè 0, 4, 8, C ³ ò.ä. ×åðåç öå êîíñòàíòà зсуву адреси (пересування покажчика на наступну за чергою інструкцію) äîð³âíþº +4. Âèçíà÷åíå çà äîïîìîãîþ äîäàâà÷à çíà÷åííÿ àäðåñè вибирання íàñòóïíî¿ ³íñòðóêö³¿ çáåð³ãàюòü ó ðåã³ñòð³ NPC (next PC). Ç÷èòàíèé з ІМ á³íàðíèé êîä ïîòî÷íî¿ ³íñòðóêö³¿ çàïèñóюòü äî ðåã³ñòðó ³íñòðóêö³¿ IR. Ïîëÿ щойно вибраної ³íñòðóêö³¿ (рис. 6), ùî ì³ñòÿòü бінарні коди-ідентифікатори ðåã³ñòð³â-îïåðàíä³â, º ôàêòè÷íî àäðåñàìè êîì³ðîê âíóòð³øíüî ïðîöåñîðíî¿ ïàì'ÿò³, ÿêà åìóëþº ïóë (ìíîæèíó) ïðîãðàìíî äîñÿæíèõ (видимих програмісту) ðåã³ñòð³â. Вмістиме çàçíà÷åíих ïîëів ôîðìàòó ³íñòðóêö³¿ íàäñèëàþòü íà àäðåñí³ âõîäè ðåã³ñòðîâîãî ôàéëó Registers ÷è Regs, à â³äïîâ³äí³ надісланим àäðåñàì á³íàðí³ êîäè ðåã³ñòðîâèõ îïåðàíä³â çàâàíòàæóþòüñÿ äî âíóòð³øíèõ, ïðîãðàìíî íåäîñÿæíèõ, тобто ñëóæáîâèõ ðåã³ñòð³â À ³ Â. ²ñíóº ùå один тип операнда з назвою “безпосередній” (Immediate ÷è Imm). Його задають прямо у форматі інструкції. ßê ïðàâèëî, äîâæèíà áåçïîñåðåäíüîãî îïåðàíäà íå ïåðåâèùóº ïîëîâèíè äîâæèíè ôîðìàòó ³íñòðóêö³¿.  íàñ áåçïîñåðåäí³é îïåðàíä ìàòèìåìå äîâжèíó 32/2 = 16 á³ò³â.  òîé ñàìèé ÷àñ áàæàíî çàô³êñóâàòè таку äîâæèíó ôîðìàòó äàíèõ òàêîþ, ùî äîð³âíþº äîâæèí³ ôîðìàòó ³íñòðóêö³¿ ( çàóâàæèìî áåç ïîÿñíåíü, ùî ð³çíîìàí³òü äîâæèí ôîðìàò³â ñóòòºâî ïðèãàëüìîâóº ìàøèíó). ßêùî óñ³ ôîðìàòè äàíèõ, як і формати інструкцій, ìàòèìóòü äîâæèíó 32 á³òи, òîä³ áåçïîñåðåäíüîìó îïåðàíäó íåâèñòà÷àòèìå ùå 16 á³ò³â àáè áóòè ñòàíäàðòíèì çà äîâæèíîþ. Òîìó çíàêîâå ðîçøèðåííÿ 16 á³òîâîãî áåçïîñåäíüîãî îïåðàíäà äî 32-õ á³ò³â âèêîíóº êîìá³íàö³éíèé âóçîë Sign Extend. Ðåçóëüòàò çíàêîâîãî ðîçøèðåííÿ тимчасово çáåð³ãàюòü у ñëóæáîâîìó ðåã³ñòð³ Immediate (Imm).  ö³ëîìó ìîæíà íàðàõóâàòè ÷îòèðè можливі îïåðàíäè на вході ÀËÏ: ç ðåã³ñòð³â À, Â, Imm; âì³ñòèìå ðåã³ñòðó àäðåñè íàñòóïíî¿ äëÿ âèêîíàííÿ ³íñòðóêö³¿ NPC. Íàïåðåä çàçíà÷èìî, ùî îñòàíí³é îïåðàíä-àäðåñó îïðàöüîâóþòü â ÀËÏ ïðè âèêîíàíí³ ³íñòðóêö³é óìîâíîãî òà áåçóìîâíîãî ïåðåõîä³â, êîëè на додаток до натуральної потрібна ще одна àäðåñà, ùî óòâîðåíà äîäàâàííÿì äî âì³ñтèìîãî NPC äåÿêî¿ êîíñòàíòè переходу. Âèáèðàííÿ äâîõ îïåðàíä³â АËÏ ç ÷îòèðüîõ ìîæëèâèõ âèêîíóþòü çà äîïîìîãîþ ìóëüòèïëåêñîð³â операндів MUX, розташованих на його входах. Ðåçóëüòàò îïåðàö³¿ ÀËÏ тимчасово çàïàì'ÿòîâóþòü ó ïðîì³æíîìó ñëóæáîâîìó ðåã³ñòð³ ALUoutput (ALUout). ßêùî ðåçóëüòàòом îïåðàö³¿ º ÷èñëî, òîді éîãî çàíîñÿòü äî êîì³ðêè регістрового файла. ßêùî ðåçóëüòàòом îïåðàö³¿ є àäðåñà, òîä³ öю àäðåñу íàäñèëàюòü äî (верхнього на рисунку) ìóëüòèïëåêñîðà вибору адреси MUX. Зà äîïîìîãîþ зазначеного мультиплексора вибирають адресу переходу (чергова чи перехід), яку і íàäñèëàюòü äî ë³÷èëüíèêà ³íñòðóêö³é PC àáè коректно ïðîäîâæèòè âèêîíàííÿ ïðîãðàìè. Êåðóâàííÿ ìóëüòèïëåêñîðîì âèáîðó àäðåñè наступної інструкції ïîêëàäåíî íà âóçоë Zero?, äå âì³ñòèìå ñëóæáîâîãî ðåã³ñòðà À ïîð³âíþþòü ³ç íóëåì (äîð³âíþº íóëþ, á³ëüøå íóëÿ, ìåíøå íóëÿ ³ ò.ä., â çàëåæíîñò³ â³ä âèäó âèêîíóâàíî¿ â ïîòî÷íèé ÷àñ îïåðàö³¿ óìîâíîãî ïåðåõîäó). Ðåçóëüòàò ïîð³âíÿííÿ º á³íàðíèì ëîã³÷íèì çíà÷åííÿì (òàê àáî í³). Ñàìå öåé á³íàðíèé ðåçóëüòàò êåðóº ðîáîòîþ ìóëüòèïëåêñîðà âèáèðàííÿ àäðåñè. Результат-адресу з виходу АЛП можуть надсилати до пам’яті даних як адресу комірки цієї пам’яті в інструкціях збереження/завантаження. Ðåçóëüòàòîì íà âèõîä³ ïðàâîãî íà ðèñóíêó 2 ìóëüòèïëåêñîðà ìîæå áóòè àáî âì³ñòèìå ïàì’яті даних (при виконанні інструкції завантаження LW слова з пам’яті даних до регістру регістрового файла), або результат виконання арифметичної, зсувної, логічної чи іншої операції в АЛП (наприклад, при виконанні інструкцій ADD, SUB і т.д.). Такий результат засобами мікропрогрування зберігають в регістрі регістрового файла. Отже, зазначений мультиплексор, керований від регістру поточної інструкції, комутує на вхід регістрового файла потрібну інформацію. При конвейєрному опрацюванні послідовного потоку інструкцій виконуваної програми íå âðàõîâóють 5-ти циклову çàòðèìêó âèêîíàííÿ ïåðøî¿ ³íñòðóêö³¿ òà ââàæàòють ïîò³ê ³íñòðóêö³é äîñòàòíüî äîâãèì. В цьому випадку (див. рис. 3) åêâ³âàëåíòí³ ÷àñîâ³ âèòðàòè íà âèêîíàííÿ îäí³º¿ ³íñòðóêö³¿ ñêëàäàòèìóòü лише îäèí öèêë ÷è òàêòîâèé ³íòåðâàë, à пікова (гранична зверху) øâèäêîä³ÿ, ÿêó çàáåçïå÷óº ³äåàë³çîâàíèé âàð³àíò êîíâåéåðà, çðîñòå â ïîð³âíÿíí³ ç скалярнім неконвейєрним ïðîòîòèïîì äî 500 ìëí. ³íñòðóêö³é çà ñåêóíäó ïðè òàêòîâ³é ÷àñòîò³ 500 ÌÃö Зауважимо, що теоретично обгрунтоване прискорення конвейєра (до значення 5:1 в нашому випадку) є найвищім, тобто піковим. Його досягають лише за ідеальної умови, коли нема жодних залежностей (зв’язків) поміж сусідніми інструкціями послідовного потоку, що вже завантажені на виконання до конвейєра, та коли в цьому потоці відсутні інструкції переходів. Реально до часової діаграми роботи конвейєра мусять уводять затримки (порожні фази), аби результати неконвейєрного і конвейєрного опрацювання потоку інструкцій збігалися. В наслідок цього реальна продуктивність конвейєра зменшена в порівнянні з піковою, а його апаратна реалізація ускладнена.  Рис. 3. Принцип конвейєрного опрацювання послідовного потоку інструкцій На рис. 3 зазначено порядок опрацювання трьох сусідніх інструкцій з послідовного програмного потоку. Часові витрати на кожну інструкцію висвітлено окремими горизонтальними смугами, які, у свою чергу, явно поділено на п’ять фаз чи циклів.  Рис. 3а. Ілюстрація переходу від неконвейєрного до конвейєрного опрацювання послідовного потоку інструкцій (ідеальний погляд на конвейєр) Припустимо, що часові витрати при опрацюванні окремих етапів (циклів) виконання інструкції знаходяться в межах 50-60 нс. Тоді часові витрати на реалізацію конвейєрного способу опрацювання визначаються так, як це зазначено на рис. 3а. Надлишок в 5 нс (наближено 10 %) ó кожному циклі конвейєра в порівнянні з неконвейєрною реалізацією додано через дещо сповільнену роботу ускладненої конвейєрним принципом апаратури. Це накладна платня за прискорення. Зрозуміло, що від планованого 100 відсоткового результату лишається лише100 – 10 = 90 відсотків. Конвейєрне використання (завантаження в часі) апаратних засобів ілюструє рис. 4.  Ðèñ. 4. Використання апаратури при конвейєрному опрацюванні (ідеальний пипадок) Êîíâåйºðíèé варіант побудови інформаційного тракту наведено на рис. 5. Êîíâåéºðí³ ðåã³ñòðè – öå çâè÷àéí³, але ïðîãðàìíî “ïðîçîð³”, òîáòî íåâèäèì³ ðåã³ñòðè. Âîíè ì³ñòÿòü ïîâíå ³íôîðìàö³éíå “îòî÷åííÿ“ ³íñòðóêö³¿, ùî âæå º íà êîíâåéºð³, àáè ñòâîðèòè ¿é â³ðòóàëüíå âðàæåííÿ ïðî êëàñè÷íî-³çîëüîâàíå â³ä ³íøèõ ñóñ³äí³õ ³íñòðóêö³é îïðàöþâàííÿ.  Рис. 5. Конвейєрний (основний) варіант побудови інформаційного тракту DLX машини. На рис. 5 затемнено так звані “конвейєрні” регістри, які розташовано “на межі циклів”. Вони мають назви, відповідні сусіднім межам, наприклад, IF/ID, ID/EX, EX/MEM, MEM/WB. Кожну поточну інструкцію, що опрацьовують, ніби пересувють сходинками IF, ID, EX, MEM, WB конвейєра. В ідеалі кожна з інструкцій не “відчуває” присутності на інших сходинках конвейєра “сусідів-конкурентів”на використання апаратури інформаційного тракту. Íàãàäàºìî ще раз, ùî â ïðîåêò³ вимагається ðîçðîáити ñïðîùåíий íåêîíâåéåðíий ïðîòîòèï ñêàëÿðíîãî RISC ïðîöåñîðà. Інформацію про конвейєризацію надано з метою досягнення поглибленого розуміння та для оформлення роботи на відмінну оцінку. 2.2. Ôормати інструкцій DLX машини Ôîðìàòè ³íñòðóêö³é DLX машини наведено на рис. 6. В супровід надано стислий коментар щодо цих форматів.  Рис. 6. Формати інструкцій DLX машини На рисунку 6 застосовано íàñòóïí³ скорочені ïîçíà÷åííÿ: I - òèï: ³íñòðóêö³¿, ùî ïðàöþþòü ³ç áåçïîñåðåäí³ì îïåðàíäîì (Immediate ). R - òèï: ³íñòðóêö³¿, ùî îòðèìóþòü ïàðó îïåðàíä³â ³ç ðåã³ñòð³â (Registers) ðåã³ñòðîâîãî ôàéëà ïðîöåñîðà òà ïîâåðòàþòü ðåçóëüòàò çíîâ òàêè äî ðåã³ñòðу файла. J - òèï: ³íñòðóêö³¿ áåçóìîâíèõ ïåðåõîä³â (jump). Opcode: ïîëå êîäó îïåðàö³¿, äîâæèíà 6 á³ò³â. rs1,rs2: ïîëя äîâæèíè 5 á³ò³â, ùî âèçíà÷àють íîìåðè ðåã³ñòð³â-ïîñòà÷àëüíèê³â îïåðàíä³â (register of source), а саме, програмно досяжні регістри R0..R31. rd: ï'ÿòèá³òîâå ïîëå íîìåðà ðåã³ñòðà-ïðèéìà÷à ðåçóëüòàòó 䳿 (register of destination), також R0..R31. Immediate: 16-òè á³òîâå ïîëå, ùî ì³ñòèòü áåçïîñåðåäí³é îïåðàíä; ïðè öüîìó íàéë³â³øèé ðîçðÿä immediate ìîæå ðîçãëÿäàòèñü ÿê çíàêîâèé; òîä³ ìîæëèâå ðîçøèðåííÿ ôîðìàòó ðîçðÿäÿìè знакового á³òу за правилами äîïîâíÿëüíîãî êîäó. Function: ïîëå, ùî âèçíà÷ຠôóíêö³þ, ÿêà ðîçøèðþº îáìåæåíó ê³ëüê³ñòü (на 211 –1 = 2047 позицій) дозволених ð³çíèõ êîä³â îïåðàö³¿. Offset added to PC: 26-òè á³òîâà êîíñòàíòà, яку äîäàюòü äî âì³ñòèìîãî ðåã³ñòðу íàñòóïíî¿ àäðåñè ï³ä ÷àñ âèêîíàííÿ ³íñòðóêö³¿ áåçóìîâíîãî ïåðåõîäó. Зазначимо наступні особливості форматів інструкцій: Довжина усіх форматів – 32 біти. Реалізовано фіксовану систему поділу форматів на поля. Реалізовано дизайн архітектури load/store. Формати поділено на три групи: формати АЛП операцій, формати операцій load/store, формати операцій керування програмою. Формати АЛП операцій – трьохадресувальні, виду OP RX,RY,RZ. Одна інструкція задає операцію ОР, вказує два регістри операндів RY, RZ та регістр RZ збереження результату 2.3. Цикл âèáèðàííÿ ³íñòðóêö³¿ (Instruction Fetch cycle - IF) На цьому циклі виконують наступні мікродії (мікрооперації): IR = IM [PC]; NPC = PC+4. Âèêîíàííÿ ïåðøî¿ ì³êðî䳿 ñïðè÷èíþº çàâàíòàæåííÿ äî 32-õ á³òîâîãî ðåã³ñòðу ïîòî÷íî¿ ³íñòðóêö³¿ IR âì³ñòèìîãî ÷îòèðüîõ ïîñë³äîâíî ðîçòàшîâàíèõ êîì³ðîê ïàì'ÿò³ інструкцій, ïî÷èíàþ÷è від àäðåñè (PC)+0 ³ çàâåðøóþ÷è àäðåñîþ (PC)+3. ßê ³ çàâæäè, çà äîïîìîãîþ (PC) ïîçíà÷ено âì³ñòèìå ë³÷èëüíèêà ³íñòðóêö³é PC. Äðóãà ì³êðîä³ÿ (NPC = PC+4) âèðàõîâóº “планову” àäðåñó íàñòóïíî¿ çà ÷åðãîþ ³íñòðóêö³¿ ç ïîñë³äîâíîãî ïîòîêó. Òîáòî òóò âèçíà÷àюòü íàñòóïíå âì³ñòèìå ïðîãðàìíîãî ë³÷èëüíèêà (і його тимчасово зберігають у регістрі Next PC, or NPC). “Логічне” вèáèðàííÿ âì³ñòèìîãî ÷îòèðüîõ ïîñë³äîâíî ðîçòàøîâàíèõ байтових êîì³ðîê çàì³ñòü îäí³º¿ 4-х байтової підкреслює те, ùî íàâ³òü íà ð³âí³ ì³êðîä³é адресування êîì³ðîê ïàì'ÿò³ âказують ëîã³÷íî. Ô³çè÷íî, çà óìîâè êîëè àäðåñà áàéòà êðàòíà ÷îòèðüîì, тобто дотримано вирівнювання границь адрес інструкцій, ç ô³çè÷íî¿ ïàì'ÿò³, îäðàçó (çà îäíå çâåðíåííÿ) âèáèðàþòü ÷îòèðè áàéòè і навіть цілі пакети по чотири байти. Отриманий з пам’яті даних код òëóìà÷àòü ÿê 32-õ ðîçðÿäíå ñëîâî, а з пам’яті інструкцій – як îäíó ³íñòðóêö³þ. Çàóâàæèìî, ùî îáèäâ³ íàâåäåí³ ì³êðî䳿 теоретично º ñóì³ñíèìè â ÷àñ³. Сàìå òîìó âîíè ìîæóòü ³ ïîâèíí³ âèêîíóâàòèñÿ ïàðàëåëüíî. Ці ì³êðî䳿 óòâîðþþòü ºäèíó ì³êðî³íñòðóêö³þ; в нашому випадку (але не завжди !) ïîñë³äîâí³ñòü çàïèñó ì³êðîä³é ó ì³êðî³íñòðóêö³¿ çíà÷åííÿ íå ìàº. Íàäçâè÷àéíî âàæëèâîþ âëàñòèâ³ñòþ öèêëó IF º òå, ùî â³í íå бере äî óâàãè ³ñíóâàííÿ â³äîìîãî "ïàðàäîêñу ïàì'ÿò³". ijéñíî, ó öèêë³ IF çà ÷àñîâèìè âèòðàòàìè ì³êðîä³ÿ âèáèðàííÿ ç ïîâ³ëüíèõ êîì³ðîê ïàì'ÿò³ ³íñòðóêö³é º òîòîæíüîþ ì³êðî䳿, ùî ïðàöþº ç âíóòð³øí³ìè, à ñàìå òîìó íàäøâèäêèìè ðåã³ñòðàìè ïðîöåñîðà. ³äîìî, ùî ñòàòèñòè÷íî "ïðèñêîðèòè" ïîâ³ëüí³ êîì³ðêè ãîëîâíî¿ ïàì'ÿò³ ìîæíà çà äîïîìîãîþ êåø-ïàì'ÿò³. Ñàìå òîìó êåø (cache - ïðèõîâàíà â³ä ïðîãðàì³ñòà ÷è êîìï³ëÿòîðà äîäàòêîâà íàäøâèäêà áóôåðíà àñîö³àòèâíà чи частково-асоціативна ïàì'ÿòü) îáîâ'ÿçêîâî âèêîðèñòîâóютü ó RISC- ïðîöåñîðàõ. Ìîæíà êàçàòè, ùî íà ð³âí³ ïðîçîðî¿, як правило, äëÿ ïðîãðàì³ñòà êåø-ïàì'ÿò³, яку ïîä³ëåíî íà îêðåì³ êåø³ ³íñòðóêö³é òà äàíèõ â³äáóâàºòüñÿ ìåòаìîðôîçà, àáî ïåpeòâîðåííÿ Princeton Computers Arcitecture (чи John von Neumann Arcitecture) на modified Harvard Computers Arcitecture. Ïðîòå öå ïåðåòâîðåííÿ â³ä÷óâຠëèøå ³íæåíåð; ïðîãðàì³ñò (÷è êîìï³ëÿòîð) відчуває íîéìàí³âñüêу àðõ³òåêòóðу. Зауважимо, що ó ãàðâàðäñüê³é àðõ³òåêòóð³ íåмає місця òàêій çâè÷íій і необхідній програмісту ïàðàäèãìі програмування як "дані – êîìï³ëÿòîð – ë³íêåð – програма". 2.4. Цикл äåêîäóâàííÿ ³íñòðóêö³¿/âèáèðàííÿ îïåðàíä³â ç ðåã³ñòðîâîãî ôàéëà (Instruction decode/register fetch cycle - ID) На цьому циклі виконують наступні мікродії (мікрооперації): A = Regs [IR 6..10 ]; B = Regs [IR 11..15]; Imm = ((IR16)16 ## IR 16..31). Ó íàâåäåíому ì³êðîкоді, ùî ñêëàäений ç òðüîõ ñóì³ñíèõ ó ÷àñ³, òîáòî ñïðîìîæíèõ äî îäíî÷àñíîãî, ïàðàëåëüíîãî âèêîíàííÿ ì³êðîä³é, âæèòî íàñòóïí³ позначення: A, B, Imm - âíóòð³øí³ ñëóæáîâ³ 32-õ á³òí³ ðåã³ñòðè ïðîì³æíîãî çáåðåæåííÿ êîä³â; âñ³ òðè ðåã³ñòðè º "ïðîçîðèìè" äëÿ ïðîãðàì³ñòà â òîìó ñåíñ³, ùî âîíè àæ í³ÿê íå â³äáèò³ â ìàøèííèõ ³íñòðóêö³ÿõ. Regs[address] - êîì³ðêà ïàì'ÿò³ âíóòð³øíüî¿ ïàì'ÿò³ ïðîöåñîðà іç вже відомою назвою íàçâîþ ðåã³ñòðîâèé ôàéë; R x..y - á³òîâå ïîëå ðåã³ñòðà ³íñòðóêö³é, ÿêå ì³ñòèòü ãðóïó ïîñë³äîâíî ðîçòàøîâàíèõ á³ò³â - â³ä á³òó ç íîìåðîì X äî á³òó ç íîìåðîì Y âêëþ÷íî; çâåðíåìî óâàãó íà íóìåðàö³þ á³ò³â ó ñëîâ³ ïðîöåñîðà - ë³âèé á³ò ìຠ0-й íîìåð, à ïðàâèé - 31-é íîìåð. ІR6..10 - á³òîâå ïîëå ðåã³ñòðу ³íñòðóêö³é, ùî ì³ñòèòü á³íàðíèé íîìåð ðåã³ñòðу - äæåðåëà êîäó (äèâ. ôîðìàò ³íñòðóêö³é); äîâæèíà ïîëÿ º 5 á³ò³â, öå äîçâîëÿº ïîçíà÷àòè та реалізувати 32 ðåã³ñòðà - â³ä R0 äî R31. IR11..15 - òàêîæ ï'ÿòèá³òîâå ïîëå íîìåðà ùå îäíîãî ðåã³ñòðà äæåðåëà з множини R0,...,R31. Вже зауваживалося, що пîëå áåçïîñåðåäíüîãî îïåðàíäу (Immediate or Imm) у ôîðìàò³ ³íñòðóêö³¿ ìຠäîâæèíó ëèøå 16 á³ò³â.  öåé ñàìèé ÷àñ, ðîçðÿäí³ñòü інформаційного тракту і óñ³õ òðüîõ ñëóæáîâèõ ðåã³ñòð³â º 32. Äî òîãî, ÿê çàïèñàòè 16-á³òîâèé êîä IR16..31 áåçïîñåðåäíüîãî îïåðàíäà ç ðåã³ñòðу ³íñòðóêö³é äî ñëóæáîâîãî ðåã³ñòðу Imm, öåé êîä òðåáà ðîçøèðèòè ç âðàõóâàííÿì çíàêó (або ðîçðÿäó IR16) äî 32-õ á³òîâîãî çíà÷åííÿ çà íàñòóïíèì ñòàíäàðòíèì àëãîðèòìîì çíàêîâîãî ðîçøèðåííÿ: IR16 ## IR16 ##...## IR16 # IR16..31. Тут символом ## позначено операцію зчеплення (конкатенацію). Âàæëèâî, ùî â öèêë³ ID âèêîíóюòü декодування (розпізнавання) інструкції та âèáèðàííÿ óñ³õ ìîæëèâèõ âàð³àíò³â îïåðàíä³â ïîòî÷íî¿ ³íñòðóêö³¿, íåçàëåæíî â³ä ¿¿ òèïó, ç ìåòîþ збільшення øâèäêî䳿. Ç ³íøîãî áîêó, ìîæëèâ³ñòü îäíî÷àñíîãî âèáèðàííÿ óñ³õ âàð³àíò³â îïåðàíä³â ïîòåíö³éíî îáóìîâëåíî â³äïîâ³äíîþ ñòðóêòóðîþ ôîðìàò³â ³íñòðóêö³é, äå ô³êñîâàíî ðîçòàøóâàííÿ ïîë³â-ïîêàæ÷èê³â íà äæåðåëà òà ïðèéìà÷³ îïåðàíä³â ³ ðåçóëüòàò³â. ²íøèìè ñëîâàìè, ôîðìàòè ³íñòðóêö³é ïðîöåñîðà âò³ëþþòü òåõí³êó êîäóâàííÿ ôîðìàò³â ³íñòðóêö³é, ùî â³äîìà ï³ä íàçâîþÿ1 fixed-field coding. 2.5. Цикл âèêîíàííÿ / âèçíà÷åííÿ åôåêòèâíî¿ àäðåñè (Execution / effective address cycle - EХ) ̳êðî䳿, ùî âèêîíóþòü в öèêë³ EX, âæå çàëåæàòü â³ä â³ä òèïó ïîòî÷íî¿ ³íñòðóêö³¿. Âðàõîâóþ÷è öå, áàæàíî ïîä³ëèòè óñ³ ³íñòðóêö³¿ ïðîöåñîðà íà наступні òðè ãðóïè àáî òèïè: îïåðàö³¿ àðèôìåòèêî-ëîã³÷íîãî ïðèñòðîю; îïåðàö³¿ çàâàíòàæåííÿ îïåðàíä³â ç ãîëîâíî¿ ïàì'ÿò³ òà çáåðåæåííÿ ðåçóëüòàò³â ó ãîëîâí³é ïàì'ÿò³; îïåðàö³¿ óìîâíèõ òà áåçóìîâíèõ ïåðåõîä³â. Äàë³ ðîçãëÿдаємо ïðèòàìàí³ êîæíîìó òèïó ³íñòðóêö³é ì³êðî䳿. 2.5.1 Îïåðàö³¿ ³ç çâåðíåííÿì äî ïàì'ÿò³ äàíèõ (load / store instructions) У циклі EX âêàçàí³ îïåðàö³¿ ãîòóþòü çíà÷åííÿ åôåêòèâíî¿ àäðåñè, òîáòî âèðàõîâóþòü çíà÷åííÿ á³íàðíîãî êîäó, ùî áåçïîñåðåäíüî визначає àäðåñó êîì³ðêè ïàì'ÿò³ äàíèõ. Âèêîíóюòü íàñòóïíу ì³êðîä³ю: ALUoutput = A + Imm. Ïîçíà÷åíå â ì³êðî䳿 äîäàâàííÿ безпосереднього операнда (однієї з компонент адреси) з вмістимим робочого регістра А (друго. компоненти) ðåàë³çóюòü â ÀËÏ (ALU). Îòðèìàíу ñóìу (âîíà çàâæäè ö³ëà ³ äîäàòíÿ, ïåðåíîñîì íåõòóþòü) çàïèñóюòü äî ùå îäíîãî, ïðîçîðîãî äëÿ ïðîãðàì³ñòà ðåã³ñòðу ALUoutput. Öåé ðåã³ñòð ìຠðîçðÿäí³ñòü 32 á³òè. В³í çáåð³ãຠêîäè ðåçóëüòàò³â, ùî ç'ÿâëÿþòüñÿ íà âèõîä³ êîìá³íàö³éíî¿ ñõåìè ç íàçâîþ ALU. ßêùî ïðèãàäàòè дію ³íñòðóêö³¿ LW, òîä³ ïðèçíà÷åííÿ òà ôîðìà çàïèñó íàâåäåíî¿ ì³êðî䳿 ñòຠпрозорою. 2.5.2. ALU-³íñòðóêö³ÿ òèïó ðåã³ñòð-ðåã³ñòð (íàïðèêëàä, ADD R1,R2,R3) Âèêîíóºòüñÿ â³äïîâ³äíà äî ³íñòðóêö³¿ íàñòóïíà ì³êðîä³ÿ: ALUoutput = A op B. Òóò óçàãàëüíåíе ïîçíà÷åííÿ (op) можна êîíêðåòèçóâàòè ÿê (add), (sub), ³ ò.ä. в залежності від конкретного виду поточної інструкції, яку опрацьовують в інформаційному тракті машини. ϳäêðåñëèìî, ùî íà ïîïåðåäíьому щоäî EX циклі, à ñàìå íà циклі ID, äî ñëóæáîâèõ ðåã³ñòð³â âæå çàâàíòàæåíî âì³ñòèìå вибраних êîì³ðîê ïàì'ÿò³ "ðåã³ñòðîâèé ôàéë" ç àäðåñàìè R2 ³ R3. Ðåçóëüòàò дії ïîêè ùî íå çáåðåæåíî â R1, àëå éîãî òèì÷àñîâî çàïèñàно äî ñëóæáîâîãî ðåã³ñòðу ALUoutput. 2.5.3 ALU - ³íñòðóêö³ÿ òèïó ðåã³ñòð - áåçïîñåðåäí³é îïåðàíä (íàïðèêëàä, ADD R1,R2,#23) Âèêîíóºòüñÿ íàñòóïíà ì³êðîä³ÿ: ALUoutput = A op Imm. ßñíî, ùî çàì³ñòü âì³ñòèìîãî R3 â îïåðàö³¿ ïðèéìຠó÷àñòü áåçïîñåðåäí³é îïåðàíä, ÿêèé ç âðàõóâàííÿì "çíаêîâîãî" ðîçøèðåííÿ äî 32-õ á³ò³â çабирають із ñëóæáîâîго ðåã³ñòðу Imm. 2.5.4 Óìîâíèé ïåðåõ³ä ÷è branch (íàïðèêëàä, BNEZ R5, data) Âèêîíóюòüñÿ íàñòóïíі ì³êðîä³ї: ALUoutput = NPC + Imm; Cond (ition) = (A op 0). Îáèäâ³ ì³êðî䳿 º ñóì³ñíèìè â ÷àñ³. Çà äîïîìîãîþ ïåðøî¿ ì³êðî䳿 âèðàõîâóюòü ö³ëüîâу àäðåñу óìîâíîãî ïåðåõîäó. Ïðè öüîìó äî вже визначеної àäðåñè íàñòóïíî¿ ³íñòðóêö³¿ (NPC), тобто такої, яка ðîçòàøîâàíà áåçïîñåðåäíüî çà ³íñòðóêö³ºþ óìîâíîãî ïåðåõîäó, äîäàюòü çíàêîâу êîíñòàíòу ç³ ñëóæáîâîãî ðåã³ñòðу Imm, (саме він містить значення data). Äðóãà ì³êðîä³ÿ âèзначає (³ñòèííå ÷è õèáíå) çíà÷åííÿ óìîâè Condition óìîâíîãî ïåðåõîäó. Заради öüîãî âì³ñòèìå ñëóæáîâîãî ðåã³ñòðу A, ùî º çá³æíèì із вмістимим R5 (у ïðèêëàäі ³íñòðóêö³¿), ïîð³âíþюòü на основі операції (op) ç íóëåì. Çã³äíî ñåìàíòèêè ³íñòðóêö³¿ BNEZ отримуємо, що Cond=true, êîëè âì³ñòèìå R5 íåíóëüîâå, àáî Cond=false, ÿêùî R5 ì³ñòèòü íóëü. Ô³çè÷íî Cond ÿâëÿº ñîáîþ îäíîá³òîâèé ðåã³ñòð у скдаді вузла Zero ?. Çâåðíåìî óâàãó íà òå, ùî çàðàç зôîðìовано ëèøå значення äâох íåîáõ³äíèõ åëåìåíòів âèêîíàííÿ branch, а саме, - îäíîá³òîâèé êîä óìîâè Cond òà ö³ëüîâу àäðåñу ïåðåõîäó, яку òèì÷àñîâî зберігають у ñëóæáîâîму âèõ³äíîму ðåã³ñòðі ÀËÏ, тобто в ALUoutput. Áåçïîñåðåäíº âèêîíàííÿ óìîâíîãî ïåðåõîäó, ùî ïîëÿãຠâ ïðèðîäí³é (çà ÷åðãîþ) ÷è íåïðèðîäí³é (коли виконують ñòðèáîê äî ö³ëüîâî¿ àäðåñè) çì³í³ âì³ñòèìîãî PC, âиконують íàñòóïíим циклом. 2.6. Цикл çâåðíåííÿ äî ïàì'ÿò³ / çàâåðøåííÿ óìîâíîãî ïåðåõîäó (memory access/branch completion cycle - MEM) 2.6.1. Çâåðíåííÿ äî ïàì'ÿò³ Âèêîíóюòü íàñòóïíі ì³êðîä³ї: LMD = DM [ALUoutput]; DM [ALUoutput] = B. Çâåðíåííÿ äî ïàì'ÿò³ застосовують â ³íñòðóêö³ÿõ çàâàíòàæåííÿ (íàïðèêëàä, LW R6,112(R3)) та â ³íñòðóêö³ÿõ çáåðåæåííÿ (íàïðèêëàä, SW 112(R3),R6). Ïåðøó ì³êðîä³þ âèêîíóþòü ò³ëüêè ó âèïàäêó ³íñòðóêö³¿ Load (çàâàíòàæåííÿ). Òóò çà äîïîìîãîþ ïîïåðåäíüî ðîçðàõîâàíî¿ àäðåñè ïàì'ÿò³ даних, ÿêу тимчасово зáåð³ãàюòü ó ñëóæáîâîìó ðåã³ñòð³ ALUoutput, здійснюють äîñòóï äî ïàì'ÿò³, ùî ³ ïîçíà÷åíî çàïèñîì DM[ALUoutput]. Ô³çè÷íî ç ïàì'ÿò³ çàâæäè ç÷èòóþòü 32 á³òè (або навіть цілі пакети з 32-х бітових структурних одиниць). Оòðèìàíèй з пам’яті даних á³íàðíèé êîä òèì÷àñîâî зàâàíòàæóюòü äî ùå îäíîãî ñëóæáîâîãî ðåã³ñòðу LMD (Load Memory Data). ² ò³ëüêè íàñòóïíîго циклу WB, ùî ïîêè ùî íå ðîçãëÿäàвся, ïåðåñèëàють ç÷èòàíий êîä ç ðåã³ñòðу LMD äî êîíêðåòíî¿ êîì³ðêè (â íàøîìó ïðèêëàä³ - öå комірка з адресою R6) ðåã³ñòðîâîãî ôàéëà. Äðóãó ì³êðîä³þ реалізують ëèøå â ³íñòðóêö³¿ Store (çáåðåæåííÿ). Òóò äî êîì³ðêè ïàì'ÿò³ даних çà àäðåñîþ, ùî çáåð³ãàюòü â ñëóæáîâîìó ðåã³ñòð³ ALUoutput = (R3) + 112, çàñèëàþòü âì³ñòèìå ñëóæáîâîãî ðåã³ñòðу B. Ïðè öüîìó (ó íàâåäåíîìó ïðèêëàä³) для ³íñòðóêö³¿ SW ìຠì³ñöå тотожність (Â)=(R6). 2.6.2. Óìîâíèé ïåðåõ³ä (branch) Âèêîíóюòü íàñòóïíу умовну ì³êðîä³ю: if (condition) PC = ALUoutput else PC = NPC. Здійснюють ïðèðîäíу (cond=0) àáî íåïðèðîäíу (cond =1) çаì³íа âì³ñòèìîãî PC ç ìåòîþ реалізації íàñòóïíî¿ çà branch ³íñòðóêö³¿. 2.7. Цикл çâîðîòíüîãî çàïèñó (write-back cycle - WB) Íà öьому, âæå îñòàííьому циклі âèêîíàííÿ ³íñòðóêö³¿ ó ðàç³ ïîòðåáè ðåçóëüòàò, ùî îòðèìàíî íà ïîïåðåäí³õ ôàçàõ çàïèñóþòü äî äåÿêî¿ êîì³ðêè RX ðåã³ñòðîâîãî ôàéëà. Íàïðèêëàä, â R1, ÿêùî поточною ³íñòðóêö³єю ADD R1,R2,R3, àáî â R6, ÿêùî поточною ³íñòðóêö³єю º LW R6,#112(R3). Увага! Цей цикл змінює програмний стан комп’ютера, після його виконання поновлення попереднього стану унеможливлено! 2.7.1. ALU-îïåðàö³ÿ ðåã³ñòð – ðåã³ñòð Âèêîíóюòü íàñòóïíу ì³êðîä³ю: Regs[IR16..20] = ALUoutput. ̳êðîä³ÿ çáåð³ãຠðåçóëüòàò ALU-îïåðàö³¿ â ðåã³ñòð³ ïðèçíà÷åííÿ (íàïðèêëàä, в ðåã³ñòð³ R1 на ïðèêëàä³ ³íñòðóêö³¿ ADD). Çðîçóì³ëî, ùî á³òè 16..20 â³äïîâ³äíîãî ôîðìàòó ³íñòðóêö³¿ ì³ñòÿòü á³íàðíèé íîìåð ðåã³ñòðу ïðèçíà÷åííÿ. 2.7.2. ALU-îïåðàö³ÿ ðåã³ñòð - áåçïîñåðåäí³é îïåðàíä Âèêîíóюòü íàñòóïíу ì³êðîä³ю: Regs[IR11..15 ] = ALUoutput. Öÿ ì³êðîä³ÿ òàêîæ çáåð³ãຠðåçóëüòàò îïåðàö³¿, íàïðèêëàä, SUB R5, R4, #1002, â êîì³ðö³ R5 ðåã³ñòðîâîãî ôàéëà. 2.7.3. ²íñòðóêö³ÿ çàâàíòàæåííÿ (íàïðèêëàä, LW R6, 112(R3 )) Âèêîíóюòü íàñòóïíу ì³êðîä³ю: Regs[IR 11..15 ] = LMD. Íàâåäåíà ì³êðî³íñòðóêö³ÿ íàäñèëຠäî êîì³ðêè R6 ðåã³ñòðîâîãî ôàéëà âì³ñòèìå êîì³ðêè ïàì'ÿò³ даних çà àäðåñîþ 112+(R3), ÿêå íà ïîïåðåäí³õ öèêëàõ âæå áóëî âèáðàíå ç ïàì'ÿò³ ³ òèì÷àñîâî óòðèìóâàëîñÿ â ñëóæáîâîìó ðåã³ñòð³ LMD. На цьому опис мікродій керування роботою DLX машини завершено. Подальший êðîê ïîëÿãຠó ðîçðîáö³ об’єднаного àëãîðèòìó ôóíêö³þâàííÿ êîìï'þòåðà â ö³ëîìó. Àëãîðèòì треба ñêëàдати íà îñíîâ³ âèùå ðîçãëÿíóòèõ ì³êðîä³é. Результат наведено у таблиці 1. Çðîçóì³ëî, ùî ³íñòðóêö³ÿ Load âèìàãàє âèêîíàííÿ ïîâíîãî ëàíöþæêу çì³íè öèêë³â, à ñàìå - IF, ID, EX, MEM, WB. Але дëÿ branch-³íñòðóêö³é ïîðîæíім âèÿâився цикл WB. Ïðîòå óâåäåííÿ деякої íàäëèøêîâîñò³ до циклової діаграми сприяє óí³ô³êації ³ ñòâîðþº ãðóíò для êîíâåðòóâàííÿ нашого ïðîòîòèïó äî ñòàíäàðòíîãî конвейєрного RISC-êîìï'þòåðà. Таблиця 1. Варіант мікропрограми роботи неконвейєрного прототипу DLX машини Цикл Усі інструкції   IF IR = IM [PC]; NPC = PC + 4;   ID A = Regs [ IR6..10 ]; B = Regs [ IR11..14 ]; Imm = (IR16 )16 ## IR16..31;  AЛП інструкції Load чи Store iнстр. Branch інструкції   EX ALUout = A op B; or ALUout = A op Imm; Zero(cond) = 0; ALUoutput = A + Imm; Zero(cond) = 0; ALUoutput = NPC + Imm; Zero(cond) = A op 0;   MEM  PC = {if cond then ALUoutput else NPC}; LMD = DM[ALUoutput]; or DM [ALUoutput] = B; PC = {if cond then ALUoutput else NPC};  PC = {if cond then ALUoutput else NPC};   WB Regs [IR16..20 ] = ALUoutput; or Regs [ IR11..15 ] =ALUoutput;  Regs [ IR11..15 ] = LMD; нема мікродій, виконання інструкції вже завершено   У таблиці 1 íå â³äáèòî, â ÿêèé ñïîñ³á âèêîíóюòü ðîçãàëóæåííÿ íà òðè ã³ëêè у циклі ÅÕ (â çàëåæíîñò³ â³ä òèïó âèêîíóâàíî¿ ³íñòðóêö³¿). Äî ðå÷³, ñëîâî "or", ÿêùî âîíî ïðèñóòíº ó êë³òèíö³, òðåáà ñïðèéìàòè ÿê "àáî", à íå ÿê "÷è". Íå â³äçíà÷åíî òàêîæ, ùî âêàçàí³ у циклі WB ì³êðî䳿 потрібні ëèøå çà óìîâè опрацювання ³íñòðóêö³¿ Load, à íå ³íñòðóêö³¿ Store. Íàâåäåíу ì³êðîïðîãðàìу треба ðåàë³çîâàти ïðèñòðîºì êåðóâàííÿ, який не обговорювався. Проте можна додатково зазначити, що, êîðåêòíà ãåíåðàö³ÿ пîñë³äîâíîñò³ ì³êðîêîä³â äîñèòü ëåãêî ï³äòðèìóºòüñÿ êîäîì ïîòî÷íî¿ ³íñòðóêö³¿, ÿêèé, ïî÷èíàþ÷è â³ä ôàçè ID, ì³ñòèòü ðåã³ñòð IR. 2.8. Система ìàøèííèõ ³íñòðóêö³é Повний перелік множини інструкцій надано таблицею 2. Çàóâàæèìî, ùî íåñòàíäàðòíо âèêîðèñòовують ðåã³ñòð R31 ðåã³ñòðîâîãî ôàéëà ÿê òàêий, ùî ì³ñòèòü àäðåñó ïîâåðíåííÿ ó ðàç³ âèêîíàííÿ äåÿêèõ òèï³â áåçóìîâíèõ ïåðåõîä³â. Рåã³ñòð R0 ðåã³ñòðîâîãî ôàéëà çàâæäè ì³ñòèòü íóëüîâ³ á³òè (àáî ïðîñòî, íóëü) ³ нульове âì³ñòèìå íå çì³íþº навіть запис до R0. Öå äîçâîëÿº ðåàë³çóâàòè àáñîëþòíèé ðåæèì àäðåñóâàííÿ, êîëè address = offset + [R0] = offset + 0 = offset. де offset є çñóâом. Таблиця 2. Множина інструкцій DLX машини № пп Код інструкції СУТНІСТЬ ІНСТРУКЦІЙ DLX МАШИНИ  Пересилання даних Move data between registers and memory, or between the integer and FP or special registers; only memory address mode is 16-bit displacement + contents of an integer register  1 LB, LBU, SB Load byte, load byte unsigned, store byte  2 LH, LHU, SH Load halfword, load halfword unsigned, store halfword  3 LW, SW Load word, store word  4 LF, LD, SF, SD Load single precision float, load double precision float, store single precision float, store double precision float   MOVI2S, MOVS2I Move from/to integer register to/from a special register   MOVF, MOVD Copy one floating point register or a DP pair to another register or pair   MOVFP2I, MOVI2FP Move 32 bits from/to a FP register to/from an integer register  Арифметичні та логічні Operations on integer or logical data in integer registers; signed arithmetic instructions trap on overflow  5 ADD, ADDI, ADDU, ADDUI Add, add immediate (all immediates are 16 bits); signed and unsigned  6 SUB, SUBI, SUBU, SUBUI Subtract, subtract immediate; signed and unsigned  7 MULT, MULTU, DIV, DIVU Multiply and divide, signed and unsigned; operands must be floating-point registers; all operations take and yield 32-bit values  8 AND, ANDI And, and immediate  9 OR, ORI, XOR, XORI Inclusive or, Inclusive or immediate, exclusive or, exclusive or immediate  10 LHI Load high immediate - loads upper 16 bits of register with immediate and zeros the lower 16 bits  11 SLL, SRL, SRA, SLLI, SRLI, SRAI Shifts; both immediate (S__I) and variable form (S__); shifts are left logical, right logical and right arithmetic  12 SEQ, SNE, SLT, SGT, SLE, SGE Set conditional; set equal zero, set not equal zero, set less than, set greater than, set less than or equal, set greater than or equal  Керування Conditional branches and jumps; PC-relative or through register  13 BEQZ, BNEZ Branch integer register equal/not equal to zero; 16 bit offset from PC+4   BFPF, BFPT Test comparison bit in the FP status register and branch; 16 bit offset from PC+4  14 J, JR Jumps; 26 bit offset from PC+4 (J) or target register (JR)  15 JAL, JALR Jump and link; save PC+8 to R31, target is 26 bit offset from PC+4 (JAL) or a register (JALR)   TRAP Transfer to operating system at a vectored address   RFE Return to user code from an exception; restore user mode  Рухома кома Операції з рухомою комою: DP (подвійна точність) та SP (одинарна точність)   ADDD, ADDF Add DP and SP floats   SUBD, SUBF Subtract DP and SP floats   MULTD, MULTF Multiply DP and SP floats   DIVD, DIVF Divide DP and SP floats   CVTD2F, CVTD2I, CVTF2D, CVTF2I, CVTI2D, CVTI2F Convert instructions; CVTx2y converts from type x to type y, where x and y are one of D (double precision float), F (single precision float) or I (integer); both operands are in floating point registers   EQD, EQF, NED, NEF, LTD, LTF, GTD, GTF, LED, LEF, GED, GEF DP and SP compares; set comparison bit in FP status register   Рåàë³çовано íàñòóïí³ òèïè ³íñòðóêö³é (це можна зауважити аналізом вмістимого таблиці 2). Ïåðåñèëàííÿ äàíèõ ïîì³æ ðåã³ñòðàìè òà ïàì'ÿòòþ äàíèõ, àáî ïîì³æ ðåã³ñòðàìè ö³ëèõ îïåðàíä³â ³ ðåã³ñòð³â îïåðàíä³â ç ðóõîìîþ êîìîþ òà ñïåö³àëüíèìè ðåã³ñòðàìè; àäðåñóâàííÿ ïàì'ÿò³ âèêîíóюòü çà äîïîìîãîþ ëèøå îäí³º¿ àäðåñóâàëüíî¿ ìîäè (mode), äå 16-á³òîâèé çñóâ, ùî ì³ñòèòüñÿ ó ôîðìàò³ ³íñòðóêö³¿, äîäàюòü äî âì³ñòèìîãî îäíîãî ç ðåã³ñòð³â çàãàëüíîãî ïðèçíà÷åííÿ (òîáòî ðåã³ñòðà, ùî ì³ñòèòü ö³ëèé îïåðàíä - áàçîâó àäðåñó). Ще раз пðèãîðíåìî óâàãó äî òîãî, ùî ñàìå ³íñòðóêö³¿ çàâàíòàæåííÿ (load) ÷è çáåðåæåííÿ (store), ÿê³ íàëåæàòü äî öüîãî òèïó, âèâ³ëüíÿþòü â³ä äîäàòêîâî¿ ôóíêö³¿ àðèôìåòè÷íîãî, ëîã³÷íîãî ÷è áóäü-ÿêîãî ³íøîãî îïðàöþâàííÿ îïåðàíä³â. Öå, ïî-ïåðøå, çàäîâ³ëüíÿº íåîáõ³äí³é óìîâ³ ñòâîðåííÿ ìíîæèíè ³íñòðóêö³é (ìàøèííèõ êîìàíä) RISC-àðõ³òåêòóðè, à ïî-äðóãå, äîçâîëÿº визнати àðõ³òåêòóðó, ùî зараз ïðîåêòóºòüñÿ, ÿê Load/store architecture. Àðèôìåòèêî/ëîã³÷í³ ³íñòðóêö³¿ âèâ³ëüíåíо â³ä ä³é ç îáì³íу ïîì³æ ïðîãðàìíî êåðîâàíèìè ðåã³ñòðàìè ïðîöåñîðà òà êîì³ðêàìè ïàì'ÿò³ äàíèõ. Çà äîïîìîãîþ ö³º¿ ãðóïè ³íñòðóêö³é âèêîíóþòü 䳿 ç äîäàâàííÿ àáî â³äí³ìàííÿ îïåðàíä³â, ëîã³÷íу îáðîáêу òà ð³çíîìàí³òí³ çñóâè îïåðàíä³â. ²íñòðóêö³¿ êåðóâàííÿ âèêîíàííÿì ïðîãðàìè, äî ÿêèõ íàëåæàòü óìîâí³ ³ áåçóìîâí³ ïåðåõîäè ³ äåÿê³ ³íø³ ³íñòðóêö³¿, íàïðèêëàä, TRAP (îñòàííÿ òèì÷àñîâî, íà êîðîòêèé òåðì³í í³áè "ïåðåäîâ³ðÿº" êåðóâàííÿ ñèñòåìîþ äåÿêîìó ìîäóëþ îïåðàö³éíî¿ ñèñòåìè), à òàêîæ ³íñòðóêö³ÿ повернення з виключення (обробка особливої ситуації, що може виникнути при виконанні операції) RFE (Return From Exeption). ²íñòðóêö³¿ îáðîáêè ÷èñåë ó ôîðìàò³ ç ðóõîìîþ êîìîþ, çà äîïîìîãîþ ÿêèõ вèêîíóºòüñÿ äîäàâàííÿ, â³äí³ìàííÿ, ìíîæåííÿ, ä³ëåííÿ ³ íèçêà ³íøèõ îïåðàö³é íàä â³äïîâ³äíèìè êîäàìè, ÿê ïðàâèëî, ó äâîõ âàð³àíòàõ, ³ç ñòàíäàðòíîþ òà ïîäâ³éíîþ òî÷í³ñòþ. Пояснемо на ілюстративному прикладі синтаксис запису алгоритмів виконання окремих машинних інструкцій DLX (див. таблицю 3). Надано запис: Regs[R19] 16..31 = 16(DM[Regs[R8]]0 )8 ## DM[Regs[R8]]. Запис фіксує наступне. Оновлюють лише 16 молодших (правих) бітів регістру R19. Äî íèõ пересилають двохбайтовий бінарний код, в якому молодший правий байт береться з пам’яті даних DM за адресою, що є збіжною з вмістимим регістру R8. Ñòàðøèé ë³âèé áàéò óòâîðþþòü â³ñ³ìðàçîâèì ïîâòîðþâàííÿì íóëüîâîãî (ñòàðøîãî) ðîçðÿäó ùîéíî çãàäàíîãî ïðàâîãî áàéòà. Ïàðîþ ñèìâîë³â ## позначено операцію конкатенації (зчеплення) двох байтів до двохбайтового напівслова. Наведеного у таблиці 3 достатньо для синтезу відсутніх в ній алгоритмів. Таблиця 3. Приклади алгоритмів виконання інструкцій DLX Приклад інструкції Алгоритм виконання інструкції  Арифметичні та логічні інструкції  ADD R1, R2, R3 Regs[R1] = Regs[R2} + Regs[R3]  ADDI R1, R2, #3 Regs[R1] = Regs[R2] + 3  LHI R1, #42 Regs[R1] = 42 ## 016  SLLI R1, R2, #5 Regs[R1] = Regs[R2} << 5  SLT R1, R2, R3 if (Regs[R2] < Regs[R3]) Regs [R1] = 1 else Regs[R1] = 0  Інструкції збереження і завантаження  LW R1, 30(R2) Regs [R1] = 32 DM [30 + Regs[R2]]  LW R1, 1000(R0) Regs [R1] = 32 DM [1000 + 0]  LB R1, 40(R3) Regs [R1] = 32 (DM [40 + Regs[R3]] 0) 24 ## DM [40 + Regs[R3]]  LBU R1, 40(R3) Regs [R1] = 32 0 24 ## DM [40 + Regs[R3]]  LH R1, 40(R3) Regs [R1] = 32 (DM [40 + Regs[R3]] 0) 16 ## DM [40 + Regs[R3]] ## DM [41 + Regs[R3]]  SW 500(R4), R3 DM[500 + Regs[R4]] = 32 Regs[R3]  SH 502(R2), R3 DM[502 + Regs[R2]] = 16 Regs[R3] 16…31  SB 41(R3), R2 DM[ 41 + Regs[R3]] = 8 Regs[R2] 24…31  Інструкції керування програмою  J name PC = name; ((PC + 4) – 2 25) =< name =< ((PC + 4) + 2 25);  JAL name R31 = PC + 4; PC = name; ((PC + 4) – 2 25) =< name =< ((PC + 4) + 2 25);  JALR R2 Regs[R31] = PC + 4; PC = Regs[R2];  BEQZ R4, name if (Regs[R4] == 0) PC = name; ((PC + 4) – 2 15) =< name =< ((PC + 4) + 2 15);  BNEZ R4, name if (Regs[R4] != 0) PC = name; ((PC + 4) – 2 15) =< name =< ((PC + 4) + 2 15);   3. КЕШ 3.1. Загальні положення Відомий так званий парадокс пам’яті – пам’ять ядра комп’ютера (ядро комп’ютера = процесор + пам’ять) може бути або малою, проте швидкою і задовільняти вимоги процесора щодо швидкодії, або ж відносно великою і повільною. Немає пам’яті відносно великої і, водночас, швидкої. Ставити зараз питання про пам’ять, що власною місткістю задовільняє системного програміста (системні програми) є, безперечно, не реальною задачею. Місткості пам’ÿò³ çàâæäè íå âèñòà÷ຠ³, ìîæëèâî. íå âèñòà÷àòèìå. Àáè ïîäàëàòè çàçíà÷åíó íåâ³äïîâ³äí³ñòü, âèáóäîâóþòü áàãàòîð³âíåâó ³ºðàðõ³÷íó ñèñòåìó ïàì’яті комп’ютера, де...
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!