PCI и PCI-X

Адресация памяти

На шине PCI передается физический адрес памяти; в процессорах x86 (и других) он получается из логического посредством постраничной табличной трансляции блоком MMU.

В командах обращения к памяти на шине PCI адрес, выровненный по границе двойного слова, передается по линиям AD[31:2]; линии AD[1:0] задают порядок адресов в пакете: 

  • 00 — линейное инкрементирование; адрес последующей фазы отличается от предыдущего на число байтов шины (4 для 32-битной и 8 для 64-битной шины);
  • 10 — сворачивание адресов с учетом длины строки кэш-памяти (Cacheline Wrap mode). В транзакции адрес для очередной фазы увеличивается до достижения границы строки кэша, после чего переходит на начало этой строки и увеличивается до адреса, предшествующего начальному. Если транзакция длиннее строки кэша, то она продолжится в следующей строке с того же смещения, что и началась. Так, при длине строки 16 байт и 32-битной шине транзакция, начавшаяся с адреса xxxxxx08h, будет иметь последующие фазы данных, относящиеся к адресам xxxxxx0Ch, xxxxxx00h, xxxxxx04h; и далее к xxxxxx18h, xxxxxx1Ch, xxxxxx10h, xxxxxx14h. Длина строки кэша прописывается в конфигурационном пространстве устройства. Если устройство не имеет регистра Cache Line Size, то оно должно прекратить транзакцию после первой фазы данных, поскольку порядок чередования адресов оказывается неопределенным;
  • 01 и 11 — зарезервированы, могут использоваться как указание на отключение (Disconnect) после первой фазы данных.

Если требуется доступ к адресам свыше 4 Гбайт, то используется двухадресный цикл, передающий младшие 32 бита полного 64-битного адреса для последующей команды, вместе с которой передаются старшие биты адреса. В обычных командах подразумевается нулевое значение бит [63:32] полного адреса.

В PCI-X передается полный адрес памяти — используются все линии AD[31:0]. В пакетных транзакциях адрес определяет точное положение начального байта пакета, и всегда подразумевается линейный нарастающий порядок адресов. В пакетной транзакции участвуют все байты, начиная с данного и до последнего (по счетчику байтов). Запреты отдельных байтов в пакете (как в PCI) для транзакций PCI-X недопустимы. В одиночных транзакциях (DWORD) биты адреса AD[1:0] определяют байты, которые могут быть разрешены сигналами C/BE[3:0]#1: При AD[1:0] = 00 допустимо C/BE[3:0]# = xxxx (могут быть разрешены любые байты), при AD[1:0] = = 01 — C/BE[3:0]# = xxx1, при AD[1:0] = 10 — C/BE[3:0]# = xx11, при AD[1:0] = 11 — — C/BE[3:0]# = x111 (передается лишь байт 3 или ни один байт не разрешен).

 



Sitelinkx by eXtro-media.de
Яндекс.Метрика