Шина, як відомо, представляє із себе, власне, набір проводів (ліній), що з'єднує різні компоненти комп'ютера для підведення до них живлення й обміну даними. У "мінімальній комплектації" шина має три типи ліній:
· лінії керування;
· лінії адресації;
· лінії даних.
Пристрою, підключені до шини, поділяються на двох основних категорій - bus masters і bus slaves. Bus masters - це пристрою, здатні керувати роботою шини, т. ч. ініціювати запис/читання і т.д. Bus slaves - відповідно, пристрою, що можуть тільки відповідати на запити. Правда, є ще "інтелектуальні слуги" (intelligent slaves), але ми їх поки для ясності замнемо. Ну от, власне, і усе, що потрібно знати про шини для того, щоб зрозуміти, про що піде мова далі.
Компанія IBM у 1981 представила нову шину для використання в комп'ютерах серії PC/XT. Шина була вкрай проста по дизайні, містила 53 сигнальні лінії і 8 ліній харчування і являла собою синхронну 8-бітну шину з контролем парності і дворівневих переривань (trigger-edge interrupts), при використанні яких пристрою запитують переривання, змінюючи стан лінії відповідного IRQ з 0 на 1 або назад. Така організація запитів переривань дозволяє використовувати кожне переривання тільки одному пристроєві. Крім того, шина не підтримувала додаткових bus masters, і єдиними пристроями, що керують шиною, минулого процесор і контролер DMA на материнській платі.
62-контактний слот (див. таблицю 1) уключав 8 ліній даних, 20 ліній адреси (А0-А19), 6 ліній запиту переривань (IRQ2-IRQ7). Таким чином, обсяг пам'яті, що адресується, складав 1 Мбайт, і при частоті шини 4.77 Мгц пропускна здатність досягала 1.2 Мбайта/хв.
Забавно, що IBM не опублікувала повного опису шини з тимчасовими діаграмами сигналів на лініях даних і адреси, тому першим розроблювачам плат розширення довелося неабияк потрудитися.
Недоліки шини, що випливають із простоти конструкції, очевидні. Тому для використання в комп'ютерах IBM-AT ('Advanced Technology') у 1984 році була представлена нова версія шини, згодом названої ISA. Зберігаючи сумісність зі старими 8-бітними платами розширення, нова версія шини володіла поруч істотних переваг, як то:
· додавання 8 ліній даних дозволило вести 16-бітний обмін даними;
· додавання 4 ліній адреси дозволило збільшити максимальний розмір пам'яті, що адресується, до 16 МВ;
· були додані 5 додаткових trigger-edged ліній IRQ;
· була реалізована часткова підтримка додаткових bus masters;
· частота шини була збільшена до 8 MHz;
· пропускна здатність досягла 5.3 МВ/хв.
Реалізація bus mastering не була особливо вдалої, оскільки, наприклад, запит на звільнення шини ('Bus hang-off') до поточного bus master оброблявся кілька тактів, до того ж кожен master повинний був періодично звільняти шину, щоб дати можливість провести відновлення пам'яті (memory refresh), або сам проводити відновлення. Для забезпечення зворотної сумісності з 8-бітними платами більшість нових можливостей було реалізовано шляхом додавання нових ліній (див. таблицю 2). Тому що АТ був побудований на основі процесора Intel 80286, що був істотно швидше, ніж 8088, довелося додати генератор станів чекання (wait-state generator). Для обходу цього генератора використовується вільна лінія (контакт У8 NOWS-'No Wait State') вихідної 8-бітної шини. При установці цієї лінії в 0 такти чекання пропускаються. Використання в якості NOWS лінії вихідної шини дозволяло розроблювачам робити як 16-бітні, так і 8-бітні "швидкі" плати.
Таблиця 1. Призначення контактів рознімання 8-розрядної шини ISA
Контакт | Назва сигналу | Контакт | Назва сигналу |
B1 | Ground | A1 | I/O Channel Check |
B2 | Reset Driver | A2 | Data7 |
B3 | +5V | A3 | Data6 |
B4 | IRQ2 | A4 | Data5 |
B5 | -5V | A5 | Data4 |
B6 | DMA Request 2 | A6 | Data3 |
B7 | -12V | A7 | Data2 |
B8 | J8/NOWS[1] | A8 | Data1 |
B9 | +12V | A9 | Data0 |
B10 | Ground | A10 | I/O Channel Ready |
B11 | Memory Write | A11 | Address Enable |
B12 | Memory Read | A12 | Address19 |
B13 | I/O Write | A13 | Address18 |
B14 | I/O Read | A14 | Address17 |
B15 | DMA Acknoledge3 | A15 | Address16 |
B16 | DMA Request3 | A16 | Address15 |
B17 | DMA Acknoledge1 | A17 | Address14 |
B18 | DMA Request1 | A18 | Address13 |
B19 | Refresh | A19 | Address12 |
B20 | Clock | A20 | Address11 |
B21 | IRQ7 | A21 | Address10 |
B22 | IRQ6 | A22 | Address9 |
B23 | IRQ5 | A23 | Address8 |
B24 | IRQ4 | A24 | Address7 |
B25 | IRQ3 | A25 | Address6 |
B26 | DMA Acknoledge2 | A26 | Address5 |
B27 | Terminal Count | A27 | Address4 |
B28 | Address Latch Enable | A28 | Address3 |
B29 | +5V | A29 | Address2 |
B30 | Oscillator | A30 | Address1 |
B31 | Ground | A31 | Address0 |
Новий слот містив 4 нових адресні лінії (LA20-LA23) і копії трьох молодших адресних ліній (LA17-LA19). Необхідність у такому дублюванні виникла через те, що адресні лінії ХТ були лініями з затримкою (latched lines), і ці затримки приводили до зниження швидкодії периферійних пристроїв. Використання дублюючого набору адресних ліній дозволяло 16-бітній карті на початку циклу визначити, що до неї звертаються, і послати сигнал про те, що вона може здійснювати 16-бітний обмін. Насправді, це ключовий момент у забезпеченні зворотної сумісності. Якщо процесор намагається здійснити 16-бітний доступ до плати, він зможе це зробити тільки в тому випадку, якщо одержить від неї відповідний відгук IO16. У противному випадку чипсет ініціює замість одного 16-бітного циклу два 8-бітних. І усі б було гарно, але адресних ліній без затримки лише 7, тому плати, що використовують діапазон адрес менший, чим 128Кбайт, не могли визначити, де знаходиться передана адреса в їхньому діапазоні адрес, і, відповідно, послати відгук IO16. Таким чином, багато плат, у тому числі плати EMS, не могли використовувати 16-бітний обмін
Таблиця 2. Призначення контактів рознімання 16-розрядної шини ISA
Контакт | Назва сигналу | Контакт | Назва сигналу |
B1 | Ground | A1 | I/O Channel Check |
B2 | Reset Driver | A2 | Data7 |
B3 | +5V | A3 | Data6 |
B4 | IRQ2 | A4 | Data5 |
B5 | -5V | A5 | Data4 |
B6 | DMA Request 2 | A6 | Data3 |
B7 | -12V | A7 | Data2 |
B8 | No Wait States | A8 | Data1 |
B9 | +12V | A9 | Data0 |
B10 | Ground | A10 | I/O Channel Ready |
B11 | Memory Write | A11 | Address Enable |
B12 | Memory Read | A12 | Address19 |
B13 | I/O Write | A13 | Address18 |
B14 | I/O Read | A14 | Address17 |
B15 | DMA Acknoledge3 | A15 | Address16 |
B16 | DMA Request3 | A16 | Address15 |
B17 | DMA Acknoledge1 | A17 | Address14 |
B18 | DMA Request1 | A18 | Address13 |
B19 | Refresh | A19 | Address12 |
B20 | Clock | A20 | Address11 |
B21 | IRQ7 | A21 | Address10 |
B22 | IRQ6 | A22 | Address9 |
B23 | IRQ5 | A23 | Address8 |
B24 | IRQ4 | A24 | Address7 |
B25 | IRQ3 | A25 | Address6 |
B26 | DMA Acknoledge2 | A26 | Address5 |
B27 | Terminal Count | A27 | Address4 |
B28 | Address Latch Enable | A28 | Address3 |
B29 | +5V | A29 | Address2 |
B30 | Oscillator | A30 | Address1 |
B31 | Ground | A31 | Address0 |
Ключ | Ключ | ||
D1 | Memory Access 16 bit | C1 | System Bus High |
D2 | I/O 16 bit | C2 | Latch Address 23 |
D3 | IRQ10 | C3 | Latch Address 22 |
D4 | IRQ11 | C4 | Latch Address 21 |
D5 | IRQ12 | C5 | Latch Address 20 |
D6 | IRQ15 | C6 | Latch Address 19 |
D7 | IRQ14 | C7 | Latch Address 18 |
D8 | DMA Acknoledge0 | C8 | Latch Address 17 |
D9 | DMA Request1 | C9 | Memory Read |
D10 | DMA Acknoledge5 | C10 | Memory Write |
D11 | DMA Request5 | C11 | Data8 |
D12 | DMA Acknoledge6 | C12 | Data9 |
D13 | DMA Request6 | C13 | Data10 |
D14 | DMA Acknoledge7 | C14 | Data11 |
D15 | DMA Request7 | C15 | Data12 |
D16 | +5V | C16 | Data13 |
D17 | Master 16 bit | C17 | Data14 |
D18 | Ground | C18 | Data15 |
Незважаючи на відсутність офіційного стандарту і технічних "ізюминок" шина ISA перевершувала потреби середнього користувача зразка 1984 року, а "засилля" IBM AT на ринку масових комп'ютерів привело до того, що виробники плат розширення і клонів AT прийняли ISA за стандарт. Така популярність шини привела до того, що слоти ISA дотепер присутні на всіх системних платах, і плати ISA до цих виробляються. Правда, Microsoft у специфікації PC99 передбачає відмовлення від ISA, але, як говориться, до цього потрібно ще дожити.
Шина EISA (Extended Industry Standard Architecture)
Шина EISA з'явилася "асиметричною відповіддю" виробників клонів РС на спробу IBM поставити ринок під свій контроль. У вересні 1988 року Compaq, підтриманий "бандою дев'яти" - Wyse, AST Research, Tandy, власне Compaq, Hewlett-Packard, Zenith, Olivetti, NEC і Epson - представив 32-розрядне розширення шини ISA з повною зворотною сумісністю. Основні характеристики нової шини були наступними:
· 32-розрядна передача даних;
· максимальна пропускна здатність - 33 МВ/хв;
· 32-розрядна адресація пам'яті дозволяла адресувати до 4 GB (як і в розширенні ISA, нові адресні лінії були без затримки);
· підтримка multiply bus master;
· можливість завдання рівня дворівневого (edge-triggered) переривання (що дозволяло декільком пристроям використовувати одне переривання, як і у випадку багаторівневого (level-triggered) переривання);
· автонастрій плат розширення;
Як і у випадку 16-розрядного розширення, нові можливості забезпечувалися шляхом додавання нових ліній. Оскільки далі подовжувати рознімання ISA було нікуди, розроблювачі знайшли оригінальне рішення: нові контакти були розміщені між контактами шини ISA і не були доведені до краю рознімання. Спеціальна система виступів на розніманні і щілин у EISA-картах дозволяла їм глибше заходити в рознімання і приєднуватися до нових контактів. (Правда, затверджують, що при великому бажанні можна запхнути і ISA-карту так, щоб вона замкнула EISA-контакти. Не знаю, не пробував, тому що великого досвіду спілкування з EISA у мене немає: маленький був ще). Оскільки на даний момент шина EISA практично вимерла, приводити значення контактів рознімання не має змісту. Варто відзначити лише дві нових сигнальних лінії - EX32 і EX16, що визначали, що bus slave підтримує відповідно 32- і 16-розрядний цикл EISA. Якщо жоден з цих сигналів не був отриманий на початку циклу шини, виконувався цикл ISA.