PERR# Generation
Параметр, включающий/отключающий генерирование PERR# (PCI bus parity error) — сигнал ошибки в четности данных, передаваемых по шине PCI. Сигнал PERR# направляется на контролер немаскируемых прерываний (NMI).
PERR# является устойчивым сигналом трех состояний, используемым для сигнализации об обнаружении ошибки четности, связанной с фазой данных. Во время каждой фазы данных транзакции чтения целевой объект передает данные на шину AD. Таким образом, цель состоит в том, чтобы обеспечить правильную четность для инициатора по сигналу PAR, начинающемуся через один такт после подтверждения TRDY# (Target Ready). По завершении каждой фазы данных инициатор обязан зафиксировать содержимое AD (31: 0] и C/BE # [3: 0] и рассчитать ожидаемый паритет в течение тактового цикла, сразу после завершения фазы данных. Затем инициатор фиксирует бит четности, предоставленный целью, из сигнала PAR на следующем переднем фронте тактовых импульсов и сравнивает вычисленную и фактическую четность. Если происходит несовпадение, инициатор затем устанавливает PERR# в течение следующих тактовых импульсов (если это можно сделать с помощью единицы в бите ответа об ошибке четности в его регистре команд.) Утверждение PERR # откладывает завершение каждой фазы данных на два тактовых цикла PCI.
Иными словами, включение данной функции позволяет обнаруживать ошибки, возникающие при передаче данных по шине PCI.
Возможные варианты значений:
Disable — генерирование PERR# отключено
Enable — генерирование PERR# включено
5.1. Все о PCI-шине
— (поддержка спецификации шины PCI 2.1). При разрешении этого параметра поддерживаются возможности спецификации 2.1 шины PCI. Спецификация 2.1 имеет два основных отличия от спецификации 2.0: максимальная тактовая частота шины увеличена до 66 МГц и вводится механизм моста PCI-PCI, позволяющий снять ограничение спецификации 2.0, согласно которой допускается установка не более 4-х устройств на шине. К тому же внедрение спецификации 2.1 позволило оптимизировать совместное сосуществование PCI- и ISA-шин (подробнее в опции «Delayed Transaction»). Запрещение этого параметра имеет смысл только при возникновении проблем после установки дополнительной PCI-платы (как правило, проблемы могут возникнуть только с достаточно старыми PCI-устройствами), а также с ISA-устройствами, никак не желающими буферирования своей информации, а значит также не поддерживающими эту спецификацию. Параметр может принимать значения:
«Enabled» — разрешено,
«Disabled» — запрещено.
Опция может называться «PCI 2.1 Compliance».
PCI Clock Frequency
— опция для установки частоты шины PCI. В приведенном виде такая опция была внедрена на первых «пентиумных» машинах, а затем перенесена на 486-е системы с процессорами AMD и PCI-шиной. Частота шины через множитель «привязывалась» к частоте центрального процессора и имела следующий ряд значений: «CPUCLK/1.5» (по умолчанию), «CPUCLK/2», «CPUCLK/3» и фиксированные «14 Mhz» (было и так!).
Опция «PCI Clock Speed» предлагала следующие значения: «Same as CPU», «2/3 CPU», «CPU/2», «1/8 CPU». Опция «HCLK PCICLK» представляла собой делитель между системной частотой и частотой локальной шины: «1-1», «1-1.5», «AUTO». Опция «PCI Bus Frequency» предлагала значения «CPUExt/3», «CPUExt/2.5», «CPUExt/2», и они связывали частоту PCI-шины с системной. Опция «CPU Host/PCI Clock» лишь через значение «Default» позволяла для PCI-шины получить стандартные 33 МГц.
Предварительная картина была бы неполной без двух совместных опций. Опция «PCI Clock Speed Override» через значение «Enabled» вообще давала разрешение на «переопределение» частоты PCI-шины, а вот опция «PCI CLK» могла бы удивить и искушенного пользователя. Значение «Asynchronous» позволяло выбрать для PCI-шины произвольную частоту. А вот значение «Synchronise» «жестко» связывало тактовую частоту системной шины и частоту PCI-шины. Только предварительно с помощью джамперов на системной плате необходимо было установить системную частоту и множитель для процессора и в итоге получить, например, для Pentium 120 частоты: 120, 60 и 30 МГц (PCI-шина).
Значительно более современный вариант — это опция «PCI/AGP Clock». Это означает, что данной опцией устанавливаются частоты для двух шин, хотя еще не так давно различные версии BIOS не предоставляли таких возможностей. Приведенный вариант опции в большей степени предназначен для «разгона» устройств на PCI-шине (весьма опасного) и для AGP. Значения опции, т.е. частоты шин, напрямую связаны с установками частоты системной шины в опции «CPU Host Clock». Если последняя превышает или равна 100 МГц, то для PCI и AGP устанавливаются значения, соответственно равные «CPU Host Clock»/3 и /1.5. Для более низкой частоты шины процессора деление производится на 2 и 1. Поэтому, если системная частота равна 66 МГц, то для PCI и AGP получаем стандартное соотношение 33/66 МГц. Тот же, т.е. стандартный, вариант имеет место при частоте в 100 МГц. Все остальные значения частоты системной шины ведут к «разгону» обоих интерфейсов.
Современные системы с опциями типа «System/PCI Frequency (MHz)» предоставляют широчайшие возможности для «разгона», а именно не набор из нескольких значений, а солидное меню с целым рядом параметров, начиная со значения «100/33» (делитель 3:1) и заканчивая значением «178/44.51» (делитель 4:1) и с шагом для системной шины в 1 МГц. Все это было бы замечательно, если бы не присутствовал элемент риска. Практически все производители системных плат «успешно» стали решать задачи «разгона» PCI- и AGP-интерфейсов, отодвинув на последний план возможность ускорения системной шины и процессора без «втягивания» в этот «разгон» остальных системных компонентов. Первой «ласточкой» в этом «разогнанном» мире была системная плата от «Gigabyte» — GA8IRXP, предложившая дополнительные отдельные делители для каждой из шин и тем самым давшая возможность по сути устанавливать оптимальные частоты интерфейсов PCI и AGP независимо от «разогнанного» системного.
PCI Dynamic Decoding
— установка в «Enabled» позволяет системе запоминать PCI-команду, которая только что была запрошена. Если последующие команды совпадают с некоторой адресной областью, циклы записи будут автоматически интерпретироваться как PCI-команды.
PCI Latency Timer (PCI Clocks)
— (таймер времени ожидания для шины PCI). Значение этой опции указывает, в течение какого времени (в тактах PCI-шины) поддерживающая режим «Busmaster» PCI-карта может сохранять контроль над PCI-шиной, если к шине обращается другая PCI-карта. Фактически это и есть таймер, ограничивающий время занятия PCI-шины устройством-задатчиком шины. По истечении заданного времени арбитр шины принудительно отбирает шину у задатчика, передавая ее другому устройству. Допустимый диапазон изменения этого параметра — от 16 до 128 с шагом, кратным 8. Правда, в некоторых случаях добавляется еще значение «Auto Configured» (по умолчанию), что значительно облегчает сомнения и мучения пользователя.
Значение параметра необходимо изменять осторожно, так как оно зависит от конкретной реализации материнской платы, и только в случае, если в системе установлены по меньшей мере две PCI-карты, поддерживающие режим «Busmaster», например, SCSI- и сетевая карты. Графические PCI-карты не поддерживают режим «Busmaster», скорее, не поддерживали. Чем меньше устанавливаемое значение, тем быстрее другая PCI-карта, требующая доступа, получит доступ к шине. Если требуется выделить для работы, например, SCSI-карты больше времени, то можно увеличить значение для PCI-слота, в котором она находится. Значение для сетевой карты, например, соответственно необходимо уменьшить или вообще установить равным 0, хотя в некоторых случаях установка 0 не рекомендуется. В общем случае, какое значение параметра пригодно и оптимально для данной системы, зависит от применяемых PCI-карт и проверяется с помощью тестовых программ и опытной эксплуатации. Необходимо также учитывать, в какой степени «карты-конкуренты» чувствительны к возможным задержкам. Учитывая вышесказанное, вспомним о существовании еще одного «master»-устройства, а именно — центрального процессора. Так что слишком заниженное значение времени ожидания может сказаться на эффективности управления процессором локальной шины.
Опция также может носить названия: «PCI Bus Time-out», «PCI Master Latency», «Latency Timer», «PCI Clocks», «PCI Initial Latency Timer». Для последней опции ряд возможных значений имел вид: «Disabled», «16 Clocks», «24 Clocks», «32 Clocks». Еще одна старенькая опция, «PCI Bus Release Timer», имела такой набор значений: «4 CLKs», «8 CLKs», «16 CLKs», «32 CLKs».
И еще одно очень важное замечание. В свое время эта опция (и ей подобные) вводились с учетом совместного существования PCI- и ISA-шин. ISA-шина позволяла использовать одно «master»-устройство. Это применялось редко, как раньше, так и в последние годы существования ISA-шины. Зато PCI-шина дала возможность одновременного использования нескольких «master»-устройств. Учитывая различия в скорости шин, а тем более в их пропускной способности, необходимо было решить проблему совместной работы «master»-устройств на PCI-шине и стандартных устройств на более медленной ISA-шине. Особенно это касалось распространенных в то время звуковых и сетевых карт для ISA-шины, обладавших незначительным объемом буферной памяти, т.е. чувствительных к любым задержкам при передаче данных.
«AMI BIOS» позволял выбрать значение параметра в диапазоне от 0 до 255 тактов с единичным шагом. Значение «66» устанавливалось по умолчанию, хотя меньшее значение владения шиной PCI-устройством оказывалось более предпочтительным. Более свежие версии «AMI BIOS» стали менее демократичны: 32, 64, 96, 128, 160, 192, 224, 248 и «Disabled». К тому же «мелькнуло» еще одно название опции — «Master Latency Timer (Clks)», а по умолчанию стало устанавливаться значение «64».
Правда, это еще не весь возможный перечень. Функции «Latency Timer Value» и «Default Latency Timer Value» применяются совместно. Если в последней опции установить «Yes» (оно же и по умолчанию), то тогда первая функция будет проигнорирована. Чуть выше уже зашла речь о возможности установки параметров для отдельных слотов. Вот как реализует такую возможность «Phoenix BIOS»:
«PCI Device, Slot #n»,
«Default Latency Timer: [Yes]»,
«Latency Timer: [0040]»,
Естественно, что для работы с этими параметрами выводится отдельное конфигурационное подменю. Для n-го слота пользователь может выбрать установку по умолчанию («Yes»), тогда в нижнем поле будет выведено значение в 16-ричной форме. При этом доступ пользователя к полю «Latency Timer:» будет заблокирован. Если же в опции «Default Latency Timer:» установить «No», то появится возможность вручную установить значение из ряда: 0000h . 0280h. Последнее значение соответствует десятичному 640. По умолчанию устанавливается 0040h (64 такта).
Еще один вариант значений опции «Latency Timer»: «20h», «40h», «60h», «80h», «A0h», «C0h», «E0h», «Default» (т.е. «40h»).
Поэтому при конкретном решении стоящей перед пользователем задачи (или проблемы) надо исходить прежде всего из возможностей чипсета, версии BIOS и используемых карт расширения.
PCI Parity Check
— некоторые мощные чипсеты, прежде всего серверных систем, предоставляют возможность (через «Enabled») контролировать поток данных на шине PCI по четности. При этом контролируются как адресные данные, так и собственно данные. Ошибки при этом не исправляются, но пользователь о них информируется. Что также важно, такой метод контроля должна поддерживать и сама PCI-карта расширения.
Опция может называться и «PCI Parity Checking», или «PCI Bus Parity Checking».
PCI Preempt Timer
— (таймер времени вытеснения для шины PCI). На первый взгляд по смыслу эта функция аналогична функции «PCI Latency Timer», возможна даже некоторая путаница, хотя в данном случае кое-что наоборот. Значение этой опции указывает, в течение какого времени (в тактах PCI-шины, или локальных тактах — LCLKs) поддерживающая режим «Busmaster» PCI-карта сможет не контролировать шину, а находиться в состоянии ожидания пока этой шиной владеет другая карта. Арбитр шины отслеживает указанный временной интервал с момента подачи запроса, после чего ожидающее «master»-устройство вытесняет своего «товарища».
Для выбора предагаются значения из ряда: 5, 12, 20, 36, 68, 132, 260, в цифровом виде или с отображением единицы измерения — «5 LCLKs» и т.д. Обязательным является параметр «No Preemption» (или «Disabled»). Причем последний, как правило, устанавливается по умолчанию. Эта опция в таком виде уже не применяется, так что встреча с ней на старых машинах может вызвать некоторые трудности. Во всяком случае при наличии хотя бы двух «master»-устройств на PCI-шине значение «Disabled» (или аналогичное) должно быть заменено на более оптимальное.
Опция может называться и «PCI Preemption Timer».
Peer Concurrency
— (параллельная работа или, дословно, — равноправная конкуренция). Этот параметр разрешает/запрещает одновременную работу нескольких устройств на PCI-шине. При включении опции включается дополнительное буферирование циклов чтения/записи в чипсете. Но могут возникнуть проблемы, если не все PCI-карты готовы поддерживать такой режим работы. В этом случае работоспособность системы проверяется опытным путем.
Действие этой опции затрагивает и совместную работу PCI- и ISA-шин. Например, шинные PCI-циклы могут перераспределяться и буферизироваться во время ISA-операций, таких как передача по DMA-каналам в режиме «Bus-Master». Параметр может принимать значения:
«Enabled» (по умолчанию) — разрешено,
«Disabled» — запрещено.
Опция может называться и «PCI Concurrency» или «Bus Concurrency». Дополнительные устройства, «жаждущие конкуренции», появляются в опциях «PCI/IDE Concurrency» или «PCI-to-IDE Concurrency».
PERR#
SERR#
— «AMI BIOS» через обычные «Enabled» (разрешено, включено) и «Disabled» (запрещено, отключено) предлагает пользователю «поработать» с интерфейсными сигналами PCI-шины: PERR# и SERR#. Этим сигналам, для справки, соответствуют контакты шины — B40 и B42 соответственно. Несколько слов о самих сигналах.
«PERR#» — I/O PCI Parity Error. Сигнал выставляется приемником данных на шине через один шинный такт после выдачи сигнала PAR (Parity Error — контакт A43). Сигнал PERR# становится активным, если определена ошибка по четности на PCI-шине. При этом в PCICMD-регистре по сигналу PERR# устанавливается бит «Enable». Данной опцией как раз можно запретить установку сигнала об ошибке («Disabled» устанавливается по умолчанию).
«SERR#» — I/O PCI System Error. В итоге также в PCICMD-регистре устанавливается бит «SERRE» (SERR# Enable). Это интегрированный сигнал, для выставления которого требуется выполнение одного из условий:
1. Выставляется сигнал PERR# на PCI-шине, что контроллируется битом 3 ERRCMD-регистра,
2. Сигнал SERR# будет выставлен через один шинный такт после определения нарушения передачи данных в процессе инициированных PCI-циклов,
3. Сигнал SERR# будет выставлен при ECC-операциях. ECC-ошибка сигнализируется через ERRCMD-регистр управления при корректируемой однобитной ошибке или множественной некорректируемой,
4. Сигнал SERR# будет выставлен, когда ошибка по четности на PCI-шине определена во время передачи адресных данных с одновременной установкой некоторых сигналов ошибки в других регистрах,
5. Могут быть дополнительные ситуации, например, выставление входного сигнала ошибки G-SERR# в бите 5 ERRCMD-регистра.
Pci serr generation что это
"AMI BIOS" через обычные "Enabled" (разрешено, включено) и "Disabled" (запрещено, отключено) предлагает пользователю "поработать" с интерфейсными сигналами PCI-шины: PERR# и SERR#. Этим сигналам, для справки, соответствуют контакты B40 и B42 соответственно. Несколько слов о самих сигналах.
"PERR#" — I/O PCI Parity Error. Сигнал выставляется приемником данных на шине через один шинный такт после выдачи сигнала PAR (Parity Error — контакт A43). Сигнал PERR# становится активным, если определена ошибка по четности на PCI-шине. При этом в PCICMD-регистре по сигналу PERR# устанавливается бит "Enable". Данной опцией как раз можно запретить установку сигнала об ошибке ("Disabled" устанавливается по умолчанию).
"SERR#" — I/O PCI System Error. В итоге также в PCICMD-регистре устанавливается бит "SERRE" (SERR# Enable). Это интегрированный сигнал, для выставления которого требуется выполнение одного из условий:
1. Выставляется сигнал PERR# на PCI-шине, что контроллируется битом 3 ERRCMD-регистра,
2. Сигнал SERR# будет выставлен через один шинный такт после определения нарушения передачи данных в процессе инициированных PCI-циклов,
3. Сигнал SERR# будет выставлен при ECC-операциях. ECC-ошибка сигнализируется через ERRCMD-регистр управления при корректируемой однобитной ошибке или множественной некорректируемой,
4. Сигнал SERR# будет выставлен, когда ошибка по четности на PCI-шине определена во время передачи адресных данных с одновременной установкой некоторых сигналов ошибки в других регистрах,
5. Могут быть дополнительные ситуации, например, выставление входного сигнала ошибки G-SERR# в бите 5 ERRCMD-регистра.
Архитектура ЭВМ
Компоненты ПК
Интерфейсы
Мини блог
Самое читаемое
Конфигурационное пространство обычных устройств (тип 0)
Формат заголовка конфигурационного пространства приведен на рисунке ниже, серым цветом здесь выделены поля, обязательные для всех устройств; регистры, специфичные для устройства, могут занимать адреса конфигурационного пространства в пределах 40–FFh.
Перечисленные ниже поля идентификации допускают только чтение:
-
Device >
Остальные поля заголовка являются регистрами устройств, допускающими как запись, так и чтение.
Регистр команд Command (RW) служит для управления поведением устройства на шине PCI. Регистр допускает как запись, так и чтение. После аппаратного сброса все биты регистра (кроме специально оговоренных исключений) обнулены.
Назначение бит регистра команд:
- бит 0 — IO Space — разрешение ответа на обращения к пространству вводавывода;
- бит 1 — Memory Space — разрешение ответа на обращения к пространству памяти;
- бит 2 — Bus Master — разрешение работы инициатором (в режиме прямого управления шиной); игнорируется в PCI-X при завершениях расщепленных транзакций;
- бит 3 — Special Cycles — разрешение реакции на специальные циклы;
- бит 4 — Memory Write& and Invalidate enable — разрешение использовать команды «запись с инвалидацией» при работе инициатором (если бит обнулен, то вместо этих команд должна использоваться обычная запись в память); игнорируется в PCI-X;
- бит 5 — VGA palette snoop — разрешение слежения за записью в регистр палитр;
- бит 6 — Parity Error Response — разрешение нормальной реакции (вырабатывать сигнал PERR#) на обнаруженную ошибку четности или ECC. Если бит обнулен, то устройство должно только фиксировать ошибку в регистре состояния и продолжать выполнение транзакции; при ECC-контроле данные об ошибке записываются в регистры ECC;
- бит 7 — Stepping Control — возможность пошагового переключения (address/data stepping) линий (если устройство никогда этого не делает, бит регистра «запаян» в «0», если делает всегда — в «1», устройство с такой возможностью по сбросу устанавливает этот бит в «1»). В версии 2.3 и PCI-X бит освобожден (в связи с отменой степинга);
- бит 8 — SERR# Enable — разрешение генерации сигнала ошибки SERR# (ошибка адреса сообщается, когда этот бит и бит 6 установлены);
- бит 9 — Fast Back-to-Back Enable (необязательный, игнорируется в PCI-X) — разрешение ведущему устройству использовать быстрые смежные обращения к разным устройствам (если бит обнулен, быстрые обращения допустимы лишь для транзакций с одним агентом);
- бит 10 Interrupt Disable —, запрет генерации сигнала прерываний по линиям INTx (по аппаратному сбросу и включению питания бит обнулен — прерывания разрешены). Бит определен начиная с PCI 2.3. Ранее был резервным;
- биты [11:15] — резерв.
Регистр Status служит для определения состояния и свойств устройства. Биты, помеченные как RO, допускают только считывание. Другие биты регистра могут быть программно модифицированы операцией записи, с помощью которой можно только обнулять биты, но не устанавливать. При записи в позиции обнуляемых бит устанавливаются единичные значения. Назначение бит регистра состояния:
- биты [0:2] — резерв;
- бит 3— Interrupt Status (RO), наличие запроса прерывания. Устанавливается в единицу перед подачей сигнала по линии INTx, независимо от значения бита Interrupt Disable. С прерываниями MSI не связан. Бит определен начиная с PCI 2.3, ранее был резервным. В PCI-X 2.0 бит обязателен;
- бит 4 — Capability List (RO, необязательный) — признак наличия указателя новых возможностей в регистре со смещением 34h;
- бит 5 — 66 MHz Capable (RO, необязательный) — признак поддержки частоты 66 МГц;
- бит 6 — резерв;
- бит 7 — Fast Back-to-Back Capable (RO, необязательный) — признак поддержки быстрых смежных транзакций (fast back-to-back) с разными устройствами;
- бит 8 — Master Data Parity Error (только для устройств с прямым управлением) — инициатор (запросчик) транзакции обнаружил неисправимую ошибку данных;
- биты [10:9] — DEVSEL Timing — скорость выборки: 00 — быстрая, 01 — средняя, 10 — низкая (определяет самую медленную реакцию DEVSEL# на все команды, кроме Configuration Read и Configuration Write);
- бит 11 — Signaled Target Abort — устанавливается целевым устройством, когда оно отвергает транзакцию;
- бит 12 — Received Target Abort — устанавливается инициатором, когда он обнаруживает отвергнутую транзакцию;
- бит 13 — Received Master Abort — устанавливается ведущим устройством, когда оно отвергает транзакцию (кроме специального цикла);
- бит 14 — Signaled System Error — устанавливается устройством, подавшим сигнал SERR#;
- бит 15 — Detected Parity Error — устанавливается устройством, обнаружившим ошибку данных.
Регистр Cache Line Size (RW) служит для задания размера строки кэша (0–128, допустимые значения 2n, иные трактуются как 0). По этому параметру инициатор определяет, какой командой чтения воспользоваться (обычное чтение, чтение строки или множественное чтение). Ведомое устройство использует этот параметр для поддержки пересечения границ строк при пакетных обращениях к памяти. По сбросу регистр обнуляется.
Регистр Latency Timer (RW) задает значение таймера, ограничивающего длину транзакции при снятии сигнала GNT# (см. главу 2). Значение указывается в виде числа тактов шины, часть битов может не допускать изменения (обычно младшие три бита неизменны, так что таймер программируется с дискретностью в 8 тактов).
Регистр BIST (RW) служит для управления встроенным самотестированием (BuiltIn Self Test). Назначение бит регистра:
- бит 7 — возможность BIST;
- бит 6 — запуск теста: запись единицы инициирует тест, по окончании устройство сбрасывает бит (тест должен быть завершен не более чем за 2 с);
- биты [5:4] — резерв (0);
- биты [3:0] — код завершения теста: 0 — тест прошел успешно.
Регистр Card Bus CIS Pointer (необязательный) содержит указатель на структуру описателя Card Bus для комбинированного устройства PCI + Card Bus.
Регистр Interrupt Line (RW) хранит номер входа контроллера прерывания для используемой линии запроса (0–15 — IRQ0–IRQ15, в системах с APIC может иметь и большее значение; 255 — неизвестный вход или не используется).
Регистр Interrupt Pin (RO) задает линию, используемую для запроса прерывания: 0 — не используется, 1 — INTA#, 2 — INTB#, 3 — INTC#, 4 — INTD#, 5–FFh — резерв.
Регистр Min_GNT (RO) задает минимальное время, на которое ведущему устройству должно предоставляться управление шиной из расчета на частоту 33 МГц, в интервалах по 0,25 мкс.
Регистр Max_Lat (RO) задает максимально допустимую задержку предоставления ведущему устройству доступа к шине, в интервалах по 0,25 мкс (0 — нет специальных требований).
Регистры Subsystem ID (RO, задается производителем) и Subsystem Vendor ID (RO, производитель получает в PCI SIG) хранят идентификаторы, позволяющие точно идентифицировать карты и устройства (в системе могут быть установлены несколько карт с совпадающими идентификаторами устройства и производителя Device ID и Vendor ID). В поле 2Ch ставится идентификатор производителя карты PCI (может совпадать со значением в поле 0, если фирма выпускает и микросхемы, и карты).
Регистр Capability Pointer (CAP_PTR) содержит указатель на цепочку блоков регистров свойств функции, представленных в конфигурационных регистрах. Каждый блок представляет собой набор регистров, начинающийся с границы двойного слова (в указателе биты [1:0] сброшены). Каждый блок начинается с байта идентификатора типа свойства (CAP_ID, определенный PCI SIG), за которым следует указатель на следующий блок (нулевой указатель является признаком конца списка блоков), после чего расположены байты описаний самих свойств. Через CAP_PTR, например, отыскиваются регистры управления энергопотреблением (если есть), регистры AGP, некоторые регистры хост-контроллера USB 2.0 и ряд других.
Регистры Base Address Registers (BAR) описывают области памяти и портов ввода-вывода. Программными манипуляциями с регистрами можно определить размеры областей. Для областей памяти и портов описания различаются:
- область памяти (размером не более 2 Гбайт) описывается следующим образом:
—бит 0 = 0 — признак памяти;
—биты [2:1] — тип адресации: 00 — 32-битная адресация, 10 — 64-битная (в этом
случае регистр расширяется следующим за ним 4-байтным словом, 64-битная адресация обязательна для PCI-X), 01 и 11 — резерв (01 в прежних версиях предназначались для памяти в пределах первого мегабайта);
—бит 3 (Prefetchable) — признак «настоящей» памяти, то есть допускающей предвыборку;
—биты [31:4] — базовый адрес памяти; - область портов (размером до 256 байт) описывается следующим образом:
—бит 0 = 1 — признак области портов;
—бит 1 = 0 (резерв);
—биты [31:2] — базовый адрес блока портов.
Регистр Expansion ROM Base Address управляет адресацией ПЗУ программной поддержки устройства. Размер ПЗУ определяется так же, как и в регистрах базовых адресов (см. выше). Обращение к ПЗУ возможно лишь при разрешенном использовании памяти (бит 1 в регистре команд). Назначение бит регистра:
- бит 0 — разрешение использования ПЗУ;
- биты [1:10] — резерв;
- биты [11:31] — базовый адрес.
PCI 2.1 Support
– (поддержка спецификации шины PCI 2.1). При разрешении этого параметра поддерживаются возможности спецификации 2.1 шины PCI. Спецификация 2.1 имеет два основных отличия от спецификации 2.0: максимальная тактовая частота шины увеличена до 66 МГц и вводится механизм моста PCI-PCI, позволяющий снять ограничение спецификации 2.0, согласно которой допускается установка не более 4-х устройств на шине. К тому же внедрение спецификации 2.1 позволило оптимизировать совместное сосуществование PCI- и ISA-шин (подробнее в опции "Delayed Transaction"). Запрещение этого параметра имеет смысл только при возникновении проблем после установки дополнительной PCI-платы (как правило, проблемы могут возникнуть только с достаточно старыми PCI-устройствами), а также с ISA-устройствами, никак не желающими буферирования своей информации, а значит также не поддерживающими эту спецификацию. Параметр может принимать значения:
"Enabled" – разрешено,
"Disabled" – запрещено.
Опция может называться "PCI 2.1 Compliance".
PCI Clock Frequency
– опция для установки частоты шины PCI. В приведенном виде такая опция была внедрена на первых "пентиумных" машинах, а затем перенесена на 486-е системы с процессорами AMD и PCI-шиной. Частота шины через множитель "привязывалась" к частоте центрального процессора и имела следующий ряд значений: "CPUCLK/1.5" (по умолчанию), "CPUCLK/2", "CPUCLK/3" и фиксированные "14 Mhz" (было и так!).
Опция "PCI Clock Speed" предлагала следующие значения: "Same as CPU", "2/3 CPU", "CPU/2", "1/8 CPU". Опция "HCLK PCICLK" представляла собой делитель между системной частотой и частотой локальной шины: "1-1", "1-1.5", "AUTO". Опция "PCI Bus Frequency" предлагала значения "CPUExt/3", "CPUExt/2.5", "CPUExt/2", и они связывали частоту PCI-шины с системной. Опция "CPU Host/PCI Clock" лишь через значение "Default" позволяла для PCI-шины получить стандартные 33 МГц.
Предварительная картина была бы неполной без двух совместных опций. Опция "PCI Clock Speed Override" через значение "Enabled" вообще давала разрешение на "переопределение" частоты PCI-шины, а вот опция "PCI CLK" могла бы удивить и искушенного пользователя. Значение "Asynchronous" позволяло выбрать для PCI-шины произвольную частоту. А вот значение "Synchronise" "жестко" связывало тактовую частоту системной шины и частоту PCI-шины. Только предварительно с помощью джамперов на системной плате необходимо было установить системную частоту и множитель для процессора и в итоге получить, например, для Pentium 120 частоты: 120, 60 и 30 МГц (PCI-шина).
Значительно более современный вариант – это опция "PCI/AGP Clock". Это означает, что данной опцией устанавливаются частоты для двух шин, хотя еще не так давно различные версии BIOS не предоставляли таких возможностей. Приведенный вариант опции в большей степени предназначен для "разгона" устройств на PCI-шине (весьма опасного) и для AGP. Значения опции, т.е. частоты шин, напрямую связаны с установками частоты системной шины в опции "CPU Host Clock". Если последняя превышает или равна 100 МГц, то для PCI и AGP устанавливаются значения, соответственно равные "CPU Host Clock"/3 и /1.5. Для более низкой частоты шины процессора деление производится на 2 и 1. Поэтому, если системная частота равна 66 МГц, то для PCI и AGP получаем стандартное соотношение 33/66 МГц. Тот же, т.е. стандартный, вариант имеет место при частоте в 100 МГц. Все остальные значения частоты системной шины ведут к "разгону" обоих интерфейсов.
Современные системы с опциями типа "System/PCI Frequency (MHz)" предоставляют широчайшие возможности для "разгона", а именно не набор из нескольких значений, а солидное меню с целым рядом параметров, начиная со значения "100/33" (делитель 3:1) и заканчивая значением "178/44.51" (делитель 4:1) и с шагом для системной шины в 1 МГц. Все это было бы замечательно, если бы не присутствовал элемент риска. Практически все производители системных плат "успешно" стали решать задачи "разгона" PCI- и AGP-интерфейсов, отодвинув на последний план возможность ускорения системной шины и процессора без "втягивания" в этот "разгон" остальных системных компонентов. Первой "ласточкой" в этом "разогнанном" мире была системная плата от "Gigabyte" – GA8IRXP, предложившая дополнительные отдельные делители для каждой из шин и тем самым давшая возможность по сути устанавливать оптимальные частоты интерфейсов PCI и AGP независимо от "разогнанного" системного.
PCI Dynamic Decoding
– установка в "Enabled" позволяет системе запоминать PCI-команду, которая только что была запрошена. Если последующие команды совпадают с некоторой адресной областью, циклы записи будут автоматически интерпретироваться как PCI-команды.
PCI Latency Timer (PCI Clocks)
– (таймер времени ожидания для шины PCI). Значение этой опции указывает, в течение какого времени (в тактах PCI-шины) поддерживающая режим "Busmaster" PCI-карта может сохранять контроль над PCI-шиной, если к шине обращается другая PCI-карта. Фактически это и есть таймер, ограничивающий время занятия PCI-шины устройством-задатчиком шины. По истечении заданного времени арбитр шины принудительно отбирает шину у задатчика, передавая ее другому устройству. Допустимый диапазон изменения этого параметра – от 16 до 128 с шагом, кратным 8. Правда, в некоторых случаях добавляется еще значение "Auto Configured" (по умолчанию), что значительно облегчает сомнения и мучения пользователя.
Значение параметра необходимо изменять осторожно, так как оно зависит от конкретной реализации материнской платы, и только в случае, если в системе установлены по меньшей мере две PCI-карты, поддерживающие режим "Busmaster", например, SCSI- и сетевая карты. Графические PCI-карты не поддерживают режим "Busmaster", скорее, не поддерживали. Чем меньше устанавливаемое значение, тем быстрее другая PCI-карта, требующая доступа, получит доступ к шине. Если требуется выделить для работы, например, SCSI-карты больше времени, то можно увеличить значение для PCI-слота, в котором она находится. Значение для сетевой карты, например, соответственно необходимо уменьшить или вообще установить равным 0, хотя в некоторых случаях установка 0 не рекомендуется. В общем случае, какое значение параметра пригодно и оптимально для данной системы, зависит от применяемых PCI-карт и проверяется с помощью тестовых программ и опытной эксплуатации. Необходимо также учитывать, в какой степени "карты-конкуренты" чувствительны к возможным задержкам. Учитывая вышесказанное, вспомним о существовании еще одного "master"-устройства, а именно – центрального процессора. Так что слишком заниженное значение времени ожидания может сказаться на эффективности управления процессором локальной шины.
Опция также может носить названия: "PCI Bus Time-out", "PCI Master Latency", "Latency Timer", "PCI Clocks", "PCI Initial Latency Timer". Для последней опции ряд возможных значений имел вид: "Disabled", "16 Clocks", "24 Clocks", "32 Clocks". Еще одна старенькая опция, "PCI Bus Release Timer", имела такой набор значений: "4 CLKs", "8 CLKs", "16 CLKs", "32 CLKs".
И еще одно очень важное замечание. В свое время эта опция (и ей подобные) вводились с учетом совместного существования PCI- и ISA-шин. ISA-шина позволяла использовать одно "master"-устройство. Это применялось редко, как раньше, так и в последние годы существования ISA-шины. Зато PCI-шина дала возможность одновременного использования нескольких "master"-устройств. Учитывая различия в скорости шин, а тем более в их пропускной способности, необходимо было решить проблему совместной работы "master"-устройств на PCI-шине и стандартных устройств на более медленной ISA-шине. Особенно это касалось распространенных в то время звуковых и сетевых карт для ISA-шины, обладавших незначительным объемом буферной памяти, т.е. чувствительных к любым задержкам при передаче данных.
"AMI BIOS" позволял выбрать значение параметра в диапазоне от 0 до 255 тактов с единичным шагом. Значение "66" устанавливалось по умолчанию, хотя меньшее значение владения шиной PCI-устройством оказывалось более предпочтительным. Более свежие версии "AMI BIOS" стали менее демократичны: 32, 64, 96, 128, 160, 192, 224, 248 и "Disabled". К тому же "мелькнуло" еще одно название опции – "Master Latency Timer (Clks)", а по умолчанию стало устанавливаться значение "64".
Правда, это еще не весь возможный перечень. Функции "Latency Timer Value" и "Default Latency Timer Value" применяются совместно. Если в последней опции установить "Yes" (оно же и по умолчанию), то тогда первая функция будет проигнорирована. Чуть выше уже зашла речь о возможности установки параметров для отдельных слотов. Вот как реализует такую возможность "Phoenix BIOS":
"PCI Device, Slot #n",
"Default Latency Timer: [Yes]",
"Latency Timer: [0040]",
Естественно, что для работы с этими параметрами выводится отдельное конфигурационное подменю. Для n-го слота пользователь может выбрать установку по умолчанию ("Yes"), тогда в нижнем поле будет выведено значение в 16-ричной форме. При этом доступ пользователя к полю "Latency Timer:" будет заблокирован. Если же в опции "Default Latency Timer:" установить "No", то появится возможность вручную установить значение из ряда: 0000h . 0280h. Последнее значение соответствует десятичному 640. По умолчанию устанавливается 0040h (64 такта).
Еще один вариант значений опции "Latency Timer": "20h", "40h", "60h", "80h", "A0h", "C0h", "E0h", "Default" (т.е. "40h").
Поэтому при конкретном решении стоящей перед пользователем задачи (или проблемы) надо исходить прежде всего из возможностей чипсета, версии BIOS и используемых карт расширения.
PCI Parity Check
– некоторые мощные чипсеты, прежде всего серверных систем, предоставляют возможность (через "Enabled") контролировать поток данных на шине PCI по четности. При этом контролируются как адресные данные, так и собственно данные. Ошибки при этом не исправляются, но пользователь о них информируется. Что также важно, такой метод контроля должна поддерживать и сама PCI-карта расширения.
Опция может называться и "PCI Parity Checking", или "PCI Bus Parity Checking".
PCI Preempt Timer
– (таймер времени вытеснения для шины PCI). На первый взгляд по смыслу эта функция аналогична функции "PCI Latency Timer", возможна даже некоторая путаница, хотя в данном случае кое-что наоборот. Значение этой опции указывает, в течение какого времени (в тактах PCI-шины, или локальных тактах – LCLKs) поддерживающая режим "Busmaster" PCI-карта сможет не контролировать шину, а находиться в состоянии ожидания пока этой шиной владеет другая карта. Арбитр шины отслеживает указанный временной интервал с момента подачи запроса, после чего ожидающее "master"-устройство вытесняет своего "товарища".
Для выбора предагаются значения из ряда: 5, 12, 20, 36, 68, 132, 260, в цифровом виде или с отображением единицы измерения – "5 LCLKs" и т.д. Обязательным является параметр "No Preemption" (или "Disabled"). Причем последний, как правило, устанавливается по умолчанию. Эта опция в таком виде уже не применяется, так что встреча с ней на старых машинах может вызвать некоторые трудности. Во всяком случае при наличии хотя бы двух "master"-устройств на PCI-шине значение "Disabled" (или аналогичное) должно быть заменено на более оптимальное.
Опция может называться и "PCI Preemption Timer".
Peer Concurrency
– (параллельная работа или, дословно, – равноправная конкуренция). Этот параметр разрешает/запрещает одновременную работу нескольких устройств на PCI-шине. При включении опции включается дополнительное буферирование циклов чтения/записи в чипсете. Но могут возникнуть проблемы, если не все PCI-карты готовы поддерживать такой режим работы. В этом случае работоспособность системы проверяется опытным путем.
Действие этой опции затрагивает и совместную работу PCI- и ISA-шин. Например, шинные PCI-циклы могут перераспределяться и буферизироваться во время ISA-операций, таких как передача по DMA-каналам в режиме "Bus-Master". Параметр может принимать значения:
"Enabled" (по умолчанию) – разрешено,
"Disabled" – запрещено.
Опция может называться и "PCI Concurrency" или "Bus Concurrency". Дополнительные устройства, "жаждущие конкуренции", появляются в опциях "PCI/IDE Concurrency" или "PCI-to-IDE Concurrency".
PERR#
SERR#
– "AMI BIOS" через обычные "Enabled" (разрешено, включено) и "Disabled" (запрещено, отключено) предлагает пользователю "поработать" с интерфейсными сигналами PCI-шины: PERR# и SERR#. Этим сигналам, для справки, соответствуют контакты шины – B40 и B42 соответственно. Несколько слов о самих сигналах.
"PERR#" – I/O PCI Parity Error. Сигнал выставляется приемником данных на шине через один шинный такт после выдачи сигнала PAR (Parity Error – контакт A43). Сигнал PERR# становится активным, если определена ошибка по четности на PCI-шине. При этом в PCICMD-регистре по сигналу PERR# устанавливается бит "Enable". Данной опцией как раз можно запретить установку сигнала об ошибке ("Disabled" устанавливается по умолчанию).
"SERR#" – I/O PCI System Error. В итоге также в PCICMD-регистре устанавливается бит "SERRE" (SERR# Enable). Это интегрированный сигнал, для выставления которого требуется выполнение одного из условий:
1. Выставляется сигнал PERR# на PCI-шине, что контроллируется битом 3 ERRCMD-регистра,
2. Сигнал SERR# будет выставлен через один шинный такт после определения нарушения передачи данных в процессе инициированных PCI-циклов,
3. Сигнал SERR# будет выставлен при ECC-операциях. ECC-ошибка сигнализируется через ERRCMD-регистр управления при корректируемой однобитной ошибке или множественной некорректируемой,
4. Сигнал SERR# будет выставлен, когда ошибка по четности на PCI-шине определена во время передачи адресных данных с одновременной установкой некоторых сигналов ошибки в других регистрах,
5. Могут быть дополнительные ситуации, например, выставление входного сигнала ошибки G-SERR# в бите 5 ERRCMD-регистра.