1.2 Опис внутрішніх блоків


8086/88.

Найбільш простий інтерфейс мають процесори 8086/88. Вони здатні працювати в двох режимах: мінімальному і максимальному.

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

В РС застосовується максимальний режим, при якому сигнали керування системною шиною виробляються контролером шини 8288 по сигналам стану процесора. Всі сигнали керування активні низьким рівнем, що забезпечує можливість керування ,що розділяється шиною декількома приладами. Цикл шини позичає 4 такту (не лічивши тактів чекання).

Будь-який цикл може бути необмежено розтягнутий з допомогою сигналу готовності. Цикли звертання до портів відрізняються від циклів пам'яті використанням шини адреси. У разі звертання до портів лінії адреси A [8: 15] завжди містять нулі. Цикл підтвердження переривання аналогічний циклу читання з порту, але стан шини адреси процесором не управляється. Передача керування шиною здійснюється по сигналам RQ/GT: влаштування, що запрошує керування шиною, генерує імпульс запитання. Процесор, закінчивши черговий цикл, по тій же лінії передає імпульс підтвердження і звільняє шину. Шиною починає керувати влаштування, а по завершенні своїх операцій воно наступним імпульсом повідомляє процесору про звільнення шини. Типові шині цикли процесорів наведені на рисунку 1.1.




Процесор 8086 має 6-байтну внутрішню чергу інструкцій (іменно таку довжину має найдовша інструкція). Блок передвиборки за наявності двох вільних байт в черзі намагається її заповнити в той час, коли зовнішня шина процесора не позичена операціями обміну. Черга у процесора 8088 скорочена до 4 байт, а передвиборка виконується вже за наявності одного вільного байта. Ці відзнаки оптимизують конвейєр з урахуванням розрядності шини даних. Черга обнуляється при виконанні будь-якої команди передачі керування, навіть при переході на наступну адресу. Цією властивістю часто користуються при програмуванні керування приладами введення-виведення, що вимагають затримки між сусідніми операціями обміну. Дешифратор в даних процесорах по суті є і влаштуванням керування.

Процесор має 8 16-разрядных регістрів загального призначення і 4 16-розрядних сегментних регістра. Влаштування обчислення виконавчої адреси має двухвходовий суматор, тому при адресації зі зміщенням або, якщо відносна адреса перебує з трьох частин, вимагаються зайві такти для обчислення адреси.

80286.

Процесори 80286 випускалися в 68-виводних корпусах. Їхній інтерфейс відрізняється від 8086 застосуванням роздільних шин адреси і даних, конвейєрною адресацією, а також складом і призначенням керуючих сигналів.

Шина адреси дозволяє адресувати 16 Мб фізичної пам'яті в захищеному режимі і 1 Мб з області молодших адрес - в реальному режимі. При адресації введення-виведення процесор використає тільки біти A [0: 15] шини адреси (при цьому інші біти рівні 0). Як і в процесорі 8086, обмін по шині даних можливий байтами або словами. При побайтном обміні байт з парною адресою передається по лініям D [0: 7], з непарним - по лініям D [8-15]. Обмін словами з парною адресою відбувається по лініям D [0-15]. При адресації слова з непарною адресою процесор автоматично виконує два послідовних шиних циклу: перший по лініям D [8-15], другий - по D [0-7]. Байти шини, що беруть участь в обміні, як і для процесора 8086, визначаються сигналами A0 і BHE#.

Синхронизація процесора здійснюється зовнішнім сигналом, частота якого ділиться навпіл внутрішнім дільником для одержання сигналу внутрішньої синхронизації. На зовнішні виводи процесора цей сигнал не надходить, але його виробляє спеціальна мікросхема 82284 - генератор синхронизації для 80286. Максимальна пропускна спроможність локальної шини процесора - одне слово за кожні два цикла внутрішньої частоти.

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

Процесор 80286 не тримає на шині адреси, відповідно поточному циклу шиши на всьому його протязі. Для єдності з шиною ISA, потребуючей дійсність адреси на весь час циклу, сигнали шини адреси процесора заклацуються на регістрах.

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

Керування тимчасовою діаграмою підрозумує затримку і розтяжку командних циклів. Розтяжка при необхідності подовжує командний цикл звертання для відносно повільних зовнішніх приладів введення-виведення і пам'яті. Зовнішні схеми з допомогою затримки сигналу готовності можуть розтягувати цикл на будь-який час. При цьому вводяться такти чекання процесора. Затримка передвизначена для зрушення початку командного імпульса системної шини відносно відповідної йому фази адресації і ідентифікації. Затримка команд здійснюється мікросхемой 82288 по сигналу CMDLY, що перевіряється по кожному спаду CLK. Необхідність затримки і розтяжки команд з'явилася в зв'язку з істотним підвищенням продуктивності (відносно 8086) локальної шини процесора. 80286 здатний генерувати шинні цикли з мінімальним періодом в два такти внутрішньої частоти. Так при частоті процесора 16 МГц шинні цикли підуть з періодом 250 нс. В повній мірі цією продуктивністю може скористуватися лише пам'ять, підключена до локальної шини. Прилади на шині ISA такого темпу не витримують. Крім того, вони звичайно вимагають певного часу відновлення - пасивного стану керуючих сигналів шини між їм командами ,що адресувалися. Керування затримкою і розтяжкой циклів в залежності від типу і адреси звертання покладається на мікросхеми чипсета системної плати, а для завдання числа тактів чекання і часу відновлення для різноманітних операцій в машинах класу AT ввели відповідні опції BIOS SETUP. Шини цикли процесора уявлені на рисунках 1.2 і 1.3.






При проектуванні процесора 80286 була поставлена задача значно підвищити продуктивність. Буфер передвиборки залишився колишнім, але влаштування передвиборки піддалося значній переробці. Коли черга команд порожня, а це трапляється після кожної інструкції передачі керування, нові байти минають через чергу не затримуючись. Крім того, при передвиборці в захищеному режимі здійснюється контроль меж сегменту кодів. Дешифратор вже подає собою окреме влаштування, що вибирає дані з черги команд і “розгортає” кожну інструкцію в 69 біт, що включають всю інформацію, необхідну процесору для виконання команди, за винятком резидентних операндів. Ці мікроинструкції розміщуються в спеціальний буфер (на 3 команди), що також здатний пропускати команди без затримки в випадку передачі керування. В дешифраторі передбачений спеціальний засіб, що дозволить попереджати шиний інтерфейс про те, що в наступному такті знадобиться цикл вибірки даних з пам'яті. В цьому випадку шиний інтерфейс не дасть почати передвиборку, виключаючи завдяки цьому втрати в продуктивності.

Блок формування адреси має два суматора: суматор зміщення і суматор фізичної адреси. Обчислення повної адреси позичає два такту і доповнюється ще одним тактом, якщо зміщення перебує з трьох елементів.

Влаштування сегментації заазнало істотних змін. Сегментні регістри тепер перебують з двох частин: 16-разрядного селектора і програмно недосяжної дескрипторної частини, що містить базову адресу, розмір і права доступу сегменту.

80386.

Синхронизація процесора 80386 в точності відповідає синхронизації 80286.

Інтерфейс процесора 80386 в значному ступені схожий на інтерфейс 80286 хоча і зазнав ряду змін.

Шина даних припускає як 16-ти, так і 32-разрядный режим обміну, в залежності від стану вхідного сигналу BS16#. При читанні в 16-розрядному режимі дані на лініях D [16-31] ігноруються, при записі процесор керує всією шиною даних незалежно від сигналу BS16#/.

Шина адреси дозволяє адресувати 4 Гб фізичної пам'яті в захищеному режимі і 1 Мб з області молодших адрес в реальному режимі. При виконанні інструкцій введення-висновку процесор адресується до області 64 Кб простори введення-виведення (00000000-0000FFFFh). При обміні з сопроцесором в циклах введення-виведення процесор виставляє адреси 800000F8-8000000FFh, що спрощує дешифрацію адреси зовнішніми схемами. Лінії A [31: 2] ідентифікують адресу з точністю до подвійного слова, а в межах цього слова сигнали BE[0: 3]# безпосередно вказують, що байти використовуються в даному циклі. Якщо в поточному циклі запису обидва сигнали BE0# і BE1# неактивні, виводимі дані старших байт автоматично дублюються на лініях молодших. Якщо слово ,що адресувалося перетинає межу подвійного слова, процесор після пересилки молодшої частини, що помістилася, автоматично генерує додатковий цикл обміну з іншими значеннями A [31: 2] і BE [3: 0] #.

Сигнал BS16# вводиться зовнішньою схемою, якщо поточний цикл адресується до 16-битному влаштування, підключеному до молодшої половини шини даних. Якщо в даному циклі припускалася передача і двох старших байт, процесор автоматично вводить додатковий цикл для передачі цих байт по молодшій половині шини даних.

Тип циклу локальної шини визначається сигналами M/IO#, D/C#, W/R# і LOCK#, комбінація яких дійсна під час активності сигналу ADS# (строб адреси). Сигнали керування шиною ADS#, READY# і NA# задають тимчасові межі циклів і керують конвейєрною адресацією. Сигнал ADS# відзначає початок кожного циклу, під час його чинності виробляється ідентифікація типу циклу і фіксується відповідна йому адреса. Сигнал READY# повинен вводитися зовнішньою схемою в кожному циклі, відзначаючи готовність до завершення поточного циклу. Сигнал NA# використовується для запитання наступної адреси при конвейєрній адресації, коли зовнішні схеми вже готові сприйняти нову адресу і сигнали ідентифікації. Якщо процесор вже має внутрішнє запитання на наступний шини цикл, він видасть адресу і ідентифікатори наступного циклу до завершення поточного.

Сигнали арбітражу локальної шини передвизначені для передачі керування локальною шиною іншому влаштуванню по його запитанню - переходу в стан лог. “1” лінії HOLD. Коли процесор визнає можливим передачу керування (в незаблокованих циклах відразу по завершенні поточного шиного циклу), він виставить сигнал підтвердження HLDA. В такому стані процесор переводить в високоімпедансний стан всі двунаправлені і вихідні лінії. Цим станом можна користуватися і для отладки апаратних засобів. Шині цикли процесора уявлені на рисунках 1.4 і 1.5.

В процесорі 80386 збільшився буфер передвиборки до 16 байт, що заповнюється тепер подвійними словами. Всі основні регістри поширені до 32 розрядів. Суматори лінійної адреси замінені однім трьохвходовим.

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

Блок TLB подає собою чотирьохвходову асоціативну пам'ять, що містить 20-розрядні базові адреси 32 сторінок. В якості тега використовуються старші розряди лінійної адреси. Блок перебує з двох модулей пам'яті, основної і додаткової, і логіки обслуговування. Основний модуль пам'яті містить 8 блоків, кожний з яких забезпечує входи в кадр, для 4 сторінок. Вхід в кадр певної сторінки реалізується з допомогою розміщеної в модулі рядка бітів, що містить інформацію про що вибирається сторінку (базова адреса, атрибути) і інформацію, необхідну для її вибору.



Робота TLB відбувається слідуючим чином. Після формування лінійної адреси 3 молодших розряди поля (біти 14-12 лінійної адреси) визначають номер одного з восьмих блоків. Старші 17 розрядів (біти 31-15) порівнюються з 17 бітами тегів, що містяться в чотирьох рядках вибраного блоку. При їхньому збігу означена в стоці базова адреса заміщає 20 старших розрядів лінійної адреси.

Таким чином, кеш-пам'ять сторінок покриває 32*4Кб=128Кб адресного простору, що для більшості додатків забезпечує кеш-попадания з імовірністю 98%.

80486.

Інтерфейс процесора 80486 є тієї архітектурною компонентою, що в найбільшому ступені відрізняє його від попередника, 80386. Зміни, внесені в набір сигналів і протоколи обміну, мали метою реалізувати в вигляді збільшеної продуктивності 80486 ті переваги в швидкодії і функціональної потужності набору внутрішніх блоків, що з'явилися за рахунок використання більш досконалої мікроэлектронної технології.

На зміну конвейєрної адресації попередніх процесорів, починаючи з процесора 80486, введений режим пакетної передачі. Цей режим передвизначений для швидких операцій зі рядками кеша. Рядок кеша процесора 80486 має довжину 16 байт, отже, для її пересилки вимагається чотири 32-розрядных шиних циклу. Оскільки використання кеша припускає, що рядок повинен в ньому бути присутнім цілком, ввели пакетний цикл оптимизований для операцій обміну внутрішнього кеша з оперативною пам'яттю. В цьому циклі адреса і сигнали ідентифікації типу шин циклу видаються тільки в першому такті пакету, а в кожному з наступних тактів можуть передаватися дані, адреса яких вже не передається по шині, а вираховується з першого по правилам, відомим і процесору, і зовнішньому влаштуванню. В пакетний цикл процесор може перетворити будь-яке внутрішнє запитання на множествену передачу, але при читанні його розмір обмежений одним рядком кеша, а при записі в стандартному режимі шини в пакет може збиратися не більш 32 біт. Більш пізні моделі процесорів при роботі з WB-кешем при записі рядків в пам'ять збирають в пакет чотири 32-битных циклу, але це вже робота в розширеному режимі шини 486-го процесора. Пакетний цикл починається процесором так же, як і звичайний: на зовнішній шині встановлюється адреса, сигнали ідентифікації типу циклу і формується строб ADS#. В наступному такті передається перша порція даних, і, якщо вона не єдина, сигнал BLAST# має пасивне значення. Якщо влаштування ,що адресувалося підтримує пакетний режим, воно повинно відповісти сигналом BRDY# замість сигналу RDY# по готовності даних в першій же передачі даних циклу. В цьому випадку процесор продовжить цикл як пакетний, не вводячи такту адресації-ідентифікації (з сигналом ADS#), а відразу перейде до передачі наступної порції даних. Нормально про завершення пакетного циклу повідомляє влаштуванню сигналом BLAST#, що видається в такті останньої передачі пакету. Якщо у процесора є наміру зібрати пакет, а влаштування відповідає сигналом RDY#, дані будуть передаватися звичайними циклами. Введенням сигналу RDY# замість BRDY# зовнішнє влаштування може в будь-який момент перервати пакетну передачу, і процесор її продовжить звичайними циклами. В ідеальному варіанті (без тактів чекання) для передачі 16 байт в пакетному режимі вимагається усього п'ять тактів шини замість восьми, що зажадалося б при звичайному режимі обміну. Пакетний режим припускає додержання одніх і тих же правил формування наступних адрес як процесором, так і зовнішнім влаштуванням. Під час пакетного циклу процесора 486 старші біти адреси A[31:4] залишаються незмінними. Змінюватися можуть тільки біти A [3: 2] і сигнали BE[3:4]#. Таким чином, один пакетний цикл не може перетинати межу рядка кеша. Крім того, є специфічний порядок чергування адрес в пакетному циклі, що визначається початковою адресою пакету і розрядністю передач. Якщо під час пакетного циклу процесор виявить активність сигналів BS16# або BS8# до того, як перейти до наступної адреси, будуть завершені поточні 32-бітні цикли. Оскільки пакетний режим підтримується звичайно тільки оперативною пам'яттю (разом зі вторинним кешем), розрядність якої намагаються не усікати, на практиці перетворення послідовності адрес в 8 - або 16-битные передачі вряд чи де використовується. Порядок чергування адрес в пакетному циклі характерний для всіх процесорів Intel і сумісних із ними, починаючи з 486-го. Він оптимизован для двох банкової організації пам'яті, підрозумуючей чергування банків, що використаються в сусідніх передачах пакетного циклу.

Процесор 486 має чотири внутрішніх буферу для операцій запису. Якщо під час внутрішнього запитання процесора на запис всі буфери вільні і шина не позичена, запис виконується відразу без буферирування. Якщо шина позичена, запитання спрямовується в буфер, позичаючи для запису тільки один внутрішній такт, а з буферу дані вивантажуються в оперативну пам'ять або влаштування введення-виведення по мірі звільнення зовнішньої шини. Зовнішні операції запису з буферів будуть вироблятися в тому же порядку, що і запитання, що надійшли. Однак якщо за наявності невільних буферів з'явиться запитання на читання пам'яті, воно може бути обслуговане і раніше, ніж задовольняться йому запитання, що передують на запис. Ця зміна послідовності може відбутися тільки в тому випадку, якщо всі запитання запису в буферах зв'язані з кеш-попаданнями, а запитання на читання відноситься до кеш-промаху. Тільки в цьому випадку процесор може сміло міняти порядок операцій, але тільки один раз до тих пір, доки не визволяться всі буфери запису. Більше одного разу міняти порядок в загальному випадку не можна, тому що лічені дані можуть замістити рядок, що модифікувався кеша, з якого оновлена інформація якраз і очікує в буфері черги на запис в основну пам'ять. В такому випадку друга спроба зміни послідовності може порушити цілісність даних. Для операцій введення-виведення зміна порядку неможлива. Читання введення-виведення ніколи не може обганяти запис в пам'ять. Одинкові операції висновку не буферируються з тим, щоб дати можливість своєчасно (для програми) повідомити з своєї реакції на запис в порт (викликати апаратне переривання або цикл анулювання рядка). Однак засоби введення програмної затримки між одинковими операціями висновку для процесора 486 відрізняються від що передують: тут команда JMP, раніше безумовно що наводить до генерації зовнішнього циклу звертання до пам'яті скоріше усього буде обслугована з внутрішнього кеша, і бажаної затримки не відбудеться. Надійним засобом введення зовнішнього циклу шини між циклами вивода є явна операція читання некешуємої області пам'яті. Ця операція буде виконана тільки після завершення попереднього циклу висновку, а наступна операція висновку почнеться тільки по завершенні цього читання. Операції блочного висновку, викликані інструкцією REP OUTS, будуть використати буфери, але порядок не буде порушений.

Синхронизація процесора здійснюється зовнішнім сигналом CLK, всі тимчасові параметри відраховуються відносно його позитивного перепада. Зовнішня частота процесором вже не ділиться навпіл (як у 386-го), а може навіть умножатися на коефіцієнт, що у різних моделей процесорів може приймати значення 1, 2, 2.5 і 3. При Цьому інтерфейс зовнішньої шини процесора завжди працює на зовнішній частоті, а частота тактування обчислювального ядра може підвищуватися в декілька раз. Стандартними значеннями зовнішньої частоти є 25, 33.33, 40 і 50 МГц. Коефіцієнт множення задається рівнем логічного сигналу на вході CLKMUL.

Шина адреси дозволяє адресувати 4 Гб фізичної пам'яті в захищеному режимі і 1 Мб з області молодших адрес в реальному режимі. Сигналом A20M# можна включити примусове обнулення лінії A20 (як для внутрішнього кэша, так і для зовнішніх операцій). Таким чином эмулюється циклічне повернення адреси процесора 8086/88 (сигнал сприймається тільки в реальному режимі). При виконанні інструкцій введення-виведення процесор адресується в 64 Кб простори введення-виведення. Лінії A[31:2] ідентифікують адресу з точністю до подвійного слова, а в межах цього слова сигнали BE[3:0]# безпосередно вказують, які байти використовуються в даному циклі. Лінії A[31:4], що визначають адресу рядка внутрішнього кеша, в циклах анулювання працюють на введення.

Шина даних D[31:0] припускає як 32-розрядний режим, так і 16 - і 8-розрядний, в залежності від стану вхідних сигналів BS16# або BS8#. Але, в відзнаку від 386-го, перекомутація байтів не здійснюється. Кожний байт шини даних має біт паритету DP[3:0]. Схеми паритету генерують коректні контрольні біти в циклах запису, а в циклах читання в випадку помилки паритету тільки виробляється сигнал помилки на виході PCHK#, що ніяк не впливає на роботу процесора. Він може використовуватися зовнішніми схемами по розсуду розробника системної плати.

Тип циклу локальної шини визначається сигналами M/IO#, D/C#, W/R# і LOCK# під час активності сигналу ADS#.

Сигнали арбітражу локальної шини у порівнянні з попередніми процесорами доповнені вихідною лінією BREQ, що управляється процесором в будь-якому стані. Цей сигнал вказує зовнішньому арбітру на те, що процесор має внутрішнє запитання на використання шини. Сигнал встановлюється водночас зі стробом ADS#. Якщо процесор в даний момент не керує шиною, то сигнал з'явиться в той момент, коли процесор виставив б сигнал ADS#. Для запитання передачі керування локальною шиною іншому влаштуванню використовується сигнал HOLD. Коли процесор визнає можливим передачу керування, він виставить сигнал підтвердження HLDA. Крім того, є сигнал безумовного отключення процесора від шини - BOFF#. По цьому сигналу процесор віддає керування шиною в наступному же такті, а поточний цикл може бути перерваний. По Закінченню чинності сигналу BOFF# процесор рестартує перерваний цикл, знову ввівши такт адресації і ідентифікації зі стробом ADS#. Для внутрішніх вузлів процесора це бачиться як введення тактів чекання. Сигнал AHOLD передвизначений для захоплення зовнішнім контролером тільки шини адреси для анулювання рядків внутрішньої кеш-пам'яті. Анулювання рядка виробляється за наявності строба зовнішньої адреси EADS#.

До інтерфейсу кеш-пам'яті відносяться вхідні сигнали KEN# (дозвіл кешировання пам'яті по поточній адресі), FLUSH# (анулювання всіх рядків внутрішнього кеша з попереднім вивантаженням рядків ,що модифікувалися в випадку застосування зворотного запису) і вихідні сигнали PWT і PCD, керуючі зовнішнім кешированням. Процесори, працюючі в режимі зворотного запису кэша, використають додаткові сигнали INV, HITM#, CASHE# і WB/WT#. Перші процесори сімейства 486-х в первинному кеше забезпечували тільки політику наскрізного запису. Для них не було необхідності в реалізації пакетного режиму при записі. Запис зовнішнім контролером в кешуюму пам'ять наводить тільки до анулювання рядка кеша, якщо осередок, до якої буде в обігу зовнішній контролер, уявлений і в внутрішньому кеші. Для політики зворотного запису інтерфейс ускладнюється - необхідно забезпечення можливості вивантаження рядків кеша, що модифікувалися в основну пам'ять, якщо до пам'яті, що відображається цими рядками, буде в обігу зовнішній контролер шини. З цими відмінностями зв'язані поняття стандартного і розширеного режиму шини процесора 486. Стандартний режим шини передвизначений для роботи первинного кеша з політикою наскрізний запису, що повністю сумісно з інтерфейсом перших процесорів 486 з WT-кешем. Його основні відзнаки наступні: на сигнал FLUSH# процесор не відповідає спеціальним циклом підтвердження; по сигналу FLUSH# процесор анулює всіх рядки внутрішнього кеша за 15-20 тактів CLK; сигнали, специфічні для WB-кеша, ігноруються; сигнал EADS# сприймається в будь-який момент часу. Розширений режим шини передвизначений для роботи первинного кеша з політикою зворотного запису, що повністю сумісно з інтерфейсом процесорів 486 з WB-кешем. Його основні відзнаки наступні: по сигналу FLUSH# процесор виконує зворотні записи рядків ,що модифікувалися кеша, після чого відповідає спеціальним циклом підтвердження; зворотний запис рядків ,що модифікувалися кеша, що виконується по сигналу FLUSH# і інструкції WBINVD, може позичати біля 2000 тактів CLK, система повинна спостерігати за шиною, очікуючи спеціального циклу підтвердження; сигнали BLEN#, EWBE#, WB/WT#, INV сприймаються процесором; сигнал WB/WT# сприймається в кожному циклі звертання до пам'яті, дозволяючи визначати політику запису для кожного рядка окремо; сигнал EADS# сприймається тільки в стані HOLD, AHOLD або BOFF#; сигнал PLOCK# не активний (постійний високий рівень). Вибір режиму шини здійснюється процесором за станом лінії WB/WT# в момент закінчення сигналу RESET, низькому рівню відповідає стандартний режим шини. Сигнал всередині процесора резистором підтягується до низького рівня, так що на системній платі, не зворотного запису ,що підтримує режим, процесор завжди буде працювати в стандартному режимі. На рисунку 1.6 уявлений пакетний цикл заповнення рядка кеш-пам'яті.



Процесор 486 має RISC-ядро, що зажадало докорінної зміни дешифрації команд. Черга кодів перебує з двох блоків по 16 байт і заповнюється, або з кэша за 1 такт, або швидкими пакетними циклами поблочно. Запитання на передвиборку має нижчий пріоритет у порівнянні з іншими запитаннями, що дозволяє звести до мінімуму час, необхідний для вибірки операнда. На рисунку 1.7 уявлений конвейєр процесора.




Більшість команд перебувають в крапках конвейєра не більш одного такту. Крім того запис результату може бути суміщений з виконанням наступної команди, якщо будь-який операнд наступної команди, або не перетинається з результатом попередньої, або перетинається повністю (входить в склад. Наприклад АХ і ЕАХ). Дешифрация команди виконується в дві стадії. На першій стадії виробляється трансляція команди в RISC-інструкцію. На другій стадії виробляється обчислення адрес операндів і формування відповідних запитань.

Арифметичний блок має в свойому складі окрім блоку цілочисельної обробки ще і блок обробки чисел з плаваючою крапкою, що раніше входив в склад сопроцесора.

В склад процесора війшло ще одне влаштування, покликане значно підвищити продуктивність. Це кеш пам'ять першого рівня, працююча на частоті ядра. Кэш-пам'ять має розмір 8 Кб і має чотирьохвходову наборно-асоціативну структуру. Її робота аналогічній роботі блоку TLB.

Процесор має внутрішню 64-розрядну шину, що зв'язує кеш-пам'ять з основними внутрішніми блоками, що дозволяє за один такт передавати операнд з плаваючою крапкою або дескриптор сегменту.

Pentium.

По інтерфейсу шина процесора Pentium нагадує шину 486, але має помітні відзнаки. Нові особливості направлені на підтримку політики зворотного запису кеша, підвищення продуктивності і забезпечення додаткових функціональних можливостей. Якщо шина 486-го була орієнтована на максимальну гнучкість і простоту підключення приладів з різноманітною розрядностью, то шина Pentium орієнтована на досягнення максимальної продуктивності.

Шина даних стала 64-бітной для підвищення продуктивності обміну з пам'яттю. Можливість динамічного керування розрядністю шини вилучена, погодження по розрядності з інтерфейсними шинами покладене на мікросхеми чипсета. При дозволеному контролі паритету даних (сигнал PEN) помилка викликає не тільки спрацьовування сигналу PCHK#, але і фіксацію збойної адреси і даних в регістрі машинного контролю. А якщо встановлен біт MCE регістру CR4, по цій помилці генерується виключення 18. В доповнення до контролю паритету шини даних введен контроль паритету шини адреси. Виявлена помилка паритету бітів A[31:5] шини адреси тільки викликає сигнал помилки APCHK#, що може бути оброблений системною логікою.

Пакетні цикли виконуються тільки у разі звертання до пам'яті, причому як при читанні, так і при записі. Пакетні цикли зв'язані тільки з кешуємою пам'яттю, при цьому кешуємість пам'яті подразумує і її підтримку пакетного режиму. Під час пакетного циклу сигнали дозволу байт і молодші біти адреси не міняються. Порядок чергування адрес, як і у процесора 486, оптимизован для двухбанкової організації пам'яті. Знову з'явилася конвейєрна адресація, що дозволяє водночас на шині бути присутім двом обслуговуваним запитанням. Ознакою пакетного циклу (і його закінчення) є сигнал CASHE#. Зовнішня система не може перервати пакетний цикл, початий процесором. Конвейєризация запрошується сигналом NA#, в відповідь на який процесор через такт видасть адресу наступного циклу. Без конвейєризації наступна адреса була б виставлена тільки після завершення передачі даних поточного циклу.

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

Для підтримання погодженості даних кеша і основної пам'яті процесор відпрацьовує цикли спостереження, що ініціювалися зовнішньою системою. Ці цикли, як і в 486-м, використають сигнали AHOLD#, EADS# і відповідні сигнали процесора HIT# і HITM#. Сигнал FLUSH# викликає вивантаження всіх рядків ,що модифікувалися первинного кеша. Цикли спостереження ініціюються системою для визначення присутності затребуваної області пам'яті в рядку будь-як кеш-пам'яті і визначення її стану. Процесори, починаючи з Pentium, підтримують протокол MESI, названий по їм станам, що визначаються: Modified, Exclusive, Shared, Invalid. Стану визначаються слідуючим чином: M-state - рядок присутній тільки в одному кеші і модифікований, те є відрізняється від вмісту основної пам'яті. Доступ до цього рядка можливий без генерації зовнішнього (по відношенню до локальної шини) циклу звертання; E-state - рядок присутній тільки в одному кеші, але не модифікований. Доступ до цього рядка можливий без генерації зовнішнього циклу звертання, при записі вона перейде в стан М; S-state - рядок потенційно може бути присутнім в декількох кешах. Її читання можливо без генерації зовнішнього циклу, а запис в неї повинна супроводжуватися наскрізним записом в основну пам'ять, що притягне анулювання відповідних рядків в інших кешах; I-state - рядок буде відстуній в кеше, її читання може призвести до генерації циклу заповнення рядка. Запис в неї буде наскрізний і вийде на зовнішню шину. Шини цикли процесора уявлені на рисунку 1.8.



Процесор Pentium має суперскалярну архітектуру, що означає можливість одночасного виконання більш однієї інструкції за один такт. Він побудований на основі двох конвейєрів загального призначення для цілочисельних операцій і конвейєрного FPU. Процесор може виконувати водночас дві цілочисельні інструкції.

Структура конвейєрів уявлена на рисунку 1.9 (Пунктиром показані стадії, добавлені в процесори з підтримкою ММХ). На стадії передвибірки PF команди вибираються з кеша команд. Далі вони надходять на стадію вибірки F. Тут відбувається розподіл вибраної порції коду на окремі команди, а також декодування будь-яких префіксів. Між стадією F і D1 знаходиться FIFO-буфер. В ньому може міститися до чотирьох інструкцій (в процесорах без ММХ буфер буде відстуній, а префікси декодуються на стадії D1). Буфер прозорий, т. є. він не віднімає часу, коли пуст. В кожному такті з стадії F в буфер може надходити до двох інструкцій. Бо середня швидкість виконання команд менш ніж дві команди за такт, те буфер звичайно заповнений.

На стадії D1 відбувається перетворення команд в RISC-інструкції і прийняття рішення про распаралелювання. Далі команди надходять в два конвейєра. Обидва конвейєра функціонально подібні, але другий V конвейєр у порівнянні з головним U має деякі обмеження. Стадія D2, на якій вираховуються адреси операндів пам'яті, має багатоканальний суматор. В відзнаку від відповідної стадії конвейєра попередніх процесорів, ця стадія не вводить додаткових тактів затримки при багатокомпонентних обчисленнях адреси. На стадії ЕХ відбувається безпосереднє виконання команд в цілочисельних АЛУ. Pentium має окремий умножитель, що не використає ресурсів АЛУ, і, отже, дозволяє виконувати інші команди паралельно з множенням. Але бо умножитель тільки один, дві команди множення не распаралеливаються. Множення може вироблятися в V конвейєрі. Кожний конвейєр має свій буфер запису WB для підвищення продуктивності при послідовних операціях запису в пам'ять. Буфери мають розрядність 64 б і можуть обидва заповнитися за один такт, наприклад, при одночасних кеш-промахах записи на обидва конвейєрах.



В відзнаку від цілочисельних команд, що цілком виконуються на стадії ЕХ, команди FPU і MMX починають виконуватися на стадії ЕХ, а після цього уходять на свої стадії. На стадіях конвейєра FPU виконуються наступні дії. На стадії ЕХ відбувається читання операндів з пам'яті і регістрів, далі перехід на стадію Х1 або перетворення даних до зовнішнього формату і запис в пам'ять. На стадії Х1 відбувається перетворення даних до внутрішнього формату і запис в регістр. На стадії Х2 виконання команд, а на стадії WF - округлення і запис результату. Для команд ММХ існують два своїх конвейєра, постачених окремими АЛУ і умножителями. На стадії ЕХ відбувається читання операндів. Стадія Mex - виконання команд, перший такт множення. Стадія Wm/М2 - запис результату однотактних команд, другий такт множення. Стадія М3 - третій такт множення. Wmul - запис результату множення.

Блок попередньої вибірки інструкцій має чотири 32-байтных буферу. На стадії PF дві незалежні пари буферів вибірки працюють разом з цільовим буфером ветвлення ВТВ. В кожний момент часу попередню вибірку інструкцій може активно запрошувати тільки один буфер. Вибірка виробляється послідовно до появи інструкції галуження. Коли така інструкція з'являється, ВТВ завбачує, буде чи перехід. Якщо завбачується перехід, те дозволяється робота іншого буферу передвиборки і він починає передвиборку з цільової крапки галуження. Якщо завбачене галуження не відбулося, конвейєри інструкцій скидаються і передвиборка починається знову. Оскільки кеш інструкцій окремий від кэша даних, передвиборка інструкцій не конфліктує з запитаннями даних з кеша.

Pentium Pro.

Зовнішній інтерфейс процесора Pentium Pro докорінно відрізняється від всіх попередніх моделей процесорів. Застосування динамічного виконання різко підвищує частоту запитань процесорного ядра до шини за даними пам'яті і інструкціями, оскільки ядро водночас обробляє декілька інструкцій. Для обходу вузького місця - зовнішньої шини - кристал процесорного ядра використає архітектуру подвійної незалежної шини. Одна з цих шин використовується тільки для зв'язку з кристалом вторинного кеша, розташованим в тому же корпусі мікросхеми, а у Pentium II - на загальному картриджі. Ця шина є локальною і в геометричному сенсі - провідники мають довжину порядку одиниць сантиметрів, що дозволяє використати її на частоті ядра процесора. Значний обсяг вторинного кеша дозволяє задовольняти більшість запитань до пам'яті суто локально, при цьому коефіцієнт завантаження шини досягає 90%. Друга шина процесорного кристалу виходить на зовнішні виводи мікросхеми, вона і є системною шиною процесора. Ця шина працює на зовнішній частоті незалежно від внутрішньої шини. Завантаження процесором зовнішньої шини для звичайних “настольных” застосуваннь складає порядку 10% від її пропускної спроможності, а для серверних застосуваннь може досягати 60% при чотирьохпроцесорной конфігурації. Таким Чином, обмежена пропускна спроможність зовнішньої шини перестає сильно стримувати продуктивність процесора. Зниження навантаження на зовнішню шину дозволяє ефективно використати багатопроцесорну архітектуру.

Системна шина PentiumPro і Pentium II більш ефективна для об'єднання процесорів по симетричній архітектурі, ніж шини попередніх процесорів, оптимизовані для обміну з пам'яттю. Вона дозволяє без додаткових схем об'єднувати до чотирьох процесорів.

Сигнали системної шини об'єднуються в групи запитань і відповідей. Кожне влаштування-агент, підключене до цієї шини, до ініціализації запитання через механізм арбітражу повинно отримати право на використання шини запитання. Запитання виходить за два суміжних такта: в першому такті передається адреса, тип звертання і тому подібна інформація. В другому такті передається унікальний ідентифікатор транзакції, довжина запитання, дозволені байти шини і т. п. Через три такти після запитання перевіряється стан помилки для захисту від помилок передачі або порушень протоколу. Будь-яка виявлена помилка викликає повторення запитання, а друга помилка для того же запитання викликає виключення контролю. Шини транзакції діляться на безліч фаз, перекриваючих друг друга. В фазі завершення всі агенти, що відповідають на дане запитання, при необхідності можуть виставити на шину коди завершення. Інші процесори в цій фазі управляють лініями HIT# і HITM#, в залежності від попадання запитання в їхній внутрішній кеш. Агент, що не встигає відповісти за відведені чотири такту, може виставити водночас сигнали HIT# і HITM# для затримки фази завершення на число тактів, кратне двом. В випадку кеш-попадания запитання до пам'яті задовольняє процесор, оскільки передачі кеш-кэш відбуваються швидше. Однак при попаданні в рядок, що модифікувався цикли звертання до пам'яті неминучі. На шині водночас може бути присутнім безліч запитань і відповідей, однак логічний аналізатор, “що розуміє” протокол шини Pentium Pro, здатний розкласти їх “по полочкам” відповідних транзакцій.

По складу і призначенню сигналів системна шина процесорів шостої ґенерації значно відрізняється від шин попередніх процесорів.

Шина REQ[4:0]# під час першого такту фази запитання несе частину інформації про транзакції, достатню для ініціалізації циклу спостереження. При транзакції доступу до пам'яті тут же передається інформація про розмір адресного простору - 4 Гб (32-біта) або 64 Гб (38-біт). Під час другого такту фази запитання по цим лініям передається додаткова інформація, включаюча довжину поля даних. Можливо завдання довжини 0-8, 16 або 32 байта.

Шина A[35:3]# використовується багатофункціонально. Під час першого такту фази запитання вона містить адреса пам'яті або введення-висновку, а для транзакцій з відкладеною відповіддю - її ідентифікатор. Під час другого такту фази запитання ця шина несе інформацію про атрибути транзакції, її ідентифікатор, і додаткові функції, що беруть участь байтах. По закінченню дії сигналу RESET# процесори з цих ліній одержують інформацію про конфігурацію по включенню.

Сигнали запитання BREQ[3:0]# використовуються для арбітражу симетричних агентів. Агент “n” запрошує шину, управляючи сигналом BREQn#, а інші лінії розглядає як вхідні. Симетричні агенти підтримують розподілений механізм арбітражу на основі циклічної зміни ідентифікатора пріоритету. “Що обертається” ідентифікатор подає собою внутрішній стан всіх симетричних агентів для визначення агента з найменшим пріоритетом для наступної події арбітражу. По включенні живлення що обертається ідентифікатор встановлюється в значення 3, дозволяючи агенту 0 мати вищий пріоритет з всіх симетричних агентів. По черговій події арбітражу новий стане рівним номеру агента - поточного власника шини, в результаті чого, віддавши керування шиною при наступній події, він отримає найнижчий пріоритет. Чергова подія трапляється, коли виставляє запитання до вільної шини або поточний власник знімає своє запитання. За станом ліній BREQ[3:0] і значенню ідентифікатора, відомого всім агентам, вони водночас (по однаковим правилам) визначають нового власника шини. Власник шини може відраховувати керування шиною, зберігаючи активне значення свого сигналу запитання. Однак виявивши запитання від інших агентів, він по можливості повинен віддати керування шиною. Для підключення до шини арбітражу BREQ[3:0]# використовуються сигнали процесора BR0#(i/o) і BR[3:1]# (i). Під час конфігурування по включенню центральний агент повинен виставити сигнал BREQ0#. Всі симетричні агенти по сигналам прийнятим зі своїх ліній BR[3:0]#, визначають свій ідентифікатор агента. Процесор Pentium II розрахований на застосування не більш ніж в двухпроцесорних симетричних системах, він має тільки сигнали BR0# і BR1#. Тимчасова діаграма роботи процесора уявлена на рисунку 1.10.



В сімействі процесорів Pentium Pro використовується архітектура динамічного виконання, в якій сочетаєтся зміна порядку виконання, предположне виконання інструкцій з апаратним перейменуванням регістрів і передсказанням ветвлень. Їхньою відокремлювальною рисою є те, що інструкції, що минають через конвейєр в порядку надходження, розбиваються на найпростіші мікрооперації, що виконуються суперскалярним процесорним ядром в порядку, зручному процесору. “Безладне” ядро процесора містить декілька конвейєрів, до яких підключаються виконавчі прилади. Декілька виконавчих приладів можуть об'єднуватися на одному конвейєрі. Конвейєр процесора містить три частини: препроцесор, ядро з неупорядоченим виконанням, що упорядковує влаштування. Схема конвейєра уявлена на рисунку 1.11.



Конвейєр має наступні східців. Буфер мети галуження ВТВ зберігає історію і їхніх цільових адрес, що відбувалися ветвлень. Кожний з 512 елементів ВТВ зберігає цільову адресу і чотири біти передісторії, що несуть інформацію про те, траплялася чи перехід за останні чотири проходу через інструкції галуження, посилатися на дану адресу. Якщо на підставі аналізу передісторії завбачується перехід, цільова адреса посилається в блок предвиборки, не чекаючи виконання інструкції галуження. Окрім BTB, Pentium Pro має буфер стекових вертаннь, що дозволить коректно завбачувати адресу повернення з процедур, що викликаються з різноманітних крапок. Таким чином, виклик процедури в лінійній послідовності кодів не наводить до втрати продуктивності предвиборки. Блок вибірки інструкцій IFU має дві стадії. На першій стадії інструкції вибираються 16-байтними пакетами, зрівненими по межам параграфів. На другий стадії інструкції попередно декодуються і вкладаються в два буферу по 16 байт вже без прив'язки до меж параграфів. На східці ID процесор має три декодера. Перший декодер за один такт здатний декодувать одну макроінструкцію, що містить до чотирьох мікрооперацій. Два інших декодера можуть за такт декодувати тільки інструкцію, що перебує з однієї мікрооперації. Більш складні інструкції декодуються за декілька тактів.

В кожному такті декодери можуть виробляти до шести мікрооперацій, що надходять в спеціальну чергу. З черги до трьох мікрооперацій надходять на стадію RAT. Тут відбувається перейменування регістрів, а на стадії RS резервування місця в ROB. ROB організований в вигляді кільцевого буферу на 40 місця. Микрооперации надходять в ROB в порядку черги і удаляються в порядку черги, а виконуватися мікрооперації можуть поза чергою по мірі готовності вихідних даних і доступності виконавчих приладів. До трьох мікрооперації можуть передаватися на виконання в кожному такті. В залежності від функції ,що виконується мікрооперація спрямовується в один з п'ятих портів. До кожного порту прикріплені свої виконавчі прилади. Порт 0 може містити цілочисельне АЛУ і FPU, порт 1 - цілочисельне АЛУ, порт 2 - блок завантаження даних, порт 3 - блок адреси запису, порт 4 - блок даних запису. В процесорі Pentium II порт 0 містить АЛУ ММХ і умножитель ММХ, а порт 1 - АЛУ ММХ і зсуватель ММХ. Після виконання мікрооперація вертається зворотно в ROB, де очікує вилучення. Після того як результат мікрооперації був записаний в ROB, він (результат) ставає доступним іншим мікроопераціям.



Информация о работе «Керiвництво программиста»
Раздел: Информатика, программирование
Количество знаков с пробелами: 97603
Количество таблиц: 5
Количество изображений: 0

0 комментариев


Наверх