Шина pci что это
Всеобщая эйфория от появления на рынке новых процессоров, не дает достаточно времени кинуть взгляд, а что же там у них «под капотом». Те же их стороны, которыми обычно восхищаются кликатели и кнопкодавы, вовсе не отражают реальное положение дел на железном фронте.
А тучи, тем временем, сгущались. Да, процессоры стали быстрее. Да, действительно, там стало больше ядер. И последнее, как раз, является серьезной архитектурной проблемой. По крайней мере, для наметившегося лидера гонки.
Кто сейчас помнит такой архаизм как «Архитектура»? Мало кто. Слово в станкостроении стало в IT практически ругательным. А ведь когда-то, в былые времена, книга «PCI System Architecture „ и прочие, зачитывалась до дыр, на экране. И что же там такого страшного, в этом осколке прошлого, накарябано о PCI, что может нас ввести в глубокую задумчивость, полную вселенской грусти?
Страшная цифра — 256. Хотя, на первый взгляд, и не очень страшная. Да, именно столько, и есть максимальный предел присутствия независимых PCI устройств, на PCI шине. Цифра кажется на самом деле заоблачной.
Ну кому, в здравом уме и твердой памяти, придет в голову иметь в компьютере больше 5-10 реальных, т.е. “физических» устройств? Именно исходя из этих «логичных» предпосылок, недавний лидер процессорной гонки, вводил ограничивающие настройки в свой чипсет, дающие возможность принудительно ограничивать волшебную цифру до 128, 64, и не поверите 32(!) PCI шин. И это была не просто блажь, т.к. давало серьезную возможность экономить системный кусок (первые 4Gb) памяти, до сих пор наделенный "волшебными свойствами" в отношении ОС. В том то и дело, что физических устройств было до недавнего времени не очень много.
Но, время не стоит на месте, и вот я держу в руках очередное 64 ядерное чудо враждебной техники, Rome от AMD.
И что же он хочет, нет ТРЕБУЕТ, для своего минимального функционирования? Всего то малость… откусить для своих 64 ядер… пространство в 80 PCI шин. Браво. Но, ведь у нас есть еще 2/3 пространства? У кого то есть, а у кого-то и нет.
Первый раз на небездонность PCI шины я обратил внимание, настраивая PCI расширитель, так уж получилось, что на нем висело, за гроздью из P2P мостов Pericom, 119 PCI устройств требовавших подобное же количество индивидуальных PCI шин. И это только за единственным х8 PCI расширителем. А таких х8 портов, там было 8. Вот тут, как бы невзначай, и всплывает "волшебность" первых 4Gb системной памяти, когда львиная доля из тех 119 PCI устройств, требует для своей инициализации во время обнаружения БИОСом «скромные» 32-64 Мб на каждого.
Хорошо что Интел не так мощно выгрызет PCI пространство. При необходимости, но повесить второю гроздь еще оставалось возможным.
А вот с Rome и единственное такое «расширение» лишает нас надежды хоть на какое то будущее столь увесистой «грозди», в этой АМД системе. Нет, конечно, клиенту можно предложить перейти на суперкомпьютерную архитектуру, ту которая будет под заказ, и выльется в 10 раз дороже. Но и вышепредложенная конфигурация, как вы успели заметить, не для каждого из нас. И также разрабатывается индивидуально под хотелки клиента. Но архитектурная граница хотелок уже ощутимо близка. Не хочется в каждую вышку мобильной связи лепить суперкомпьютер, исключительно из-за тридцатилетней «ограниченности» PCI шины. Что самое интересное, но переход на ARM совершенно не выход, поскольку на нем мы видим все тот же PCI, и все те же 30 летние ограничения.
Увы, ситуация в деталях повторяет тенденцию с памятью, стало мало? Пихай-суй больше! PCI пространство есть? Что его жалеть, от него не убудет. Увы, уже убудет. Уже, не то что в четверо или вдвое не обрежешь, чем баловался Интел. Уже и в полном объеме, для серьезных игроков — на грани. И применение транспарентных P2P мостов, увы только паллиатив, в сложившейся ситуации.
Только и остается что беречь каждый байт адрес шины. Или мечтать о том что крупные игроки созреют для создания IP6 адресов SuperPCIExpress.
UPD
Уважаемый ikle, поделился ценной информацией по поднятой теме в своем комментарии
Дак в PCI всё для этого уже есть — буковка S в SBDF — целых 16 бит — четвёртое измерение. Более того, PCI-E позволяет уже использовать разные сегменты: Если ОС не дремучая и умеет понимать ACPI MCFG таблицу, то проблемы никакой нет уже сейчас.
А от себя добавлю, что в UefiShell есть коменда pci c параметром -s Seg которая как раз и показывет нужный PCI сегмент. Печаль только в том, что новые сегменты растут исключительно(я так пока понял) из дополнительных физических процессоров. А с этим мало кто встречается. Многоядерность — «это не совсем то». Либо, как вариант, P2P мост должен поддерживать эту достаточно не популярную в широких массах опцию.
UPD2
Всем, сигнализировавшим от ошибках в тексте, большое спасибо. Исправил, как только смог.
Итак, переходим к самому интересному. Что же находится на сегодняшний день внутри большинства наших компьютеров? Естественно, шина PCI. Другой вопрос, почему именно эта шина. Попробуем разобраться.
Итак, разработка шины PCI началась весной 1991 года как внутренний проект корпорации Intel (Release 0.1). Специалисты компании поставили перед собой цель разработать недорогое решение, которое бы позволило полностью реализовать возможности нового поколения процессоров 486/Pentium/P6 (вот уже половина ответа). Особенно подчеркивалось, что разработка проводилась "с нуля", а не была попыткой установки новых "заплат" на существующие решения. В результате шина PCI появилась в июне 1992 года (R1.0). Разработчики Intel отказались от использования шины процессора и ввели еще одну "антресольную" (mezzanine) шину.
Благодаря такому решению шина получилась, во-первых, процессоро-независимой (в отличие от VLbus), а во-вторых, могла работать параллельно с шиной процессора, не обращаясь к ней за запросами. Например, процессор работает себе с кэшем или системной памятью, а в это время по сети на винчестер пишется информация. Просто здорово! На самом деле идиллии, конечно, не получается, но загрузка шины процессора снижается здорово. Кроме того, стандарт шины был объявлен открытым и передан PCI Special Interest Group, которая продолжила работу по совершенствованию шины (в настоящее время доступен R2.1), и в этом, пожалуй, вторая половина ответа на вопрос "почему PCI?"
- Синхронный 32-х или 64-х разрядный обмен данными (правда, насколько мне известно, 64-разрядная шина в настоящее время используется только в Alpha-системах и серверах на базе процессоров Intel Xeon, но, в принципе, за ней будущее). При этом для уменьшения числа контактов (и стоимости) используется мультиплексирование, то есть адрес и данные передаются по одним и тем же линиям.
- Поддержка 5V и 3.3V логики. Разъемы для 5 и 3.3V плат различаются расположением ключей
- 132 МВ/сек при 32-bit/33MHz;
- 264 MB/сек при 32-bit/66MHz;
- 264 MB/сек при 64-bit/33MHz;
- 528 МВ/сек при 64-bit/66MHz.
При разработке шины в ее архитектуру были заложены передовые технические решения, позволяющие повысить пропускную способность.
Шина поддерживает метод передачи данных, называемый "linear burst" (метод линейных пакетов). Этот метод предполагает, что пакет информации считывается (или записывается) "одним куском", то есть адрес автоматически увеличивается для следующего байта. Естественным образом при этом увеличивается скорость передачи собственно данных за счет уменьшения числа передаваемых адресов.
Шина PCI является той черепахой, на которой стоят слоны, поддерживающие "Землю" — архитектуру Microsoft/Intel Plug and Play (PnP) PC architecture. Спецификация шины PCI определяет три типа ресурсов: два обычных (диапазон памяти и диапазон ввода/вывода, как их называет компания Microsoft) и configuration space — "конфигурационное пространство".
- заголовка, независимого от устройства (device-independent header region);
- региона, определяемого типом устройства (header-type region);
- региона, определяемого пользователем (user-defined region).
В заголовке содержится информация о производителе и типе устройства — поле Class Code (сетевой адаптер, контроллер диска, мультимедиа и т.д.) и прочая служебная информация.
Следующий регион содержит регистры диапазонов памяти и ввода/вывода, которые позволяют динамически выделять устройству область системной памяти и адресного пространства. В зависимости от реализации системы конфигурация устройств производится либо BIOS (при выполнении POST — power-on self test), либо программно. Базовый регистр expansion ROM аналогично позволяет отображать ROM устройства в системную память. Поле CIS (Card Information Structure) pointer используется картами cardbus (PCMCIA R3.0). С Subsystem vendor/Subsystem ID все понятно, а последние 4 байта региона используются для определения прерывания и времени запроса/владения.
«– В этом поезде никто ничего не знает!
– А чего еще ждать от этих бездельников иностранцев?»
Агата Кристи, «Восточный Экспресс».
Итак, господа, пришло время сменить шину, в течение 10 лет бывшую общепринятым индустриальным стандартом. PCI, первая версия стандарта которой была разработана еще в 1991 году, прожила долгую и счастливую жизнь, в различных своих ипостасях являясь основой для малых и крупных серверов, промышленных компьютеров, ноутбуков и графических решений (напомним, что AGP также ведет свою родословную от PCI и является специализированным и расширенным вариантом последней). Но, прежде чем рассказывать о новинке, подобьем исторических бабок, вспомнив как происходило развитие PCI. Ибо, не однократно было замечено, что, говоря о будущих перспективах, всегда полезно найти исторические аналогии: История PCI
В 1991 году Intel предлагает базовую версию (1.0) проекта стандарта шины PCI (Peripheral Component Interconnect Соединение Периферийных Компонент). PCI призвана заменить ISA (а позже и ее не очень удачную и дорогую серверную расширенную модификацию EISA). Кроме значительно возросшей пропускной способности, новую шину характеризует возможность динамической конфигурации выделяемых присоединенным устройствам ресурсов (прерываний).
- Тактовая частота шины 33 МГц, используется синхронная передача данных;
- Пиковая пропускная способность 133 МБ в секунду;
- Параллельная шина данных шириною 32-бита;
- Адресное пространство 32-бита (4 ГБ);
- Сигнальный уровень 3,3 или 5 вольт.
- PCI 2.2 допускается 64-бит ширина шины и/или тактовая частота 66 МГц, т.е. пиковая пропускная способность до 533 МБ/сек.;
- PCI-X, 64-бит версия PCI 2.2 с увеличенной до 133 МГц частотой (пиковая пропускная полоса 1066 МБ/сек.);
- PCI-X 266 (PCI-X DDR), DDR версия PCI-X (эффективная частота 266 МГц, реальная 133 МГц с передачей по обоим фронтам тактового сигнала, пиковая пропускная полоса 2.1 ГБ/сек);
- PCI-X 533 (PCI-X QDR), QDR версия PCI-X (эффективная частота 533 МГц, пиковая пропускная полоса 4,3 ГБ/сек.);
- Mini PCI PCI с разъемом в стиле SO-DIMM, применяется преимущественно для миниатюрных сетевых, модемных и прочих карточек в ноутбуках;
- Compact PCI стандарт на форм фактор (модули вставляются с торца в шкаф с общей шиной на задней плоскости) и разъем, предназначенные в первую очередь для промышленных компьютеров и других критических применений;
- Accelerated Graphics Port (AGP) высокоскоростная версия PCI оптимизированная для графических ускорителей. Отсутствует арбитраж шины (т.е. допустимо только одно устройство, за исключением последней, 3.0 версии стандарта AGP, где устройств и слотов может быть два). Передачи в сторону ускорителя оптимизированы, есть набор специальных дополнительных возможностей специфических для графики. Впервые данная шина появилась вместе с первыми системными наборами для процессора Pentium II. Существует три базовых версии протокола AGP, дополнительная спецификация на питание (AGP Pro) и 4 скорости передачи данных от 1х (266 МБ/сек) до 8х (2ГБ/сек), в том числе допустим сигнальные уровни 1,5, 1,0 и 0,8 вольт.
Упомянем также CARDBUS 32 разрядную версию шины для PCMCIA карт, с горячим подключением и некоторыми дополнительными возможностями, тем не менее, имеющую много общего с базовой версией PCI.
- Создание специализированных модификаций (AGP);
- Создание специализированных форм факторов (Mini PCI, Compact PCI, CARDBUS);
- Увеличение разрядности;
- Увеличение тактовой частоты и применение DDR/QDR схем передачи данных.
Все это вполне логично, учитывая огромный срок жизни подобного всеобщего стандарта. Причем, пункты 1 и 2 не ставят своей целью сохранение совместимости с базовыми PCI картами, а вот пункты 3 и 4 выполняются за счет увеличения оригинального PCI разъема, и допускают установку обычных 32х разрядных PCI карт. Справедливости ради, отметим, что в ходе эволюции шины случались и сознательные потери совместимости со старыми картами, даже для базового варианта разъема PCI например, в спецификации 2.3 исчезло упоминание о поддержке 5 вольт сигнального уровня и питающего напряжения. В результате, серверные платы снабженные этой модификацией шины могут пострадать при установке в них старых, пятивольтовых карт, хотя, с точки зрения геометрии разъема, эти карты к ним подходят.
Однако, как и любая другая технология (например, архитектуры процессорных ядер), шинная технология имеет свои разумные границы масштабирования, при приближении к которым увеличение пропускной полосы дается все большей и большей ценою. Возросшая тактовая частота требует более дорогостоящей разводки и накладывает существенные ограничения на длину сигнальных линий, увеличение разрядности или использование DDR решений также влечет за собою множество проблем, которые в итоге банально выливаются в рост стоимости. И если в серверном сегменте, решения подобные PCI-X 266/533 еще будут некоторое время экономически оправданными, то в потребительских PC мы их не увидели, и не увидим. Почему? Очевидно, что в идеале пропускная способность шин должна расти синхронно с ростом производительности процессора, при этом цена реализации должна не только сохраняться прежней, но и в идеале снижаться. На данный момент это возможно только при использовании новой шинной технологии. О них мы сегодня и поговорим: Эпоха последовательных шин
- Выгодный перенос все большей части практической реализации шины на кремний, что облегчает отладку, повышает гибкость и сокращает время разработки;
- Перспектива органично использовать в будущем иные носители сигнала, например оптические;
- Экономия пространства (не бьющая по карману миниатюризация) и снижение сложности монтажа;
- Проще реализовывать горячие подключения и динамическую конфигурацию в любом смысле;
- Возможность выделять гарантированные и изохронные каналы;
- Переход от разделяемых шин с арбитражем и непредсказуемыми прерываниями, неудобными для надежных/критических систем к более предсказуемым соединениям точка-точка;
- Лучшая с точки зрения затрат и более гибкая с точки зрения топологии масштабируемость;
- Этого еще не достаточно. ;-).
В будущем же следует ожидать перехода на беспроводные шины, технологии подобные UWB (Ultra Wide Band) однако, это дело не ближайшего года и даже не пяти лет.
- Как уже неоднократно упоминалось новая шина последовательна, а не параллельна. Основные преимущества снижение стоимости, миниатюризация, лучшее масштабирование, более выгодные электрические и частотные параметры (нет необходимости синхронизировать все сигнальные линии);
- Спецификация разделена на целый стек протоколов, каждый уровень которого может быть усовершенствован, упрощен или заменен не сказываясь на остальных. Например может быть использован иной носитель сигнала или может быть упразднена маршрутизация в случае выделенного канала только для одного устройства. Могут быть добавлены дополнительные контрольные возможности. Развитие такой шины будет происходить гораздо менее болезненно увеличение пропускной способности не потребует изменять контрольный протокол и наоборот. Быстро и удобно разрабатывать адаптированные варианты специального назначения;
- В изначальной спецификации заложены возможности горячей замены карт;
- В изначальной спецификации заложены возможности создания виртуальных каналов, гарантирования пропускной полосы и времени отклика, сбора статистики QoS (Quality of Service Качество Обслуживания);
- В изначальной спецификации заложены возможности контроля целостности передаваемых данных (CRC);
- В изначальной спецификации заложены возможности управления питанием.
Итак, более широкие диапазоны применимости, более удобное масштабирование и адаптация, богатый набор изначально заложенных возможностей. Все так хорошо, что просто не верится. Впрочем, в отношении этой шины, даже заядлые пессимисты высказываются скорее положительно, чем отрицательно. И это не удивительно кандидат на десятилетний трон общего стандарта для большого числа различных применений (начиная с мобильных и встраиваемых и заканчивая серверами «Энтерпрайз» класса или критическими применениями) просто обязан выглядеть безупречным со всех сторон, хотя бы на бумаге :-). Как оно будет в деле мы скоро увидим сами. PCI Express как это будет выглядеть
Самый простой вариант перехода на PCI-Express для стандартных по архитектуре настольных систем выглядит так:
Однако в будущем логично ожидать появление некоего разветвителя PCI Express. Тогда вполне оправданным станет и объединение северного южного мостов. Приведем примеры возможных системных топологий. Классический PC с двумя мостами:
Более обобщенная (серверная) архитектура с одним мостом:
Производительный сетевой раутер:
Гибкость решения позволяет создавать различные топологические схемы, оптимально балансируя пропускную способность. А теперь ответим на вопрос «как это будет выглядеть» дословно. Карта:
(мысленно отломайте верхнюю и заднюю части, и вы увидите так называемый низкопрофильный вариант). А вот типичная для PC сектора системная плата с тремя х1 и одним х8 (в том числе, для графических карт) разъемами:
Те же разъемы вблизи:
Как уже упоминалось, предусмотрен и стандартизирован Mini PCI Express слот:
И новый слот для внешних заменяемых карт, на подобии CARDBUS, на который вынесена не только PCI Express но и USB 2.0:
Интересно, что предусмотрено два форм фактора карт, но отличаются они не толщиной как ранее, а шириной:
Решение очень удобное во-первых делать двухэтажный монтаж внутри карты гораздо дороже и неудобнее нежели сделать карту с платой большей площади внутри, во-вторых, карта полной ширины получит в итоге вдвое большую пропускную полосу, т.е. второй разъем не будет простаивать без дела. С электрической или протокольной точки зрения шина NewCard не несет ничего нового, все необходимые для горячей замены или энергосбережения функции уже заложены в базовой спецификации PCI Express.PCI Express переход
Для облегчения перехода предусмотрен механизм совместимости с программным обеспечением, написанным для PCI (драйверы устройств, OS). Кроме того, разъемы PCI Express в отличие от PCI расположены на другой стороне отведенной для карты расширения секции, т.е. могут сосуществовать на одном месте с PCI разъемами. Пользователю останется только выбирать какую карту он хочет вставить. В первую очередь появление PCI Express ожидается в начальных серверных (двупроцессорных) платформах Intel в первой половине 2004 года, затем в настольных платформах класса «Энтузиаст» и рабочих станциях (в том же году). Насколько быстро PCI Express будет поддержана другими производителями чипсетов не ясно, однако и NVIDIA и SIS отвечают на вопрос утвердительно, хотя и не называют конкретные сроки. Уже давно запланированы и готовятся к выходу в первой половине 2004 года графические решения (ускорители) от NVIDIA и ATI, снабженные встроенной поддержкой PCI Express х16. Множество других производителей являются активными участниками разработки и тестирования PCI Express и также намерены представить свои продукты до конца 2004 года.
Посмотрим! Есть подозрение, что ребеночек вышел удачный.
В добрый путь, PCI Express: отправление 2004, прибытие 2014.
Неудивительно, что ISA очень долго сохраняла свою популярность, и даже сейчас, за весьма большие деньги продаются материнские платы с поддержкой этой шины — по ней подключается слишком много незаменимых устройств.
На основании ISA был разработан ряд производных интерфейсов, начиная с PCMCIA и заканчивая ATA (по сути — упрощенное подмножество интерфейса ISA). Разрабатывались ускоренные варианты шины: EISA (32 бита, 8 МГц) и VESA Local Bus (использовалась для подключения видоадаптера).
Со временем, IBM утратили лидирующую роль в разработке PC, поэтому над следующим поколением интерфейсов уже работали инженеры компании Intel. В самом начале 90-х гг… был разработан новый стандарт, получивший название Peripheral Component Interconnect или PCI. В 1992 году свет увидел первый стандарт PCI, тогда же была создана PCI Special Interest Group — организация, занимающаяся разработкой и продвижением данного стандарта. Стандарт был объявлен открытым, поэтому любой желающий мог разрабатывать PCI-устройства без выплаты отчислений.
Первая версия шины поддерживала 32 и 64 бита, работала на частоте 33 мегагерца и в теории обеспечивала скорость до 133 Мб/с (на практике около 80 Мб/с).
Начав свое победное шествие с рынка серверов, новый стандарт не сразу завоевал настольные ПК. Одним из пионеров его использования была компания Apple, отказавшаяся от интерфейса NuBus в своих продуктах 95-96 годах.
Максимальная популярность к новому интерфейсу пришла в 1995 году с появлением версии 2.1 (так же названной «параллельная шина PCI»). Данная ревизия подразумевала работу с частотой 66 МГц и максимальную скорость передачи в 533 Мбайт/с (для 64-битного варианта). Появились реализации PCI для платформ с процессорами Alpha, MIPS, PowerPC, SPARC и т.д.
Кстати, одним из главных нововведений PCI стала возможность автоматического конфигурирования параметров устройства, эту технологию в Intel назвали Plug-n-Play, а благодаря «стабильной» реализации ее программной поддержки в продуктах Microsoft, эта технология стала объектом множества шуток и анекдотов.
Попыткой экстенсивного развития технологии можно считать шину PCI-X, в основном использовавшуюся в серверах. Первая версия данного стандарта работала с частотой 100 и 133 МГц, а также вводила механизм раздельных транзакций для оптимизации работы нескольких карт. Сейчас иногда используется шина PCI-X 2.0, обеспечивающая работу на частотах в 266 и 533 МГц.
В 2004 году свет увидел новый стандарт, в котором были учтены все проблемы PCI. Новая шина получила название PCI Express или просто PCIe (главное — не путать ее с PCI-X). Новая технология предложила массу интересных решений.
— для передаваемых данных осуществляется контроль целостности
— QoS обеспечивает для подключенных устройств гарантированную полосу пропускания
— есть управление питанием подключенных устройств и возможность их горячей замены
Главное же отличие состоит в том, что PCIe использует не «шинную» топологию а «звезду», то есть каждое устройство связанно с коммутатором отдельной линией.
Пропускная способность односвязной PCIe первой версии составляла 4 Гбит/с в обе стороны. Максимальная скорость в стандарте PCIe 4 версии (находится в разработке и планируется к выходу в 2015 году) достигает 1024 Гбит/с. Как видите, по этому параметру PCIe обладает хорошим запасом, хотя расслабляться не приходится, конкуренты не дремлют.
Недавно Джереми Вернер (Jeremy Werner), один из старших директоров подразделения флэш-технологий (SandForce) в LSI дал очень интересное интервью, касающееся PCIe и SSD. В полном виде вы можете ознакомиться с ним на английском, я же вкратце перескажу одну мысль, которая мне показалась особенно интересной:
Максимальная скорость современного интерфейса SATA составляет 6 Гбит/с, при этом SATA является полудуплексным, то есть не умеет одновременно передавать и принимать данные. Не так редко встречающийся PCIe 2 поколения с 4 линиями передачи данных обеспечивает скорость до 20 ГБит/с в полнодуплексном режиме. Фактически, PCIe получается где-то в 7 раз быстрее. Но традиционные жесткие диски просто не нуждаются в таких скоростях передачи данных. Только SSD сейчас могут обеспечивать скорость, достаточную для полноценного использования высокоскоростных интерфейсов.
Сочетание интерфейсов типа M.2 и высокоскоростных флэш-накопителей, похоже, приближает будущее, в котором дисковая подсистема перестанет быть самым узким местом в ПК. Ярким примером могут послужить компьютеры Apple — компания как игрок премиум сегмента может себе позволить эксперименты с новыми решениями, и они оказываются очень удачны с точки зрения производительности. Но в силу дешевизны, традиционные жесткие диски и SATA-интерфейс еще не думают сдаваться так просто, поэтому тотального наступления светлого будущего придется немного подождать.
С момента появления домашних компьютеров существует возможность расширять их функционал путём установки большего количества RAM, более ёмких накопителей, дополнительных комплектующих. Но только с появлением IBM PC привычной стала идея о полностью открытой модульной компьютерной системе. А именно, концепция карт расширения позволила пользователям компьютеров не зависеть от конфигураций систем, предлагаемых производителями. Подобные конфигурации можно было, в ограниченных пределах, расширять комплектующими, рассчитанными исключительно на эти системы. Благодаря универсальным картам расширения появились целые отрасли промышленности, они стали и причиной возникновения большого рынка любительских устройств, которые можно было подключать к компьютерам.
Такая открытость ISA означала то, что можно было достаточно легко и дёшево создавать собственные ISA-карты. То же касалось и шины PCI, которая появилась после ISA и была такой же открытой. В результате до сих пор существует полная жизни экосистема, в которой есть место и любительским звуковым картам, рассчитанным на слоты PCI или ISA, и картам расширения, позволяющим оснастить IBM PC 1981-го года поддержкой USB, и много чему ещё.
С чего начать тому, кто в наши дни хочет заняться работой с ISA- и PCI-картами?
Цена простоты
По мере того, как разработчики клонов PC использовали в своих моделях компьютеров всё более быстрые процессоры, частота шины AT, в итоге, пришла к значениям, находящимся где-то между 10 и 16 МГц. Это, понятно, привело к тому, что многие существующие AT-карты (ISA) работали в подобных системах неправильно. Через некоторое время большинство производителей оборудования сделало так, чтобы частота шины не была бы напрямую связана с частотой процессора. Но несмотря на то, что в названии шины ISA есть намёк на нечто стандартизированное, настоящего стандарта этой шины не существовало.
Правда, была попытка стандартизировать замену ISA, получившую название Extended ISA (EISA). Эта 32-битная шина, работавшая на частоте 8,33 МГц, была создана в 1988 году. Хотя на рынке домашних компьютеров она и не «взлетела», некоторым вниманием она пользовалась среди пользователей серверного оборудования, особенно — как более дешёвая альтернатива собственной шине IBM Micro Channel architecture (MCA). Компания IBM задумывала эту шину в качестве замены ISA.
В итоге же шина ISA дожила до наших дней, сохранившись, в основном, в промышленном оборудовании и во встраиваемых системах (например, в виде шины LPC), в то время как в других сферах был сначала осуществлён переход на PCI, а позже — на PCIe. А вот интерфейсы для подключения видеокарт к компьютерам шли своим путём. Речь идёт о шинах VESA Local Bus (VLB) и Accelerated Graphics Port (AGP), которые представляют собой специализированные интерфейсы, нацеленные на нужды GPU.
Начало работы с новыми старыми технологиями
При разработке устройств для ISA и PCI физический интерфейс тоже особых проблем не доставляет, так как и в том и в другом случаях используются контакты, расположенные на ребре платы. Именно такой вариант расположения контактов на платах, актуальный до наших дней, был выбран, преимущественно, из-за его дешевизны и надёжности. На плате расширения нет какого-то физического коннектора. Там, на краю, находятся лишь контактные площадки, которые позволяют подключить плату к слоту. При проектировании подобных плат, правда, надо обращать внимание на их толщину, так как от неё зависит надёжность контакта. Обычно хорошо показывает себя толщина платы в 1,6 мм.
Если кто-то хочет самостоятельно создать ISA или PCI-плату — в интернете можно найти параметры контактов для таких плат. Например — этот отличный обзор. Тут, в частности, есть сведения о расстоянии между контактными площадками, о форме платы в том месте, где находятся контакты, о размерах контактных площадок и о других параметрах плат и контактов.
При проектировании электрических цепей плат стоит знать о том, что ISA использует напряжение в 5 В, а PCI может использовать 5 В, 3,3 В, или и то и другое. В случае с PCI платы различают, используя выступы в PCI-слотах и выемки на картах (ключи). Так, если в слоте имеется один выступ, расположенный на расстоянии 56,21 мм от той его стороны, на котором находятся разъёмы подключаемой к нему карты, то это будет слот, рассчитанный на карты, поддерживающие напряжение 3,3 В. Выступ, расположенный на расстоянии 104,77 мм от края слота, указывает на слот для 5 В-карт. На краях карт есть соответствующие выемки. Если карта поддерживает и 5, и 3,3 В — то на ней будет две выемки (это — так называемые универсальные карты).
Ключи на PCI-картах и разъёмах
Существуют 32-битные и 64-битные варианты PCI. Причём, всеобщий интерес на рынке домашних компьютеров вызвал именно первый вариант шины. Если говорить о развитии PCI, то можно отметить интерфейс PCI-X. Эта шина, в 64-битном варианте, в основном, применялась в серверных системах. В PCI-X удвоена максимальная частота шины (с 66 до 133 МГц) и убрана поддержка 5 В. Поэтому PCI-X-карты часто работают при их установке в слоты PCI, рассчитанные на 3,3 В (то же самое справедливо и для PCI-карт, устанавливаемых в слоты PCI-X). 64-битная карта, и PCI, и PCI-X, может перейти в 32-битный режим в том случае, если она установлена в более короткий, 32-битный слот.
Работа с шинами
Каждое устройство, подключённое к шине, увеличивает нагрузку на неё. Кроме того, если речь идёт о шинах с общими линиями связи, важно, чтобы отдельные устройства могли бы отключаться от этих линий в то время, когда они эти линии не используют. Обычно для реализации такой схемы работы используется буферный элемент с тремя состояниями. Например — такой, как распространённый 74LS244.
Логическая схема 74LS244
74LS244 может не только обеспечивать изоляцию, что умеют и стандартные цифровые буферы. Этот элемент может переключаться в высокоимпедансное состояние (Hi-Z), что равносильно отключению устройства.
В случае с ISA-картами нам, для организации правильного взаимодействия с шиной, нужно нечто вроде 74LS244 или его двунаправленного варианта 74LS245. У каждой сигнальной линии должен быть буфер или «защёлка». Подробнее об этом можно почитать здесь. А тут описан хороший пример современной ISA-карты, называемой Snark Barker и представляющей собой клон SoundBlaster.
PCI-карты, по идее, тоже можно создавать, используя подобный подход, но обычно в коммерческих PCI-картах используют специализированные интегральные схемы для ускорения ввода-вывода, которые предоставляют компонентам карт простой интерфейс, похожий на ISA. Подобные решения в наши дни, правда, нельзя назвать дешёвыми (если только не рисковать, связываясь с чем-то вроде WCH CH365). Поэтому хорошей альтернативой подобным решениям является реализация PCI-контроллера на базе FPGA. MCA-версия вышеупомянутой карты Snark Barker использует для взаимодействия с шиной MCA CPLD. На сайтах вроде OpenCores имеются проекты, ориентированные на PCI, которые можно использовать в качестве отправной точки для собственных разработок.
Итоги
Правда, шины ISA и PCI хороши тем, что они доступны даже любителям. Скорости этих шин, если нужно отлаживать или анализировать платы, вполне укладываются в возможности любительского аппаратного обеспечения и соответствующих осциллографов. Использование достаточно медленных параллельных шин данных означает, что дифференциальные сигналы тут не применяются, а это облегчает трассировку плат.
Хотя те старые шины, о которых мы говорили, не являются игроками той же лиги, что и шина PCIe, их возможности и их широкая доступность означают, что они могут дать старым компьютерам второй шанс. Даже если речь идёт о чём-то очень простом, вроде накопителя, основанного на флэш-памяти, предназначенного для первого IBM PC.
Обмен данными с шинами ISA и PCI
После создания новенькой платы с золотыми контактами, и после того, как на ней распаяны буферные элементы или FPGA, нужно ещё и иметь возможность обмениваться данными с шиной ISA или PCI, пользуясь соответствующим протоколом. К счастью, существует множество материалов по ISA, например — этот. А вот протокол PCI, вроде протокола PCIe, это — «коммерческая тайна». В результате соответствующие данные можно официально (и небесплатно) достать лишь на сайте PCI-SIG. Правда, спецификации, всё же, «утекли» в общий доступ.
Как и в случае с любой другой общей шиной, схема взаимодействия с шиной при записи или чтении данных предусматривает запрос доступа к шине у «хозяина шины» или, в случае с шиной PCI с несколькими «хозяевами», использование процедуры арбитража. К карте расширения, кроме того, можно обращаться напрямую (вот материал об этом, в котором речь идёт об ISA). В Linux это подразумевает использование программ ядра ( sys/io.h ). Сначала получают соответствующие разрешения, а потом уже можно отправлять данные в конкретный IO-порт, соответствующий карте. В целом это выглядит так:
В случае с ISA адрес IO-порта задаётся в самой плате, а для распознавания адреса используется декодер, находящийся на линиях адресного сигнала. Часто на платах для выбора адреса, а так же — линий IRQ и DMA использовались переключатели или перемычки. Технология ISA PnP была призвана улучшить этот процесс, но по факту принесла больше вреда, чем пользы. В случае с PCI технология PnP является частью стандарта. Шина PCI осуществляет поиск устройств при загрузке, а встроенная ROM (BIOS) запрашивает у карт сведения об их нуждах, после чего адреса и другие параметры задаются автоматически.
Читайте также: