Accelerated Graphics Port ( AGP ) — это стандарт параллельной карты расширения , разработанный для подключения видеокарты к компьютерной системе для ускорения трехмерной компьютерной графики . Первоначально он был разработан как преемник соединений типа PCI для видеокарт. С 2004 года AGP постепенно заменялся PCI Express (PCIe), который является последовательным , а не параллельным; к середине 2008 года карты PCI Express доминировали на рынке, и было доступно всего несколько моделей AGP, [1] при этом производители графических процессоров и партнеры по платам расширения в конечном итоге отказались от поддержки интерфейса в пользу PCI Express.
AGP — это расширенный вариант стандарта PCI, разработанный для преодоления ограничений PCI при обслуживании требований высокопроизводительных графических карт той эпохи. [2]
Основное преимущество AGP заключается в том, что он не использует шину PCI совместно , обеспечивая выделенный, двухточечный путь между слотом(ами) расширения и чипсетом материнской платы. Прямое соединение также позволяет использовать более высокие тактовые частоты.
Второе важное изменение — использование разделенных транзакций , в которых фазы адреса и данных разделены. Карта может отправлять много фаз адреса, поэтому хост может обрабатывать их по порядку, избегая длительных задержек, вызванных простоем шины во время операций чтения.
В-третьих, упрощено квитирование шины PCI. В отличие от транзакций шины PCI, длина которых согласовывается на поцикловой основе с использованием сигналов FRAME# и STOP#, передачи AGP всегда кратны 8 байтам, а общая длина включается в запрос. Кроме того, вместо использования сигналов IRDY# и TRDY# для каждого слова, данные передаются блоками по 4 такта (32 слова на скорости AGP 8x), а паузы допускаются только между блоками.
Наконец, AGP допускает (обязательно только в AGP 3.0) адресацию боковой полосы , что означает, что шины адреса и данных разделены, поэтому фаза адреса вообще не использует основные линии адреса/данных (AD). Это делается путем добавления дополнительной 8-битной шины "SideBand Address" , по которой графический контроллер может выдавать новые запросы AGP, в то время как другие данные AGP передаются по основным 32 линиям адреса/данных (AD). Это приводит к улучшению общей пропускной способности данных AGP.
Это значительное улучшение производительности чтения памяти делает практичным для карты AGP считывание текстур непосредственно из системной оперативной памяти, в то время как графическая карта PCI должна копировать их из системной оперативной памяти в видеопамять карты . Системная память становится доступной с помощью таблицы перераспределения графических адресов (GART), которая распределяет основную память по мере необходимости для хранения текстур. [3] Максимальный объем системной памяти, доступный для AGP, определяется как апертура AGP .
Слот AGP впервые появился на системных платах, совместимых с x86, на базе процессоров Socket 7 Intel P5 Pentium и Slot 1 P6 Pentium II . Intel представила поддержку AGP с чипсетом i 440LX Slot 1 26 августа 1997 года, и за этим последовал поток продуктов от всех основных поставщиков системных плат. [4]
Первыми чипсетами Socket 7 с поддержкой AGP были VIA Apollo VP3 , SiS 5591/5592 и ALI Aladdin V. Intel никогда не выпускала чипсеты Socket 7 с поддержкой AGP. FIC продемонстрировала первую системную плату Socket 7 AGP в ноябре 1997 года как FIC PA-2012 на основе чипсета VIA Apollo VP3, за которой очень быстро последовала EPoX P55-VP3, также основанная на чипсете VIA VP3, который был первым на рынке. [5]
Ранние видеочипсеты с поддержкой AGP включали Rendition Vérité V2200, 3dfx Voodoo Banshee , Nvidia RIVA 128 , 3Dlabs PERMEDIA 2, Intel i740 , серию ATI Rage , Matrox Millennium II и S3 ViRGE GX/2 . Некоторые ранние платы AGP использовали графические процессоры, построенные на базе PCI, и были просто подключены к AGP. Это привело к тому, что карты мало выигрывали от новой шины, единственным улучшением была тактовая частота шины 66 МГц, с ее удвоенной пропускной способностью по сравнению с PCI и эксклюзивностью шины. Intel i740 был явно разработан для использования нового набора функций AGP; фактически он был разработан для текстурирования только из памяти AGP, что затрудняло реализацию версий платы PCI (локальная оперативная память платы должна была эмулировать память AGP.)
Microsoft впервые представила поддержку AGP в Windows 95 OEM Service Release 2 (OSR2 версии 1111 или 950B) через исправление USB SUPPLEMENT к OSR2 . [6] После применения исправления система Windows 95 стала Windows 95 версии 4.00.950 B. Первой операционной системой на базе Windows NT, получившей поддержку AGP, была Windows NT 4.0 с пакетом обновления 3, представленным в 1997 году. Поддержка Linux для улучшенной быстрой передачи данных AGP была впервые добавлена в 1999 году с реализацией модуля ядра AGPgart .
С ростом принятия PCIe производители видеокарт продолжали выпускать карты AGP, поскольку стандарт устарел. Поскольку графические процессоры начали проектироваться для подключения к PCIe, для создания видеокарты, совместимой с AGP, потребовался дополнительный чип-мост PCIe-to-AGP. Включение моста и необходимость в отдельной конструкции карты AGP повлекли за собой дополнительные расходы на плату.
GeForce 6600 и ATI Radeon X800 XL, выпущенные в 2004–2005 годах, были первыми мостовыми картами. [7] [8] В 2009 году карты AGP от Nvidia имели потолок серии GeForce 7. В 2011 году совместимые с DirectX 10 карты AGP от поставщиков AMD (Club 3D, HIS, Sapphire, Jaton, Visiontek, Diamond и т. д.) включали Radeon HD 2400, 3450, 3650 , 3850, 4350, 4650 и 4670. Серия HD 5000 AGP, упомянутая в программном обеспечении AMD Catalyst, никогда не была доступна. Было много проблем с драйверами исправления AMD Catalyst 11.2 - 11.6 AGP под Windows 7 с видеокартами серии HD 4000 AGP; [9] использование драйверов исправления AGP 10.12 или 11.1 является возможным обходным путем. Несколько из перечисленных выше поставщиков предоставляют предыдущие версии драйверов AGP.
К 2010 году ни один из новых наборов микросхем материнских плат не поддерживал AGP, и лишь немногие новые материнские платы имели слоты AGP, однако некоторые из них продолжали выпускаться со старыми наборами микросхем, поддерживающими AGP.
В 2016 году Windows 10 версии 1607 прекратила поддержку AGP. [10] [ ненадежный источник? ] Возможное будущее удаление поддержки AGP из драйверов ядра Linux с открытым исходным кодом рассматривалось в 2020 году. [11] [ требуется обновление ]
Intel выпустила «спецификацию AGP 1.0» в 1997 году. [13] Она определила сигналы 3,3 В и скорости 1× и 2×. [4] Спецификация 2.0 документировала сигналы 1,5 В, которые могли использоваться на скоростях 1×, 2× и дополнительной 4× [14] [15] а 3.0 добавила сигналы 0,8 В, которые могли работать на скоростях 4× и 8×. [16] (Скорости 1× и 2× физически возможны, но не были указаны.)
Доступные версии перечислены в таблице рядом.
AGP версии 3.5 публично упоминается Microsoft только в Universal Accelerated Graphics Port (UAGP) , который определяет обязательную поддержку дополнительных регистров, когда-то отмеченных как необязательные в AGP 3.0. Обновленные регистры включают PCISTS, CAPPTR, NCAPID, AGPSTAT, AGPCMD, NISTAT, NICMD. Новые требуемые регистры включают APBASELO, APBASEHI, AGPCTRL, APSIZE, NEPG, GARTLO, GARTHI.
Существуют различные физические интерфейсы (разъемы); см. раздел «Совместимость».
Официальное расширение для карт, которым требовалось больше электроэнергии, с более длинным слотом с дополнительными штырьками для этой цели. Карты AGP Pro обычно были картами класса рабочих станций, используемыми для ускорения профессиональных приложений автоматизированного проектирования, используемых в областях архитектуры, машиностроения, инжиниринга, моделирования и подобных областях. [17]
64-битный канал был когда-то предложен в качестве необязательного стандарта для AGP 3.0 в черновых документах [18] , но в окончательной версии стандарта он был исключен.
Стандарт допускает 64-битную передачу для операций чтения, записи и быстрой записи AGP8x; 32-битную передачу для операций PCI.
Производители выпустили ряд нестандартных вариаций интерфейса AGP.
Карты AGP совместимы и назад , и вперед в пределах ограничений. Карты с ключом только на 1,5 В не войдут в слоты на 3,3 В и наоборот, хотя существуют карты «Universal», которые войдут в любой тип слота. Существуют также неключевые «Universal» слоты, которые принимают любой тип карты. Когда карта AGP Universal вставлена в слот AGP Universal, используется только часть карты с напряжением 1,5 В. Некоторые карты, такие как серия GeForce 6 от Nvidia (кроме 6200) или серия Radeon X800 от ATI , имеют ключи только для 1,5 В, чтобы предотвратить их установку в старые материнские платы без поддержки 1,5 В. Некоторые из последних современных карт с поддержкой 3,3 В:
Карты AGP Pro не влезут в стандартные слоты, но стандартные карты AGP будут работать в слоте Pro. Материнские платы, оснащенные слотом Universal AGP Pro, будут принимать карту 1,5 В или 3,3 В в конфигурации AGP Pro или стандартной конфигурации AGP, карту Universal AGP или карту Universal AGP Pro.
Некоторые карты неправильно имеют двойные выемки, а некоторые материнские платы неправильно имеют полностью открытые слоты, что позволяет вставить карту в слот, который не поддерживает правильное сигнальное напряжение, что может повредить карту или материнскую плату. Некоторые неправильно спроектированные старые карты 3,3 В имеют ключ 1,5 В.
Существуют некоторые фирменные системы, несовместимые со стандартным AGP; например, компьютеры Apple Power Macintosh с Apple Display Connector (ADC) имеют дополнительный разъем, который подает питание на подключенный дисплей. Некоторые карты, разработанные для работы с определенной архитектурой ЦП (например, ПК, Apple), могут не работать с другими из-за проблем с прошивкой .
Марк Аллен из Playtools.com сделал следующие комментарии относительно практической совместимости AGP для AGP 3.0 и AGP 2.0: [22]
... никто не делает карты AGP 3.0, и никто не делает материнские платы AGP 3.0. По крайней мере, ни один из производителей, которых я смог найти. Каждая видеокарта, которая заявляла себя как карта AGP 3.0, на самом деле была универсальной картой 1,5 В AGP 3.0. И каждая материнская плата, которая заявляла себя как материнская плата AGP 3.0, оказывалась универсальной материнской платой 1,5 В AGP 3.0. Это имеет смысл, если вы подумаете об этом, потому что если бы кто-то действительно выпустил ориентированный на потребителя продукт, который поддерживал только 0,8 вольт, он бы получил множество сбитых с толку клиентов и кошмар поддержки. На потребительском рынке нужно быть сумасшедшим, чтобы выпускать продукт только на 0,8 вольт.
Фактическая мощность, подаваемая слотом AGP, зависит от используемой карты. Максимальный ток , потребляемый от различных шин, указан в спецификациях для различных версий. Например, если максимальный ток потребляется от всех источников питания, а все напряжения находятся на указанных верхних пределах, [16] : 95 слот AGP 3.0 может поставлять до 48,25 Вт ; эту цифру можно использовать для консервативного указания источника питания, но на практике карта вряд ли когда-либо будет потреблять более 40 Вт от слота, многие потребляют меньше. AGP Pro обеспечивает дополнительную мощность до 110 Вт. Многие карты AGP имели дополнительные разъемы питания, чтобы снабжать их большей мощностью, чем мог обеспечить слот.
Шина AGP является надмножеством обычной шины PCI с частотой 66 МГц и сразу после сброса следует тому же протоколу. Карта должна выступать в качестве цели PCI и опционально может выступать в качестве главного устройства PCI. (AGP 2.0 добавил расширение «быстрой записи», которое позволяет записывать данные PCI с материнской платы на карту с более высокой скоростью.)
После инициализации карты с использованием транзакций PCI разрешаются транзакции AGP. Для них карта всегда является мастером AGP, а материнская плата всегда является целью AGP. Карта ставит в очередь несколько запросов, которые соответствуют фазе адреса PCI, а материнская плата планирует соответствующие фазы данных позже. Важной частью инициализации является сообщение карте максимального количества невыполненных запросов AGP, которые могут быть поставлены в очередь в заданное время.
Запросы AGP похожи на запросы чтения и записи памяти PCI, но используют другую кодировку в командных строках C/BE[3:0] и всегда выровнены по 8 байтам ; их начальный адрес и длина всегда кратны 8 байтам (64 бита). Три младших бита адреса используются вместо этого для сообщения длины запроса.
Всякий раз, когда сигнал PCI GNT# подтверждается, предоставляя шину карте, три дополнительных бита статуса ST[2:0] указывают тип передачи, которая будет выполнена следующей. Если биты равны 0xx
, данные ранее поставленной в очередь транзакции AGP должны быть переданы; если три бита равны 111
, карта может начать транзакцию PCI или (если адресация боковой полосы не используется) поставить запрос в очередь внутри полосы с помощью PIPE#.
Как и PCI, каждая транзакция AGP начинается с адресной фазы, сообщающей адрес и 4-битный код команды. Однако возможные команды отличаются от PCI:
AGP 3.0 отбросил высокоприоритетные запросы и длинные команды чтения, поскольку они использовались мало. Он также ввел обязательную адресацию боковой полосы, тем самым отбросив цикл двойного адреса, оставив только четыре типа запросов: низкоприоритетное чтение (0000), низкоприоритетная запись (0100), смыв (1010) и ограждение (1100).
Чтобы поставить запрос в очередь в полосе, карта должна запросить шину, используя стандартный сигнал PCI REQ#, и получить GNT# плюс статус шины ST[2:0], равный 111
. Затем, вместо утверждения FRAME# для начала транзакции PCI, карта утверждает сигнал PIPE#, одновременно управляя командой AGP, адресом и длиной на линиях C/BE[3:0], AD[31:3] и AD[2:0] соответственно. (Если адрес 64 бита, используется двойной адресный цикл, аналогичный PCI.) Для каждого цикла, в котором утверждается PIPE#, карта отправляет другой запрос, не дожидаясь подтверждения от материнской платы, вплоть до настроенной максимальной глубины очереди. Последний цикл отмечается отменой подтверждения REQ#, и PIPE# отменяется в следующем цикле простоя.
Если поддерживается и настроена адресация по боковой полосе, сигнал PIPE# не используется. (И сигнал повторно используется для другой цели в протоколе AGP 3.0, который требует адресации по боковой полосе.) Вместо этого запросы разбиваются на 16-битные части, которые отправляются как два байта по шине SBA. Карте не нужно запрашивать разрешение у материнской платы; новый запрос может быть отправлен в любое время, пока количество невыполненных запросов находится в пределах настроенной максимальной глубины очереди. Возможные значения:
0aaa aaaa aaaa alll
10cc ccra aaaa aaaa
110r aaaa aaaa aaaa
1110 aaaa aaaa aaaa
1111 0xxx
, 1111 10xx
,1111 110x
1111 1110
1111 1111
Байты адреса боковой полосы отправляются с той же скоростью, что и передача данных, до 8× базовой частоты шины 66 МГц. Преимущество адресации боковой полосы заключается в том, что она в основном устраняет необходимость в циклах оборота на шине AD между передачами, в обычном случае, когда операции чтения значительно превосходят операции записи.
При утверждении GNT# материнская плата может вместо этого указать через биты ST, что фаза данных для поставленного в очередь запроса будет выполнена следующей. Существует четыре очереди: два приоритета (низкий и высокий приоритет) для каждого чтения и записи, и каждая обрабатывается по порядку. Очевидно, что материнская плата попытается сначала выполнить высокоприоритетные запросы, но нет ограничений на количество низкоприоритетных ответов, которые могут быть доставлены во время обработки высокоприоритетного запроса.
Для каждого цикла, когда GNT# подтвержден, а биты состояния имеют значение 00p
, запланирован возврат ответа на чтение указанного приоритета. При следующей доступной возможности (обычно в следующем такте) материнская плата подтвердит TRDY# (цель готова) и начнет передачу ответа на самый старый запрос в указанной очереди чтения. (Другие сигналы шины PCI, такие как FRAME#, DEVSEL# и IRDY#, остаются неподтвержденными.) Данные объемом до четырех тактов (16 байт при AGP 1× или 128 байт при AGP 8×) передаются без ожидания подтверждения от карты. Если ответ длиннее, и карта, и материнская плата должны указать свою способность продолжить в третьем цикле, подтвердив IRDY# (инициатор готов) и TRDY# соответственно. Если ни один из них этого не сделает, состояния ожидания будут вставлены до двух циклов после того, как они оба это сделают. (Значение IRDY# и TRDY# в других случаях не имеет значения, и они обычно деактивированы.)
Линии разрешения байта C/BE# могут игнорироваться во время ответов на чтение, но они сохраняются установленными (все байты действительны) материнской платой.
Карта также может выдать сигнал RBF# (буфер чтения заполнен), чтобы указать, что она временно не может получать больше низкоприоритетных ответов на чтение. Материнская плата воздержится от планирования любых других низкоприоритетных ответов на чтение. Карта должна по-прежнему иметь возможность получать конец текущего ответа и первый четырехтактный блок следующего, если он запланирован, а также любые высокоприоритетные ответы, которые она запросила.
Для каждого цикла, когда GNT# утверждается и биты состояния имеют значение 01p
, данные записи планируются для отправки по шине. При следующей доступной возможности (обычно в следующем тактовом цикле) карта будет утверждать IRDY# (готовность инициатора) и начнет передачу части данных самого старого запроса в указанной очереди записи. Если данные длиннее четырех тактов, материнская плата укажет на свою способность продолжать, утверждая TRDY# в третьем цикле. В отличие от чтения, карта не может задержать запись; если у нее не было данных, готовых к отправке, она не должна была ставить запрос в очередь.
Линии C/BE# используются для записи данных и могут использоваться картой для выбора байтов, которые следует записать в память.
Множитель в AGP 2×, 4× и 8× указывает количество передач данных по шине в течение каждого тактового цикла 66 МГц. Такие передачи используют синхронное тактирование источника с сигналом "строба" (AD_STB[0], AD_STB[1] и SB_STB), генерируемым источником данных. AGP 4× добавляет дополнительные стробирующие сигналы.
Поскольку транзакции AGP могут быть короткими, как две передачи, на скоростях AGP 4× и 8× возможно завершение запроса в середине тактового цикла. В таком случае цикл дополняется фиктивными передачами данных (при этом линии включения байта C/BE# остаются неактивированными).
Разъем AGP содержит почти все сигналы PCI, а также несколько дополнений. Разъем имеет 66 контактов с каждой стороны, хотя 4 из них удалены для каждого ключа-выемки. Контакт 1 находится ближе всего к кронштейну ввода-вывода, а стороны B и A соответствуют таблице, если смотреть сверху на разъем материнской платы.
Контакты расположены с интервалом 1 мм, однако они расположены в два смещенных вертикальных ряда так, что между штырьками в каждом ряду имеется зазор 2 мм. Нечетные контакты стороны A и четные контакты стороны B находятся в нижнем ряду (от 1,0 до 3,5 мм от края карты). Остальные находятся в верхнем ряду (от 3,7 до 6,0 мм от края карты).
Пропущены следующие сигналы PCI:
Добавлены следующие сигналы: