Порт AGP (Accelerated Graphic Port — порт ускоренной графики) был введен для подключения графических адаптеров с 3D-акселераторами. Такой адаптер содержит: акселератор — специализированный графический процессор; локальную память, используемую и как видеопамять, и как локальное ОЗУ графического процессора; управляющие и конфигурационные регистры, доступные как локальному, так и центральному процессорам. Акселератор может обращаться и к локальной памяти, и к системному ОЗУ, в котором для него могут храниться наборы данных, не умещающиеся в локальной памяти (как правило, текстуры большого объема). Основная идея порта AGP заключается в предоставлении акселератору максимально быстрого доступа к системной памяти (локальная ему и так близка), более приоритетного, чем доступ к ОЗУ со стороны других устройств.
Порт AGP представляет собой 32-разрядный параллельный синхронный интерфейс с тактовой частотой 66 МГц; большая часть сигналов позаимствована с шины PCI. Однако, в отличие от PCI, интерфейс порта AGP двухточечный, соединяющий графический акселератор с памятью и системной шиной процессора каналами данных чипсета системной платы, не пересекаясь с «узким местом» — шиной PCI. Обмен через порт может происходить как по протоколу PCI, так и по протоколу AGP. Отличительные особенности порта AGP:
♦ конвейеризация обращений к памяти;
♦ умноженная относительно тактовой частоты порта частота передачи данных (2х/4х/8х);
♦ «внеполосная» подача команд (SBA), обеспеченная демультиплексировани ем шин адреса и данных.
Идею конвейеризации обращений к памяти иллюстрирует рис. 14.3, где сравниваются обращения к памяти по шине PCI и через порт AGP. В PCI во время реакции памяти на запрос шина простаивает (но не свободна). Конвейерный доступ AGP позволяет в это время передавать следующие запросы, а потом получать поток ответов.
Умножение частоты передачи данных обеспечивает при частоте 66 МГц пиковую пропускную способность до 533 Мбайт/с в режиме 2х, до 1066 при 4х и до 2132 Мбайт/с при 8х. Выше 66 МГц тактовую частоту официально не поднимают.
Демультиплексирование (разделение) шины адреса и данных реализовано несколько необычно. С целью экономии числа интерфейсных линий шину адреса и команды в демультиплексированном режиме AGP представляют всего 8 линий SB A (SideBand Address), по которым команда, адрес и значение длины передачи передаются последовательно за несколько тактов. Поддержка демультиплексированной адресации не являлась обязательной для устройства AGP 1.0, поскольку имеется альтернативный способ передачи адреса по шине AD. В версии AGP 2.0 она стала обязательной, а в 3.0 — это уже единственный способ передачи адреса.
Отметим, что порт AGP обеспечивает только потенциальные преимущества, которые могут быть реализованы лишь при поддержке аппаратными средствами графического адаптера и специального ПО. Графический адаптер с интерфейсом AGP может реально вести себя по-разному:
♦ не задействовать конвейеризацию, а использовать только быструю запись PCI (Fast Write);
♦ не работать с текстурами, расположенными в системной памяти, но обеспе чивать более быстрый обмен данными между памятью и локальным буфе ром;
♦ использовать все возможности порта, когда акселератор получает быстрый доступ к системной памяти, а центральный процессор может быстро закачи вать данные в локальную память адаптера.
Порт AGP содержит практически полный набор сигналов шины PCI и дополнительные сигналы AGP. Устройство, подключаемое к порту AGP, может предназначаться как исключительно для операций AGP, так и для комбинированных операций AGP и PCI. Акселератор адаптера является мастером (ведущим устройством) порта AGP, свои запросы он может выполнять как в режиме AGP, так и в режиме PCI. В режиме AGP обмены выполняются с поддержкой (или без поддержки) таких свойств, как внеполосная адресация (SBA) и скорости 2х/4х/8х. Для транзакций в режиме AGP ему доступно только системное ОЗУ (но не локальная память устройств PCI). Кроме того, адаптер является целевым устройством PCI, для которого, помимо обычных команд PCI, может поддерживаться (или не поддерживаться) быстрая запись (Fast write) со скоростью 2х/4х/8х стороны процессора. В качестве целевого устройства адаптер выступает при обращениях ЦП к его локальной памяти, регистрам ввода-вывода и конфигурационного пространства.
Порт AGP позволяет акселератору работать в двух режимах — DMA и DIME (Direct Memory Execute). В режиме DMA акселератор при вычислениях рассматривает локальную память как первичную, а когда ее недостаточно, подкачивает в нее данные из основной памяти. В режиме DIME, он же режим исполнения (executive mode), локальная и основная память для акселератора логически равнозначны и располагаются в едином адресном пространстве. В режиме DMA для трафика порта характерны длительные блочные передачи, в режиме DIME трафик порта насыщен короткими произвольными запросами.
Спецификации AGP разрабатывались фирмой Intel на базе шины PCI 2.1 с частотой 66 МГц; пока имеется три основные версии спецификаций:
♦ AGP 1.0 (1996 г.) — определен порт с конвейерным обращением к памяти и двумя альтернативными способами подачи команд: внеполосной (по шине SBA) и внутриполосной (по сигналу Р1РЕ#). Режимы передачи — 1х/2х, пита ние интерфейса — 3,3 В.
♦ AGP 2.0 (1998 г.) — добавлена возможность быстрой записи в режиме PCI (Fast Writes), а также режим 4х с питанием 1,5 В.
AGP 3.0 (2002 г., проект назывался AGP8X) — добавлен режим 8х с питани ем 0,8 В и динамическим инвертированием байтов, отменены скорости 1х и 2х; оставлен один способ подачи команд — внеполосный (SBA); исключе ны некоторые команды AGP; введены команды изохронного обмена; введена возможность выбора размера страниц, описанных в таблице GART; введена селективная поддержка когерентности при обращениях к разным страницам в пределах GART.
Порт AGP предназначен только для подключения интеллектуального графического адаптера (причем только одного), имеющего SD-акселератор. Системная логика порта AGP отличается сложным контроллером памяти, который выполняет глубокую буферизацию и высокопроизводительное обслуживание запросов AGP (от адаптера) и других своих клиентов — центрального процессора (одного или нескольких) и шины PCI. Единственный вариант подключения нескольких адаптеров с AGP — организация на системной плате нескольких портов AGP, что вряд ли когда-нибудь будет применяться.
AGP может реализовать всю пропускную способность 64-битной системы памяти современного компьютера. При этом возможны конкурирующие обращения к памяти со стороны как процессора, так и мостов шин PCI. Фирма Intel впервые ввела поддержку AGP в чипсеты для процессоров Р6, конкуренты используют AGP и в системных платах для процессоров с интерфейсом Pentium (сокет Super 7). В настоящее время порт AGP имеется во многих системных платах для PC-совместимых компьютеров и других платформ (даже Macintosh). Однако в перспективе его, похоже, заменит PCI Express.
Протоколы транзакций
Транзакции в режиме PCI, инициируемые акселератором, выполняются обычным для PCI способом. Заметим, что при этом на все время транзакции шина AD занята, причем транзакции чтения памяти занимают шину на большее число тактов, чем транзакции записи, — после подачи адреса неизбежны такты ожидания на время доступа к памяти. Запись на шине происходит быстрее — данные записи задатчик посылает сразу за адресом, а на время доступа к памяти они «оседают» в буфере контроллера памяти. Контроллер памяти позволяет завершить транзакцию и освободить шину до физической записи в память.
Конвейерные транзакции AGP (команды AGP) инициируются только акселератором; логикой AGP они ставятся в очередь на обслуживание и исполняются в зависимости от приоритета, порядка поступления запросов и готовности данных. Эти транзакции могут быть адресованы акселератором только к системному ОЗУ.
Обращения со стороны процессора (или задатчиков шины PCI), адресованные к устройству на AGP, отрабатываются им как ведомым устройством PCI, однако имеется возможность быстрой записи в локальную память irW(Fast Write), в которой данные передаются на скорости AGP (2х/4х/8х), и управление потоком их передач ближе к протоколу AGP, нежели к PCI. Транзакции FW инициируются процессором и предназначены для принудительного «заталкивания» данных в локальную память акселератора.
Концепцию конвейера AGP иллюстрирует рис. 14.4. Порт AGP может находиться в одном из четырех состояний:
♦ IDLE — покой;
♦ DATA — передача данных конвейеризированных транзакций;
♦ AGP — постановка в очередь команды AGP;
PCI — выполнение транзакции в режиме PCI.
Из состояния покоя IDLE порт может вывести запрос транзакции PCI (как от акселератора, так и с системной стороны) или запрос AGP (только от акселератора). В состоянии PCI транзакция PCI выполняется целиком, от подачи адреса и команды до завершения передачи данных. В состоянии AGP ведущее устройство передает только команду и адрес для транзакции (по сигналу Р1РЕ# или через шину SBA), ставящейся в очередь; несколько запросов могут следовать друг за другом. В состояние DATA порт переходит, когда у него в очереди имеется необслуженная команда, готовая к исполнению. В этом состоянии происходит передача данных для команд, стоящих в очереди. Данное состояние может прерываться вторжением запросов PCI (для выполнения целой транзакции) или AGP (для постановки в очередь новой команды), но прерывание1 возможно только на границах данных транзакций AGP. Когда порт AGP обслужит все команды, он снова переходит в состояние покоя. Все переходы происходят под управлением арбитра порта AGP, реагирующего на поступающие запросы (сигнал REQ# от акселератора и внешние обращения от процессора или других устройств PCI) и ответы контроллера памяти.
Транзакции AGP отличаются от транзакций PCI:
♦ фаза данных отделена от фазы адреса, чем и обеспечивается конвейериза ция;
♦ используется собственный набор команд;
♦ транзакции адресуются только к системной памяти;
♦ длина транзакции явно указывается в запросе;
♦ конвейерные запросы не гарантируют когерентность памяти и кэша.
Существует два способа подачи команд AGP (постановки запросов в очередь), из которых в текущей конфигурации выбирается один, причем изменение способа «на ходу» не допускается:
♦ запросы вводятся по шине AD[31:0] и С/ВЕ[3:0] с помощью сигнала Р1РЕ#, по каждому фронту CLK ведущее устройство передает очередное двойное слово запроса вместе с кодом команды;
команды подаются через внеполоспые (sideband) линии адреса SBA[7:0] («внеполосность» означает, что эти сигналы используются независимо от занятости шины AD), причем синхронизация подачи запросов зависит от режима (1х/2х/4х/8х).
При внеполосной подаче команд по шине SBA[7:0] передаются 16-битные посылки четырех типов:
♦ тип 1 — поле длины и младшие биты адреса;
♦ тип 2 — код команды и средние биты адреса;
♦ тип 3 — старшие биты адреса;
♦ тип 4 — дополнительные старшие биты адреса для 64-битной адресации.
Посылки типов 2, 3 и 4 являются «липкими» (sticky) — значения, ими определяемые, сохраняются до введения новой посылки того же типа. Постановку команды в очередь инициирует посылка типа 1, задающая длину транзакции и ее младшие адреса. Такой способ очень экономно использует такты шины для подачи команд при пересылках массивов. Каждая двухбайтная посылка передается по 8-битной шине SBA в два приема (сначала старший, потом младший байт). Синхронизация байтов зависит от режима порта:
♦ в режиме 1х каждый байт передается по фронту CLK; очередная команда (по сылкой типа 1) может вводиться за каждую пару тактов CLK, полный цикл ввода команды занимает 10 тактов;
♦ в режиме 2х для SBA используется двойная синхронизация (по фронту и спа ду SB_STB), очередная команда может вводиться в каждом такте CLK;
♦ в режиме 4х частота стробов в два раза выше, чем CLK, в каждом такте CLK мо жет вводиться пара посылок, но мастер AGP может ставить в очередь не бо лее одного запроса за такт;
♦ в режиме 8х частота стробов в 4 раза выше CLK, в каждом такте CLK умещают ся уже 4 посылки, но в очередь ставится не более одной команды за такт CLK.
В ответ на полученные команды порт AGP выполняет передачи данных, причем фаза данных AGP явно не привязана к фазе команды/адреса. Фаза данных вводится портом AGP по готовности системной памяти к запрашиваемому обмену.
Передачи данных AGP выполняются, когда шина находится в состоянии DATA. Фазы данных вводит порт AGP (системная логика), исходя из очередности ранее пришедших к нему команд от акселератора. Акселератор узнает о назначении шины AD в последующей транзакции по сигналам ST[2:0], причем узнает лишь тип и приоритет команды, результаты которой последуют в данной транзакции. Какую именно команду из очереди отрабатывает порт, акселератор определяет сам, так как именно он ставит их в очередь (ему известен порядок). Никаких тегов транзакций (как, например, в системной шине процессоров Р6 или в PCI-X) в интерфейсе AGP нет. Имеются только независимые очереди для каждого типа команд (чтение низкоприоритетное, чтение высокоприоритетное, запись низкоприоритетная, запись высокоприоритетная). Фазы исполнения команд разных очередей могут чередоваться произвольным образом; порт имеет право исполнять их в порядке, оптимальном с точки зрения производительности. Реальный порядок исполнения команд (чтения и записи памяти) тоже может меняться. Однако для каждой очереди порядок выполнения всегда совпадает с порядком подачи команд (об этом знают и акселератор, и порт). В AGP 3.0 приоритеты очередей отменили, но ввели возможность изохронных транзакций.
Арбитр системной платы в первую очередь обслуживает высокоприоритетные запросы AGP, затем запросы от центрального процессора и мастеров шины PCI и в последнюю очередь — низкоприоритетные запросы AGP.
При передаче данных AGP управляющие сигналы, заимствованные от PCI, имеют почти такое же назначение, что и в PCI. Передача данных AGP в режиме 1х очень похожа на циклы PCI, но немного упрощена процедура квитирования (поскольку это выделенный порт, и обмен выполняется только с быстрым контроллером системной памяти). В режимах 2х/4х/8х имеется специфика стро-бирования:
♦ в режиме 1х данные фиксируются получателем по положительному пе репаду каждого такта CLK, что обеспечивает пиковую скорость 66,6 х 4 в
- 266 Мбайт/с;
♦ в режиме 2х используются стробы, формируемые источником данных, при емник фиксирует данные и по спаду, и по фронту строба, частота стробов совпадает с частотой CLK, что и обеспечивает пиковую скорость 66,6 х 2 х 4 в
- 533 Мбайт/с;
♦ в режиме 4х частота стробов в два раза выше, чем CLK, что и обеспечивает пи ковую скорость 66,6 х 2 х 2 х 4 в 1066 Мбайт/с;
♦ в режиме 8х пары стробов переключаются с частотой в четыре раза выше CLK, стробы сдвинуты относительно друг друга на половину своего периода, чем и обеспечивается пиковая скорость 66,6 х4х2х4в2132 Мбайт/с.