Разработка собственных устройств PCI

При рассмотрении протокола PCI становится ясно, что разработка собственных PCI-устройств на логике малой и средней степени интеграции — занятие неблагодарное. Собственно протокол шины не так уж и сложен, но реализация требований к конфигурационным регистрам проблематична. Серийные устройства PCI, как правило, являются однокристальными — в одной микросхеме размещается и интерфейсная, и функциональная части устройства. Разработка таких микросхем весьма дорогостояща и имеет смысл лишь с перспективами массового выпуска. Для создания отладочных образцов и мелкосерийных изделий ряд фирм выпускают интерфейсные микросхемы PCI различного назначения. Со стороны PCI практически все эти микросхемы поддерживают одиночные целевые транзакции (target transactions), совершенные модели допускают и пакетные циклы. Более сложные микросхемы выполняют и функции ведущего устройства шины, организуя каналы DMA для обмена с системной памятью. Обмены по этим каналам могут инициироваться как программно со стороны хоста (host initiated DMA), так и с периферийной стороны микросхемы (target initiated DMA), в зависимости от возможностей микросхем. С периферийной стороны встречаются интерфейсы для подключения периферийных микросхем, микроконтроллеров и распространенных семейств микропроцессоров, универсальных и сигнальных. Довольно широкий выбор микросхем представлен на сайте www.plxtech.com, этой темой занимаются и иные фирмы.

Интересно решение построения интерфейса PCI на конфигурируемой логике FPGA (Field Programmable Gate Array — программируемый массив вентилей). Здесь PCI-ядро, а также функции целевого и ведущего устройств занимают 10–15 тысяч вентилей в зависимости от требуемых функций (см. www.xilink.com, www.altera.com). Микросхемы FPGA выпускаются на 20, 30 и 40 тысяч вентилей — оставшаяся часть может быть использована для реализации функциональной части устройства, буферов FIFO и т.п.

Быстро перевести разработки с шиной ISA на PCI можно с помощью микросхем-мостов PCI–ISA (см., например, www.iss-us.com).

Магистральный интерфейс AGP

В настоящее время самой быстрой универсальной шиной расширения является PCI, имеющая при тактовой частоте 66 МГц и разрядности 32 бит пиковую пропускную способность 264 Мбайт/с. Одним из главных потребителей пропускной способности шины является графический адаптер. По мере увеличения разрешения и глубины цвета требования к пропускной способности шины, связывающей дисплейный адаптер с памятью и центральным процессором компьютера, повышаются. Одно из решений состоит в уменьшении потока графических данных, передаваемых по шине. Для этого графические платы снабжают ускорителями и увеличивают объем видеопамяти, которой пользуется ускоритель при выполнении построений. В результате поток данных в основном циркулирует внутри графической карты, слабо нагружая внешнюю шину. Однако при трехмерных построениях ускорителю становится тесно в ограниченном объеме локальной памяти графического адаптера, и его поток данных снова «выплескивается» на внешнюю шину.

Фирма Intel на базе шины PCI 2.1 разработала стандарт подключения графических адаптеров — AGP (Accelerated Graphic Port — ускоренный графический порт). Первая версия стандарта вышла в 1996 году, в настоящее время действует версия 2.0 (1998 года), отличающаяся от первой в основном введением нового режима передачи 4x. В конце 2000 г. Intel опубликовала проект спецификации AGP8X, которая рассматривается как отдельная спецификация, а не просто развитие предыдущих. Ее особенности отметим в конце раздела.

Порт AGP представляет собой 32-разрядную шину с тактовой частотой 66 МГц, большая часть сигналов позаимствована из шины PCI. Однако в отличие от PCI, порт AGP представляет собой двухточечный интерфейс, соединяющий графический адаптер с памятью и системной шиной процессора напрямую логикой и каналами данных чипсета системной платы, не пересекаясь с «узким местом» — шиной PCI. Поначалу планировался переход на тактовую частоту 100 МГц, но и в спецификации AGP 2.0, и в предлагаемом варианте AGP8X фигурирует лишь одна частота — 66,6 МГц (нынешний предел и для шины PCI). «Ускоренность» порта обеспечивается следующими факторами:

♦ конвейеризацией обращений к памяти;

♦ удвоенной (2х) или учетверенной (4х) частотой передачи данных (относительно тактовой частоты порта);

♦ демультиплексированием шин адреса и данных.

Идею конвейеризации обращений к памяти иллюстрирует рис. 6.11, где сравниваются обращения к памяти PCI и AGP. В PCI во время реакции памяти на запрос шина простаивает (но не свободна). Конвейерный доступ AGP позволяет в это время передавать следующие запросы, а потом получить поток ответов.

Рис. 6.11 . Циклы обращения к памяти PCI и AGP

Удвоение и учетверение частоты передачи данных обеспечивает при частоте 66 МГц пропускную способность до 533 (2х) и 1066 Мбайт/с (4х), что для 32-битной шины несколько неожиданно. В этих режимах блоки данных передаются как по фронту, так и по спаду стробирующего сигнала (как в ATA Ultra DMA). Режимы 2х и 4х могут использоваться, лишь если их поддерживают и графический адаптер, и системная плата.

Демультиплексирование (разделение) шины адреса и данных сделано несколько необычным образом. С целью экономии числа интерфейсных линий шину адреса и команды в демультиплексированном режиме AGP представляют всего 8 линий SBA (SideBand Address), по которым команда, адрес и значение длины передачи передаются последовательно за несколько тактов. Поддержка демультиплексированной адресации не является обязательной для устройства AGP, поскольку имеется альтернативный способ подачи адреса по шине AD.

Порт AGP предназначен только для интеллектуального графического адаптера, имеющего SD-ускоритель (для краткости здесь этот адаптер будем называть просто ускорителем). Системная логика порта AGP отличается сложным контроллером памяти, который выполняет глубокую буферизацию и высокопроизводительное обслуживание запросов AGP (от адаптера) и других своих клиентов — центрального процессора (одного или нескольких) и шины PCI. AGP может реализовать всю пропускную способность 64-битной системы памяти компьютера на процессорах Pentium и выше. При этом возможны конкурирующие обращения к памяти как со стороны процессора, так и со стороны мостов шин PCI. Фирма Intel ввела поддержку AGP в чипсеты для процессоров P6, однако нет «противопоказаний» для применения AGP и с Pentium.

Отметим, что многие преимущества AGP носят потенциальный характер и могут быть реализованы лишь при поддержке аппаратных средств графического адаптера и ПО. Графический адаптер с интерфейсом AGP может реально вести себя по-разному:

♦ не задействовать конвейеризацию, а использовать только быструю запись PCI (Fast Write);

♦ не работать с текстурами, расположенными в системной памяти, но использовать более быстрый обмен данными между памятью и локальным буфером;

♦ использовать оптимальное распределение текстур между локальной и систем ной памятью, избегая конфликтов с обращениями к памяти от процессора.

Порт AGP содержит практически полный набор сигналов шины PCI и дополнительные сигналы AGP. Устройство, подключаемое к порту AGP, может предназначаться как исключительно для операций AGP, так и быть комбинацией AGP+PCI. Устройство обязательно должно выполнять функции ведущего устройства AGP (иначе порт AGP для него теряет смысл) и функции ведомого устройства PCI со всеми его атрибутами (конфигурационными регистрами и т.п.); дополнительно оно может быть и ведущим устройством PCI. Для транзакций в режиме AGP ему доступно только системное ОЗУ. В режиме PCI обращения возможны как к пространству памяти, так и к пространству ввода-вывода и конфигурационному пространству.

Транзакции в режиме PCI , инициируемые ускорителем, начинаются с подачи сигнала FRAME# и выполняются обычным для PCI способом (см. п. 6.2). Заметим, что при этом на все время транзакции шина AD занята, причем транзакции чтения памяти занимают шину на большее число тактов, чем транзакции записи, — после подачи адреса неизбежны такты ожидания на время доступа к памяти. Запись на шине происходит быстрее — данные записи задатчик посылает сразу за адресом, а на время доступа к памяти они «оседают» в буфере контроллера памяти. Контроллер памяти позволяет завершить транзакцию и освободить шину до физической записи в память. Обращения со стороны процессора (или задатчиков шины PCI) отрабатываются адаптером так же, как обычным устройством PCI.

Конвейерные транзакции AGP (команды AGP) инициируются только ускорителем; логикой AGP они ставятся в очереди на обслуживание и исполняются в зависимости от приоритета, порядка поступления запросов и готовности данных. Эти транзакции могут быть адресованы ускорителем только к системному ОЗУ. Если устройству AGP требуется обратиться к локальной памяти каких-либо устройств PCI, то оно должно выполнять эти транзакции в режиме PCI. Транзакции, адресованные к устройству AGP, отрабатываются им как ведомым устройством PCI, однако имеется возможность быстрой записи в локальную память FW (Fast Write), в которой данные передаются на скорости AGP (2х или 4х), и управление потоком их передач ближе к протоколу AGP, нежели PCI. Транзакции FW обычно инициируются процессором и предназначены для принудительного «заталкивания» данных в локальную память ускорителя.

Концепцию конвейера AGP иллюстрирует рис. 6.12. Порт AGP может находиться в одном из четырех состояний:

♦ IDLE — покой;

♦ DATA — передача данных конвейеризированных транзакций;

♦ AGP — постановка в очередь команды AGP;

♦ PCI — выполнение транзакции в режиме PCI.

Рис. 6.12 . Конвейер AGP

Из состояния покоя IDLE порт может вывести запрос транзакции PCI (как от ускорителя, так и с системной стороны) или запрос AGP (только от ускорителя). В состоянии PCI транзакция PCI выполняется целиком, от подачи адреса и команды до завершения передачи данных. В состоянии AGP ведущее устройство передает только команду и адрес для транзакции (по сигналу PIPE# или через порт SBA), ставящейся в очередь ; несколько запросов могут следовать сразу друг за другом. В состояние DATA порт переходит, когда у него в очереди имеется необслуженная команда, готовая к исполнению. В этом состоянии происходит передача данных для команд, стоящих в очереди. Это состояние может прерываться запросами PCI (для выполнения целой транзакции) ил и AGP (для постановки в очередь новой команды), но прерывание возможно только на границах данных транзакций AGP. Когда порт AGP обслужит все команды, он снова переходит в состояние покоя. Все переходы происходят под управлением арбитра порта AGP, реагирующего на поступающие запросы (REQ# от ускорителя и внешние обращения от процессора или других устройств PCI) и ответы контроллера памяти.

Транзакции AGP некоторыми моментами отличаются от транзакций PCI.

♦ Фаза данных отделена от фазы адреса, чем и обеспечивается конвейеризация.

♦ Используется собственный набор команд.

♦ Транзакции адресуются только к системной памяти, используя то же пространство физических адресов, что и PCI. Транзакции могут иметь длину, кратную 8 байтам, и начинаться только по 8-байтной границе. Транзакции чтения иного размера должны выполняться только в режиме PCI; транзакции записи могут использовать сигналы С/BE[3:0]# для маскирования лишних байтов.

♦ Длина транзакции явно указывается в запросе.

♦ Конвейерные запросы не гарантируют когерентность памяти и кэша. Для операций, требующих когерентности, должны использоваться транзакции PCI.

Возможны два способа подачи команд AGP (постановки запросов в очередь), из которых в текущей конфигурации выбирается один, причем изменение способа «на ходу» не допускается.

♦ Запросы вводятся по шине AD[31:0] и С/BE[3:0] с помощью сигнала PIPE#, по каждому фронту CLK ведущее устройство передает очередное двойное слово запроса вместе с кодом команды.

♦ Команды подаются через внеполосные (sideband) линии адреса SBA[7:0]. «Внеполосность» означает, что эти сигналы используются независимо от занятости шины AD. Синхронизация подачи запросов зависит от режима (1х, 2х или 4х).

При подаче команд по шине AD во время активности сигнала PIPE# код команды AGP (CCCC) кодируется сигналами С/BE[3:0], при этом на шине AD помещается начальный адрес (на AD[31:3]) и длина n (на AD[2:0]) запрашиваемого блока данных. Определены следующие команды:

♦ 0000 (Read) — чтение из памяти (n+1) учетверенных слов (по 8 байт) данных, начиная с указанного адреса;

♦ 0001 (HP Read) — чтение с высоким приоритетом;

♦ 0100 (Write) — запись в память;

♦ 0101 (HP Write) — запись с высоким приоритетом;

♦ 1000 (Long Read) — «длинное» чтение (n+1)×4 учетверенных слов (до 256 байт данных);

♦ 1001 (HP Long Read) — «длинное» чтение с высоким приоритетом;

♦ 1010 (Flush) — очистка, выгрузка данных всех предыдущих команд записи по адресам назначения (на порте AGP выглядит как чтение, возвращающее произвольное учетверенное слово в качестве подтверждения исполнения; адрес и длина, указанные в запросе, значения не имеют);

♦ 1100 (Fence) — установка «ограждений», позволяющих низкоприоритетному потоку записей не пропускать чтения;

♦ 1101 (Dual Address Cycle, DAC) — двухадресный цикл для 64-битной адресации: в первом такте по AD передается младшая часть адреса и длина запроса, а во втором — старшая часть адреса (по AD) и код исполняемой команды (по С/BE[3:0]).

При внеполосной подаче команд по шине SBA[7:0] передаются 16-битные посылки четырех типов. Каждая посылка передается за два приема, по фронту и спаду синхросигнала. Тип посылки кодируется старшими битами:

♦ тип 1: 0 ААА AAAA AAAA ALLL — поле длины (LLL) и младшие биты адреса (А[14:03]);

♦ тип 2: 10 СС CCRA AAAA АААА — код команды (CCCC) и средние биты адреса (А[23:15]);

♦ тип 3: 110 R AAAA АААА AAAA — старшие биты адреса (А [35:24]);

♦ тип 4: 1110 AAAA АААА AAAA — дополнительные старшие биты адреса, если требуется 64-битная адресация.

Посылка из всех единиц является пустой командой (NOP); они посылаются в покое шины SBA. Биты «R» зарезервированы. Посылки типов 2, 3 и 4 являются «липкими» (sticky) — значения, ими определяемые, сохраняются до введения новой посылки того же типа. Постановку команды в очередь инициирует посылка типа 1, задающая длину транзакции и ее младшие адреса, — код команды и остальная часть адреса должны быть определены ранее введенными посылками типов 2–4. Такой способ очень экономно использует такты шины для подачи команд при пересылках массивов. Синхронизация данных на SBA зависит от режима порта.

♦ В режиме 1х каждая часть передается по фронту CLK; начало посылки (старшая часть) определяется по получению байта, отличного от 11111111b, по последующему фронту передается младшая часть. Очередная команда может вводиться за каждую пару тактов CLK (когда код команды и старший адрес уже введены).

♦ В режиме 2х для SBA используется отдельный строб SB_STB, по его спаду передается старшая часть, а по последующему фронту — младшая. Частота этого строба (но не фаза) совпадает с CLK, так что очередная команда может вводиться в каждом такте CLK .

♦ В режиме 4х используется еще и дополнительный (инверсный) строб SB_STB#. Старшая часть фиксируется по спаду SB_STB, а младшая — по последующему спаду SB_STB#. Частота стробов в два раза выше, чем CLK, так что в каждом такте CLK может вводиться пара команд .

Конечно, полный цикл введения команд (с посылками всех четырех типов) с учетом посылки NOP оказывается больше — 10, 5 и 2,5 тактов частоты CLK для режимов 1х, 2х и 4х соответственно.

В ответ на полученные команды порт AGP выполняет передачи данных , причем фаза данных AGP явно не привязана к фазе команды/адреса. Фазы данных вводит порт AGP (системная логика), исходя из порядка ранее пришедших к нему команд от ускорителя.

Передачи данных AGP выполняются, когда шина находится в состоянии DATA . Как говорилось выше, фаза данных AGP явно не привязана к фазе команды/адреса. Фазы данных вводит порт AGP (системная логика), исходя из порядка ранее пришедших к нему команд от ускорителя. Ускоритель узнает о назначении шины AD в последующей транзакции по сигналам ST[2:0] (действительны только во время сигнала GNT#, коды 100–110 зарезервированы):

♦ 000 — ведущему устройству будут передаваться данные низкоприоритетного запроса чтения, ранее поставленного в очередь (или выполняется очистка);

♦ 001 — ведущему устройству будут передаваться данные высокоприоритетного запроса чтения;

♦ 010 — ведущее устройство должно будет предоставлять данные низкоприоритетного запроса записи;

♦ 011 — ведущее устройство должно будет предоставлять данные высокоприоритетного запроса записи;

♦ 111 — ведущему устройству разрешается поставить в очередь команду AGP (сигналом PIPE#) или начать транзакцию PCI (сигналом FRAME#).

Ускоритель узнает лишь тип и приоритет команды, результаты которой последуют в данной транзакции. Какую именно команду из очереди отрабатывает порт, ускоритель определяет сам, так как именно он ставил их в очередь (ему известен порядок). Никаких тегов транзакций (как, например, в системной шине процессоров P6) в интерфейсе AGP нет. Имеется только 4 независимых очереди для каждого типа команд (чтение низкоприоритетное, чтение высокоприоритетное, запись низкоприоритетная, запись высокоприоритетная). Фазы исполнения команд разных очередей могут чередоваться произвольным образом; порт имеет право исполнять их в порядке, оптимальном с точки зрения производительности. Реальный порядок исполнения команд (чтения и записи памяти) тоже может изменяться. Однако для каждой очереди порядок выполнения всегда совпадает с порядком подачи команд (об этом знают и ускоритель, и порт).

Запросы AGP с высоким приоритетом для арбитра системной логики являются более приоритетными, чем запросы от центрального процессора и ведущих устройств шины PCI. Запросы AGP с низким приоритетом для арбитра имеют приоритет ниже, чем от процессора, но выше, чем от остальных ведущих устройств. Хотя принятый протокол никак явно не ограничивает глубину очередей, спецификация AGP формально ее ограничивает до 256 запросов. На этапе конфигурирования устройства система PnP устанавливает реальное ограничение (в конфигурационном регистре ускорителя) в соответствии с его возможностями и возможностями системной платы. Программы, работающие с ускорителем (исполняемые и локальным, и центральным процессорами), не должны допускать превышения числа необслуженных команд в очереди (у них для этого имеется вся необходимая информация).

При передаче данных AGP управляющие сигналы, заимствованные от PCI, имеют почти такое же назначение, что и в PCI. Передача данных AGP в режиме 1х очень похожа на циклы PCI, но немного упрощена процедура квитирования (поскольку это выделенный порт и обмен выполняется только с быстрым контроллером системной памяти). В режимах 2х и 4х имеется специфика стробирования.

♦ В режиме 1х данные (4 байта на AD[31:0]) фиксируются получателем по положительному перепаду каждого такта CLK, что обеспечивает пиковую пропускную способность 66,6×4 = 266 Мбайт/с.

♦ В режиме 2х используются стробы данных AD_STB0 и AD_STB1 для линий AD[0:15] и AD[16:31] соответственно. Стробы формируются источником данных, приемник фиксирует данные и по спаду, и по фронту строба. Частота стробов совпадает с частотой CLK, что и обеспечивает пиковую пропускную способность 66,6×2×4 = 533 Мбайт/с.

♦ В режиме 4х используются еще и дополнительные (инверсные) стробы AD_STB0# и AD_STB1#. Данные фиксируются по спадам и прямых, и инверсных стробов. Частота стробов в два раза выше, чем CLK, что и обеспечивает пиковую пропускную способность 66,6×2×2×4 = 1066 Мбайт/с.

Порт AGP должен отслеживать состояние готовности буферов ускорителя к посылке или получению данных транзакций, поставленных в очередь. Сигналом RBF# (Read Buffer Full) ускоритель может информировать порт о неготовности к приему данных низкоприоритетных транзакций чтения (к приему высокоприоритетных он должен быть всегда готов). Сигналом WBF# (Write Buffer Full) он информирует о неспособности принять первую порцию данных быстрой записи (Fast Write, FW).

Конфигурирование устройств с интерфейсом AGP выполняется так же, как и обычных устройств PCI, — через обращения к регистрам конфигурационного пространства (см. п. 6.2.12). При этом AGP-устройства не требуют внешней линии IDSEL — у них внутренний сигнал разрешения доступа к конфигурационным регистрам соединен с линией AD16, так что обращение к конфигурационным регистрам AGP обеспечивается при AD16=1.

В процессе инициализации процедура POST только распределяет системные ресурсы, но операции AGP оставляет запрещенными. Работу AGP разрешает загруженная ОС, предварительно установив требуемые параметры AGP: режим обмена, поддержку быстрой записи, адресации свыше 4 Гбайт, способ подачи и допустимое число запросов. Для этого параметры устройств считываются из регистра состояния AGP, а согласованные параметры записываются в регистр команд AGP, расположенный в конфигурационном пространстве. Параметры настройки порта задаются через конфигурационные регистры чипсета системной платы (главного моста).

Регистр состояния AGP сообщает свойства порта: допустимое число запросов в очередях, поддержку внеполосной адресации, быстрой записи, адресации свыше 4 Гбайт, режимы 1х, 2х, 4х. В конфигурационном пространстве устройства AGP регистр, на который указывает CAP_PTR, содержит CAP_ID=02 (биты [7:0]) и номер версии спецификации AGP (биты [23:20] — старшая цифра, биты [19:16] — младшая).

Регистр состояния AGP (адрес CAP_PTR+4) содержит следующие поля:

♦ биты [31:24] — RQ, допустимое суммарное число запросов, находящихся в очередях: 0–1 команда, 255–256 команд;

♦ биты [23:10] — резерв (0);

♦ бит 9 — SBA, поддержка внеполосной подачи команд;

♦ биты [8:6] — резерв (0);

♦ бит 5 — 4G, поддержка адресации памяти свыше 4 Гбайт;

♦ бит 4 — FW, поддержка быстрой записи;

♦ биты 3 — резерв (0);

♦ биты [2:0] — RATE, поддерживаемые режимы обмена по AD и SBA: бит 0–1 x, бит 1 — 2х, бит 2 — 4х.

Регистр команд AGP служит для разрешения этих свойств. Регистр команд AGP (адрес CAP_PTR+8) содержит следующие поля:

♦ биты [31:24] — RQ_DEPTH, глубина очереди команд;

♦ биты [23:10] — резерв (0);

♦ бит 9 — SBA_ENABLE, установка внеполосной подачи команд;

♦ бит 8 — AGP_ENABLE, разрешение операций AGP;

♦ биты [7:6] — резерв (0);

♦ бит 5 — 4G, разрешение адресации памяти свыше 4 Гбайт (двухадресных циклов и посылок 4-го типа по SBA);

♦ бит 4 — FW_Enable, разрешение быстрой записи;

♦ биты 3 — резерв (0);

♦ биты [2:0] — DATA_RATE, установка режима обмена: бит 0 — 1х, бит 1 — 2х, бит 2 — 4х (должен быть установлен лишь один бит).

Графический адаптер с интерфейсом AGP может быть встроен в системную плату, а может располагаться и на карте расширения, установленной в слот AGP . Внешне карты с портом AGP похожи на PCI (рис. 6.13), но у них используется разъем повышенной плотности с «двухэтажным» (как у EISA) расположением ламелей. Сам разъем находится дальше от задней кромки платы, чем разъем PCI.

Рис. 6.13 . Слоты AGP: а — 3,3 В, б — 1,5 В, в — универсальные

Порт AGP может использовать два возможных номинала питания интерфейсных схем: 3,3 В и 1,5 В (уровни сигналов RST# и CLK всегда равны 3,3 В). Снижение напряжения питания буферных схем позволяет повысить достижимую частоту переключений. Для режимов 1х и 2х может использоваться любой из номиналов питания буферов, для режима 4х — только 1,5 В. Для работы в режимах 2х и 4х приемникам требуется опорное напряжение Vref. Его номинал для 3,3 В составляет 0,4×Vddq, для 1,5 В — 0,5×Vddq. Опорное напряжение для приемников генерируется на стороне передатчиков. На контакт А66 (Vrefgc) графическое устройство подает сигнал для порта, на контакт B66 (Vrefcg) порт (чипсет) подает напряжение для устройства AGP.

По уровню питания буферов карты и порты AGP могут быть трех типов: 3,3 В, 1,5 В и универсальные, причем имеются механические ключи, предотвращающие ошибочные подключения. Слот и карта 3,3 В имеют ключи на месте контактов 22–25 (перегородка в слоте, см. рис. 6.13, а, вырез на разъеме карты); слот и карта 1,5 В — на месте контактов 42–45. Универсальный слот не имеет перегородок, а универсальная карта имеет оба выреза. Универсальная системная плата узнает о номинале питания буферов установленной карты по сигналу TYPEDET# — на картах 3,3 В контакт свободен, на картах 1,5 В и универсальных — заземлен. Универсальная карта узнает о номинале питания буферов по уровню напряжения на контактах Vddq (3,3 или 1,5 В). Таким образом и обеспечивается согласование.

Назначение контактов слота AGP приведено в табл. 6.15, в позициях ключей через дробь указано назначение для карт 3,3/1,5 В. На универсальном слоте присутствуют все эти цепи, на универсальных картах все цепи, назначенные ключам, отсутствуют. Из-за двух ключей на универсальной карте теряется пара контактов для подачи питания VCC3.3, и их остается только 4, что ограничивает потребляемый ток (допустимый ток для каждого контакта — 1 А). На универсальной карте также нет дополнительного питания 3,3Vaux, используемого для питания цепей формирования сигнала РМЕ# в режиме «сна».

Таблица 6.15 . Сигналы порта AGP

Ряд В N Ряд A Ряд В N Ряд A
12V OVRCNT# Vddq Vddq
TYPEDET# 5.0V AD22 AD21
Резерв 5.0V AD20 AD19
USB- USB+ GND GND
GND GND AD18 AD17
INTA# INTB# AD16 C/BE2#
RST# CLK Vddq Vddq
GNT# REQ# FRAME# IRDY#
VCC3.3 VCC3.3 Резерв/Ключ 1,5 В 3,3Vaux/Ключ 1,5 В
ST1 ST0 GND/Ключ 1,5B GND/Ключ 1,5 В
Резерв ST2 Резерв/Ключ 1,5 В Резерв/Ключ 1,5 В
PIPE# RBF# VCC3.3/Ключ 1,5В VCC3.3/Ключ 1,5В
GND GND TRDY# DEVSEL#
Резерв Резерв STOP# Vddq3.3
SBA1 SBA0 РМЕ# PERR#
VCC3.3 VCC3.3 GND GND
SBA3 SBA2 PAR SERR#
SB_STB#¹ SB_STB AD15 C/BE1#
GND GND Vddq Vddq
SBA5 SBA4 AD13 AD14
SBA7 SBA6 AD11 AD12
Ключ 3,3 В/резерв Ключ 3,3 В/резерв GND GND
Ключ 3,3 B/GND Ключ 3,3 B/GND AD9 AD10
Ключ 3,3 В/резерв Ключ 3,3 B/3,3Vaux C/BE0# AD8
Ключ 3,3 B/VCC3.3 Ключ 3,3 B/3,3Vaux Vddq Vddq
AD30 AD31 AD_STB0#¹ AD_STB0
АD28 AD29 AD6 AD7
VCC3.3 VCC3.3 GND GND
AD26 AD27 AD4 ADS
AD24 AD25 AD2 AD3
GND GND Vddq Vddq
AD_STB1#¹ AD_STB1 ADO AD1
С/ВЕЗ# AD23 Vrefgc² Vrefcg²

1 Инверсные стробы отсутствуют на картах и слотах 3,3 В (там нет режима 4х).

2 Опорное напряжение не требуется для слотов и карт 1х.

Кроме собственно AGP, в порте AGP заложены сигналы шины USB , которую предполагается заводить в монитор (линии USB+, USB- и сигнал OVRCNT#, которым сообщается о перегрузке по току линии питания +5 В, выводимой в монитор).

Сигнал РМЕ# относится к интерфейсу управления энергопотреблением (Power Management Interface). При наличии дополнительного питания 3,3Vaux этим сигналом карта может инициировать «пробуждение».

Спецификация AGP Pro описывает более мощный коннектор, позволяющий в 4 раза повысить мощность, подводимую к графической карте. При этом сохраняется односторонняя совместимость: карты AGP могут устанавливаться в слот AGP Pro, но не наоборот. Коннектор AGP Pro имеет дополнительные контакты с обеих сторон обычного коннектора AGP (рис. 6.14) для линий GND и питания 3,3 и 12 В, назначение этих контактов приведено в табл. 6.16. Для правильной установки обычной карты со стороны задней кромки системной платы дополнительная часть слота AGP Pro закрывается съемной пластмассовой заглушкой. Карта AGP Pro может также использовать 1–2 соседних слота PCI: чисто механически (как точки опоры и место), как дополнительные коннекторы для подачи питания, как функциональные коннекторы PCI.

Рис. 6.14 . Коннектор карты AGP Pro (показан ключ питания карты 1,5 В): а — вид сверху, б — профиль ключей

Таблица 6.16 . Дополнительные контакты коннектора AGP Pro

Ряд D Контакт Ряд C
VCC3.3 VCC3.3
VCC3.3 GND
VCC3.3 VCC3.3
VCC3.3 GND
VCC3.3 GND
VCC3.3 GND
VCC3.3 GND
VCC3.3 GND
PRSNT2# Резерв
PRSNT1# Резерв
Ряд E Контакт Ряд F
Резерв Резерв
Резерв Резерв
GND VCC12
GND VCC12
GND VCC12
GND VCC12
GND VCC12
GND VCC12
GND VCC12
GND VCC12
GND VCC12
GND VCC12
GND VCC12
GND VCC12

В совокупности карта AGP Pro может потреблять до 110 Вт мощности, забирая ее по шинам питания 3,3 В (до 7,6 А) и 12 В (до 9,2 А) с основного разъема AGP, дополнительного разъема питания AGP Pro и одного-двух разъемов PCI. Карты AGP Pro большой мощности (High Power, 50-110 Вт) занимают 2 слота PCI, малой (Low Power, — 50 Вт) — 1 слот. Соответственно скобка крепления к задней панели ПК у них имеет утроенную или удвоенную ширину. Кроме того, карты имеют крепеж к передней стенке ПК. На дополнительном разъеме цепь PRSNT1# служит признаком наличия карты (контакт заземлен), a PRSNT2# — признаком потребляемой мощности (до 50 Вт — контакт свободен, до 110 Вт — заземлен).

В спецификации AGP8X предполагаются следующие основные отличия:

♦ введен новый режим передачи по шинам AD и SBA — 8х, обеспечивающий пиковую производительность 2,132 Гбайт/с;

♦ исключены команды длинного чтения и записи;

♦ исключены команды высокого приоритета (и упразднены сами понятия низ кого и высокого приоритета);

♦ исключена возможность подачи команд с помощью сигнала РIРЕ#;

♦ предпринимаются меры по обеспечению когерентности при обращениях к памяти, не лежащей в области GART;

♦ несколько изменены протоколы передачи данных, применяется динамическое инвертирование шины данных для минимизации переключений.

Дополнительно предполагается введение поддержки изохронных передач; возможность установки нескольких портов AGP; возможность поддержки разных размеров страниц, описанных в GART; обеспечение когерентности при обращениях к определенным страницам.

Интерфейс LPC

Интерфейс LPC (Low Pin Count — малое число выводов) предназначен для локального подключения устройств, ранее использовавших шину X-Bus или ISA: контроллеров НГМД, последовательных и параллельных портов, клавиатуры, аудиокодека, BIOS и т.п. Введение нового интерфейса обусловлено изживанием шины ISA с ее большим числом сигналов и неудобной асинхронностью. Интерфейс обеспечивает те же циклы обращения, что и ISA: чтение-запись памяти и ввода-вывода, DMA и прямое управление шиной (bus mastering). Устройства могут вырабатывать запросы прерываний. В отличие от ISA/X-Bus с их 24-битной шиной адреса, обеспечивающей адресацию лишь в пределах первых 16 Мбайт памяти, интерфейс LPC имеет 32-битную адресацию памяти, что обеспечивает доступ к 4 Гбайт памяти. 16-битная адресация портов обеспечивает доступ ко всему пространству 64 К портов. Интерфейс синхронизирован с шиной PCI, но устройства могут вводить произвольное число тактов ожидания. Интерфейс программно прозрачен — как и для ISA/X-Bus, не требует каких-либо драйверов. Контроллер интерфейса LPC является устройством-мостом PCI. По пропускной способности интерфейс практически эквивалентен этим шинам. В спецификации LPC 1.0 приводится расчет пропускной способности интерфейса и устройств, его использующих. При наличии буферов FIFO интерфейс наиболее выгодно использовать в режиме DMA. В этом случае главным потребителем будет LPT-порт — при скорости передачи данных 2 Мбайт/с он займет 47% полосы интерфейса. Следующим будет инфракрасный порт — 4 Мбит/с (11,4%). Остальным устройствам (контроллер НГМД, СОМ-порт, аудиокодек) требуются еще меньшие доли, в результате они занимают до 75% полосы при одновременной работе. Таким образом, перевод этих устройств с ISA/X-Bus на LPC не должен вызывать проблем производительности более острых, чем были на старых шинах.

Интерфейс имеет всего 7 обязательных сигналов:

♦ LAD[3:0] — двунаправленная мультиплексированная шина данных;

♦ LFRAME# — индикатор начала и конца цикла, управляемый хостом;

♦ LRESET# — сигнал сброса, тот же, что и RST# на шине PCI;

♦ LCLK — синхронизация (33 Мгц), тот же сигнал, что и CLK на шине PCI;

Дополнительные сигналы интерфейса LPC:

♦ LDRQ# — кодированный запрос DMA/Bus Master от периферии;

♦ SERIRQ — линия запросов прерывания (в последовательном коде), используется, если нет стандартных линий запросов IRQ в стиле ISA;

♦ CLKRUN# — сигнал, используемый для указания на остановку шины (в мобильных системах), требуется только для устройств, нуждающихся в DMA/BusMaster в системах, способных останавливать шину PCI;

♦ РМЕ# — событие системы управления потреблением (Power Management Event), может вводиться периферией, как и в PCI;

♦ LPCPD# — Power Down, указание от хоста устройствам на подготовку к выключению питания;

♦ LSMI# — запрос прерывания SMI# для повтора инструкции ввода-вывода.

Сигналы LFRAME# и LAD[3:0] синхронизированы (являются действительными) по фронту LCLK. По шине LAD[3:0] в каждом такте цикла передаются поля элементов протокола. Обобщенная временная диаграмма цикла обмена по LPC приведена на рис. 6.15. Начало каждого цикла хост отмечает сигналом LFRAME#, помещая на шину LAD[3:0] поле START. По сигналу LFRAME# все ПУ должны прекратить управление шиной LAD[3:0], а по коду поля START они должны декодировать последующие события как цикл шины. В следующем такте хост снимет сигнал LFRAME# и поместит на шину LAD[3:0] код типа цикла CYCTYPE. Сигнал LFRAME# может длиться и более одного такта, но признаком начала цикла (поля START) является последний такт перед снятием сигнала. С помощью сигнала LFRAME# хост может принудительно прервать цикл (например, по ошибке тайм-аута), выставив соответствующий код.

Рис. 6.15 . Протокол LPC

В поле START возможны следующие коды:

♦ 0000 — начало цикла обращения хоста к устройству;

♦ 0010 — предоставление доступа ведущему устройству 0;

♦ 0011 — предоставление доступа ведущему устройству 1;

♦ 1111 — принудительное завершение цикла (abort).

Остальные коды зарезервированы.

Поле CYCTYPE задает тип и направление передачи. Бит 0 задает направление (0 — чтение, 1 — запись), биты [2:1] — тип обращения (00 — порт, 01 — память, 10 — DMA, 11 — резерв), бит 3 — резерв (0).

Поле TAR (Turn-Around) служит для смены «владельца» шины LAD[3:0], оно занимает 2 такта. В первом такте прежний владелец помещает код 1111, во втором переводит буферы в третье состояние.

Поле ADDR служит для передачи адреса. В цикле памяти оно занимает 8 тактов (32 бита), в цикле ввода-вывода — 4 такта. Передача адреса на

Наши рекомендации