link700 link701 link702 link703 link704 link705 link706 link707 link708 link709 link710 link711 link712 link713 link714 link715 link716 link717 link718 link719 link720 link721 link722 link723 link724 link725 link726 link727 link728 link729 link730 link731 link732 link733 link734 link735 link736 link737 link738 link739 link740 link741 link742 link743 link744 link745 link746 link747 link748 link749 link750 link751 link752 link753 link754 link755 link756 link757 link758 link759 link760 link761 link762 link763 link764 link765 link766 link767 link768 link769 link770 link771 link772 link773 link774 link775 link776 link777 link778 link779 link780 link781 link782 link783 link784 link785 link786 link787 link788 link789 link790 link791 link792 link793 link794 link795 link796 link797 link798 link799 link800 link801 link802 link803 link804 link805 link806 link807 link808 link809 link810 link811 link812 link813 link814 link815 link816 link817 link818 link819 link820 link821 link822 link823 link824 link825 link826 link827 link828 link829 link830 link831 link832 link833 link834 link835 link836 link837 link838 link839

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

Техническое заключение по выполненной перепланировке проект перепланировки.

PCI и PCI-X

Модификация протокола в PCI-X

Протокол шины PCI-X во многом совпадает с вышеописанным: то же тактирование по перепаду CLK, то же назначение управляющих сигналов. Изменение протокола нацелено на повышение эффективности использования тактов шины. Для этого в протокол ввели дополнения, позволяющие устройствам «предвидеть» грядущие события и выбирать адекватное поведение.

В обычной PCI все транзакции начинаются одинаково (с фазы адреса) как пакетные с заранее не известной длиной. При этом реально транзакции ввода/вывода всегда имеют лишь одну фазу данных; длинные пакеты эффективны (и используются) только для обращений к памяти. В PCI-X транзакции по длине разделены на два типа: 

  • пакетные (Burst) — все команды, обращенные к памяти, кроме Memory Read DWORD;
  • одиночные размером в двойное слово (DWORD) — остальные команды.

В каждой транзакции после фазы адреса присутствует новая фаза передачи атрибутов транзакции, в которой инициатор сообщает свой идентификатор (RBN — номер шины, RDN — номер устройства и RFN — номер функции), 5-битный тег, 12-битный счетчик байтов (только для пакетных транзакций, UBC — старшие биты, LBC — младшие биты) и дополнительные характеристики (биты RO и NS) области памяти, к которой относится транзакция. Атрибуты передаются по линиям шины AD[31:0] и BE[3:0]#. Идентификатор инициатора вместе с тегом определяют последовательность (Sequence) — одну или несколько транзакций, обеспечивающих одну логическую передачу данных, запланированную инициатором. Благодаря 5-битному тегу каждый инициатор может одновременно выполнять до 32 логических передач (повторное назначение тега другой логической передаче возможно только после завершения предшествующей, использовавшей то же значение тега). Логическая передача (последовательность) может иметь длину до 4096 байт (значение счетчика байтов 00…01 соответствует числу 1, 11…11 — 4095, 00…00 — 4096); в атрибутах каждой транзакции указывается число байт, которые должны быть переданы до конца данной последовательности. Количество байт, которые будут переданы в каждой транзакции, заранее не определено (транзакцию может остановить как инициатор, так и целевое устройство). Однако для повышения эффективности работы к пакетным транзакциям предъявляются жесткие требования. Если в транзакции оказывается более одной фазы данных, то она может завершаться либо по передаче всех заявленных байтов (по счетчику в атрибутах), либо только на границах строк кэша (по 128-байтным границам адресов памяти). Если участники транзакции не готовы принять такие условия, кто-то из них должен остановить транзакцию после первой фазы данных. Только у целевого устройства есть еще право аварийного завершения транзакции в любой момент; инициатор жестко обязан отвечать за свои начинания.

Байты шины AD, участвующие в транзакциях, определяются сигналами BEx#, но иначе, чем в PCI. Для одиночных транзакций эти сигналы действуют в фазе атрибутов. Для пакетных транзакций эти сигналы действуют только в команде Memory Write (в каждой фазе данных), для остальных пакетных обращений предполагается, что все байты, от начального адреса до конечного, разрешены.

Характеристики памяти, к которой относится транзакция, позволяют выбирать оптимальный способ обращения к ней при отработке транзакции. Характеристики устанавливает устройство, запрашивающее данную последовательность. Каким образом оно узнает о свойствах памяти — забота его драйвера. Атрибуты характеристики памяти относятся только к транзакциям пакетных обращений к памяти (но не к сообщениям MSI):

  • флаг RO (Relaxed Ordering) означает, что возможно изменение порядка выполнения отдельных операций записи и чтения;
  • флаг NS (No Snoop) означает, что область памяти, к которой относится данная транзакция, нигде не кэшируется.

В PCI-X отложенные транзакции (Delayed Transaction) заменены на расщепленные транзакции (Split Transaction). Любую транзакцию, кроме всех транзакций записи в память, целевое устройство может завершать либо немедленно (обычным для PCI способом), либо с использованием протокола расщепленных транзакций. В последнем случае целевое устройство подает сигнал Split Response (расщепление), внутренне исполняет команду, а потом инициирует собственную транзакцию (команда Split Completion) для пересылки данных или сообщения о завершении инициатору исходной (расщепленной) транзакции. Целевое устройство обязано расщеплять транзакцию, если не может ответить на нее до истечения начальной задержки (initial latency). Устройство, вызвавшее расщепляемую транзакцию, называется запросчиком (Requester). Устройство, завершающее расщепленную транзакцию (Completer), будем называть исполнителем. Для завершения транзакции исполнитель должен будет запросить управление шиной у арбитра; запросчик на этапе завершения будет выступать в роли целевого устройства. Завершать транзакцию расщепленным способом может устройство, даже и не являющееся формально мастером шины (по признакам в его конфигурационных регистрах). Транзакция завершения Split Completion во многом напоминает пакетную транзакцию записи, но отличается в фазе адресации: вместо полного адреса пространства памяти или ввода/вывода по шине AD передается идентификатор последовательности (с номером шины, устройства и функции запросчика), к которой относится это завершение, и только младшие 6 бит адреса. Исполнитель берет этот идентификатор из атрибутов расщепленной им транзакции. По этому идентификатору (номеру шины запросчика) мосты доводят транзакцию завершения до устройствазапросчика. В фазе атрибутов передается идентификатор исполнителя (CBN — номер шины, CDN — номер устройства и CFN — номер функции). Запросчик должен распознать свой идентификатор последовательности и ответить на транзакцию обычным способом (немедленно). Последовательность может отрабатываться и не одной транзакцией завершения, а их серией, до исчерпания счетчика байтов (или прекращаться по ошибке). К какому стартовому адресу относится каждая из транзакций завершения, запросчик вычисляет сам (он знает, что запрашивал и сколько байтов уже пришло). Транзакция завершения может нести либо запрошенные данные чтения, либо сообщение о результатах транзакции — Split Complete Message.

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

  • BCM (Byte Count Modified) — признак того, что будет передано меньше байтов данных, чем просил запросчик (передается с данными завершения);
  • SCE (Split Completion Error) — признак ошибки завершения, устанавливается при передаче сообщения завершения как ранний признак ошибки (до декодирования самого сообщения);
  • SCM (Split Completion Message) — признак сообщения (отличает сообщение от данных).