ызовов. Два типа шлюзов, вообще говоря, похожи, однако шлюз вызова позволяет сделать интерфейс операционной системы идентичным с интерфейсом обычной процедуры. Используя шлюзы вызовов, программисты компиляторов и ассемблеров могут использовать общий набор соглашений для вызова любых процедур, оставляя за процессором 80386 заботы о дополнительной обработке, необходимой для изменения уровней привилегии. Как показано на рис.3-9, шлюз содержит логический адрес входной точки и набор атрибутов. Наиболее важный атрибут - это уровень привилегии шлюза. Уровень привилегии шлюза определяет уровни привилегии, которые могут использовать шлюз, для использования шлюза вызывающая процедура должна быть, как минимум, также привилегированна как шлюз. На рис.3-10 Показан пример. В этой гипотической системе программа пользователя имеет уровень привилегии 3, в то время как операционная система разделена на 2 уровня. Ядро операционной системы работает на уровне привилегии 0, а менее критичные функции операционной системы работают на уровне привилегии 1. (Уровень привилегии 2 не используется). В этой системе пользовательская программа позволяет вызывать сервисные процедуры, но не ядро. В соответствии с этим обеспечивает шлюз для сервисных процедур. Уровень привилегий этого шлюза равен 3, так что программа пользователя может вызывать процедуры через него. Присваивая шлюзу ядра уровень привилегии 1, операционная система позволяет сервисным процедурам вызывать ядро, но запрещает доступ к программе пользователя, которая менее привилегированна, чем шлюз ядра. Таким образом операционная система может применять шлюзы для аккуратного определения своих точек входа, включая уровни привилегии, необходимые для использования этих точек входа. Для того, чтобы сделать функции операционной системы вызываемыми из всех задач, операционная система, обычно помещает их шлюзы вызовов в глобальную таблицу дескрипторов. Для осуществления вызова через шлюз ловушки задача использует команду прерывания, для осуществления вызова через шлюз вызова задача исполняет команду обычного межсегментного вызова. Обе команды изменяют уровень привилегии задачи переходят к стеку, определенному (в TSS задаче) для старшего уровня привилегии. (Определенная система должна иметь свой собственный стек для того, чтобы гарантировать достаточно стековое пространство для работы, нельзя верить прикладным задачам, что они имеют достаточное стековое пространство). Перед вызовом через стек вызова задача может заслать параметры в свой стек, как она сделала бы это перед вызовом другой процедуры. Процессор 80386 автоматически копирует параметры в привилегированный стек (поле счетчика двойных слов в шлюзе вызова говорит процессору 80386, сколько двойных слов параметров необходимо скомпилировать). Системы, которые осуществляют вызовы через шлюзы ловушек, могут пересылать параметры в регистрах. 3.6Прерывания и особые ситуации Устройства генерируют прерывания, когда они требуют внимания, в то время как команды могут вызвать особые ситуации, если при их использовании возникают особые условия, такие как несуществующая страница. Типичное прерывание или особая ситуация требуют быстрого вмешательства программного драйвера, который отвечает на прерывание или особую ситуацию. После того, как драйвер вернет управление, 80386 возобновляет исполнение командного потока, который был прерван или который вызвал особую ситуацию. Поскольку прерывания и особые ситуации весьма похожи, процессор 80386 ` aa, b`(" %b их унифицированным способом. Каждый источник прерывания и каждый тип особой ситуации имеет идентификационный номер в диапазоне от 0 до 255, процессор 80386 использует этот номер для того, чтобы вызвать обработчик, связанный с прерыванием или особой ситуацией. При возникновении особых ситуаций они распознаются процессором 80386, который определяет номера особых ситуаций, как это показано в табл.3-1. Номера прерываний определяются операционной системой. Операционная система инициализирует программируемый контроллер прерываний 8259а таким образом, что каждый источник прерываний связывается со своим номером. При появлении прерывания 8259а передает процессору 80386 номер прерывания. Команды прерываний указывают свои номера своих операндах. Заметим, что для совместимости с существующим и будущим оборудованием фирмы INTEL номера прерываний и особых ситуаций от 0 до 71 не должны использоваться иначе, чем это указано в табл.3-1. Все другие номера могут применяться без ограничений. Таблица 3-1 +-----------------------------------------------------------+ | НОМЕР | ОПИСАНИЕ | +----------------+------------------------------------------| | 00 | ДЕЛЕНИЕ НА 0 | | 01 | ОСОБАЯ СИТУАЦИЯ ОТЛАДКИ | | 03 | КОНТРОЛЬНАЯ ТОЧКА ПРОГРАММЫ | | 04 | ПЕРЕПОЛНЕНИЕ | | 05 | НАРУШЕНИЕ ГРАНИЦ МАССИВА | | 06 | НЕДОПУСТИМЫЙ КОД ОПЕРАЦИИ | | 07 | СОПРОЦЕССОР ОТСУТСТВУЕТ | | 08 | ДВОЙНАЯ ОШИБКА | | 10 | НЕПРАВИЛЬНЫЙ TSS | | 11 | СЕГМЕНТНАЯ ОШИБКА | | 12 | ПЕРЕПОЛНЕНИЕ СТЕКА СВЕРХУ ИЛИ СНИЗУ | | 13 | НАРУШЕНИЕ ОБЩЕЙ ЗАЩИТЫ | | 14 | СТРАНИЧНАЯ ОШИБКА | | 16 | ОШИБКА СОПРОЦЕССОРА | +-----------------------------------------------------------+ 3.6.1 Таблица дескрипторов Сгенерировав или получив номер прерывания или особой ситуации, процессор 80386 использует его как индекс в таблице дескрипторов прерываний (IDT). IDT Может быть расположена в любом месте памяти, операционная система инициализирует IDT и загружает ее адрес в регистр таблицы дескрипторов прерываний (IDTR). Подобно GDT или LDT, IDT является вектором дескрипторов, хотя шлюзы являются единственным типом дескрипторов, допустимых в IDT. В IDT имеется один шлюз для каждого обработчика прерывания и особой ситуации (IDT функционально подобна таблице прерываний, имеющейся во многих архитектурах). Обработчик прерываний или особых ситуаций процессора 80386 может быть реализован в виде процедуры или задачи, ниже кратко обсуждаются достоинства этих двух способов. Процессор 80386 вызывает обработчик, организованный в виде процедуры так, он выполняет системный вызов через шлюз. Для вызова обработчика, организованного в виде задачи, процессор 80386 осуществляет переключение задач. Тип шлюза IDT обработчика говорит процессору, каким образом необходимо вызвать обработчик (см. Табл.3-2). Как было указано, шлюзы прерываний и ловушек функционально подобны шлюзам вызовов, за исключением того что они заставляют 80386 запомнить регистр флагов в стек обработчика. Они отличаются один от другого только состоянием флага разрешения прерывания (IF) при "e.$% в обработчик, в обработчик прерываний входят с запрещенными прерываниями, в то время как в обработчик ловушки, который обычно используется для обработки особых ситуаций, входят без изменения запрета. В процессе входа в обработчик - задачу 80386 загружает регистр флагов значением, запомненным в его TSS - задаче, разрешая обработчику работать с разрешенными или запрещенными прерываниями. Таблица 3-2 ХАРАКТЕРИСТИКИ ШЛЮЗОВ ПРЕРЫВАНИЙ И ОСОБЫХ СИТУАЦИЙ +-----------------------------------------------------------+ | ТИП ШЛЮЗА | ОБРАБОТЧИК | ПРЕРЫВАНИЯ | +------------+----------------------+-----------------------| | ПРЕРЫВАНИЕ | ПРОЦЕДУРА | ЗАПРЕЩЕНЫ | | ШЛЮЗ | ПРОЦЕДУРА | РАЗРЕШЕНЫ | | ЗАДАЧА | ЗАДАЧА | (ФЛАГ IF ОБРАБОТЧИКА) | +-----------------------------------------------------------+ Обработчики - процедуры являются подходящим средством для программ, которые должны работать в контексте (т.е. использовать адресное пространство и значения регистров) задачи, которая прервана или вызвала особую ситуацию. При 16-мгц-синхросигнале процедура входа в обработчик занимает 3,6 мкс. Подобно любой другой процедура прерывания или особой ситуации имеет доступ ко всем ресурсам работающей задачи: к ее данным и коду, ее регистрам и стеку. Так и должно быть для большинства особых ситуаций, поскольку в задаче возникла особая ситуация и может потребоваться доступ к данным задачи, чтобы эту особую ситуацию разрешить. Например, обработчику страничных ошибок необходимы страничные таблицы работающей задачи для того, чтобы найти дисковый адрес отсутствующей страницы. В идеале прерывания должны обрабатываться задачами, а не процедурами, так как прерывание , вообще говоря, не относится к задаче, которую оно прерывает. Более того, обработчик прерываний должен иметь свои собственные ресурсы (например, свой собственный стек), а не внедрять в стек какой-то задачи, которая работала в момент появления прерывания. С другой стороны переключение задач требует значительно большего времени чем вызов процедуры (17 мкс вместо 3,6), поскольку процессор запоминает и восстанавливает регистры при переключении задач. Системы, которые чрезвычайно чувствительны ко времени реакции на прерывания, могут обрабатывать прерывания при помощи процедур. 3.6.2 Особые случаи и регистры отладки Подобно большинству процессоров 80386 имеет команду контрольной точки, которую можно использовать для вызова отладчика. Однако отладочная аппаратура 80386 имеет форму регистров отладки, показанных на рис.3-11. Регистры отладки поддерживают контрольные точки данных являются важным нововведением, которое может сократить время отладки на многие часы, т.К. Например, позволяет установить, когда происходит непредусмотренная запись в структуры данных. Регистры отладки также сокращают искажения в программах, необходимые для записи команды точек останова в код, особенно для программ, которые защищены от записи или разделены другими задачами. Отладчик 80386 реализует в виде обработчика особой ситуации с номером 1. Процессор может непосредственно вызвать отладчик после исполнения любой команды (путем установки флага TF - флага ловушки пошагового исполнения), после переключения определенной задачи или после появления условия точки останов, определенного одним из `%#(ab`." отладки. Анализируя регистр статуса отладки, обработчик отладочной особой ситуации может определить, какая из причин его вызвала. Будучи вызван при переключении задач, отладчик может перезагрузить регистры отладки значениями, подходящими для новой задачи. 80386 Может ожидать появления одновременно до четырех условий контрольных точек, вызывая обработчик отладочной особой ситуации про появлении одного из условий. Каждое условие контрольной точки определяется содержимым регистра отладки, эти регистры могут быть загружены и запомнены при помощи привилегированных форматов команды MOVE. Условие контрольной точки содержит 32-битный линейный адрес, 2-битное поле длины и поле доступа, последние два элемента указываются в полях регистра управления отладкой DR7. Адрес условия контрольной точкой и длина формируют адресный диапазон, который контролируется процессором при каждой ссылке на память. Поле доступа определяет тип доступа, для которого процессор может вызвать особую ситуацию 1. Могут быть указаны 3 типа доступа: 1) исполнение команды по указанному адресу; 2) запись данных в диапазон адресов; 3) чтение или запись данных в диапазоне адресов. 3.7Ввод/вывод Системы, базирующиеся на 80386, могут распределять устройства ввода/вывода в пространство памяти процессора или в отдельное пространство ввода/вывода. Устройствам ввода/вывода, распределенным в пространство памяти, можно обращаться для чтения или записи, используя такие команды обращения, как MOVE, OR или аналогичные. Устройства, распределенные в памяти, могут быть защищены с помощью стандартного механизма защиты сегмента и страницы процессора 808386. В дополнении к своему адресному пространству процессор 80386 имеет 64к-байтное адресное пространство ввода/вывода. Устройства, распределенные в это пространство, управляются командами ввода, вывода, ввода строки и вывода строки. Первые две команды передают байт, слово, двойное слово в или из EAX-регистра. Последние две команды передают строку байтов, слов или двойных слов в память или из памяти. Команды ввода-вывода 80386 чувствительны к уровню привилегий. В регистре флагов имеется поле, называемое уровнем привилегий ввода/вывода (IOPL), которое определяет минимальный уровень привилегий , на котором работающая задача может исполнять команды ввода/вывода (IOPL загружается из TSS, так что задачи могут иметь различные IOPL). Например, если IOPL задачи равен 1, то задача не может выдавать команды ввода-вывода, исключая случаи, когда она работает на уровне привилегии 0 или 1. Механизм IOPL поддерживает операционные системы с многоуровневой защитой, в которых, например, критичные и стабильные процедуры ядра работают на уровне привилегии 0, а более изменчивые процедуры ввода-вывода работают на уровне привилегии 1, в этом случае операционная система должна только установить IOPL равным 1, когда она создает задачу, поскольку IOPL характерен для задачи, те задачи, которым можно доверять, могут исполнять команды ввода-вывода на прикладном уровне, позволяя тем самым непосредственно работать со специальными устройствами, для которых не имеется драйвера операционной системы. Для того, чтобы реализовать прямой доступ к памяти (DMA) от устройств вода/вывода, операционная система 80386 передает d('(g%a*() адрес контроллеру DMA и должна гарантировать, что сегменты и/или страницы, ко которым происходит обращение при DMA- передачах , не будут перемещаться во время этой операции. Один из способов пометить страницы "фиксированными на время ввода-вывода" - это использование одного из трех битов пользователя в страничной таблице. АРХИТЕКТУРНАЯ СОВМЕСТИМОСТЬ 80386 совместим на уровне объектного кода с 80286 и с 8086. Хотя можно просто использовать 80386 как быстрый 80286 или как очень быстрый 8086, их совместимость обладает достаточно большой гибкостью. Процессор 80386 может выполнять программы 80286 и 80386 параллельно, и, используя виртуальный режим 86 процессора 80386, существующие программы 8086 могут также исполняться параллельно. Таким образом при помощи 80386 становится возможным строить системы, которые могут параллельно исполнять программы, написанные для различных поколений семейства микропроцессоров. 4.1Совместимость с 80286 Архитектура 80286 является точным подмножеством архитектуры 80386. Так как процессор 80386 распознает все команды 80286, регистры, дескрипторы и т.Д., То операционная система 80286 и прикладные программы могут быть перенесены на аналогичное оборудование, построенное на основе 80386 без изменения хотя бы одного бита. Прямой перенос, упомянутый выше, является наиболее быстрым путем для того, чтобы запустить существующие программы, написанные для 80286 на системе, построенной на 80386. С другой стороны операционные системы для 80386 могут разрабатываться так, чтобы они поддерживали существующие прикладные программы для 80286, и, позволяя в то же время, новым прикладным программам полностью использовать свойства архитектуры 80386 (например, 32-битные параметры и длинные сегменты). В таких гибких разработках новые прикладные программы вызывают операционную систему непосредственно, передавая 32-битные параметры. Вызовы старых прикладных программ, которые организованы в 16-битном формате 80286, перехватываются и преобразуются в 32-битный формат, а затем передаются в операционную систему. 4.2Режимы реального и виртуального 8086 Процессор 80386 может выполнить объектные программы 80386 водном из 2 режимов: реальном режиме или виртуальном режиме 86. 80386 Входит в реальный режим при сбросе. В реальном режиме процессор обеспечивает быстрое исполнение без защиты так, как на 8086. Многие операционные системы будут переключаться из реального режима в режим защиты после инициализации, но также возможно работать все время в реальном режиме 8086. Принципиальное различие между реальным режимом 80386 и действительным режимом 8086 заключается в скорости: программы 8086, которые критичны по скорости исполнения (например, использующие рассчитанные временные циклы), могут потребовать небольших изменений для того, чтобы они работали правильно в значительно более быстром реальном режиме 80386. Но основное множество программ 8086 будет работать без каких-либо трудностей, т.к. они работают в реальном режиме 80286. Виртуальный режим 86 устанавливает исполнительную среду 8086 внутри защищенной многозадачной среды 80386. В то время, как реальный режим управляет всем, что делает процессор, виртуальный режим 86 может применяться в избранных задачах 80386. Когда процессор работает в виртуальном режиме 86, он ведет себя, как в 8086, но поле переключения к нормальной задаче, процессор работает как 80386 (который, на самом деле, может интерпретировать программы как для 80286, так и 80386). Таким образом виртуальный режим 86 позволяет операционной системе поддерживать исполнение программ 8086, 80286 и 80386 одновременно. В разделе 3 было описано, как сегмент состояния задачи отражает состояние своего виртуального процессора. Флаг VM86 в регистре флагов, который загружается из TSS, определяет работающий виртуальный процессор задачи как 8086 или 80386. Когда 80386 загружает свои регистры из TSS, у которого флаг VM86 установлен, процессор входит в виртуальный режим 86. Когда при последующем переключении задачи, процессор загружает значения в регистр из TSS, у которого флаг VM86 сброшен, он выходит из виртуального режима 86. Таким образом от задачи к задаче процессор эмулирует 80386 или 8086 согласно значению флага VM86. 80386 Также выходит из виртуального режима 86, когда он выдает особую ситуацию или возникает прерывание, и предоставляет полные ресурсы архитектуры обработчику прерываний и особых ситуаций. При возврате из обработчика, вызванного в виртуальном режиме 86,80386 автоматически возвращается в виртуальный режим 86. Так как адресное пространство 8086 равно 1 мегабайту, логические адреса, генерируемые задачей в виртуальном режиме 86, попадает в первый мегабайт линейного адресного пространства 80386. Множество задач, работающих в виртуальном режиме 86, могут пересекаться друг с другом, поэтому они все должны разделять младший мегабайт линейного адресного пространства. Операционная система может использовать страничный механизм 80386 для перемещения линейных адресных пространств задач, работающих в виртуальном режиме 86, в различные области физического адресного пространства. Используя страничный механизм таким способом, не только предотвращают наложение задач, работающих в виртуальном режиме 86, но позволяют операционной системе с виртуальной памятью обменивать страницы задач, работающих в виртуальном режиме 86, как если бы они были задачами 80386. Задача, работающая в виртуальном режиме 86, может выполнять программу, которая была написана для выполнения на однозадачном персональном компьютере. Такая программа может содержать команды, которые потенциально опасны, когда они выполняются в многозадачной среде. Например позволяя задаче, работающей в виртуальном режиме 86, выполнять команду очистки флага прерываний, тем самым запрещая прерывания, можно остановить всю систему. Для предотвращения таких нарушений 80386 выдает особую ситуацию, когда задача, работающая в виртуальном режиме 86, пытается исполнять команду ввода/вывода или команду, относящуюся к прерываниям. Запрещение исполнения таких команд защищает остальную часть системы от задач, работающих в виртуальном режиме 86, но не удовлетворяет потребности задач виртуального режима 86 в исполнении команд. Решение заключается в моделировании опасных команд в процедуре операционной системы, называемой монитором виртуальной машины. Когда вызывается обработчик особых ситуаций, он может проверить флаг VM86 в образе регистров флагов в стеке, чтобы определить, является ли источник особой ситуации задачей виртуального режима 86, в этом случае обработчик особых ситуаций может вызвать монитор виртуальной машины, который может промоделировать команду и вернуть управление задаче виртуального режима 86. Следует заметить, что монитор виртуальной машины моделирует только несколько команд 8086, и как моделируемые команды, так и те команды, которые 80386 исполняет непосредственно, выполняются значительно быстрее на 80386, чем на 8086. Работая совместно, 80386 и монитор виртуальной машины реализует полный набор команд 8086, и страничный механизм может обеспечить каждую задачу виртуального режима 86 своим собственным защищенным адресным пространством. Однако, большинство задач 8086 требуют дополнительных ресурсов, обеспечиваемых операционной системой и периферийным оборудованием. В качестве примера первого типа ресурсов можно привести файловую систему, в качестве второго типа можно привести контроллер растрового дисплея, работающего непосредственно под управлением прикладной программы. Эти ресурсы могут присутствовать в системе, основанной на 80386 в форме, отличной от топ, в которой они присутствовали ранее в системах, для которых была создана программа 8086, чтобы упростить работу для предоставления этих ресурсов в различных средах, 80386 может реализовать ловушки при обращении к операционной системе и к периферийным устройствам, которые делаются задачами виртуального режима 86. Например, большинство операционных систем 8086 используют команду прерывания для реализации вызовов операционной системы. 80386 Выдает особую ситуацию, когда задача виртуального режима 86 пытается исполнить команду прерываний. Монитор виртуальной машины может затем протранслировать вызов операционной системы в вызов операционной системы 80386, как это показано на рис.4-1. Если IOPL задачи виртуального режима 86 установлен равным значению, меньшему 3, то 80386 будет аналогичным образом создавать ловушки при исполнении всех команд ввода/вывода программой 8086. Страничный механизм 80386 может быть использован для перенаправления обращений к устройствам ввода/вывода, распределенным в память, на другие адреса, если это необходимо. Подобные обращения могут также вызвать особые ситуации путем указания соответствующих страниц памяти, как предназначенных только для чтения (чтобы быть обнаруженным в случае записи) или как отсутствующих (для обнаружения при чтении или записи). АППАРАТУРНАЯ РЕАЛИЗАЦИЯ Архитектура процессора 80386, описанная в предыдущих разделах, реализована более чем в 275000 транзисторах, использующих технологический процесс CHMOS III фирмы ИНТЕЛ. В данном разделе кратко рассматривается внутреннее устройство кристалла 80386 и более подробно сигналы, при помощи которых 80386 взаимодействует с другими компонентами. 5.1Внутренняя структура На рис.5.1. приведена обобщенная функциональная структура процессора 80386. Показанные 6 устройств организованы в конвейерную структуру, которая позволяя им работать параллельно над различными командами или над различными частями одной и то же команды. Устройство управления шиной управляет передачами на шине для других устройств. Если ни одно из других устройств не требуется шиной, устройство предварительной выборки читает следующее двойное слово командного потока из памяти в очередь предварительной выборки. Таким образом, большинство чтений байтов команды производится параллельно с исполнением других команд во время свободных циклов шины. Устройство декодирования расшифровывает каждый код операции, Преобразовывает его в указатель на микрокод, которые реализует данную команду. Исполнительное устройство выполняет микроинструкции. Исполнительное устройство может складывать два 32-битные регистра за 2 такта. Аппаратура умножения/деления выполняет 32-битное c,-.&%-(% за время от 9 до 41 такта, в зависимости от количества значащих цифр, а 32-битное деление за время от 38 до 42 тактов, в зависимости от того, являются операнды знаковыми или беззнаковыми. Сдвиг, циклический сдвиг и операции над полями битов выполняются при помощи быстрого двигателя, который может сдвигать до 64 бит за один такт. В типичной смеси команд, которая включает переходы и вызовы, 80386 исполняет команды со средней скоростью в 4,4 такта каждая. ИСПОЛНИТЕЛЬНОЕ СТРАНИЧНОЕ УСТРОЙСТВО УСТРОЙСТВО УСТРОЙСТВО СЕГМЕНТАЦИИ +--------------------+ +------------+ +-------------------+ | | | | | ПЕРЕКОДИРОВОЧНЫЙ | | РЕГИСТРЫ | | РЕГИСТРЫ | | БУФЕР ПРОСМОТРА | | | | СЕГМЕНТОВ | | ИСКЛЮЧЕНИЙ | +--------------------| | | | | | БЫСТРЫЙ СДВИГАТЕЛЬ | | | | | | | | | | | +--------------------| +------------| +-------------------| | УМНОЖЕНИЕ/ДЕЛЕНИЕ | | ТРАНСЛЯТОР | | ТРАНСЛЯТОР | +--------------------+ | СЕГМЕНТОВ | | СТРАНИЦ | | АРИФМЕТИЧЕСКОЕ +->| +->| | | ЛОГИЧЕСКОЕ | L-----T------- L---------T---------- | УСТРОЙСТВО | | --------- +--------T------------ | | УСТРОЙСТВО УПРАВЛЕНИЯ ШИНОЙ | | | | +-------------+ | | | | | ИНТЕРФЕЙС | | L----------T-------------------------+ ШИНЫ +-+ | | +-------------+ | | +---------------+ +------------------------+ | | | ДЕШИФРАТОР |<-+ОЧЕРЕДЬ ПРЕДВАРИТЕЛЬНОЙ-|<--- | | | | ВЫБОРКИ | | +---------------| +------------------------| | | ОЧЕРЕДЬ | | УЗЕЛ ПРЕДВАРИТЕЛЬНОЙ | L-------------+ КОМАНД | | ВЫБОРКИ | +---------------+ +------------------------+ УСТРОЙСТВО ДЕКОДИРОВАНИЯ Конвейерная организация выборки команды, ее декодирование и исполнение на одном кристалле не является типичным для современных микропроцессоров. С другой стороны помещение устройства управления памятью (MMU) на кристалл, содержащий конвейерную структуру, также является нововведением. Включение MMU в процессорный кристалл улучшает производительность, ускоряет трансляцию адреса. За счет уменьшения задержки распространения сигнала (большинство устройств управления памятью, организованных в виде отдельных кристаллов, вводят, как минимум, один такт ожидания на каждое обращение к памяти). Еще одним средством ускорения работы процессора является использование границ полутактов синхросигнала, которые доступны внутри кристалла (частота синхронизации на входе 80386 вдвое выше частоты, используемой в кристалле). Устройство управления памятью 80386 состоит из сегментного устройства и устройства управления страницами, как показано на рис.5-1. Устройство управления сегментами транслирует логические адреса и проверяет каждый доступ на соответствие атрибутам защиты сегмента. Для большинства команд устройство управления сегментами получает данные для трансляции и защиты из регистров сегментов и дескрипторов, находящихся на кристалле 80386. Устройство c/` "+%-(o страницами включается или выключается программами операционной системы. Когда устройство выключено, линейные адреса, полученные устройством управления, проходят через устройство управления страницами без изменения. Когда страничный механизм включен, устройство управления страницами транслирует линейные адреса в физические адреса и проверяет, что доступ соответствует атрибутам страницы. Устройство управления страницами включает 32-элементный перекодировочный буфер просмотра исключений (TLB), который запоминает необходимую для трансляции информацию для некоторого числа страниц, к которым происходили последние обращения. Используя TLB, устройство управления страницами может транслировать большинство обращений к страницам (обычно 98-99%) без обращения к страничным таблицам, находящимся в памяти. При необходимости устройство управления страницами генерирует циклы шины, необходимые для возврата старых элементов TLB в их страничные таблицы и для загрузки свободных мест в TLB элементами страничных таблиц, обращение к которым имеет место в текущей команде. 5.2Внешний интерфейс На рис.5-2. показана блок-схема типичной системы, использующей процессор 80386. Это, фактически рабочее место инженера- проектировщика. На рис.5-3 показан внешний интерфейс 80386 более подробно, выводы процессора сгруппированы по функциональному назначению. Ниже описаны сигналы, связанные с этими выводами. 5.2.1 Синхросигнал Первые версии 80386 работают при частоте 12,5 или 16 МГц. Сигнал синхронизации (CLK2) имеет частоту вдвое большую, чем частота кристалла. Генератор синхросигнала 82384 генерирует сигнал CLK2, который делится процессором 80386 на два, чтобы получить свою внутреннюю синхрочастоту. 5.2.2 Шины данных и адреса Процессор 80386 имеет отдельные 32-битные шины адреса и данных. Для совместимости с существующим оборудованием и драйверами устройств эффективная разрядность шины может динамически переключаться между 16 и 32 битами. Ниже этот вопрос обсуждается более подробно. Система команд 80386 поддерживает 8-, 16- и 32-битные передачи. Адресная шина организована так, чтобы непосредственно указывать байты данных, которые являются активными в данном цикле шины. Старшие 30 бит каждого адреса поступают на выводы A2-A31. Выводы BE0-BE3 (разрешение байта) указывают, какие байты шины данных относятся к текущей передаче. BE0 Соответствует разрядам D0- D7, BE1 соответствует D8-D15 и т.Д. Эти управляющие байты непосредственно соответствуют способу, которым большинство 32- битных подсистем памяти организованы, и устраняют необходимость в аппаратуре декодирования байтов (см.Рис.5-4). Если, например, необходимо присоединиться к системной шине, которая требует наличия младших битов адреса, A0 и A1 могут быть сгенерированы из BE0-BE3 при помощи 4 клапанов. Операнды в памяти 80386 не должны быть расположены на каких- нибудь границах, однако производительность повышается, когда они попадают на границы адресов, которые кратны их размеру в байтах. Это значит, что слова наилучшим образом располагаются на адресах, делящихся на два, а двойное слово - на адресах, делящихся на 4. (Элементы длиннее 32 бит, такие как числа с плавающей запятой с двойной точностью, должны также располагаться на 4-байтных #` -(f e для наилучшего быстродействия). 80386 Автоматически генерирует необходимое количество циклов шины для передачи операндов, не располагающихся на оптимальных границах, например, целое, расположенное в двойном слове, запомненное в четном адресе, не делящимся на 4, передается за два 16-битных цикла шины. 5.2.3 Определение циклов шины 80386 информирует внешнее оборудование о том, что на шине начинается нормальный цикл шины путем установки сигнала ADS (статус адреса). В тот же самый момент процессор определяет тип цикла шины с помощью сигналов W/R, D/C и M/IO. Эти сигналы отличают чтение от записи, данные от кодов команд и обращение к вводу/выводу от обращения к памяти, соответственно. 80386 Вырабатывает сигнал LOCK (захват шины) для мультипроцессорных применений и применений с несколькими ведущими устройствами. Сигнал говорит другим ведущим устройствам шины, что процессор выполняет операцию с несколькими циклами шины, которая не должна прерываться. 80386 автоматически выдает LOCK, когда он изменяет дескриптор сегмента и страничные таблицы, во время циклов шины, связанных с процедурой подтверждения, и когда он выполняет команду EXCHANGE. Команда EXCHANGE обеспечивает неделимую операцию "проверка и установка", которая является основным строительным элементом при реализации семафоров в разделяемой памяти. Программисты, работающие на языке ассемблера, могут захватить шину во время исполнения некоторых других команд, если этим командам предшествует префикс LOCK. 5.2.4 Управление циклом шины По указанию внешнего оборудования 80386 может реализовать два типа циклов шины: не конвейерный и конвейерный. Первый тип цикла обеспечивает 2-тактный доступ к высокоскоростным кэш-памятям и локальным памятям любого объема (эффективность обращений к Kэш- памятям зависит от их размера по отношению к элементам информации, с которыми обращаются к ним прикладные программы). Второй тип цикла шины позволяет низкоскоростным памятям иметь больше времени для ответа на цикл шин, позволяя процессору 80386 в то же время работать с максимальной скоростью. Внешнее оборудование может динамически разрешать и запрещать конвейеризацию шины путем установки сигнала NA (следующий адрес), как описано ниже. Предоставляя возможность динамического управления циклом шины, процессор 80386 позволяет инженеру-разработчику использовать комбинации из различных компонентов (элементов) памяти, которые удовлетворяют критериям стоимости, необходимого объема и требуемой производительности, а также приспосабливать проект для использования перспективных технологий при создании микросхем памяти. Процессор 80386 выводит тип цикла шины, как описаны выше, а внешнее оборудование сигнализирует, что оно ответило на цикл шины путем установки сигнала READY. Если, как это часто бывает, другой запрос шины ожидает внутри процессора 80386, когда сигнал READY уже установлен, процессор выводит следующий тип цикла шин. Если конвейеризация отключена, минимальное время между адресами и данными составляет два такта. Внешнее оборудование, которое не может ответить за два такта, может удлинить цикл шины путем удержания сигнала READY в неактивном состоянии, т.е. путем вставления тактов ожидания в цикл. Если 32-битные циклы шины исполняются друг за другом, то максимальная пропускная способность шины 80386 составит 32 мегабайта в секунду при частоте синхросигнала 16 МГц или 25 мегабайт в секунду при частоте 12,5 МГц. Благодаря внутренней конвейеризации процессор 80386 очень часто знает адрес и тип следующего цикла шины, прежде чем внешнее оборудование ответит на текущий цикл. Внешнее оборудование может использовать свойство внутренней конвейеризации адреса 80386 для получения более раннего доступа к следующему типу цикла шины. Конвейеризация адреса может дать внешнему оборудованию время, равное трем тактам между адресом и данными, в то время как для процессора пропускная способность шины останется равной двум тактам. Конвейеризация адреса наилучшим образом используется в системах с перемежающейся адресацией, которая может отвечать на доступ в различных блоках памяти параллельно. Устанавливая сигнал NA, внешнее оборудование может запрашивать 80386 выдать тип следующего цикла шины, как только он станет известен внутри процессора, а не ожидать сигнала READY (см.Рис.5-6). 5.2.5 Динамическое управление разрядность шины В дополнение к управлению типами циклов шины подсистема памяти (и ввода/вывода) также может динамически управлять разрядностью шины данных. Динамическое управление разрядностью шины позволяет: 1. Произвольно комбинировать 16- и 32-битные подсистемы памяти, программное обеспечение также может осуществлять 32-битные передачи независимо от того, имеет оно доступ к 16-или к 32- разрядной памяти; 2. Достаточно просто подсоединятся к 16-битным шинам, таким как шина MULTIBUS I; 3. Реализовывать совместимость с 16-битными периферийными устройствами (и их драйверами), регистры которых обычно располагаются на 16-разрядных, а не на 32-разрядных границах. Устанавливая сигнал "разрядность шины 16" (BS16), внешнее оборудование может проинструктировать процессор, чтобы он выполнил текущую передачу только на 16 младших битах шины данных. Если сигнал BS16 установлен, а обращение 32-разрядное, процессор 80386 принимает сигнал BS16 позже в цикле шины, позволяя вне[нему оборудованию установить его только для соответствующих типов памяти и ввода/вывода. 5.2.6 Статус процессора и управление Другое ведущее устройство шины (процессор или интеллигентное периферийное устройство, такое как пдп-контроллер), может запросить использования локальной шины 80386 путем выставления сигнала HOLD. Процессор подтверждает передачу шины установкой сигнала HLDA (подтверждение захвата) в конце текущего цикла шины (если он имел место), затем он подавляет свой следующий цикл шины до тех пор, пока сигнал HOLD не будет снят. Когда процессор 80386 освобождает шину для другого устройства, он поддерживает сигнал HLDA в активном состоянии, а остальные свои выводы - в высокоимпедансном состоянии, электрически изолируясь от системы. Прерывания 80386 классифицируются как маскируемые и не маскируемые, маскируемые прерывания поступают на вход процессора INTR (запрос прерывания), а прерывание второго типа на вход NMI (запрос немаскируемого прерывания). Программы операционной системы могут игнорировать вход INTR путем очистки флага разрешения прерывания. Процессор всегда принимает сигнал на входе NMI, многие системы используют этот вход для того, чтобы информировать процессор об аварии системы по питанию или глобальной системной ошибке. Запросы маскируемых прерываний обычно подсоединяются ко входу INTR через один или несколько программируемых контроллеров прерываний 8259а (пкп). Каждый 8259а может обрабатывать до 8 источников прерываний, несколько контроллеров 8259а могут быть каскадированы, чтобы обеспечить прием сигналов от максимум 64 различных источников прерываний. Операционная система инициализирует каждый 8259а при помощи идентифицируемого номера (вектора), обеспечивая тем самым для каждого входа прерываний свою программу обработки. 8259А предоставляет этот номер процессору 80386 в ответ на цикл шины процессора, связанной с подтверждением прерывания. 80386 Использует этот номер для вызова обработчика, предназначенного для ответа на прерывание. Установка сигнала RESET ставит процессор в начальное состояние (в реальный режим с запрещенными прерываниями) и заставляет его выбрать команду из физического адреса FFFFFFF04. 5.2.7 Управление сопроцессором Процессор 80386 посылает команды и операнды в числовой сопроцессор 80287 или 80387 путем выполнения циклов ввода/вывода шины к резервным адресам выше обычного 64-кбайтного пространства ввода/вывода . Числовой сопроцессор может быть выбран высоким уровнем сигнала на линии A31 при низком сигнале М/I0. 80386 Использует различные протоколы связи для каждого сопроцессора, посылая 16-битные величины в 80287 и 32-битные величины в 80387. Процессор 80386 знает в момент сброса, присутствует ли 80387, программное обеспечение инициализации может проверить наличие сопроцессора 80287. Сопроцессор устанавливает сигнал BUSY если он выполняет команду. 80386 Не посылает следующую команду сопроцессору до тех пор, пока сигнал BUSY - низкий. Программное обеспечение может синхронизировать процессор 80386 с сопроцессором, выдавая команду WAIT, которая приостанавливает 80386 до тех пор, пока сигнал BUSY остается неактивным. Сопроцессор устанавливает сигнал ERROR, когда он обнаруживает особую ситуацию, которая должна быть обработана операционной системой, в ответ на это 80386 вызывает обработчик особых ситуаций числового сопроцессора, выдавая особую ситуацию 7. Вывод PEREQ используется для реализации сопроцессорного протокола процессора 80386 СВЕДЕНИЯ О ФУНКЦИОНИРОВАНИИ 6.1Введение Характерной чертой 80386 является наличие простого функционального интерфейса для взаимосвязи с внешними модулями. В 80386 имеются две раздельные шины: шина адреса и шина данных. Шина данных - 32-разрядная и двунаправленная. В большинстве применяемых модулей для высокоскоростной локальной шины используются 32 разряда адреса, передаваемого по адресной шине, из них 2 младших разряда дешифрируются в 4 сигнала строба данных (каждый из этих сигналов разрешает или запрещает передачу соответствующего байта данных), а остальные 30 разрядов представляют собой двоичный код адреса. Для управления обменом по шине адреса и шине данных используются соответствующие управляющие сигналы. Изменяемая ширина (разрядность) шины данных позволяет процессору взаимодействовать как с 32-х, так и с 16-разрядными внешними шинами в синхронном режиме (см. 6.3.4). Если передача информации состоит из нескольких циклов обмена, каждый из которых требует 16-разрядной ширины шины данных, то все равно 80386 в каждом цикле автоматически выполнит необходимую процедуру установления разрядности шины. N-разрядные периферийные устройства могут быть подключены к 32- х или 16-разрядным шинам, при этом их производительность не снижается. В 80386 применяется новый режим конвейерной адресации, который обеспечивает в случае 32-х и 16-разрядной шин наиболее рациональное использование памяти, особенно это проявляется в очень напряженном режиме работы с ресурсами памяти (когда доступ к памяти требуется большому числу абонентов). Режим конвейерной адресации по сравнению с другими способами адресации значительно сокращает время нахождения интерфейса памяти в состоянии ожидания (см. 6.4.2). Конвейерную адресацию целесообразно применять в системах, имеющих в своем составе память с расслоением. В системах с рабочей частотой 16 МГц, включающих в себя память с расслоением со временем обращения 100 Нс (динамические ОЗУ), можно совсем исключить состояние ожидания, применяя конвейерную адресацию. Когда внешние модули потребуют режим конвейерной адресации, 80386 сформирует адрес и определит длительность цикла шины для предстоящего цикла шины (если позволяют внутренние ресурсы), даже если в настоящий момент процессор ожидает подтверждение в текущем цикле. Однако, не конвейеризированный способ адресации идеально подходит для устройств, в состав которых входит кэш-память, так как высокое быстродействие кэш-памяти позволяет работать в не конвейеризированном режиме. Для обеспечения максимальной гибкости системы на основе совмещения циклов конвейерный способ адресации применяется в синхронных системах. Цикл шины процессора является основным средством передачи информации из системы в процессор или из процессора в систему. Минимальная длительность цикла передачи данных по шине в 80386 составляет два периода тактовой частоты. Поскольку процессор 80386 имеет 32-разрядную шину данных и рабочую частоту 16 МГц, то следовательно максимальная пропускная способность 80386 составляет 32 Мбайт/сек. Однако, длительность любого цикла шины может быть увеличена, если в этом цикле задерживается выдача подтверждения обмена от внешнего модуля. В соответствующий момент времени подтверждение выдается путем формирования сигнала на входе READY (ГОТОВ) процессора 80386. 80386 может терять доступ к своим локальным шинам, передавая управление ими другим устройствам, например, каналам прямого доступа к памяти. При этом, за исключением единственного выхода HLDA, формируемого 80386, обеспечивается почти полная изоляция процессора от системы. Изоляция процессора необходима при передаче управления тестовому оборудованию или в отказоустойчивых применениях (в многопроцессорных системах для изоляции отказавшего процессора и замены его другим). В данном разделе представлены сведения об интерфейсе процессора. Во-первых, описано назначение и функции выводов процессора (см. 6.2 Описание сигналов). Кроме того, описаны изменения сигналов в течение циклов шины (см. 6.3 Механизм обмена по шине, 6.4 Описание функционирования шины и 6.5 Другие сведения по функционированию). 6.2Описание сигналов 6.2.1 Введение Подраздел начинается с краткого описания входных и выходных сигналов 80386, объединенных в функциональные группы. Отметим, что наличие символа # после названия сигнала означает, что активное состояние сигнала - состояние низкого уровня. И наоборот, когда такого символа # нет после названия сигнала, то сигнал активен при высоком уровне. Пример обозначения сигнала: M/IO# - Высокий уровень означает обращение к памяти. - Низкий уровень означает обращение к устройствам ввода/вывода. В описаниях сигналов встречаются иногда обозначения временных параметров, таких как "t25 Reset/Setup Time" (Время сброса при включении питания) и "t26 Reset Hold Time" (Время удержания сигнала сброса). Значения этих параметров приведены в таблице 7-4 и таблице 7-6. 6.2.2 Синхросигнал (CLK2) CLK2 обеспечивает основную синхронизацию работы 80386. Эта тактовая частота делится пополам для того, чтобы сформировать внутреннюю процессорную тактовую частоту, используемую при выполнении команд внутри процессора. Внутренний синхросигнал состоит из двух фаз: "фазы один" и " фазы два". Каждый период частоты. На рис.6-2 показано соотношение двух синхросигналов. Если необходимо, фаза внутреннего синхросигнала может быть синхронизирован от такого отрицательного фронта сигнала RESET, который обеспечит заданные времена установки и удержания, t25 и t26 (setup and hold times). 6.2.3 Шина данных (D0-D31) Двунаправленные с тремя состояниями линии шины данных обеспечивают перемещение данных от 80386 к другим устройствам. Наличие высокого уровня напряжения на входах/выходах шины данных обозначает наличие кодов логической единицы "1" на этих выводах. Шина данных может передавать данные как на 32-, так и на 16- разрядные шины благодаря тому, что есть возможность изменения размера шины данных; размер шины данных определяется значением входного сигнала BS16# (см. параграф 6.2.6 Шина управления). Для правильного выполнения операций считывания сигналов с шины данных требуется обеспечение необходимых значений времени установки t21 и времени удержания t22 считываемых данных. При любой операции записи (включая циклы останова и выключения) 80386 всегда передает все 32 разряда данных, даже если в текущем цикле размер шины обмена равен 16 разрядам. 6.2.4 Шина адреса (BE0#-BE3#, A2-A31) Эти выходы с тремя состояниями обеспечивают физическую адресацию памяти или адресацию устройств ввода/вывода. Шина адреса обеспечивает физическое пространство адресов памяти объемом 4 гигабайта (от 00000000H до FFFFFFFFH) и пространство адресов ввода/вывода объемом 64 килобайта (от 00000000H до 0000FFFFH) для обращения к устройствам ввода/вывода. Для передачи сигналов ввода/вывода, автоматически формируемых для обеспечения взаимодействия 80386 с сопроцессором, используется адресное пространство ввода/вывода от 800000F8H до 800000FFH, так как для обращения к сопроцессору необходимо совпадение двух условий: наличие высокого уровня напряжения на линии адреса А31 и наличие низкого уровня на линии M/IO#. Значения сигналов стробов данных BE0#-BE3# определяют соответственно те байты 32-разрядной шины данных, которые участвуют в текущей передаче. Это особенно удобно для взаимодействия с внешней аппаратурой. BE0# ОПРЕДЕЛЯЕТ УЧАСТИЕ В ОБМЕНЕ РАЗРЯДОВ D0-D7, BE1# -"- D8-D15, BE2# -"- D16-D23, BE3# -"- D24-D31. Количество стробов данных BE0#-BE3#, находящихся в активном состоянии, определяет размер операнда обмена (1,2,3 или 4 байта) (см. параграф 6.3.6 Выравнивание данных). Когда выполняется цикл записи в память или в устройство ввода/вывода, и передаваемый операнд занимает только старшие 16 разрядов шины данных (D16-D31), копия этого операнда одновременно передается по младшим 16 разрядам шины данных (D0-D15). Это дублирование выполняется для обеспечения оптимального режима записи на 16-разрядные шины. Процедура дублирования записываемых данных зависит от значений стробов данных BE0#-BE3#. Таблица 6-1 ЗАВИСИМОСТЬ ДУБЛИРОВАНИЯ ЗАПИСЫВАЕМЫХ ДАННЫХ ОТ ЗНАЧЕНИЙ BE0#-BE3# +-------------------------------------------------------------------+ |СТРОБЫ ДАННЫХ 80386| ЗАПИСЫВАЕМЫЕ ДАННЫЕ 80386 | ЕСТЬ ЛИ | +----T----T----T----+-------T-------T------T-----+ АВТОМАТИЧЕСКОЕ | |BE3#|BE2#|BE1#|BE0#|D24-D31|D16-D23|D8-D15|D0-D7| ДУБЛИРОВАНИЕ? | +----+----+----+----+-------+-------+------+-----+------------------| |ВЫС.|ВЫС.|ВЫС.|НИЗ.|НЕОПР. |НЕОПР. |НЕОПР.| А | НЕТ | +----+----+----+----+-------+-------+------+-----+------------------| |ВЫС.|ВЫС.|НИЗ.|ВЫС.|НЕОПР. |НЕОПР. | В |НЕОПР| НЕТ | +----+----+----+----+-------+-------+------+-----+------------------| |ВЫС.|НИЗ.|ВЫС.|ВЫС.|НЕОПР. | С |НЕОПР.| С | ДА | +----+----+----+----+-------+-------+------+-----+------------------| |НИЗ.|ВЫС.|ВЫС.|ВЫС.| D |НЕОПР. | D |НЕОПР| ДА | +----+----+----+----+-------+-------+------+-----+------------------| |ВЫС.|ВЫС.|НИЗ.|НИЗ.|НЕОПР. |НЕОПР. | В | А | НЕТ | +----+----+----+----+-------+-------+------+-----+------------------| |ВЫС.|НИЗ.|НИЗ.|ВЫС.|НЕОПР. | С | В |НЕОПР| НЕТ | +----+----+----+----+-------+-------+------+-----+------------------| |НИЗ.|НИЗ.|ВЫС.|ВЫС.| D | С | D | С | ДА | +----+----+----+----+-------+-------+------+-----+------------------| |ВЫС.|НИЗ.|НИЗ.|НИЗ.|НЕОПР. | С | В | А | НЕТ | +----+----+----+----+-------+-------+------+-----+------------------| |НИЗ.|НИЗ.|НИЗ.|ВЫС.| D | С | В |НЕОПР| НЕТ | +----+----+----+----+-------+-------+------+-----+------------------| |НИЗ.|НИЗ.|НИЗ.|НИЗ.| D | С | В | А | НЕТ | +-------------------------------------------------------------------+ Обозначения: D = логические записываемые данные в байте D24-D31 C= -"- D16-D23 B= -"- D8-D15 A= -"- D0-D7 6.2.5 Сигналы определения типа цикла шины (W/R#, D/C#, M/IO#, LOCK#) Эти выходы с тремя состояниями определяют тип текущего цикла шины. В зависимости от значения W/R# все циклы подразделяются на циклы записи и циклы чтения. D/C# разделяет все циклы на циклы обмена данными и циклы обмена управляющими сигналами. M/IO# отличает циклы обращения к памяти от циклов обращения к устройствам ввода/вывода. По сигналу LOCK# различаются циклы с блокированной шиной. Основными сигналами определения типа цикла шины являются W/R#, D/C# и M/IO#, так как эти сигналы принимают действительное значение одновременно с установлением активного уровня сигнала ADS# (выход строба адреса). Действительное значение сигнала LOCK# устанавливается тогда, когда начинается цикл шины (причем, цикл с конвейерной адресацией) и после установления активного уровня сигнала ADS# (см. параграф 6.4.3.4 конвейерная адресация). Точное соответствие типов циклов шины значениям сигналов W/R#, D/C# и M/IO# приведено в табл.6-2. Отметим одну комбинацию сигналов W/R#, D/C# и M/IO#, которая никогда не может быть получена при активном уровне сигнала ADS# (однако, эта комбинация, которая обозначена как "запрещенная" может иметь место в нерабочих состояниях шины, при неактивном уровне сигнала ADS#). Поскольку действительные значения сигналов M/IO#, D/C# и W/R# определяются временем действия сигнала ADS#, то в другое время для оптимального использования дешифрирующей схемы можно использовать и запрещенную комбинацию. Таблица 6-2 ОПРЕДЕЛЕНИЕ ТИПА ЦИКЛА ШИНЫ +-------------------------------------------------------------------+ | M/IO# | D/C# | W/R# | ТИП ЦИКЛА ШИНЫ | БЛОКИРОВАНА | | | | | | ЛИ ШИНА? | +-------+-------+-------+-----------------------------+-------------| |НИЗКИЙ |НИЗКИЙ |НИЗКИЙ | ПОДТВЕРЖДЕНИЕ ПРЕРЫВАНИЯ | ДА | +-------+-------+-------+-----------------------------+-------------| |НИЗКИЙ |НИЗКИЙ |ВЫСОКИЙ| ЗАПРЕЩЕННАЯ | ДА | +-------+-------+-------+-----------------------------+-------------| |НИЗКИЙ |ВЫСОКИЙ|НИЗКИЙ | ЧТЕНИЕ ДАННЫХ ИЗ УСТРОЙСТВА | НЕТ | | | | | ВВОДА/ВЫВОДА | | +-------+-------+-------+-----------------------------+-------------| |НИЗКИЙ |ВЫСОКИЙ|ВЫСОКИЙ| ЗАПИСЬ ДАННЫХ В УСТРОЙСТВО | НЕТ | | | | | ВВОДА/ВЫВОДА | | +-------+-------+-------+-----------------------------+-------------| |ВЫСОКИЙ|НИЗКИЙ |НИЗКИЙ | ЧТЕНИЕ КОМАНДЫ ИЗ ПАМЯТИ | НЕТ | +-------+-------+-------+-----------------------------+-------------| |ВЫСОКИЙ|НИЗКИЙ |ВЫСОКИЙ| ОСТАНОВ: ВЫКЛЮЧЕНИЕ: | НЕТ | | | | | АДРЕС=2 АДРЕС=0 | | | | | | НННННННН ННННННННННН | | | | | | (BE0#ВЫС. (BE0#НИЗК | | | | | | BE1#ВЫС. BE1#ВЫС. | | | | | | BE2#НИЗК. BE2#ВЫС. | | | | | | BE3#ВЫС. BE3#ВЫС. | | | | | | A2-A31НИЗК.) A2-A31НИЗК.)| | +-------+-------+-------+-----------------------------+-------------| |ВЫСОКИЙ|ВЫСОКИЙ|НИЗКИЙ | ЧТЕНИЕ ДАННЫХ ИЗ ПАМЯТИ | НЕКОТОРЫЕ | | | | | | ЦИКЛЫ | +-------+-------+-------+-----------------------------+-------------| |ВЫСОКИЙ|ВЫСОКИЙ|ВЫСОКИЙ| ЗАПИСЬ ДАННЫХ В ПАМЯТЬ | НЕКОТОРЫЕ | | | | | | ЦИКЛЫ | +-------------------------------------------------------------------+ 6.2.6 Сигналы управления шиной 6.2.6.1Введение Ниже перечисленные сигналы позволяют процессору определять начало цикла шины, а также дают возможность другим устройствам системы управлять конвейерной адресацией, размером шины данных и определять конец цикла шины. 6.2.6.2Строб адреса (ADS#) Этот входной сигнал с тремя состояниями на входе указывает на то что на выводах 80386 установлены действительные значения сигналов, определяющих тип цикла шины, и сигналов адреса (W/R#, D/C#, M/IO#, BE0# - BE3# и A2-A31). Сигнал ADS устанавливается в течение тактов Т1 и Т2 состояний шины (дополнительную информацию о a.ab.o-(oe шины см. 6.4.3.2 Не конвейеризированная адресация и 6.4.3.4 Конвейерная адресация). 6.2.6.3Сигнал подтверждения (READY#) Этот вход указывает на то, что текущий цикл шины завершен, и те байты, участие которых в цикле обмена определено значениями BE0#-BE3# и BE16#, приняты или переданы. Когда в течение цикла чтения или цикла подтверждения прерывания формируется активный уровень сигнала READY#, 80386 "защелкивает" входные данные и завершает цикл. Когда сигнал READY# формируется в цикле записи, процессор завершает цикл шины. Сигнал READY# игнорируется в первом такте всех циклов шины, затем в каждом такте состояние READY# опрашивается до тех пор, пока не установится активный уровень сигнала READY#. READY# должен быть сформирован для подтверждения в каждом цикле шины, включая циклы отображения останова и отображения выключения. Для правильной работы время установки t19 и время удержания t20 сформированного сигнала READY# должны иметь определенные необходимые значения (См. все параграфы раздела 6.4 Описание функционирования шины). 6.2.6.4Запрос следующего адреса (NA#) Этот сигнал используется для запрашивания адреса в режиме конвейерной адресации. Этот вход сообщает процессору о том, что система готова принять из 80386 новые значения сигналов BE0#-BE3#, A2-A31, W/R#, D/C# и M/IO#, даже если завершение текущего цикла не подтверждено сигналом READY#. Если 80386 обнаружит на входе NA# активный уровень, он выдает на шину следующий адрес, обеспечив внутреннюю подготовку к следующему запросу шины (см. параграф 6.4.2 Конвейерная адресация и 6.4.3 Циклы чтения и записи). 6.2.6.5Указатель 16-разрядной шины (BS16#) Благодаря сигналу BS16# осуществляется непосредственная связь 80386 с 32-разрядной и 16-разрядной шинами данных. Установка активного уровня этого входа приведет к тому, что в текущем цикле шины обмен будет производиться только по младшей половине шины данных (D0-D15) в соответствии со значениями сигналов BE0# и BE1#. Дополнительное влияние сигнала BS16# (установленного в активное состояние) не проявится, если в текущем цикле сформированы активные уровни только сигналов BE0# или BE3#, действие сигнала BS16# (активного уровня) заставит процессор 80386 выполнить необходимые переключения для правильной передачи старшего(их) байта(ов) по линиям D0-D16. Если операнд занимает обе половины шины данных и BS16# в активном состоянии, то 80386 автоматически выполнит второй 16- разрядный цикл шины. Для правильной работы время установки t17 и время удержания t18 сигнала BS16# должны иметь определенные необходимые значения. Циклы ввода/вывода, автоматически выполняемые 80386 для взаимосвязи с сопроцессором, не требуют установки сигнала BS16#. Сопроцессоры типа 80287 и 80387 анализируют входной сигнал ERROR# сразу после отрицательного фронта сигнала RESET. 80386 обменивается только 16-разрядными посылками с 80287, а в случае взаимодействия 80386 с сопроцессором 80387 обмен производится только 32-разрядными посылками. Таким образом, значение BS16# влияет на циклы с участием 80287, а в течение циклов с участием 80387 сигнал BS16# должен поддерживаться на неактивном уровне. 6.2.7 Сигналы арбитража шины 6.2.7.1Введение В этом разделе описывается механизм, благодаря которому процессор передает управление своими локальными шинами другим активным абонентам, запрашивающим управление шиной (см. 6.6.1). 6.2.7.2Запросы на захват шины (HOLD) Этот выход указывает на то, что каким-то устройствам кроме 80386 требуется управление шиной. Сигнал HOLD должен поддерживаться в активном состоянии в течение всего времени, пока любое другое устройство является владельцем локальной шины. Сигнал HOLD игнорируется во время действия RESET. Если сигнал RESET появится во время действия сигнала HOLD, то более приоритетный сигнал RESET установит шину в нерабочее состояние быстрее, чем установится состояние подтверждения захвата шины (состояние высокого сопротивления). Процессор срабатывает по фронту сигнала HOLD и, пока HOLD поддерживается в активном состоянии, постоянно анализирует уровень этого сигнала. Вход HOLD - синхронизированный. Для правильной работы время установки t23 и удержания t24 должны всегда иметь определенное необходимое значение. 6.2.7.3Подтверждение захвата шины (HLDA) Формирование активного уровня на выходе HLDA указывает на то, что 80386 передает управление своей локальной шиной в ответ на установление сигнала HOLD и переходит в состояние подтверждения захвата шины. Состояние подтверждения захвата предполагает почти полную изоляцию процессора. Сигнал HLDA в этом состояние - единственный сигнал, выдаваемый 80386. Другие выходные сигналы или двунаправленные сигналы (D0-D31, BE0#-BE3#, A2-A31, W/R#, D/C#, M/IO#, LOCK# и ADS#) переключаются в третье (высокоимпедансное) состояние, поэтому запросившее шину устройство может захватить их. К некоторым сигнальным линиям желательно подсоединить фиксирующие резисторы для того, чтобы избежать ложное срабатывание по этим сигналам, когда они не формируются текущим владельцем шины (см. 7.2.3 Рекомендации по выбору и применению резисторов). Кроме того, один используемый фронт, который может быть сформирован на входе NMI во время состояния подтверждения захвата, запоминается с тем, чтобы он был проанализирован и обработан после снятия сигнала HOLD. Кроме обычного использования состояния подтверждения захвата при взаимодействии 80386 с контроллерами ПДП (прямого доступа к памяти) или активными периферийными устройствами, состояние почти полной изоляции процессора особенно удобно использовать в режиме тестирования системы, когда тестовое оборудование управляет системой, а также в отказоустойчивых системах. 6.2.8 Сигналы интерфейса с сопроцессором 6.2.8.1Введение В следующих параграфах этого раздела дано описание сигналов, предназначенных для интерфейса с арифметическим сопроцессором. Эти сигналы, дополняя сигналы шины данных, шины адреса и сигналы определения типа цикла шины, управляют взаимодействием 80386 с его сопроцессором 80287 или 80387. 6.2.8.2Запрос сопроцессора (PEREQ) Активный уровень этого сигнала указывает на то, что сопроцессор требует, чтобы в ответ на его запрос операнды данных были переданы в/из памяти. Активный уровень этого входного сигнала указывает на запрос сопроцессора на передачу процессором 80386 операнда данных в/из памяти, в ответ на этот запрос 80386 передает информацию между a./`.f%aa.`., и памятью. Поскольку в 80386 хранится код операции, выполняемой сопроцессором, 80386 осуществляет запрошенную передачу данных в заданном направлении и по заданному адресу памяти. 80386 анализирует и срабатывает по уровню сигнала PEREQ. Сигнал PEREQ может быть асинхронным по отношению к CLK2. 6.2.8.3Сопроцессор занят (BUSY#) Активный уровень этого сигнала указывает на то, что сопроцессор еще выполняет заданную текущую инструкцию и пока не может принять другую инструкцию. Когда 80386 встречает любую инструкцию сопроцессора, которая оперирует с арифметическим стеком (стеком сопроцессора) (т.е. инструкции загрузки, "POP" - инструкции (убрать в стек) или арифметические операции), или инструкцию ожидания WAIT, он сразу автоматически анализирует состояние входного сигнала BUSY# и будет просматривать его до тех пор, пока BUSY# не переключится в неактивное состояние. Такой просмотр входного сигнала BUSY# предотвращает преждевременную выдачу следующей инструкции во время выполнения сопроцессором предыдущей инструкции. Инструкция сопроцессора FNINIT и FNCLEX могут быть выполнены даже при наличии активного уровня на входе BUSY#, так эти инструкции используются для инициализации и прерывания-сброса сопроцессора. 80386 анализирует и срабатывает по уровню сигнала BUSY#. Сигнал BUSY# может быть асинхронным по отношению к CLK2. Сигнал BUSY# служит еще одной цели. Если во время отрицательного фронта сигнала RESET на входе BUSY# имеется сигнал низкого уровня, то 80386 выполнит процедуру само диагностирования (см. 6.6.3 Функционирование шины в течение и после действия сигнала RESET). Если же в этот момент сигнал BUSY# будет иметь высокий уровень, то само диагностирование выполняться не будет. 6.2.8.4Ошибка сопроцессора (ERROR#) Этот входной сигнал указывает на то, что при выполнении сопроцессором предыдущей инструкции им был сформирован код ошибки, немаскируемый управляющим регистром сопроцессора. При выполнении сопроцессором инструкции процессор 80386 автоматически анализирует входной сигнал ERROR#, и если установится активный уровень сигнала ERROR#, то 80386 вырабатывает прерывание 7, чтобы обратиться к программам обработки ошибок. Некоторые инструкции сопроцессора, в основном те, которые сбрасывают флаги арифметических ошибок в сопроцессоре или сохраняют состояние сопроцессора, исполняются без выработки процессором 80386 прерывания 7, даже если установлено активное состояние сигнала ERROR#. К таким инструкциям относятся FNINIT, FNCLEX, FSTSW, FSTSWAX, FSTCW, FSTENV, FSAVE, FESTENV и FESAVE. 80386 анализирует и срабатывает по уровню сигнала ERROR#. Сигнал ERROR# может быть асинхронным по отношению к CLK2. Сигнал ERROR# выполняет еще одну функцию. Если низкий уровень сигнала ERROR# установится не позже, чем через 20 периодов тактовой частоты CLK2 после отрицательного фронта сигнала RESET, и сохранится таким по меньшей мере до тех пор, пока 80386 не начнет свой первый цикл шины, то это указывает на то, что в системе используется сопроцессор типа 80387 (разряд ET в регистре CR0 автоматически устанавливается в 1). В обратном случае в системе используется сопроцессор типа 80287 или не используется никакой (разряд ET в регистре CR0 автоматически устанавливается в 0). См. 6.6.3 Функционирование шины в течение и после действия сигнала RESET. Изменение сигнала на выходе ERROR# влияет на установку b.+l*. бита ET. Программно устанавливаются необходимые значения битов EM и MP в регистре CR0. Следовательно, для различения случая наличия в системе сопроцессора типа 80287 от случая, когда в системе вообще нет сопроцессора, необходимо программное задание соответствующего значения бита EM в регистре CR0 (единичное значение бита EM устанавливается в случае, когда в системе нет сопроцессора). Если анализ изменения состояния сигнала ERROR# показал наличие в системе 80387 (сигнал ERROR установлен в низкое состояние после сброса), но позднее программно установлено единичное состояние бита EM (EM=1), то 80386 ведет себя так, как если бы в системе не было сопроцессора. 6.2.9 Сигналы прерывания 6.2.9.1Введение В этом разделе описываются входные сигналы, которые могут прерывать или приостанавливать выполнение процессором текущего набора инструкций. 6.2.9.2Маскируемый запрос прерывания (INTR) Активный уровень этого входного сигнала обозначает запрос на обслуживание прерывания, которое может быть замаскировано битом IF флагового регистра Flag Register 80386. В ответ на входной сигнал INTR 80386 выполняет два цикла подтверждения прерывания и в конце второго цикла "защелкивает" 8-битовый вектор прерывания, принятый по линиям D0-D7, чтобы идентифицировать источник прерывания. 80386 анализирует уровень и срабатывает по уровню сигнала INTR. Сигнал INTR может быть асинхронным по отношению к CLK2. Для того, чтобы гарантировать опознание процессором маскируемого запроса прерывания, активный уровень сигнала INTR должен поддерживаться до начала первого цикла подтверждения прерывания. 6.2.9.3Немаскируемый запрос прерывания (NMI) Этот входной сигнал определяет запрос на обслуживание прерывания, которое не может быть программно замаскировано. Запрос немаскируемого прерывания всегда обрабатывается по программе, адрес начала которой указан в элементе (позиции) 2 таблицы прерываний. Когда обрабатывается NMI, то благодаря фиксированному значению позиции таблицы прерываний, соответствующей NMI, циклы подтверждения прерывания не выполняются. 80386 анализирует и срабатывает по положительному фронту сигнала NMI. Сигнал NMI может быть асинхронным по отношению к сигналу CLK2. Чтобы гарантировать опознание сигнала NMI, последний должен иметь неактивный уровень по меньшей мере в течение 8-и периодов CLK2, и затем должен быть установлен и поддерживаться активный уровень сигнала NMI по меньшей мере в течение 8-и периодов CLK2. Как только начинается обработка запроса прерывания NMI, другие запросы NMI обрабатываться не будут до появления очередной инструкции IRET, которая означает конец процедуры обслуживания прерывания NMI. Однако, если все-таки раньше этого времени снова будет сформирован активный уровень сигнала NMI, то один положительный фронт сигнала NMI будет запомнен для последующей обработки после выполнения очередной инструкции IRET. 6.2.9.4Сигнал сброса (установки в исходное состояние){RESET} Этот входной сигнал останавливает выполнение любой операции и переводит 80386 в состояние, известное как состояние сброса. Сброс 80386 производится установкой активного уровня сигнала RESET в течение 15-и или более периодов CLK2 (за 78 или более периодов CLK2 до запроса само диагностирования). Когда установлен активный c`."%-l сигнала RESET, сигналы на всех остальных входных выводах игнорируются, а шинные выводы переводятся в нерабочее состояние как показано в табл.5-3. Если одновременно установлены активные уровни сигналов RESET и HOLD, то более приоритетным будет сигнал RESET. Сброс по сигналу RESET будет произведен, даже если 80386 находился в состоянии подтверждения захвата до установки RESET. 80386 анализирует и срабатывает по уровню (активному или неактивному) сигнала RESET. Сигнал RESET может быть асинхронным по отношению с CLK2. Если необходимо, фаза внутреннего синхросигнала процессора, а также целое состояние 80386 могут быть полностью синхронизированы с внешними схемами, если обеспечить необходимые для этого значения времени установки t25 и времени удержания t26 отрицательного фронта сигнала RESET. Таблица 6-3 СОСТОЯНИЕ ВЫВОДОВ (НЕРАБОТАЮЩЕЙ ШИНЫ) В ТЕЧЕНИЕ ДЕЙСТВИЯ СИГНАЛА RESET +-----------------------------------------------------------------+ | ОБОЗНАЧЕНИЕ ВЫВОДОВ | УРОВНИ СИГНАЛОВ ВО ВРЕМЯ СБРОСА RESET | +-------------------------+---------------------------------------| | ADS# | ВЫСОКИЙ | +-------------------------+---------------------------------------| | D0-D31 | ТРЕТЬЕ СОСТОЯНИЕ (ВЫСОКИЙ ИМПЕДАНС) | +-------------------------+---------------------------------------| | BE0#-BE3# | НИЗКИЙ | +-------------------------+---------------------------------------| | A2-A31 | ВЫСОКИЙ | +-------------------------+---------------------------------------| | W/R# | ВЫСОКИЙ | +-------------------------+---------------------------------------| | D/C# | ВЫСОКИЙ | +-------------------------+---------------------------------------| | M/IO# | НИЗКИЙ | +-------------------------+---------------------------------------| | LOCK# | ВЫСОКИЙ | +-------------------------+---------------------------------------| | HLDA | НИЗКИЙ | +-----------------------------------------------------------------+ 6.2.10 Список сигналов В табл.6-4 перечислены сигналы процессора 80386 и приведены некоторые их характеристики. Таблица 6-4 ПЕРЕЧЕНЬ СИГНАЛОВ 80386 +------------------------------------------------------------------------------+ | НАЗВАНИЕ | ФУНКЦИИ | АКТИВНЫЙ | ВХОД/ | ВХОД | ПЕРЕКЛЮЧАЕТСЯ | | СИГНАЛА | СИГНАЛА | УРОВЕНЬ | ВЫХОД | СИНХРОННЫЙ | ЛИ ВЫХОД | | | | | | ИЛИ | В ТРЕТЬЕ | | | | | | АСИНХРОННЫЙ | ВЫСОКОИМПЕДАНСНОЕ| | | | | | ПО | СОСТОЯНИЕ ВО | | | | | | ОТНОШЕНИЮ | ВРЕМЯ ДЕЙСТВИЯ | | | | | | К CLK2 | HLDA? | +----------+---------------+----------+-------+-------------+------------------| | CLK2 | СИНХРОСИГНАЛ | - | ВХОД | - | - | +----------+---------------+----------+-------+-------------+------------------| | D0-D31 | ШИНА ДАННЫХ | ВЫСОКИЙ | ВХОД/ | S | ДА | | | | | ВЫХОД | | | +----------+---------------+----------+-------+-------------+------------------| | E0#-BE3# | СТРОБЫ ДАННЫХ | НИЗКИЙ | ВЫХОД | - | ДА | +----------+---------------+----------+-------+-------------+------------------| | A2-A31 | ШИНА АДРЕСА | ВЫСОКИЙ | ВЫХОД | - | ДА | +------------------------------------------------------------------------------+ +------------------------------------------------------------------------------+ | W/R# | УКАЗАТЕЛЬ | ВЫСОКИЙ |ВЫХОД | - | ДА | | | РЕЖИМА ЗАПИСИ | | | | | | | ИЛИ ЧТЕНИЯ | | | | | +----------+---------------+----------+-------+-------------+------------------| | D/C# | УКАЗАТЕЛЬ | ВЫСОКИЙ |ВЫХОД | - | ДА | | | ОБМЕНА ДАННЫМИ| | | | | | | ИЛИ | | | | | | | УПРАВЛЯЮЩИМИ | | | | 3 3 | СИГНАЛАМИ | | | | | +----------+---------------+----------+-------+-------------+------------------| | M/IO# | УКАЗАТЕЛЬ | ВЫСОКИЙ | ВЫХОД | - | ДА | | | ОБРАЩЕНИЯ | | | | | | | ПАМЯТИ ИЛИ В/В| | | | | +----------+---------------+----------+-------+-------------+------------------| | LOCK# | БЛОКИРОВКА | НИЗКИЙ | ВЫХОД | - | ДА | | | ШИНЫ | | | | | +----------+---------------+----------+-------+-------------+------------------| | ADS# | СТРОБ АДРЕСА | НИЗКИЙ | ВЫХОД | - | ДА | +----------+---------------+----------+-------+-------------+------------------| | NA# | ЗАПРОС | НИЗКИЙ | ВХОД | S | ДА | | | СЛЕДУЮЩЕГО | | | | | | | АДРЕСА | | | | | +----------+---------------+----------+-------+-------------+------------------| | BS16# | 16-РАЗРЯДНАЯ | НИЗКИЙ | ВХОД | S | ДА | | | ШИРИНА ШИНЫ | | | | | +----------+---------------+----------+-------+-------------+------------------| | READY# | ПЕРЕДАЧА | НИЗКИЙ | ВХОД | S | ДА | | | ПОДТВЕРЖДЕНИЯ | | | | | +----------+---------------+----------+-------+-------------+------------------| | HOLD | ЗАПРОС НА | ВЫСОКИЙ | ВХОД | S | ДА | | | ЗАХВАТ ШИНЫ | | | | | +----------+---------------+----------+-------+-------------+------------------| | HLDA | ПОДТВЕРЖДЕНИЕ | ВЫСОКИЙ | ВЫХОД | S | НЕТ | | | ЗАХВАТА ШИНЫ | | | | | +----------+---------------+----------+-------+-------------+------------------| | PEREQ | ЗАПРОС | ВЫСОКИЙ | ВХОД | A | НЕТ | | | СОПРОЦЕССОРА | | | | | +----------+---------------+----------+-------+-------------+------------------| | BUSY# | СОПРОЦЕССОР | НИЗКИЙ | ВХОД | A | НЕТ | | | ЗАНЯТ | | | | | +----------+---------------+----------+-------+-------------+------------------| | ERROR# | ОШИБКА | НИЗКИЙ | ВХОД | A | НЕТ | | | СОПРОЦЕССОРА | | | | | +----------+---------------+----------+-------+-------------+------------------| | INTR | МАСКИРУЕМЫЙ | ВЫСОКИЙ | ВХОД | A | НЕТ | | | ЗАПРОС | | | | | | | ПРЕРЫВАНИЯ | | | | | +----------+---------------+----------+-------+-------------+------------------| | NMI | НЕМАСКИРУЕМЫЙ | ВЫСОКИЙ | ВХОД | A | НЕТ | | | ЗАПРОС | | | | | | | ПРЕРЫВАНИЯ | | | | | +----------+---------------+----------+-------+-------------+------------------| | RESET | СБРОС | ВЫСОКИЙ | ВХОД |A{ПРИМЕЧАНИЕ}| НЕТ | +------------------------------------------------------------------------------+ Примечание: Если фаза внутреннего синхросигнала процессора должна быть синхронизирована с внешними схемами, то необходимо обеспечить определенные значения времени установки t25 и времени удержания t26 отрицательного фронта сигнала RESET. 6.3Механизм обмена по шине 6.3.1 Введение Все передачи данных занимают один или более циклов шины. Операнды логических данных длиной в байт, слово и двойное слово могут быть переданы без выравнивания физических адресов. Любой байт может быть краевым байтом (первым или последним) передаваемого операнда, но при этом для передачи не выровненного операнда может потребоваться два или даже три физических цикла шины. (См.6.3.4 Изменяемый размер шины данных и 6.3.6 Не выровненные операнды.) Сигналы адреса 80386 предусмотрены для упрощения аппаратуры внешней системы. Старшие биты адреса реализованы линиями A2-A31. Младшие биты адреса в виде BE0#-BE3# обеспечивают выборку соответственно четырех байтов 32-битной шины данных. Благодаря этому физический операнд представляется в каждом цикле в наиболее удобной форме. Активные уровни выходных сигналов стробов данных BE0#-BE3# устанавливаются, если соответствующие им байты шины данных будут принимать участие в предстоящем цикле шины, как указано в табл.6- 6. Изменяя комбинацию установленных стробов данных можно .aci%ab"(bl любой вариант выборки смежных байтов, но никакая комбинация BE0#-BE3# не позволит выбрать байты, разделенные двумя или тремя нефункционирующими байтами. Адресные биты A0-A1 физического адреса операнда могут быть образованы, когда необходимо (например, для интерфейсов Multibus I и Multibus II), как функция установленных стробов данных. Соответствие значений A0 и A1 сигналам BE0#-BE3# приведено в табл.6-6. Логические схемы формирования A0 и A1 приведены на рис.6- 3. Таблица 6-6 СТРОБЫ ДАННЫХ И СООТВЕТСТВУЮЩИЕ ИМ БАЙТЫ ДАННЫХ И ОПЕРАНДОВ +-----------------------------------------------------------+ | СТРОБЫ ДАННЫХ | СООТВЕТСТВУЮЩИЕ СИГНАЛЫ ШИНЫ ДАННЫХ | +----------------+------------------------------------------| | BE0# | D0-D7 (БАЙТ 0 - МЛАДШИЙ БАЙТ) | +----------------+------------------------------------------| | BE1# | D8-D15 (БАЙТ 1) | +----------------+------------------------------------------| | BE2# | D16-D23 (БАЙТ 2) | +----------------+------------------------------------------| | BE3# | D24-D31 (БАЙТ 3 - СТАРШИЙ БАЙТ) | +-----------------------------------------------------------+ Таблица 6-6 ФОРМИРОВАНИЕ ШИНЫ A0-A31 ИЗ ШИНЫ BE0#-BE3# И A2-A31 +-----------------------------------------------------------+ | АДРЕСНЫЕ СИГНАЛЫ 80386 | +-----------------------------------------------------------| | A31 ......... A2 | BE3# | BE2# | BE1# | BE0# | +--------------------------+-------+-------+-------+--------| | | ФИЗИЧЕСКИЙ АДРЕС | | | | | +----+---------------------| | | | | |A31 | .... | A2 | A1 | A0 | | | | | +----+------+----+----+----+-------|-------+-------+--------| |A31 | .... | A2 | 0 | 0 | X | X | X | НИЗКИЙ | +----+------+----+----+----+-------+-------+-------+--------| |A31 | .... | A2 | 0 | 1 | X | X |НИЗКИЙ | ВЫСОКИЙ| +----+------+----+----+----+-------+-------+-------+--------| |A31 | .... | A2 | 1 | 0 | X |НИЗКИЙ |ВЫСОКИЙ| ВЫСОКИЙ| +----+------+----+----+----+-------+-------+-------+--------| |A31 | .... | A2 | 1 | 1 |НИЗКИЙ |ВЫСОКИЙ|ВЫСОКИЙ| ВЫСОКИЙ| +-----------------------------------------------------------+ Рис.6-3. Логические схемы формирования A0, A1 как функций сигналов BE0#-BE3# K - MAP for A1 Signal - карта Карно для сигнала A1. Каждый цикл шины включает в себя по меньшей мере два состояния шины. Каждое состояние шины занимает по времени один период тактовой частоты процессора. Простейший цикл шины может быть дополнен состояниями шины, которые называются состояниями ожидания. См. 6.4 Описание функционирования шины. Поскольку для выполнение цикла шины требуется как минимум два состояния шины (что равняется двум периодам тактовой частоты процессора), то максимальная скорость передачи данных между внешними устройствами и 80386 равна одному 4-байтовому двойному слову в каждые два периода тактовой частоты процессора, что соответствует максимальной пропускной способности шины 32 мегабайт/сек (80386-16 работает на тактовой частоте 16 МГц). 6.3.2 Пространства памяти и ввода/вывода В течение циклов шины возможно обращение к пространству памяти или к пространству ввода/вывода. Периферийные устройства в системе могут быть отнесены либо к пространству памяти, либо к пространству ввода/вывода, или и к тому и к другому пространствам. Как показано на рис.6-4, физические адреса памяти находятся в диапазоне от 00000000H до FFFFFFFFH (4 гигабайта), а адреса ввода/вывода - в диапазоне от 00000000H до 0000FFFFH (64 килобайта), необходимом для адресации устройств ввода/вывода. Отметим адреса ввода/вывода, используемые в автоматически выполняемых для взаимосвязи с сопроцессором циклах ввода/вывода. Эти адреса от 800000F8H до 800000FFH не входят в диапазон вышеуказанных адресов для программной адресации устройств ввода/вывода и позволяют легко сформировать сигнал выборки сопроцессора, используя сигналы A31 и M/IO#. FFFFFFFFh+------------+ + - - - - - - - + | | | | | | | | | НЕАДРЕСУЕМОЕ | | | | | | | | | | | | | | | 800000FFh+---------------+ СОПРОЦЕССОР | ФИЗИЧЕСКАЯ | 800000F8h| | (80387 ИЛИ 80287) | ПАМЯТЬ | (ПРИМЕЧ.1)+---------------+ | | | | | | НЕАДРЕСУЕМОЕ | 4 ГБАЙТА | | | | | | | 0000FFFFh+---------------| | | | 64 КБАЙТА | ПРОГРАММНО АДРЕСУЕМОЕ | | | | ПРОСТРАНСТВО ВВОДА/ВЫВОДА 00000000h+------------+ 00000000h+---------------+ ПРОСТРАНСТВО ФИЗИЧЕСКОЙ ПАМЯТИ ПРОСТРАНСТВО ВВОДА/ВЫВОДА Примечание: Так как в течение автоматически выполняемых циклов взаимосвязи с сопроцессором устанавливается высокий уровень сигнала A31, то установка единичного уровня A31 и нулевого уровня строба формирования сигала выборки сопроцессора. Рис.6-4 Пространства физической памяти и ввода/вывода 6.3.3 Организация памяти и ввода/вывода Ширина магистрали данных от 80386 к пространствам памяти и ввода/вывода может составлять 32 бита или 16 бит. В случае 32- разрядной ширины магистрали пространства памяти и ввода/вывода организованы соответственно как массивы физических 32-разрядных двойных слов. Каждое двойное слово памяти или ввода/вывода состоит из 4-х индивидуально адресуемых (с помощью последовательных адресов байтов) байтов. Самый меньший (из четырех) адрес байта относится к сигналам D0-D7; самый больший - к сигналам D24-D31. 80386 имеет такой сигнал управления шиной, как BS16#, который обеспечивает правильную взаимосвязь с 16-разрядными пространствами памяти и ввода/вывода, организованными в виде последовательности 16-битных слов. Циклы обмена с 16-разрядными и 32-разрядными устройствами памяти или ввода/вывода могут встречаться в любой последовательности, так как состояние сигнала BS16# анализируется в течение каждого цикла шины. См. 6.3.4 Изменяемый размер шины данных. Сигналы стробов данных BE0#-BE3# позволяют обращаться к отдельным байтам при любой структуре памяти или ввода/вывода (32- разрядной или 16-разрядной). 6.3.4 Изменяемый размер шины данных Изменяемый размер шины данных отличительная особенность 80386, обеспечивающая непосредственную связь процессора с 32-разрядными или 16-разрядными шинами данных памяти или ввода/вывода. Один процессор может быть соединен с шинами двух размеров. Передачи в/из 32- или 16-разрядные порты сопровождаются определением в каждом цикле шины необходимой ширины шины. В течение каждого цикла шины схема дешифрации адреса или подчиненное устройство сами могут установить активный уровень сигнала BS16# для 16-разрядного порта, или неактивный уровень BS16# для 32-разрядного порта. Когда установлен активный уровень сигнала BS16#, процессор автоматически вместо одной передачи разрядностью больше 16 бит или одной 16-разрядной не выровненной передачи выполнит две или три передачи, как потребуется. При активном уровне BS16# все передачи операндов осуществляются только по линиям D0-D16. Поэтому 16- разрядные устройства памяти или ввода/вывода обмениваются только сигналами данных D0-D16. Специальных переключателей не требуется. Действие активного уровня сигнала BS16# проявляется только тогда, когда в текущем цикле шины установлены активные уровни сигналов BE2# и/или BE3#. Если в передаче участвуют только линии D0-D15, то установка активного уровня BS16# не будет иметь значение, так как передача будет производиться все равно по 16-разрядной шине независимо от состояния BS16#. Другими словами, установка активного уровня BS16# необязательна, когда только младшая половина разрядов шины участвует в текущем цикле. Существуют две ситуации, при которых проявляется влияние активного уровня BS16# на действия процессора, зависящие также от значений стробов данных BE0#-BE3# в текущем цикле шины: - в обмене участвует только старшая половина линий шины: устанавливаются активные уровни только сигналов BE2# и/или BE3#; - в обмене участвуют и старшая, и младшая половины линий шины: устанавливаются активные уровни по меньшей мере сигналов BE1# и BE2# (и возможно также сигналов BE0# и/или BE3#). Воздействие BS16# на циклы чтения "с учетом только старшей половины линий шины": Установка активного уровня BS16# в течение циклов чтения "с участием только старшей половины линий шины" вынудит 80386 считывать младшие 16 битов шины данных и игнорировать данные на старших 16 битах шины данных. Т.е. вместо считывания данных с линий D16-D31 в соответствии с установленными BE2# и BE3# будут считываться данные с линий D0-D16. Взаимодействие сигнала BS16# на циклы записи "с участием только старшей половины линий шины": Установка активного уровня BS16# в течение циклов записи "с участием только старшей половины" не отразится на процедуре записи. Когда в цикле записи установлены активные уровни сигналов BE2# и/или BE3#, 80386 всегда копирует сигналы данных D16-D31 на линии D0-D15 (см. табл. 6-1). Поэтому не требуется дополнительных действий 80386 для того, чтобы выполнить эти циклы записи по 32- или 16-разрядной шине. Воздействие сигнала BS16# на циклы чтения "с участием и ab `h%) и младшей половин шины": Установка активного уровня сигнала BS16# в течение циклов чтения "с участием и старшей и младшей половин шины" заставит процессор выполнить два 16-разрядных цикла чтения для передачи всего физического операнда. Байты 0 и 1 (в соответствии с установленными BE0# и BE1#) будут считаны в первом цикле с линий D0-D16. Байты 2 и 3 (в соответствии с установленными BE2# и BE3#) будут считаны во втором цикле и снова с линий D0-D16. Сигналы на линиях D16-D31 игнорируются в течение обоих 16-разрядных циклов. BE0# и BE1# всегда находятся в неактивном состоянии в течение второго 16-разрядного цикла. Активный уровень сигнала BS16# необязательно устанавливать на время второго 16-разрядного цикла. См. рис.6-14, циклы 2 и 2а. Воздействие сигнала BS16# (активного уровня) на циклы записи "с участием и старшей и младшей половин шины": Установка активного уровня сигнала BS16# в течение циклов записи "с участием и старшей и младшей половин шины" заставит процессор 80386 выполнять два 16-разрядных цикла записи для передачи целого физического операнда. Наличие всех байтов операнда на линиях D0-D15 в течение первого цикла записи позволит внешним устройствам получить байты 0 и 1 (в соответствии с установленными значениями BE0# и BE1#) по линиям D0-D16. Во втором цикле 80386 скопирует байты 2 и 3 на линии D0-D15, и запись этих байтов (в соответствии с установленными значениями BE2# и BE3#) будет произведена также по линиям D0-D16. Сигналы BE0# и BE1# всегда переключаются в неактивное состояние в течение второго 16- разрядного цикла. Установка активного уровня сигнала BS16# в течение второго 16-разрядного цикла необязательна. См. рис.6-14, циклы 1 и 1а. 6.3.5 Связь с 32 и 16 разрядным устройствами памяти В 32-разрядных устройствах физической памяти, таких как на рис.6-5, каждое физическое двойное слово начинается с байта, адрес которого кратен 4. Сигналы A2-A31 обычно используются для выборки определенного двойного слова, а сигналы BE0#-BE3# - для выборки определенного байта в двойном слове BS16# поддерживается в неактивном состоянии во всех циклах шины, оперирующих с 32- разрядным массивом. Когда в состав системы входят 16-разрядные физические массивы, как показано на рис.6-6, адрес начала каждого 16-битного физического слова кратен 2. Отметим, что схема дешифрации адреса ADDRESS DECODER при дешифрации адреса формирует активный уровень сигнала BS16# только в течение циклов шины, оперирующих с 16- разрядными устройствами памяти, то схема дешифрации адреса анализирует также значения сигналов BE0#-BE3# и W/R#, чтобы определить, когда должен быть установлен активный уровень сигнала BS16#. См. 6.4.3.7 Оптимальное использование метода конвейерной адресации в случае 16-разрядной ширины шины. Сигналы A2-A31 обычно используются для адресации 32-разрядных и 16-разрязных устройств. Для адресации 16-разрядных устройств необходимы также сигнал A1 и два сигнала строба данных. Чтобы сформировать необходимые значения сигнала A1 и двух сигналов строба данных для обращения к 16-разрядному устройству, сигналы BE0#-BE3# должен быть дешифрированы в соответствии с табл. 6-7. Отметим некоторые запрещенные комбинации BE0#-BE3#, никогда не вырабатываемые 80386. При наличии запрещенной комбинации BE0#- BE3# на входе дешифратора выходы его не анализируются и состояние их обозначается X. Запрещенные комбинации BE0#-BE3# могут быть использованы при необходимости для более оптимального использования дешифратора. Таблица 6-7 ФОРМИРОВАНИЕ СИГНАЛОВ A1, BHE# И BLE# ДЛЯ АДРЕСАЦИИ 16-РАЗРЯДНЫХ УСТРОЙСТВ +-----------------------------------------------------------+ | СИГНАЛЫ 80386 | СИГНАЛЫ 16-РАЗРЯДНОЙ | КОММЕНТАРИИ | | | ШИНЫ | | +-------------------+-----------------------| | |BE3#|BE2#|BE1#|BE0#| A1 | BHE# | BLE# (A0) | | +----+----+----+----+----+------+-----------+---------------| | H* | H* | H* | H* | X | X | X | X - НЕТ НИ | | | | | | | | | ОДНОГО АКТИВ- | | | | | | | | | НОГО БАЙТА | +----+----+----+----+----+------+-----------+---------------| | H | H | H | L | L | H | L | | +----+----+----+----+----+------+-----------+---------------| | H | H | L | H | L | L | H | | +----+----+----+----+----+------+-----------+---------------| | H | H | L | L | L | L | L | | +----+----+----+----+----+------+-----------+---------------| | H | L | H | H | H | H | L | | +----+----+----+----+----+------+-----------+---------------| | H* | L* | H* | L* | X | X | X | X - НЕСМЕЖНЫЕ | | | | | | | | | БАЙТЫ | +----+----+----+----+----+------+-----------+---------------| | H | L | L | H | L | L | H | | +----+----+----+----+----+------+-----------+---------------| | H | L | L | L | L | L | L | | +----+----+----+----+----+------+-----------+---------------| | L | H | H | H | H | L | H | | +----+----+----+----+----+------+-----------+---------------| | L* | H* | H* | L* | X | X | X | X - НЕСМЕЖНЫЕ | | | | | | | | | БАЙТЫ | +----+----+----+----+----+------+-----------+---------------| | L* | H* | L* | H* | X | X | X | X - НЕСМЕЖНЫЕ | | | | | | | | | БАЙТЫ | +----+----+----+----+----+------+-----------+---------------| | L | L | H | H | H | L | L | | +----+----+----+----+----+------+-----------+---------------| | L* | L* | H* | L* | X | X | X | X - НЕСМЕЖНЫЕ | | | | | | | | | БАЙТЫ | +----+----+----+----+----+------+-----------+---------------| | L | L | L | H | L | L | H | | +----+----+----+----+----+------+-----------+---------------| | L | L | L | L | L | L | L | | +-----------------------------------------------------------+ BLE# устанавливается (активный уровень) когда активизируются разряды D0-D7 16-разрядной шины. BHE# устанавливается (активный уровень) когда активизируются разряды D8-D15 16-разрядной шины. A1 имеет низкий уровень для всех четных слов; A1 имеет высокий уровень для всех нечетных слов. ОБОЗНАЧЕНИЯ: X - допустим и высокий и низкий логический уровень; H - высокий логический уровень; L - низкий логический уровень; * - неиспользуемые комбинации BE0#-BE3#: - комбинация, когда все стробы данных находятся в неактивном состоянии; - комбинации стробов данных, при которых появляются несмежные активные байты. 6.3.6 Выравнивание операндов Благодаря гибкой адресации памяти в 80386 возможна передача логического операнда, разрядность которого больше слова или двойного слова памяти или ввода/вывода, например 32-разрядного операнда (двойное слово), адрес начала которого не кратен 4, или 16-разрядного операнда (слово), разделенного между двумя физическими двойными словами массива памяти. Когда передача операнда требует выполнения нескольких циклов, то во время этих циклов выполняется выравнивание данных и определение размера шины. Таблица 6-8 описывает определение типов циклов передачи для всех комбинаций таких характеристик, как длина логического операнда, выравнивание и ширина шины данных. Когда для передачи многобайтового логического операнда требуется несколько циклов шины, то первыми передаются старшие байты (но если установлен активный уровень BS16#, то будут выполнены два 16- разрядных цикла, причем первыми будут переданы младшие байты). Таблица 6-8 ЦИКЛЫ ПЕРЕДАЧИ БАЙТОВ, СЛОВ И ДВОЙНЫХ СЛОВ +-----------------------------------------------------------+ | | ДЛИНА ЛОГИЧЕСКОГО ОПЕРАНДА В БАЙТАХ | | +-------------------------------------------| | | 1 | 2 | 4 | +---------------+---+-------------------+-------------------| | АДРЕС БАЙТА |XX | 00 | 01 | 10 | 11 | 00 | 01 | 10 | 11 | | ФИЗИЧЕСКОЙ | | | | | | | | | | | ПАМЯТИ | | | | | | | | | | | *МЛАДШИЕ ДВА | | | | | | | | | | | БАЙТА | | | | | | | | | | +---------------+---+----+----+----+----+----+----+----+----| |ЦИКЛЫ ПЕРЕДАЧИ |b | W | W | W |hb, | d |hb, |hw, |h3, | |ПО 32-РАЗРЯДНОЙ| | | | |lb | |l3 |lw |lb | |ШИНЕ ДАННЫХ | | | | | | | | | | +---------------+---+----+----+----+----+----+----+----+----| |ЦИКЛЫ ПЕРЕДАЧИ |b | W |lb,*| W |hb,*|lw,*|hb, |hw, |mw, | |ПО 16-РАЗРЯДНОЙ| | |hb* | |lb* |hw* |lb,*|lw |hb,*| |ШИНЕ ДАННЫХ | | | | | | |mw* | |lb | +-----------------------------------------------------------+ ОБОЗНАЧЕНИЯ: b = передача байта w = передача слова l = младшая часть операнда m = средняя часть операнда х = не используется * = активный уровень BS16# вызывает выполнение второго цикла шины 3 = передача 3-х байтов d = передача двойного слова h = старшая часть операнда 6.4 Описание функционирования шины 6.4.1 Введение 80386 имеет отдельные параллельные шины: шину адреса и шину данных. Шина данных - 32-разрядная и двунаправленная. Ширина шины адреса - 32 разряда: из них 30 старших разрядов - адрес операнда и 2 разряда формируются из 4-х сигналов стробов данных каждый из которых служит для выборки соответствующего байта в операнде. Эти шины анализируются и управляются соответствующими им управляющими сигналами. Тип каждого цикла шины определяется тремя сигналами: M/IO#, W/R# и D/C#. Одновременно с этими сигналами устанавливается достоверный адрес на линиях BE0#-BE3# и A2-A31. Сигнал строба адреса указывает на выдачу процессором 80386 нового типа цикла шины и адреса. Объединенные шина адреса, шина данных и все связанные с ними управляющие сигналы называются в тексте просто "шиной". В рабочем состоянии шина выполняет один из ниже перечисленных циклов шины: 1) чтение из памяти; 2) чтение из памяти с блокировкой шины; 3) запись в память; 4) запись в память с блокировкой шины; 5) чтение из устройства ввода/вывода (или из сопроцессора); 6) запись в устройство ввода/вывода (или в сопроцессор); 7) подтверждение прерывания; 8) цикл останова или цикл выключения. Табл. 6-2 показывает соответствие комбинаций сигналов определения типа шины каждому типу шины. См. параграф 6.2.5 Сигналы определения типа цикла шины. Отличительной чертой шины данных является ее изменяемая ширина, которая может быть 32-разрядной и 16-разрядной. Ширина шины данных указывается процессору 80386 его входным сигналом BS16#. Все функции шины могут быть выполнены при любой ширине шины. Когда шина 80386 не выполняет ни один из вышеперечисленных циклов, она находится или в нерабочем состоянии или в состояние подтверждения захвата шины, последнее может быть вызвано внешней схемой. Нерабочее состояние шины может иметь место, когда 80386 не выдает дальнейших подтверждений на свой выход строба адреса (ADS#) после начала текущего цикла, и потому текущий цикл будет последним. Состояние подтверждения захвата шины идентифицируется установкой процессором 80386 активного уровня н