Фаза запроса чтения памяти

32 битный или 64 битный адрес памяти, тип транзакции запроса чтения памяти, количество данных, для чтения составленные в двойных словах, класс трафика, если он отличен от TC0, byteenables (???), атрибуты, чтобы указать, если битовые атрибуты ‘relaxed ordering‘ и ‘nosnoop‘ должны быть установлены или очищены.

Transactionlayer использует эту информацию, чтобы построить MRdTLP. Точный формат TLP пакета описывается в более поздней главе. Заголовки 3 DWили 4 DW создаются, в зависимости от размера адреса (32-bitили 64-bit). Кроме того, TransactionLayer добавляет IDзапросчика (№ шины, № устройства, № функции) и 8 битный тег в заголовок. Он устанавливает TD (transactiondigestpresent) бит в заголовок TLP, если 32-bitEndtoEndCRC добавляется в хвостовую часть TLP. TLP не имеет полезной нагрузки данных. TLP помещается в соответствующий VCбуфер готовым к передаче. Логика управления потоком данных подтверждает достаточные «credits» доступные для виртуального канала, связанного с используемым классом трафика.

Только тогда TLP запроса чтения памяти посылается в DataLinkLayer. DataLinkLayer добавляет 12 битный порядковый ID и 32 битный LCRC, который составляется, основываясь на всем пакете. Копия TLP с порядковым ID и LCRC храниться в буфере повтора.

Пакет направляется в PhysicalLayer, который прикрепляет Начальный и Конечный символы в пакет. Пакет разделяется по байтам, зашифровывается и кодируется в 10 битовый код. Наконец пакет конвертируется в последовательный битовый проток на всех Линиях и передается через канал в соседний комплитер.

Комплитер конвертирует входящий последовательный битовый потов обратно в 10 битовые символы, помещая пакет в буфер регулируемой емкости. 10 битовые символы конвертируются обратно в байты, а байты со всех линий дешифрируются и объединяются. Начальный и Конечный символы определяются и удаляются. Итоговый TLP посылается в DataLinkLayer.

DataLinkLayer комплитера проверяет LCRCошибки в принятом TLP и проверяет порядковый ID на пропущенные TLPили TLP без ID. Допустим ошибок нет. DataLinkLayer создает ACKDLLP, который содержит такой же порядковый ID, что и в TLP запроса чтения памяти. 16битное CRC добавляется к ACKDLLP. DLLPпосылается обратно в PhysicalLayer, который передает ACKDLLP запросчику.

PhysicalLayer запросчика переформулирует ACKDLLP и посылает выше в DataLinkLayer, который определяет порядковый ID и сравнивает его с TLP, хранящемся в буфере повтора. Соответствующий TLP стирается из буфера повтора. Если получен NAKDLLP, то запросчик перешлет копию TLP, хранящуюся в буфере повтора.

В обозначенное время DataLinkLayerкомплитера уберет порядковый IDи LCRC поле из TLP и направит его в TransactionLayer.

TransactionLayerпринимает TLPв соответствующий VC буфер, связанный с TC пакета. TransactionLayer проверяет ECRC ошибку. Он направляет содержимое заголовка (адрес, ID регистра, тип транзакции чтения памяти, количество требуемых данных, класс трафика и т.д.) в DeviceCore/SoftwareLayer комплитера.

Ссылка на основную публикацию
Adblock detector