link280 link281 link282 link283 link284 link285 link286 link287 link288 link289 link290 link291 link292 link293 link294 link295 link296 link297 link298 link299 link300 link301 link302 link303 link304 link305 link306 link307 link308 link309 link310 link311 link312 link313 link314 link315 link316 link317 link318 link319 link320 link321 link322 link323 link324 link325 link326 link327 link328 link329 link330 link331 link332 link333 link334 link335 link336 link337 link338 link339 link340 link341 link342 link343 link344 link345 link346 link347 link348 link349 link350 link351 link352 link353 link354 link355 link356 link357 link358 link359 link360 link361 link362 link363 link364 link365 link366 link367 link368 link369 link370 link371 link372 link373 link374 link375 link376 link377 link378 link379 link380 link381 link382 link383 link384 link385 link386 link387 link388 link389 link390 link391 link392 link393 link394 link395 link396 link397 link398 link399 link400 link401 link402 link403 link404 link405 link406 link407 link408 link409 link410 link411 link412 link413 link414 link415 link416 link417 link418 link419

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

PCI и PCI-X

Шины PCI и PCI-X

Прямой доступ к памяти, эмуляция ISA DMA (PC/PCI, DDMA)

Как было сказано выше, шина PCI не предоставляет возможности прямого доступа к памяти с использованием централизованного контроллера в стиле 8237A (как для шины ISA). Для разгрузки центрального процессора от рутинных перекачек данных предлагается прямое управление шиной со стороны устройств, называемых ведущими устройствами шины (PCI Bus Master). Степень интеллектуальности ведущего устройства может быть различной. В простейшем варианте ведущее устройство обеспечивает пересылку блоков данных между устройством и системной памятью (или памятью других устройств) по указанию от CPU. Здесь CPU командами обращения к определенным регистрам ведущего устройства задает начальный адрес, длину блока, направление пересылки и разрешает запуск передачи. После этого пересылка выполняется по готовности (или инициативе) устройства, без отвлечения CPU. Таким образом выполняется прямой доступ к памяти (DMA). Более сложный контроллер DMA может организовывать сцепку буферов при чтении, разбросанную запись и т. п. — возможности, знакомые еще по «продвинутым» контроллерам DMA для ISA/EISA. Более интеллектуальное ведущее устройство, как правило, обладающее собственным микроконтроллером, не ограничивается такой простой работой по указке CPU — оно выполняет обмены уже по программе своего контроллера. Таким интеллектом обладают, например, хост-контроллеры последовательных шин USB и IEEE 1394, рассмотренные в данной книге.

Для совместимости устройств PCI со старым PC-ориентированным ПО и упрощения устройств PCI фирма Intel разработала специальный протокол PC/PCI DMA, позволяющий централизованно эмулировать стандартную (для PC) связку контроллеров DMA 8237. Альтернативное решение — механизм DDMA (Distributed DMA — распределенный DMA) позволяет «расчленить» стандартный контроллер и отдельные его каналы эмулировать средствами карт PCI. Оба этих механизма реализуемы только как часть моста между первичной шиной PCI и шиной ISA, поэтому их поддержка может обеспечиваться (или не обеспечиваться) только на системной плате и разрешаться в CMOS Setup.

Для поддержки протокола PC/PCI главный мост PCI комбинируется с контроллером DMA, программно-совместимым с парой 8237. Так, например, в хабе-контроллере ввода/вывода ICH3 (микросхема 82801CA фирмы Intel) имеется 7-канальный контроллер DMA, у которого любой из каналов может быть подключен к протоколу PC/PCI или шине LPC. Подключением каналов к тому или иному протоколу управляет специальный 16-битный регистр (смещение 90h в конфигурационном пространстве нулевой функции устройства ICH), в котором каждому каналу отводится пара бит. Хаб ICH является и главным мостом PCI, обеспечивая, естественно, и функции арбитража для абонентов шины, включая и свои интегрированные устройства. В протоколе PC/PCI меняется назначение пары сигналов REQi# и GNTi# для заранее выбранного агента шины PCI, являющегося «проводником» DMA. Этот агент имеет внешние (по отношению к шине PCI) пары сигналов DRQx# и DACKx# с логикой, аналогичной одноименным сигналам ISA DMA, а линии REQi# и GNTi# в процессе запроса управления шиной использует особым образом (см. рисунок ниже). Когда агент получает запрос DRQx (один или несколько), он по линии REQi# передает в последовательном коде состояние активности линий запросов DRQx. В первом такте CLK передается старт-бит — низкий уровень REQi#, во втором — активность запроса DRQ0, затем DRQ1 и так далее до DRQ7, после чего сохраняется низкий уровень REQ#. На это сообщение хаб1 ответит по линии GNTi# посылкой с указанием номера канала, которому дается подтверждение DACKx# для передачи данных в последующих транзакциях.

Далее хаб (как инициатор на PCI) организует передачу данных между агентом PCI DMA и памятью, при этом направлением передачи и текущим адресом в памяти управляет контроллер 8237, находящийся в том же хабе. Во время этой передачи сигнал GNTi# остается активным. Передача каждого байта или слова данных ведется не за один шинный цикл, как в ISA DMA, а за пару шинных циклов PCI: в одном цикле происходит обращение к памяти, в другом — к агенту PCI DMA. Порядок циклов определяется направлением передачи (понятно, что в первом цикле данные должны быть считаны, а во втором — записаны). В этих циклах данные передаются только по линиям AD[7:0] при работе с 8-битными каналами и по AD[15:0] при работе с 16-битными с соответствующими сигналами BE[3:0]#. В цикле обращения к памяти (команда Memory Read или Memory Write) фигурирует адрес памяти, сформированный соответствующим каналом 8237. В цикле ввода/вывода (обращения к агенту) команды IO Read или IO Write адресуются к специальным адресам:

  • 00h — передача данных;
  • 04h — передача данных с признаком конца цикла (сигнал TC контроллера 8237).

Кроме передачи данных протокол PC/PCI позволяет эмулировать и режим верификации DMA (без передачи данных), здесь используется команда IO Read с другими адресами:

  • C0h — верификация данных;
  • C4h — верификация данных с признаком конца цикла.

Агент должен сообщать хабу обо всех изменениях состояний линий запросов DRQx, в том числе и о снятии сигналов запроса. Если агент сигнализирует об установке более одной линии запроса, то после того, как какой-то из них будет обслужен, агент должен повторить посылку запроса для необслуженного канала. Для посылки новой информации о запросах агент на один такт снимает сигнал REQi# и снова вводит посылку запроса, начинающуюся со старт-бита. О снятии DRQx, соответствующего обслуживаемому в данный момент каналу, агент сигнализирует снятием сигнала REQi# на два такта PCI; это он должен сделать за 7 тактов до подачи им сигнала TRDY# в цикле ввода/вывода, иначе хаб начнет следующий цикл передачи.

Механизм PC/PCI DMA реализуют только в чипсете системной платы. В частности, вышеупомянутый хаб ICH3 позволяет запрограммировать на поддержку PC/PCI не более двух пар сигнальных линий REQi# и GNTi#. При этом данные линии не смогут использоваться для обычного арбитража устройств PCI. Сам агент PCI DMA тоже должен находиться на системной плате, он обеспечивает каналами DMA устройства шины ISA. Поддержку PC/PCI можно разрешать и запрещать через CMOS Setup. Через слоты PCI протокол PC/PCI, очевидно, не используется: упоминаний о механизме «объяснения» устройствам PCI, как должны использоваться их линии GNT#/REQ# (штатно или по протоколу PC/PCI), автору найти не удалось.



Подкатегории