Формат пакетов шины PCI-Express

 

 

Frame — начальный и конечный фрейм пакета - его добавляет физический уровень для определения начала и окончания передачи пакета данных;
Packet # — номер пакета, добавляется на сетевом уровне чтобы пакеты можно было отличить друг от друга;
Header — заголовок пакета, описывает тип пакета, получателя, приоритет и другие свойства, это информация транспортного уровня;
Data — собственно данные пакеты;
CRC — контрольная сумма пакета.

 

Fmt — указание типа заголовка (12 или 16 байт) и признак наличия в пакете данных;
Type — тип пакета (один из четырех основных типов - Memory, I/O, Config, Message и бит, определяющий запрос это или ответ на запрос);
RequestorID — получатель пакета (шина, устройство, функция устройства);
Reserved — зарезервированное поле;
Traffic Class — используется для маршрутизации;
Address/Routing — адрес в памяти, куда предназначается пакет (32- или 64-разрядный) или иная информация о маршрутизации пакета;
Length — объем передаваемых в пакете данных;
Attr — вспомогательные атрибуты пакета (Snoop, Ordering);
Tag — идентификатор транзакции (Transaction Tag);
Reserved — зарезервированное поле;
Byte Enables — вспомогательная информация.

 

В самом низу этой пирамиды (рис. 2) размещается собственно физическая реализация шины передачи данных — это две независимые дифференциальные пары проводников с импедансом 50 Ом (первая пара работает на прием данных, вторая - на передачу), данные по которым передаются с использованием избыточного кодирования по схеме «8/10» с исправлением ошибок. Если говорить более простым языком, то каждый байт (8 бит) данных, по определенной схеме кодируется 10 битами передаваемых данных (10 бит для передачи этой информации многовато, поэтому его и называют избыточным). Избыточное кодирование позволяет исправлять многие простые ошибки, неизбежные на столь высоких частотах, без привлечения протоколов вышележащих уровней и без лишних повторных передач пакетов. Кроме того, это нужно для того, чтобы уменьшить долю «постоянных» составляющих в сигнале (не более 4 нулей или единиц подряд, см. рис. 4) — обеспечить баланс дифференциальной пары по постоянному току и позволить приемнику уверенно синхронизироваться по фронтам поступающего сигнала, поскольку никакого дополнительного («внешнего») синхронизирующего сигнала от тактового генератора в PCI Express не используется.

 

 

 

                            

 

                                   Рис. 4. Иллюстрация принципа кодирования 8b/10b.

 

В качестве рабочих напряжений выбраны уровни от 0,2 до 0,4 вольт для логического нуля и от 0,4 до 0,8 вольт для логической единицы (рис. 5). Столь низкие напряжения выбраны из расчета удобства проектирования устройств для шины PCI-Express на современных 180-, 130- и 90-нм чипах, а также с целью снижения электромагнитных наводок и потребляемой мощности.

 

Как и в любой сети, передаваемые данные дополнительно нарезаются небольшими кусочками - фреймами. При тактовая частоте шины 2,5 ГГц без учета кодирования мы получим скорость передачи в 2,5 Гбит/с в каждом направлении. С учетом выбранной схемы «8/10» получается 250 Мбайт/с, однако многоуровневая сетевая иерархия не может не сказаться на скорости работы и реальная производительность шины оказывается значительно ниже — всего лишь чуть более 200 Мбайт/с в каждую сторону (в пике до 220–230 согласно документации Intel). Впрочем, даже это на 50% больше, чем теоретическая пропускная способность шины PCI. Но это далеко не предел: пожалуй, единственная интересная особенность PCI Express — возможность объединения в одну шину нескольких независимых линий передачи данных. Стандартом предусмотрено использование 1, 2, 4, 8, 16 и 32 линий — передаваемые данные поровну распределяются по ним по схеме «первый байт на первую линию, второй — на вторую, …, n-й байт на n-ю линию, n+1-й снова на первую, n+2 снова на вторую» и так далее (см. рис. 6).

 

 

                       

                                   Рис. 5. Схема и электрика шины PCI Express x1.

 

 

 

                   Рис. 6. Асинхронная передача данных по нескольким линиям шины PCI Express.

 

Это не параллельная передача данных и даже не увеличение разрядности шины (поскольку все передающиеся по линиям данные передаются абсолютно независимо и асинхронно) — это именно объединение нескольких независимых линий. Причем, передача по нескольким линиям никак не влияет на работу остальных слоев «пирамиды» и реализуется сугубо на «нижнем», физическом уровне (рис. 2). Именно этим достигается великолепная масштабируемость шины PCI Express — она позволяет организовывать шины с максимальной пропускной способностью до 32x200=6,4 Гбайт/с — как раз под стать пропускной способности лучших параллельных шин сегодняшнего дня (см. также таблицу 1).

 

Таблица 1. Число контактов в разъемах и полоса пропускания шин PCI, PCI-X, AGP и PCI Express

Тип слота

Число контактов в разъеме

Полоса пропускания, Мбайт/с

Теоретическая Эффективная
PCI (32 бит 33 МГц) 120 133 ~110
PCI-X (64 бит 133 МГц) 184 1064 ~900
PCI Express x1 36 250* ~220*
PCI Express x4 64 1000* ~800*
PCI Express x8 98 2000* ~1600*
PCI Express x16 164 4000* ~3200*
PCI Express x32 294 8000* ~6400*
AGP 8x 124 2133 ~2000

* — в каждом направлении независимо.

 

PCI Express относится к шинам класса «точка-точка», то есть одна шина может соединять только два устройства (в отличие от PCI, где на общую шину «вешались» все PCI-слоты компьютера), поэтому для организации подключения более чем одного устройства в топологию организуемой PCI Express, как и в Ethernet-решениях на базе витой пары или устройствах USB, придется вставлять «хабы» и «свитчи», распределяющие поступающий сигнал по нескольким шинам. Это тоже одно из главных отличий PCI Express от прежних параллельных шин.

 

Впрочем, на схеме рис. 2 физический уровень не зря «троится» — на самом деле в качестве «физического носителя» PCI Express может выступать что угодно, хоть тот же Gigabit Ethernet! Во-первых, это позволит по мере развития электроники легко нарастить тактовую частоту шины (ее обещают поднять вчетверо и довести до 10 ГГц, что уже вплотную приближается к теоретическому пределу передачи сигнала по медным соединениям, оцениваемому в 15–20 ГГц, см. www.terralab.ru/system/20465) без малейшего ущерба для совместимости с приложениями и драйверами. А во-вторых, это позволит реализовывать весьма необычные по меркам сегодняшнего дня решения. Как вам нравится идея разделить системный блок на две части? Северный мост, процессор, память, видеокарта и, возможно, HDD c прочими «системными» компонентами останутся в первой половине, которую можно будет задвинуть куда-нибудь подальше и никогда ее не трогать. А южный мост и всю периферию — оптические приводы, дисководы и картоводы, звуковую карту, USB 2.0, FireWire и все соответствующие выходы можно поместить в компактный и красивый второй корпус, который может служить подставкой для монитора, или стильной коробочкой на столе. Все преимущества «баребонов» и никаких проблем с апгрейдом и перегревом компонент компьютера (можно будет, наконец, реализовать заветную мечту оверклокеров: поместить системный блок целиком в холодильник, но так, чтобы работа с ним при этом не затруднялась). Соединяться «половинки» компьютера будут как раз по единственной шине PCI Express, хотя физический носитель в этом случае, конечно, будет совсем другой — например, оптический. Фантастика, да и только!

 

Появились в стандарте PCI Express (по сравнению с PCI) и другие возможности. Например, поддержка виртуальных каналов, QoS и изохронная передача данных. Подробнее об этом читайте во врезке.

 
















Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: