Реклама:

В первых компьютерах IBM PC большинство приложений были текстовыми. С появлением Windows постепенно вошли в употребление графические пользовательские интерфейсы. Ни одно из этих приложений особо не нагружало шину ISA. Однако с течением времени появилось множество различных приложений, в том числе игр, для которых требовалось полноэкранное видео, и ситуация коренным образом изменилась.

Давайте произведем небольшие вычисления. Рассмотрим мойитор размером 1024 х 768 в условиях вывода цветного движущегося изображения (3 байта/пиксел). Одно экранное изображение содержит 2,25 Мбайт данных. Для воспроизведения плавных движений требуется 30 кадров в секунду, и, следовательно, скорость передачи данных должна быть 67,5 Мбайт/с. В действительности дело обстоит гораздо хуже, поскольку, чтобы передать изображение, данные нужно передать с жесткого диска, компакт-диска или DVD-диска через шину в память. Затем данные должны поступить в графический адаптер (тоже через шину). Таким образом, только для передачи видео пропускная способность шины должна быть 135 Мбайт/с. Однако в компьютере есть еще центральный процессор и другие устройства, которые тоже должны пользоваться шиной, поэтому пропускная способность должна быть еще выше.

Максимальная частота передачи данных шины ISA - 8,33 МГц. Она способна передавать два байта за цикл, поэтому ее максимальная пропускная способность составляет 16,7 Мбайт/с. Шина EISA может передавать 4 байта за цикл. Ее пропускная способность достигает 33,3 Мбайт/с. Ясно, что ни одна из них совершенно не соответствует тому, что требуется для полноэкранного видео.

В 1990 году компания Intel разработала новую шину с гораздо более высокой пропускной способностью, чем у шины EISA. Эту шину назвали PCI (Peripheral Component Interconnect - взаимодействие периферийных компонентов). Компания Intel запатентовала шину PCI и сделала все патенты всеобщим достоянием, так что любая компания могла производить периферийные устройства для этой шины без каких-либо выплат за право пользования патентом. Компания Intel также сформировала промышленный консорциум PCI Special Interest Group, который должен был заниматься дальнейшими усовершенствованиями шины PCI. Все эти действия привели к тому, что шина PCI стала чрезвычайно популярной. Фактически в каждом компьютере Intel (начиная с Pentium), а также во многих других компьютерах есть шина PCI. Даже компания Sun выпустила версию UltraSPARC (компьютер UltraSPARC III), в которой используется шина PCI. Шина PCI подробно описана в литературе [185, 193].

Первая шина PCI передавала 32 бита за цикл и работала на частоте 33 МГц (время цикла - 30 не), общая пропускная способность составляла 133 Мбайт/с. В 1993 году появилась шина PCI 2.0, а в 1995 году - PCI 2.1. Шина PCI 2.2 подходит и для портативных компьютеров (где требуется экономия заряда батареи). В конце концов удалось получить шину PCI, которая работает на частоте 66 МГц, способна передавать 64 бита за цикл, а ее общая пропускная способность составляет 528 Мбайт/с. При такой производительности полноэкранное видео вполне достижимо (предполагается, что диск и другие устройства системы справляются со своей работой). Во всяком случае, шина PCI не является "узким местом" системы.

Хотя 528 Мбайт/с - достаточно высокая скорость передачи данных, все же здесь есть некоторые проблемы. Во-первых, этого недостаточно для шины памяти. Во-вторых, шина PCI несовместима со всеми старыми платами ISA. По этой причине компания Intel решила разрабатывать компьютеры с тремя и более шинами, как показано на рис. 3.49. Здесь мы видим, что центральный процессор может обмениваться информацией с основной памятью через специальную шину памяти, а шину ISA можно связать с шиной PCI. Такая архитектура в 90-х годах удовлетворяла всем современным на тот момент требованиям и поэтому использовалась в большинстве систем.

Шина PCI

Рис. 3.49. Архитектура типичной системы первых поколений Pentium. (Толщина линий, обозначающих шину, призвана показать ее пропускную способность. Чем толще линия, тем пропускная способность выше.)

Ключевыми компонентами данной архитектуры являются мосты между шинами (эти микросхемы выпускает компания Intel - отсюда такой интерес к проекту). Мост PCI связывает центральный процессор, память и шину PCL Мост

ISA связывает шину PCI с шиной ISA, а также поддерживает один или два IDE-диска. Практически все системы Pentium 4 выпускаются с одним или несколькими свободными PCI-слотами для подключения дополнительных высокоскоростных периферийных устройств и с одним или несколькими ISA-слотами для подключения низкоскоростных периферийных устройств.

Преимущество системы, изображенной на рис. 3.49, состоит в том, что шина между центральным процессором и памятью имеет высокую пропускную способность, шина PCI также обладает высокой пропускной способностью и хорошо подходит для взаимодействия с высокоскоростными периферийными устройствами (SCSI-дисками, графическими адаптерами и т. п.), и при этом еще могут использоваться старые платы ISA. На рисунке также изображена шина USB, которую мы будем обсуждать далее в этой главе.

Было бы неплохо, если бы существовал только один тип плат PCL К сожалению, это не так. Платы различаются потребляемой мощностью, разрядностью и синхронизацией. Старые компьютеры обычно используют напряжение 5 В, а новые - 3,3 В, поэтому шина PCI поддерживает то и другое. Коннекторы одни и те же (они различаются только двумя небольшими пластмассовыми вставками, не позволяющими вставить плату на 5 В в шину PCI на 3,3 В и наоборот). К счастью, существуют и универсальные платы, которые поддерживают оба напряжения и которые можно вставить в любой слот. Платы различаются не только напряжением, но и разрядностью. Существует два типа плат: 32-разрядные и 64-разрядные. 32-разрядные платы содержат 120 выводов; 64-разрядные платы содержат те же 120 выводов плюс 64 дополнительных вывода аналогично тому, как шина IBM PC была расширена до 16 бит (см. рис. 3.48). Шина PCI, поддерживающая 64-разрядные платы, может поддерживать и 32-разрядные, но обратное не верно. Наконец, шины PCI и соответствующие платы могут работать на частоте либо 33 МГц, либо 66 МГц. В обоих случаях контакты идентичны. Отличие состоит в том, что один из выводов связывается либо с источником питания, либо с землей.

К концу 90-х годов шина ISA была окончательно похоронена участниками рынка, и в новых системах ее поддержка уже не предусматривалась. В связи с тем, что разрешение экрана постоянно увеличивалось (достигнув величины 1600 х 1200 точек), равно как и спрос на полноэкранное видео со стандартной частотой кадров, особо актуальное в интерактивных играх, компания Intel разработала новую шину, предназначенную исключительно для обмена данными с графическим адаптером. Эта шина называется AGP (Accelerated Graphics Port - ускоренный графический порт). Ее первая версия, AGP 1.0, работала на скорости 264 Мбайт/с, и эта величина была принята за 1х. Недостаток скорости (по сравнению с PCI) компенсировался узкой специализацией на управлении графическим адаптером. Впоследствии были разработаны новые версии шины - в частности, AGP 3.0 работает на скорости 2,1 Гбайт/с (8х). Компоновку шин в современной системе на базе Pentium 4 иллюстрирует рис. 3.50.

В этой системе центральное положение занимает мост между шинами. Он соединяет пять основных компонентов системы: процессор, память, графический адаптер, контроллер ATAPI и шину PCL В отдельных случаях он также обеспечивает работу сетевых плат Ethernet и других высокоскоростных устройств. Устройства, работающие на более низких скоростях, подключаются к шине PCL

Шина PCI

Рис. 3.50. Компоновка шин в современной системе Pentium 4

По своей внутренней структуре мост делится на две части: мост памяти и мост ввода-вывода. Мост памяти соединяет процессор с памятью и графическим адаптером. Мост ввода-вывода соединяет друг с другом контроллер ATAPI, шину PCI и (при необходимости) другие высокоскоростные устройства ввода-вывода. Данные между этими двумя мостами передаются на очень большой скорости.

Шины PCI являются синхронными, как и все шины PC, восходящие к первой модели IBM PC. Все транзакции в шине PCI осуществляются между задающим и подчиненным устройствами. Чтобы не увеличивать число выводов на плате, адресные и информационные линии объединяются. При этом достаточно 64 выводов для всей совокупности адресных и информационных сигналов, даже если PCI работает с 64-разрядными адресами и 64-разрядными данными.

Объединенные адресные и информационные выводы функционируют следующим образом. При считывании во время первого цикла задающее устройство передает адрес на шину. Во время второго цикла задающее устройство удаляет адрес, и шина переключается таким образом, чтобы подчиненное устройство могло ее использовать. Во время третьего цикла подчиненное устройство выдает запрашиваемые данные. При записи шине не нужно переключаться, поскольку задающее устройство передает в нее и адрес, и данные. Тем не менее минимальная транзакция занимает три цикла. Если подчиненное устройство не может дать ответ в течение трех циклов, то вводится режим ожидания. Допускаются пересылки блоков неограниченного размера, а также некоторые другие типы циклов шины.

Арбитраж шины PCI

Чтобы передать по шине PCI какой-нибудь сигнал, устройство сначала должно получить к ней доступ. Шина PCI управляется централизованным арбитром, как показано на рис. 3.51. В большинстве случаев арбитр шины встраивается в один из мостов между шинами. От каждого PCI-устройства к арбитру тянутся две специальные линии. Одна из них (REQ#) используется для запроса шины, а вторая (GNT#) - для получения разрешения на доступ к шине.

Шина PCI

Рис. 3.51. У шины PCI имеется централизованный арбитр

Чтобы сделать запрос на доступ к шине, PCI-устройство (в том числе и центральный процессор) устанавливает сигнал REQ# и ждет, пока арбитр не установит сигнал GNT#. Если арбитр установил сигнал GNT#, то устройство может использовать шину в следующем цикле. Алгоритм, которым руководствуется арбитр, не зависит от технических характеристик шины PCL Допустимы арбитраж по кругу, арбитраж по приоритету, другие схемы арбитража. Хороший арбитр должен быть справедлив, чтобы не заставлять отдельные устройства ждать целую вечность.

Шина предоставляется для одной транзакции, хотя продолжительность этой транзакции теоретически произвольна. Если устройству нужно совершить вторую транзакцию и ни одно другое устройство не запрашивает шину, оно может занять шину снова, хотя обычно между транзакциями требуется вставлять пустой цикл. Однако при особых обстоятельствах (при отсутствии конкуренции на доступ к шине) устройство может совершать последовательные транзакции без пустых циклов между ними. Если задающее устройство выполняет очень длительную передачу, а какое-нибудь другое устройство выдало запрос на доступ к шине, арбитр может сбросить сигнал на линии GNT#. Предполагается, что задающее устройство следит за линией GNT#. Если сигнал сбрасывается, устройство должно освободить шину в следующем цикле. Такая система позволяет осуществлять очень длинные передачи (что весьма рационально) при отсутствии конкуренции на доступ к шине, однако при этом она быстро реагирует на запросы шины, поступающие от других устройств.

Сигналы шины PCI

Шина PCI поддерживает ряд обязательных (табл. 3.5) и ряд факультативных сигналов (табл. 3.6). Оставшиеся выводы используются для питания, земли и разнообразных сопутствующих сигналов. В столбцах "Задающее устройство" и "Подчиненное устройство" указывается, какое из устройств устанавливает сигнал при обычной транзакции. Если сигнал устанавливается другим устройством (например, CLK), оба столбца остаются пустыми.

Таблица 3-5. Обязательные сигналы шины PCI

Сигнал

Количество линий

Задающее устройство

Подчиненное устройство

Комментарий

CLK

   

Тактовый генератор (33 МГц или 66 МГц)

AD

Да

Да

Объединенные адресные и информационные линии

PAR

Да

 

Бит четности для адреса или данных

С/ВЕ#

Да

 

Во-первых, команда шине, во-вторых, битовый массив, который показывает, какие байты из слова нужно считать (или записать)

FRAME#

Да

 

Указывает, что установлены сигналы АО и С/ВЕ

IRDY#

Да

 

При чтении означает, что задающее устройство готово принять данные; при записи - что данные находятся в шине

IDSEL

Да

 

Считывание конфигурационного пространства

DEVSEL#

 

Да

Подчиненное устройство распознало свой адрес и ждет сигнала

TRDY#

 

Да

При чтении означает, что данные находятся на линиях АО; при записи - что подчиненное устройство готово принять данные

STOP#

 

Да

Подчиненное устройство требует немедленно прервать текущую транзакцию

PERR#

   

Обнаружена ошибка четности данных

SERR#

   

Обнаружена ошибка четности адреса или системная ошибка

REQ#

   

Арбитраж шины - запрос на доступ к шине

GNT#

   

Арбитраж шины - предоставление шины

RST#

   

Перезагрузка системы и всех устройств

Таблица 3.6. Факультативные сигналы шины PCI

Теперь давайте рассмотрим каждый сигнал шины PCI отдельно. Начнем с обязательных (32-разрядных) сигналов, а затем перейдем к факультативным (64-разрядным). Сигнал CLK запускает шину. Большинство сигналов совпадают с ним во времени. В отличие от шины ISA, в шине PCI транзакция начинается на спаде сигнала CLK, то есть не в начале цикла, а в середине.

Сигналы AD (их 32) нужны для адресов и данных (для передач по 32 бита). Обычно адрес устанавливается во время первого цикла, а данные - во время третьего. Сигнал PAR - это бит четности для сигнала AD. Сигнал С/ВЕ# выполняет две функции. Во время первого цикла он содержит команду (считать одно слово, считать блок и т. п.). Во время второго цикла он содержит массив размером 4 бита, который показывает, какие байты 32-разрядного слова действительны. Использовав сигнал С/ВЕ#, можно считать 1, 2 или 3 байта из слова, а также все слово целиком.

Сигнал FRAME# устанавливается задающим устройством, чтобы начать транзакцию. Этот сигнал сообщает подчиненному устройству, что адрес и команды в данный момент действительны. При чтении одновременно с сигналом FRAME# устанавливается сигнал IRDY#. Он сообщает, что задающее устройст-

Сигнал

Количество линий

Задающее устройство

Подчиненное устройство

Комментарий

REQ64#

Да

 

Запрос на осуществление 64-разрядной транзакции

АСК64#

 

Да

Разрешение 64-разрядной транзакции

AD

Да

 

Дополнительные 32 бита адреса или данных

PAR64

Да

 

Проверка четности для дополнительных 32 бит адреса или данных

С/ВЕ#

Да

 

Дополнительные 4 бита для указания, какие байты из слова нужно считать (или записать)

LOCK

Да

 

В многопроцессорных системах блокировка шины при осуществлении транзакции одним из процессоров

SBO#

   

В многопроцессорных системах обращение к кэш-памяти другого процессора

SDONE

   

В многопроцессорных системах сигнал о завершении слежения

INTx

   

Запрос прерывания

JTAG

   

Сигналы тестирования IEEE 1149.1 JTAG

M66EN

   

Сигнал связывается с источником питания или с землей (66 МГц или 33 МГц)

во готово принять данные. При записи сигнал IRDY# устанавливается позже, когда данные уже переданы в шину.

Сигнал IDSEL связан с тем, что у каждого устройства PCI должно быть конфигурационное пространство на 256 байт, которое другие устройства могут считывать (установив сигнал IDSEL). Это конфигурационное пространство содержит характеристики устройства. В некоторых операционных системах механизм автоматического конфигурирования (Plug and Play, РпР) использует это пространство, чтобы выяснить, какие устройства подключены к шине.

А теперь рассмотрим сигналы, которые устанавливаются подчиненным устройством. Сигнал DEVSEL# означает, что подчиненное устройство распознало свой адрес на линиях AD и готово участвовать в транзакции. Если сигнал DEVSEL# не поступает в течение определенного промежутка времени, задающее устройство предполагает, что подчиненное устройство, к которому направлено обращение, либо отсутствует, либо неисправно.

Следующий сигнал - TRDY#. Его подчиненное устройство устанавливает при чтении, чтобы сообщить, что данные находятся на линиях AD, и при записи, чтобы сообщить, что оно готово принять данные.

Следующие три сигнала требуются для передачи сообщений об ошибках. Один из них, сигнал STOP#, устанавливается подчиненным устройством, если произошла какая-нибудь неполадка и нужно прервать текущую транзакцию. Следующий сигнал, PERR#, используется для сообщения об ошибке четности в данных на предыдущем цикле. Для чтения этот сигнал устанавливается задающим устройством, для записи - подчиненным устройством. Необходимые действия должно предпринимать устройство, получившее этот сигнал. Наконец, сигнал SERR# служит для сообщения об адресных и системных ошибках.

Сигналы REQ# и GNT# предназначены для арбитража шины. Они устанавливаются не тем устройством, которое является задающим в данный момент, а тем, которому нужно стать задающим. Последний обязательный сигнал, RST#, применяется для перезагрузки системы, которая происходит, либо если пользователь нажимает кнопку RESET, либо если какое-нибудь системное устройство обнаруживает фатальную ошибку. После установки этого сигнала компьютер перезагружается.

Перейдем к факультативным сигналам, большинство из которых связано с расширением разрядности с 32 до 64 бит. Сигналы REQ64# и АСК 64# позволяют задающему устройству попросить разрешение осуществить 64-разрядную транзакцию, а подчиненному устройству принять эту транзакцию. Сигналы AD, PAR64 и С/ВЕ# являются расширениями соответствующих 32-разрядных сигналов.

Следующие три сигнала не связаны с переходом с 32 на 64 бита. Они используются в многопроцессорных системах. Не все платы PCI поддерживают такие системы, поэтому эти сигналы являются факультативными. Сигнал LOCK позволяет блокировать шину для параллельных транзакций. Следующие два сигнала связаны с фазой слежения, позволяющей сохранить согласованность кэшей разных процессоров.

Сигналы INTx нужны для запроса прерываний. Плата PCI может содержать до четырех логических устройств, каждое из которых имеет собственную линию

Глава 3. Цифровой логический уровень запроса прерываний. Сигналы JTAG предназначены для процедуры тестирования IEEE 1149.1 JTAG. Наконец, сигнал M66EN связывается либо с источником питания, либо с землей, что определяет тактовую частоту. Она не должна меняться во время работы системы.

Транзакции на шине PCI

Шина PCI в действительности очень проста. Чтобы лучше понять это, рассмотрим временную диаграмму на рис. 3.52. Здесь мы видим транзакцию чтения, за ней следуют пустой цикл и транзакция записи, которая осуществляется тем же задающим устройством.

Шина PCI

Рис. 3.52. Примеры 32-разрядных транзакций на шине PCI. Во время первых трех циклов происходит операция чтения, затем идет пустой цикл, а следующие три цикла -

операция записи

Во время цикла Т{ на спаде синхронизирующего сигнала задающее устройство помещает адрес на линии АБ и команду на линии С/ВЕ#. Затем задающее устройство устанавливает сигнал ЕИАМЕ#, чтобы начать транзакцию.

Во время цикла Т2 задающее устройство переключает шину, чтобы подчиненное устройство могло воспользоваться ею во время цикла Т3. Задающее устройство также изменяет сигнал С/ВЕ#, чтобы указать, какие байты в слове ему нужно считать.

Во время цикла Т3 подчиненное устройство устанавливает сигнал ОЕУ8ЕЬ#. Этот сигнал сообщает задающему устройству, что подчиненное устройство получило адрес и собирается ответить. Подчиненное устройство также помещает данные на линии AD и выдает сигнал TRDY#,- который сообщает задающему устройству о данном действии. Если подчиненное устройство не может ответить быстро, оно не снимает сигнал DEVSEL#, извещающий о присутствии этого устройства, но при этом не устанавливает сигнал TRDY# до тех пор, пока не сможет передать данные. При такой процедуре вводится один или несколько периодов ожидания.

В нашем примере (который вполне может произойти в действительности) следующий цикл - пустой. Мы видим, что в цикле Т5 то же самое задающее устройство инициирует процесс записи. Сначала оно, как обычно, помещает адрес и команду на шину. В следующем цикле оно выдает данные. Поскольку линиями AD управляет одно и то же устройство, цикл переключения не требуется. В цикле Т7 память принимает данные.

Шина ISA || Оглавление || PCI Express