Реализация 2.0
55
Если никакой агент не выставил DEVSEL# внутри трех тактов FRAME#, агент, делающей декодирование,
может требовать и выставление DEVSEL#. Если система не имеет такого агента, мастер никогда не увидит
выставленный DEVSEL# и завершает транзакцию с механизмом прекращения работы мастером (смотрите
раздел 3.3.3.1.).
Адресат должен делать полную декодировку перед запуском / выставлением DEVSEL# или любым другим
выходным сигналом. Запрещено управлять DEVSEL# до полной декодировки, а затем позволять
декодирующие действия на шине. (Это могло бы вызывать конкуренцию.) Адресат должен определить
строки AD с FRAME# прежде, чем может быть выставлен DEVSEL# на других командах. Адресат должен
определить IDSEL с FRAME# и AD[1:: 0] прежде, чем DEVSEL# может
быть выставлен в команде
конфигурации.
Ожидается, что большинство (возможно, все) выходные устройства будут способны декодировать и
выставлять DEVSEL# внутри одного или двух тактов FRAME# (быстро и средне на рисунке).
Соответственно, декодирующий агент, может обеспечивать устройство зависимым регистром
конфигурации, который может программироваться одним или двумя фронтами такта, в котором устройство
производит выборку DEVSEL#, позволяя более быстрый доступ к шине расширения. Использование такой
опции ограничено самым медленным декодирующим агентом на шине.
Однажды выставленный DEVSEL# не может быть снят, пока последняя фаза данных не завершена, за
исключением сообщения об аварийном прекращении работы.
Если первый доступ отображается в адресный интервал адресата, он выставляет DEVSEL#, чтобы
требовать доступа. Но если мастер пытается продолжать доступ, пересекая границы ресурса, адресат
требует сигнала разъединения.
Когда адресат требует доступа для операций ввода/ вывода, и есть возможность указать один или большее
байтов для доступа вне адресного интервала адресата, он должен сообщить об аварийном прекращении
работы. При наличии проблем с этим типом ввода/вывода, декодирующее устройство (мост шины
расширения) может поступать следующим образам:
•
Делать положительное декодирование (включением карты байта) на адресах, которые различные
устройства совместно используют общие DWORDs, дополнительно используя байт. Это дает
возможность обнаружить эту проблему и выдать сигнал аварийного прекращения работы.
•
Передать полный доступ к шине расширения, где у части доступа, которая не может быть обслужена
спокойно, понизится приоритет. (Это возможно только когда адресат постоянно находится на шине
расширения, а другой находится на PCI.)
3.6.2. Специальный цикл (Special Cycle)
Команда Special Cycle обеспечивает простой механизм передачи сообщения на PCI. В дополнение к
(поддерживающему связь) состоянию процессора (который выполнен на шинах процессора Intel) она
может также использоваться для логической передачи сигналов между PCI агентами, когда такая передача
сигналов не требует точной синхронизации или синхронизации физических сигналов.
Хорошей парадигмой команды Special Cycle является "логический провод", который только сообщает об
одиночных тактовых импульсах; то есть может использоваться, чтобы устанавливать и сбрасывать сигналы
в реальном времени, подразумевая, что доставка его гарантируется. Это позволяет проектировщику
определять необходимую связь без того, чтобы требовать дополнительные контакты. Как с передачей
сигналов вообще, реализация поддержки команды Special Cycle необязательная
.
Команда Special Cycle не содержит никакого явного целевого адреса, но передается всем агентам. Каждый
агент, получивший сообщение, должен определить, является ли оно применимым к нему. PCI агенты
никогда не выставляют DEVSEL# в ответ на команду Special Cycle.