Транзакции 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: 110R AAAA АААА AAAA — старшие биты адреса (А [35:24]);
♦ тип 4: 1110AAAA АААА 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 может вводиться пара команд .
Читать дальше