PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

Craft CBH 1100 который приятно носить.

AGP

AGP (Порт графического акселератора )

Общая информация

Порт AGP (Accelerated Graphic Port — порт ускоренной графики) был введен для подключения графических адаптеров с 3D-акселераторами. Такой адаптер содержит акселератор — специализированный графический процессор; локальную память, используемую как видеопамять и как локальное ОЗУ графического процессора; управляющие и конфигурационные регистры, доступные как локальному, так и центральному процессорам. Акселератор может обращаться и к локальной памяти, и к системному ОЗУ, в котором для него могут храниться наборы данных, не умещающиеся в локальной памяти (как правило, текстуры большого объема). Основная идея AGP заключается в предоставлении акселератору максимально быстрого доступа к системной памяти (локальная ему и так близка), более приоритетного, чем доступ к ОЗУ со стороны других устройств.

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

  • конвейеризация обращений к памяти;
  • умноженная (2x/4x/8x) частота передачи данных (относительно тактовой частоты порта);
  • «внеполосная» подача команд (SBA), обеспеченная демультиплексированием шин адреса и данных.

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

Умножение частоты передачи данных обеспечивает при частоте 66 МГц пиковую пропускную способность до 533 (2x), 1066 (4x) и 2132 Мбайт/с в режиме 8x. Выше 66 МГц тактовую частоту официально не поднимают.

Демультиплексирование (разделение) шины адреса и данных сделано несколько необычным образом. С целью экономии числа интерфейсных линий шину адреса и команды в демультиплексированном режиме AGP представляют всего 8 линий SBA (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 (см. главу 2). В режиме AGP обмены выполняются с поддержкой (или без поддержки) таких свойств, как внеполосная адресация (SBA) и скорость 2x/4x/8x. Для транзакций в режиме AGP ему доступно только системное ОЗУ (но не локальная память устройств PCI). Кроме того, адаптер является целевым устройством PCI, для которого, кроме обычных команд PCI, может поддерживаться (или не поддерживаться) быстрая запись (Fast write) со стороны процессора (сокоростью 2x/4x/8x).

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

Порт AGP позволяет акселератору работать в двух режимах — DMA и DIME (DIrect Memory Execute). В режиме DMA акселератор при вычислениях рассматривает локальную память как первичную, а когда ее недостаточно, подкачивает в нее данные из основной памяти. В режиме DIME (он же режим исполнения, Executive Mode) локальная память и основная память для акселератора логически равнозначны и располагаются в едином адресном пространстве. В режиме DMA для трафика порта характерны длительные блочные передачи, в режиме DIME трафик порта будет насыщен короткими произвольными запросами.

Спецификации AGP разрабатывались фирмой Intel на базе шины PCI 2.1 с частотой 66 МГц; пока имеется три основные версии спецификаций:

  • AGP 1.0 (1996 год) — определен порт с конвейерным обращением к памяти, двумя альтернативными способами подачи команд: внеполосной (по шине SBA) и внутриполосной (по сигналу PIPE#). Режимы передачи 1x/2x, питание интерфейса — 3,3 В;
  • AGP 2.0 (1998 год) — добавлена возможность быстрой записи в режиме PCI (Fast Writes), а также режим 4х с питанием 1,5 В;
  • AGP 3.0 (2002 год, проект назывался AGP8X) — добавлен режим 8x с питанием 0,8 В и динамическим инвертированием байтов, отменены скорости 1x и 2x; оставлен один способ подачи команд — внеполосный (SBA); исключены некоторые команды AGP; введены команды изохронного обмена; введена возможность выбора размера страниц, описанных в GART; введена селективная поддержка когерентности при обращениях к разным страницам в пределах GAR

Порт AGP предназначен только для подключения интеллектуального графического адаптера, имеющего 3D-акселератор, причем только одного. Системная логика порта AGP отличается сложным контроллером памяти, который выполняет глубокую буферизацию и высокопроизводительное обслуживание запросов AGP (от адаптера) и других своих клиентов — центрального процессора (одного или нескольких) и шины PCI. Единственный вариант подключения нескольких адаптеров с AGP — организация на системной плате нескольких портов AGP, что вряд ли будет применяться.

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



Протоколы транзакций

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

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

Обращения со стороны процессора (или задатчиков шины PCI), адресованные к устройству на AGP, отрабатываются им как ведомым устройством PCI, однако имеется возможность быстрой записи в локальную память — FW (Fast Write), в которой данные передаются на скорости AGP (2x/4x/8x), и управление потоком их передач ближе к протоколу AGP, нежели PCI. Транзакции FW инициируются процессором и предназначены для принудительного «заталкивания» данных в локальную память акселератора.

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

  • IDLE — покой;
  • DATA — передача данных конвейеризированных транзакций;
  • AGP — постановка в очередь команды AGP;
  • PCI — выполнение транзакции в режиме PCI.

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

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

  • фаза данных отделена от фазы адреса, чем и обеспечивается конвейеризация;
  • используется собственный набор команд;
  • транзакции адресуются только к системной памяти, используя пространство физических адресов (как и в PCI). Транзакции могут иметь длину, кратную 8 байтам, и начинаться только по 8-байтной границе. Транзакции чтения иного размера должны выполняться только в режиме PCI; транзакции записи могут использовать сигналы C/BE[3:0]# для маскирования лишних байтов;
  • длина транзакции явно указывается в запросе;
  • конвейерные запросы не гарантируют когерентности памяти и кэша. Для операций, требующих когерентности, должны использоваться транзакции PCI. В AGP 3.0 возможно указать области памяти, для которых когерентность обеспечивается и для конвейерных транзакций.

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

  • запросы вводятся по шине AD[31:0] и C/BE[3:0] с помощью сигнала PIPE#, по каждому фронту CLK ведущее устройство передает очередное двойное слово запроса вместе с кодом команды;
  • команды подаются через внеполосные (sideband) линии адреса SBA[7:0]. «Внеполосность» означает, что эти сигналы используются независимо от занятости шины AD. Синхронизация подачи запросов зависит от режима (1x/2x/4x/8x).

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

  • Read (0000) — чтение из памяти (n + 1) учетверенных слов (по 8 байт) данных, начиная с указанного адреса;
  • HP Read (0001) — чтение с высоким приоритетом (упразднено в AGP 3.0);
  • Write (0100) — запись в память;
  • HP Write (0101) — запись с высоким приоритетом (упразднено в AGP 3.0);
  • Long Read (1000) — «длинное» чтение (n + 1)×4 учетверенных слов (до 256 байт данных, упразднено в AGP 3.0);
  • HP Long Read (1001) — «длинное» чтение с высоким приоритетом (упразднено в AGP 3.0);
  • Flush (1010) — очистка, выгрузка данных всех предыдущих команд записи по адресам назначения (на порте AGP выглядит как чтение, возвращающее произвольное учетверенное слово в качестве подтверждения исполнения; адрес и длина, указанные в запросе, значения не имеют);
  • Fence (1100) — установка «ограждений», позволяющих низкоприоритетному потоку записей не пропускать чтения;
  • Dual Address Cycle, DAC (1101) — двухадресный цикл для 64-битной адресации: в первом такте по AD передаются младшая часть адреса и длина запроса, а во втором — старшая часть адреса (по AD) и код исполняемой команды (по C/BE[3:0]).

Для изохронных передач в AGP 3.0 выделены специальные команды.

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

  • тип 1: 0AAA AAAA AAAA ALLL — поле длины (LLL) и младшие биты адреса (A[14:03]);
  • тип 2: 10CC CCRA AAAA AAAA — код команды (CCCC) и средние биты адреса (A[23:15]);
  • тип 3: 110R AAAA AAAA AAAA — старшие биты адреса (A[35:24]);
  • тип 4: 1110 AAAA AAAA AAAA — дополнительные старшие биты адреса, если требуется 64-битная адресация.

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

  • в режиме 1x каждый байт передается по фронту CLK; начало посылки (старший байт) определяется по получению байта, отличного от 11111111b, по последующему фронту передается младший байт. Очередная команда (посылкой типа 1) может вводиться за каждую пару тактов CLK (при условии, что код команды и старший адрес уже введены предыдущими посылками). Полный цикл ввода команды занимает 10 тактов;
  • в режиме 2x для SBA используется отдельный строб SB_STB, по его спаду передается старший байт, а по последующему фронту — младший. Частота этого строба (но не фаза) совпадает с CLK, так что очередная команда может вводиться в каждом такте CLK;
  • в режиме 4x используется еще и дополнительный (инверсный) строб SB_STB#. Старший байт фиксируется по спаду SB_STB, а младший — по последующему спаду SB_STB#. Частота стробов в два раза выше, чем CLK, так что в каждом такте CLK может вводиться пара посылок. Однако мастер AGP может вводить в каждом такте не более одной посылки типа 1, то есть ставить в очередь не более одного запроса;
  • В режиме 8x стробы называются иначе (SB_STBF и SB_STBS), их частота в четыре раза выше CLK, так что в каждом такте CLK умещаются уже 4 посылки. Однако темп постановки команд в очередь все равно ограничен одной командой за такт CLK.

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

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

  • 000 — устройству будут передаваться данные низкоприоритетного запроса чтения (в AGP 3.0 — просто асинхронного чтения), ранее поставленного в очередь, или выполняется очистка;
  • 001 — устройству будут передаваться данные высокоприоритетного запроса чтения (резерв в AGP 3.0);
  • 010 — устройство должно будет предоставлять данные низкоприоритетного запроса записи (в AGP 3.0 — просто асинхронной записи);
  • 011 — устройство должно будет предоставлять данные высокоприоритетного запроса записи (резерв в AGP 3.0);
  • 111 — устройству разрешается поставить в очередь команду AGP (сигналом PIPE#) или начать транзакцию PCI (сигналом FRAME#);
  • 110 — цикл калибровки приемопередатчиков (в AGP 3.0 для скорости 8x).

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

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

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

  • в режиме 1x данные (4 байта на AD[31:0]) фиксируются получателем по положительному перепаду каждого такта CLK, что обеспечивает пиковую скорость 66,6×4 = 266 Мбайт/с;
  • в режиме 2x используются стробы данных AD_STB0 и AD_STB1 для линий AD[0:15] и AD[16:31] соответственно. Стробы формируются источником данных, приемник фиксирует данные и по спаду, и по фронту строба. Частота стробов совпадает с частотой CLK, что и обеспечивает пиковую скорость 66,6×2×4 = 533 Мбайт/с;
  • в режиме 4x используются еще и дополнительные (инверсные) стробы AD_STB0# и AD_STB1#. Данные фиксируются по спадам и прямых и инверсных стробов (пары стробов могут использоваться и как два отдельных сигнала, и как один дифференциальный). Частота стробов в два раза выше, чем CLK, что и обеспечивает пиковую скорость 66,6×2×2×4 = 1066 Мбайт/с;
  • в режиме 8x пары стробов получили новые названия AD_STBF[1:0] (First — первый) и AD_STBS[1:0] (Second — второй), четные порции данных защелкиваются по положительному перепаду первого, нечетные — по перепаду второго. Частота переключения каждого из этих стробов в четыре раза выше CLK, стробы сдвинуты относительно друг друга на половину своего периода, чем и обеспечивается восьмикратная частота стробирования информации на линиях AD. Отсюда пиковая скорость 66,6×4×2×4 = 2132 Мбайт/с.

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



Изохронные транзакции в AGP 3.0

Для поддержки изохронных транзакций в AGP 3.0 введены новые коды команд и состояний, а также конфигурационные регистры, управляющие изохронным соединением. Изохронные транзакции может выполнять мастер AGP только через область апертуры AGP, причем с областью памяти, для которой не обеспечивается когерентность (чтобы избежать непрогнозируемых задержек, связанных с выгрузками «грязных» строк). Изохронные транзакции возможны только на скорости 8x. Соглашение на изохронный обмен описывается набором параметров:

  • N — число транзакций чтения или записи за период времени T;
  • V — размер блока данных в изохронной транзакции;
  • L — максимальная задержка (латентность) доставки данных от подачи команды (в периодах T).

При этом пропускная способность BW = N×Y/T, интервал T принят 1 мкс. Размер блока V может принимать значение 32, 64, 128 или 256 байт; для транзакций чтения, длина которых может принимать те же значения, изохронный блок передается за одну транзакцию. Длина транзакций записи может быть 32 или 64 байт, так что один блок будет передаваться за 1, 2 или 4 транзакции. В зависимости от мощности подсистемы памяти порт AGP может выдерживать изохронный трафик, достаточный для различных применений:

  • видеозахват (в настольных ПК): 128 Мбайт/с, N = 2, L = 2, Y = 64;
  • видеоредактирование: 320 Мбайт/с, N = 5, L = 2, Y = 64;
  • поток 1 канала HDTV: 384 Мбайт/с, N = 3, L = 10, Y = 128;
  • поток 2 каналов HDTV (в мощных рабочих станциях): 640 Мбайт/с, N = 5, L = 10, Y = 128.

Новые команды AGP для изохронных транзакций включают:

  • ISOCH Read (0011) — изохронное чтение, в поле LLL — код длины: 000 — 32 байт, 001 — 64, 010 — 128, 011 — 256 байт;
  • ISOCH Write/Unfenced (0110) — изохронная запись с беспорядочным завершением, в поле LLL — код длины: 000 — 32 байта, 001 — 64 байт;
  • ISOCH Write/Fenced (0111) — изохронная запись с упорядочным завершением, в поле LLL — код длины: 000 — 32 байта, 001 — 64 байт;
  • ISOCH Align (1110) — чтение временного сдвига относительно изохронного периода.

Новые коды состояния порта AGP включают:

  • 100 — чтение изохронных данных;
  • 101 — запись изохронных данных.


Трансляция адресов — GART и апертура AGP

Порт AGP обеспечивает трансляцию логических адресов, фигурирующих в запросах акселератора к системной памяти, в физические адреса, согласуя видение ОЗУ программой, выполняемой акселератором, и программой, выполняемой на центральном процессоре. Трансляция осуществляется в постраничном базисе (по умолчанию размер страницы — 4 Кбайт), принятом в системе виртуальной памяти с подкачкой страниц по запросу, используемой в процессорах x86 (и других современных процессорах). Трансляции подлежат обращения, попадающие в апертуру AGP, — область физических адресов памяти, лежащую выше границы ОЗУ и, как правило, примыкающую к области локальной памяти адаптера (см. рисунок ниже). Таким образом, при работе в режиме DIME акселератору доступна непрерывная область памяти, часть которой составляет локальная память адаптера. Остальная часть адресуемой им памяти отображается на системное ОЗУ через апертуру с помощью таблицы GART (Graphics Address Remapping Table — таблица переопределения графических адресов). Каждый элемент этой таблицы описывает свою страницу в области апертуры. В каждом элементе GART есть признак его действительности; в действительных элементах указывается адрес страницы физической памяти, на которую отображается соответствующая область апертуры. Таблица GART физически находится в системном ОЗУ, она выровнена по границе 4-килобайтовой страницы, на ее начало указывают конфигурационные регистры порта AGP.

Размер апертуры AGP (определяющий и размер таблицы GART) задается программированием регистров чипсета. Путем настройки параметров CMOS Setup или внешних утилит его можно задать размером 8, 16, 32...256 и более Мбайт. Оптимальное значение апертуры зависит от объема памяти и используемых программ, но можно ориентироваться на половину объема системного ОЗУ. Заметим, что назначение размера апертуры в большинстве случаев еще не означает отчуждения указанного объема ОЗУ от системного ОЗУ — это лишь предельный размер памяти, которую ОС будет выделять акселератору по его запросам. Пока акселератору хватает своей локальной памяти, он не запрашивает память в системном ОЗУ. Только при нехватке локальной памяти он будет динамически запрашивать дополнительную, и эти запросы будут удовлетворяться в пределах установленной апертуры. По мере уменьшения потребности в дополнительной памяти она будет динамически высвобождаться для обычных нужд операционной системы. Правда, если у графического акселератора локальной памяти нет вообще (в дешевых интегрированных адаптерах), то от ОЗУ статически (на все время работы) отчуждается часть памяти (хотя бы под экранный буфер). Это видно по уменьшенному размеру памяти, который POST показывает в начале процесса загрузки.

Логика порта обеспечивает когерентность всех кэш-памятей системы для обращений мастера AGP вне диапазона адресов апертуры. В AGP 3.0 введена возможность выборочного обеспечения когерентности для обращений внутри апертуры. В предыдущих версиях предполагалось, что область памяти внутри апертуры должна быть просто некэшируемой. Поскольку эту память предполагалось использовать для хранения текстур (они достаточно статичны), такое упрощение вполне приемлемо.



Конфигурационные регистры AGP

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

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

В конфигурировании системы с AGP фигурируют две функции со своими конфигурационными пространствами:

  • собственно порт AGP (Core Logic), являющийся целевым устройством в транзакциях AGP;
  • графический адаптер, являющийся инициатором транзакций AGP.

Их специфические конфигурационные регистры (см. рисунок) частично совпадают по назначению; серым цветом на рисунке помечены регистры, актуальные лишь для порта; звездочкой отмечены необязательные регистры.

Регистр APBASELO (только в порте) задает местоположение апертуры AGP:

Регистр APBASELO (только в порте) задает местоположение апертуры AGP:

  • биты [31:22] задают адрес;
  • биты [21:4] всегда нулевые (размер апертуры не может быть меньше 4 Мбайт);
  • бит 3 = 1 — признак возможности предвыборки;
  • биты [2:1] задают разрядность адреса: 00 — 32 бита, 10 — 64 бита (используется и APBASEHI).

Положение остальных регистров определяется значением CAP_PTR, который указывает адрес регистра NCAPID.

Регистр NCAPID (в порте и адаптере) содержит номер версии спецификации AGP:

  • биты [31:24] — резерв;
  • биты [23:20] — старшая цифра версии;
  • биты [19:16] — младшая цифра;
  • биты [15:8] — NEXT_PTR, указатель на следующий блок свойств (или ноль);
  • биты [7:0] — CAP_ID = 02, идентификатор AGP;

Регистр состояния AGP — AGPSTAT (в порте и адаптере) сообщает основные возможности AGP: допустимое число запросов в очередях, поддержку внеполосной адресации, быстрой записи, адресации свыше 4 Гбайт, режимы 1x, 2x, 4x, 8x:

  • биты [31:24] — RQ (только для порта), допустимое суммарное число запросов, находящихся в очередях: 0 — 1 команда, 255 — 256 команд;
  • биты [23:18] — резерв (0);
  • бит 17 — ISOCH SUPPORT — поддержка изохронных обменов (AGP 3.0);
  • бит 16 — резерв;
  • биты [15:13] — ARQSZ (только для порта), указание оптимального размера (Opt_Rq_Size) запроса к графическому адаптеру, Opt_Rq_Size = 2^(ARQSZ + 4). Введены в AGP 3.0;
  • биты [12:10] — Cal_Cycle (только AGP 3.0), период калибровки: 000 — 4 мс, 001 — 16 мс, 010 — 64 мс, 011 — 256 мс, 111 — калибровка не требуется, остальные значения зарезервированы;
  • бит 9 — SBA, поддержка внеполосной подачи команд (в AGP 3.0 — резерв);
  • бит 8 — ITA_COH, обеспечение когерентности при обращении акселератора через апертуру (при единичном бите когерентности в соответствующем вхождении GART);
  • бит 7 — GART64B, поддержка 64-битных элементов GART;
  • бит 6 — htrans# (только AGP 3.0), трансляция запросов хоста через апертуру:
    0 — при обращениях хоста в диапазоне апертуры адрес транслируется через GART,
    1 — хост не посылает запросов в диапазоне апертуры;
  • бит 5 — Over4G, поддержка адресации памяти свыше 4 Гбайт;
  • бит 4 — FW, поддержка быстрой записи;
  • бит 3 — AGP3.0_MODE, режим работы: 0 — AGP 1.0/2.0, 1 — AGP 3.0;
  • биты [2:0] — RATE, поддерживаемые скорости обмена по AD и SBA. В режиме AGP 2.0: бит 0 — 1x, бит 1 — 2x, бит 2 — 4x. В режиме AGP 3.0: бит 0 — 4x, бит 1 — 8x.

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

  • биты [31:24] — RQ_DEPTH, задание глубины очереди команд;
  • биты [23:16] — резерв (0);
  • биты [15:13] — PARQSZ (только AGP 3.0), задание оптимального размера (Opt_Rq_Size) запроса, к которому должен стремиться мастер AGP, Opt_Rq_Size = = 2 ^ (PARQSZ + 4);
  • биты [12:10] — PCAL_Cycle (только AGP 3.0), задание периода цикла калибровки;
  • бит 9 — SBA_ENABLE, установка внеполосной подачи команд;
  • бит 8 — AGP_ENABLE, разрешение операций AGP;
  • бит 7 — GART64B, разрешение использования 64-битных элементов GART;
  • бит 6 — резерв;
  • бит 5 — 4G, разрешение адресации памяти свыше 4 Гбайт (двухадресных циклов и посылок 4-го типа по SBA);
  • бит 4 — FW_Enable, разрешение быстрой записи;
  • бит 3 — резерв (0);
  • биты [2:0] — DATA_RATE, установка режима обмена (должен быть установлен лишь один бит). В AGP 2.0: бит 0 — 1x, бит 1 — 2x, бит 2 — 4x. В AGP 3.0: бит 0 — 4x, бит 1 — 8x, бит 3 — резерв.

Регистр NISTAT (в порте и адаптере) определяет возможности изохронных передач (только в AGP 3.0):

  • биты [31:24] — резерв (0);
  • биты [23:16] — MAXBW, максимальная пропускная способность устройства (суммарная для асинхронных и изохронных передач) в единицах по 32 байта за 1 мкс;
  • биты [15:8] — ISOCH_N, максимальное число изохронных транзакций за период 1 мкс;
  • биты [7:6] — ISOCH_Y, поддерживаемые размеры изохронных передач: 00 — 32, 64, 128, 256 байт; 01 — 64, 128, 256 байт; 10 —128, 256 и более байт, 11 — 256 байт;
  • биты [5:3] — ISOCH_L, максимальная задержка изохронных передач в единицах мкс (1–5);
  • бит 2 — резерв;
  • биты [1:0] — Isoch-ErrorCode, код ошибки изохронного обмена (00 — нет ошибок): для порта 01 — переполнение очереди изохронных запросов; для карты 01 — «переопустошение» буфера чтения, 10 — переполнение буфера записи.

Регистр NICMD (в порте и адаптере) управляет изохронными передачами (только в AGP 3.0):

  • биты [15:8] — PISOCH_N, максимальное число изохронных транзакций за период 1 мкс (для карты);
  • биты [7:6] — PISOCH_Y, размер изохронных передач: 00 — 32, 64, 128, 256 байт; 01 — 64, 128, 256 байт; 10 —128, 256 и более байт, 11 — 256 байт;  биты [5:0] — резерв.

Регистр AGPCTRL (в порте) управляет собственно портом AGP:

  • биты [31:10] — резерв;
  • бит 9 — CAL_CYCLE_DIS, запрет циклов калибровки;
  • бит 8 — APERENB, разрешение работы через апертуру;
  • бит 7 — GTLBEN, разрешение работы буферов TLB, ускоряющих трансляцию адресов через GART (если они имеются в порте);
  • биты [6:0] — резерв.

Регистр APSIZE (в порте) задает размер апертуры:

  • биты [15:12] — резерв;
  • биты [11:8, 5:0] — APSIZE, 111…111 — 4 Мбайт, 111…110 — 8 Мбайт, 11110…0 — 256 Мбайт, 000…000 — 4096 Мбайт;
  • биты [7:6] = 00.

Регистр NEPG (в порте AGP 3.0) задает размер страницы, описываемой в GART, из списка поддерживаемых:

  • биты [15:12] — SEL, выбранный размер страниц (2 ^ (SEL + 12));
  • биты [11:0] — битовая карта поддержки страниц разного размера: единица в бите N означает поддержку страниц размером (2 ^ (N + 12)). Бит 6 всегда единичный — поддержка страниц размером 4 кбайт обязательна для всех портов AGP.

Регистры GARTLO[31:12] и GARTHI (в порте) задают начальный адрес таблицы GART.



Еще статьи...

  1. Слоты и карты AGP

Подкатегории

  • AGP
    Кол-во материалов:
    6