литература / Пухальский Проектирование микропроцессорных систем 2001
.pdf340 Глава 4. Микропроцессоры 8086/8088 и сопроцессор 8087
RQ/GT\, но если на линии RQ/GTn появляется запрос в то время, когда МП обрабатывает пред шествующий запрос от RQ/GT\, то запрос RQ/GTt) не подтверждается до освобождения шины по линии RQ/GTi. Управление запросом и предоставлением шин производится последователь ностью из трех импульсов низкого уровня, длительность которого равна одному периоду так тового сигнала CLK (рис. 4.9). МП предоставляет управление шинами другому ведущему шины в конце текущего цикла шины, переводя свои шины в Z-состояние. Линии RQ/GTiA->не зависимы и подключены с помощью внутренних нагрузочных резисторов к напряжению пита ния для задания исходного высокого уровня (уровня логической 1);
LOCK — сигнал блокировки шины, используемый для запрета предоставления шин дру гим МП в мультипроцессорных системах. Значение LOCK = 0 устанавливается однобайтной командой LOCK, называемой префиксом блокировки шины, и поддерживается до завершения выполнения следующей за префиксом команды. Значение LOCK = 0 устанавливается автома тически во время и между импульсами INTA = 0 (до завершения чтения байта type из контрол лера прерываний 8259А). При подтверждении захвата шин сигнал LOCK переводится в Z-состояние. Если в состоянии блокировки поступает запрос шин по линиям RQ/GT{„ц, то МП фиксирует запрос, но не подтверждает его до завершения выполнения команды, следующей за префиксом LOCK. Префикс LOCK можно использовать и в минимальном режиме, в котором выход микропроцессора LOCK отсутствует — в этом случае префикс LOCK задерживает ге нерацию значения сигнала подтверждения захвата шин HLDA = 1 на запрос захвата HOLD = 1 до завершения выполнения команды, следующей за префиксом LOCK;
QSi-o (Queue Status) — состояние 6-байтной очереди команд (табл. 4.5), отражающее опе рации над очередью в предыдущем такте синхронизации. Сигналы QSlA) позволяют арифмети ческому сопроцессору 8087 производить отслеживание состояния очереди команд МП 8086 (синхронизировать свою очередь команд с очередью команд МП 8086).
Для подключения к МП контроллера прямого доступа к памяти 8237А (см. § 3.6) следует
синтезировать схему взаимного преобразования |
однонаправленных сигналов HOLD/HLDA |
в двунаправленный сигнал RQ/GT0 или RQ/GTi |
(конвертор сигналов — Control Logic на |
рис. 4.13). По запросу захвата шин HOLD = J , поступающему от контроллера прямого досту па к памяти 8237, необходимо сформировать первый импульс последовательности RQ/GT, а по снятию запроса HOLD = L— третий импульс этой последовательности (см. рис. 4.9). Конвер тор сигналов легко реализовать в виде цифрового автомата, задаваемого временными диаграм мами, изображенными на рис. 4.10 (необходимо использовать два синхронных триггера Qx и Q2, например, два 7-триггера со счетными входами Т, и Т2). В ответ на первый импульс после довательности RQ/GT = RQ микропроцессор выдаст второй импульс последовательности RQIGT = GT и конвертор должен сформировать значение сигнала подтверждения захвата шин HLDA = 1. При генерации третьего импульса последовательности RQ/GT = RQ (уведомление МП об освобождении шин) конвертор должен выдать значение сигнала HLDA = 0.
На основании временных диаграмм (рис. 4.10) легко составить таблицу истинности (табл. 4.6), диаграммы Вейча (рис, 4.11) и методом, изложенным в [5], найти, что работа кон вертора при использовании У-АТ-триггеров описывается функциями:
|
|
Таблица 4.5. Идентификация состояния очереди команд |
QSt QS0 |
Операции с очередью команд |
|
0 |
0 |
Операции не производились — в предыдущем такте байты из очереди не выбирались |
0 |
1 |
Из очереди выбран первый байт (КОП) команды |
1 |
0 |
Очередь сброшена (пустая) из-за команды передачи управления |
1 |
1 |
Из очереди выбран байт, отличающийся от первого байта команды |
4.1. Структурная схема МП 8086 |
343 |
|
8284 |
к
S
X
и
(-
В"
К
!=Г
я
И"
Рис. 4.14. Временные диаграммы для максимального режима работы МП 8086
Рис. 4.15. Сопроцессорная конфигурация МП-системы
Сопроцессорные конфигурации МП-систем. Хотя МП 8086/8088 являются мощными однокристальными процессорами, их системы команд недостаточно для эффективного реше ния сложных вычислительных задач, так как они не имеют команд арифметики с плавающей точкой. В этих случаях МП 8086/8088 необходимо дополнить сопроцессорами, которые рас ширяют систему команд для более эффективной реализации специальных вычислений. Для таких применений фирма Intel специально разработала арифметический сопроцессор 8087 (.NDCP — Numeric Data Coprocessor, см. рис. 4.4), который снабжен мощной системой команд арифметики с плавающей точкой, позволяющей производить вычисления с высочайшей точно стью (диапазон представимых вещественных чисел равен ±10±4932).
Для включения в микропроцессорную систему NDCP не требуется дополнительной внеш ней логики (рис. 4.15 — остальные одноименные выводы МП 8086/8088 и NDCP 8087 должны быть соединены). Это достигнуто тем, что выборку всех команд из памяти производят только МП 8086/8088. Все команды NDCP (группа из восьми команд, обозначаемая общей мнемони кой ESC — Escape — переход, переключение на сопроцессор), характеризуются тем, что их
344 Глава 4. Микропроцессоры 8086/8088 и сопроцессор 8087
первый байт равен 1101 lxxx = D8h + DFft, а в системе команд МП такие команды отсутствуют. Если выбранная команда принадлежит NDCP, то МП 8086/8088 не предпринимают более ни каких действий кроме возможного считывания операнда для сопроцессора и передачи ему фи зического адреса этого операнда (см. § 4.6).
Предназначенная для NDCP команда определяется появлением в программе команды ESC. Хотя выбирать команды могут только (главные) МП, сопроцессор тоже получает все ко манды и контролирует выполнение команд МП, используя сигналы на линиях состояния оче реди Команда ESC содержит код внешней операции NDCP (три младших разряда перво го байта и второй байт), и одновременно дешифрируется сопроцессором и МП. В этой точке МП может просто перейти к выборке следующей команды или считать первое слово из памяти как операнд для NDCP, а затем перейти к выборке следующей команды. Если МП считывает первое слово операнда, NDCP перехватывает это слово данных и его 20-разрядный физический адрес. Когда операнд-источник длиннее одного слова, NDCP получает остальные слова по средством запросов циклов шины по линии RQ/GT0 <н> RQ/GT). Если же определенный в ко манде ESC операнд является получателем, NDCP игнорирует считанное микропроцессором слово данных, а позднее записывает результат вычислений по перехваченному адресу. В лю бом случае NDCP выдает значение сигнала занятости BUSY = 1 на вход TEST МП и пока МП продолжает выполнение программы NDCP производит вычисления, указанные в команде ESC. Такая параллельная работа продолжается до тех пор, пока микропроцессору не понадобится NDCP для выполнения другой операции или микропроцессору не потребуется получить ре зультат текущей операции из NDCP. Для этого МП должен выполнить команду WAIT и ожи дать, пока NDCP не выдаст значение сигнала занятости BUSY = 0 на вход TEST. Команда WAIT периодически проверяет значение сигнала TEST и, когда он становится активным, осуществля ет передачу управления находящейся за ней команде.
Чтобы NDCP мог определить, когда МП выполняет команду ESC, он должен контролиро вать состояние МП по линиям S2~о и выборку команды по линиям AD15_0. Так как МП выбирает команды с опережением, выборка команды ESC не означает ее немедленного выполнения, а при наличии перед ней команды перехода она может не выполняться совсем. Сопроцессор должен следить за командным потоком, контролируя биты состояния очереди Q5|_o и управляя своей очередью команд, идентичной очереди МП. Если состояние очереди QSiQSa = 00 (см. табл. 4.5), NDCP ничего не делает, а если QS\QSn = 01, он должен сравнить пять старших разрядов первого байта в очереди с кодом 11011 для обнаружения команды ESC. При обнару жении команды ESC сопроцессор выполняет ее. В противном случае байт игнорируется и удаляется из очереди. Состояние очереди QS\QS0 = 10 означает, что очередь в МП сброшена и NDCP также должен очистить свою очередь. Состояние QSiQS0 = 11 указывает, что первый байт в очереди не является первым байтом команды и этот байт NDCP анализирует, если толь ко он является частью команды ESC. Когда же он не является частью команды ESC, этот байт игнорируется.
При возникновении ошибок при декодировании и выполнении команд ESC сопроцессор выдает запрос прерывания INT = 1 на контроллер прерываний 8259Л. При необходимости чте ния операндов из памяти или записи результата вычислений в память NDCP посылает запросы циклов шины по линии RQ/GTo <н> RQ/GT{.
Очередь команд. Для упреждающей выборки из памяти и временного хранения команд в МП 8086 использован 6-байтный регистр очереди команд (см. рис. 4.2), представляющий со бой память типа FIFO 6 x 8 бит (first-in, first-out — первый вошел, первый вышел). Очередь команд непрерывно заполняется в те промежутки времени, когда системная шина не требуется для других операций. Такое опережение выборки команд по отношению к их исполнению значительно увеличивает пропускную способность шины, так как к моменту завершения текущей команды следующая команда чаще всего уже находится в МП. В случае выполнения команды перехода или вызова подпрограммы очередь должна сбрасываться, что уменьшает
4.I. Структурная схема МП 8086 |
345 |
перехода или вызова подпрограммы очередь должна сбрасываться, что уменьшает эффектив ность ее использования, но в среднем это происходит нечасто.
Хотя МП 8086 может обращаться к словам, младший байт которых расположен как по четному, так и нечетному адресу, но при нечетном адресе для чтения слова требуются два об ращения к памяти: сначала читается младший байт по верхней части шины (ВНЕ = 0, Д0 = 1 — см. табл. 4.3), а затем старший байт по нижней части шины (ВНЕ = 1, А0 = 0). Следовательно, возможна некоторая экономия времени, если хранить слова только по четным адресам. Длина команд составляет от одного до шести байт и их можно читать словами по четным адресам, хотя младший байт слова может принадлежать одной команде, а старший байт — другой ко манде. Поэтому FIFO организовано так, что позволяет читать команды из памяти словами по четным адресам (рис. 4.16, а). Имеется только одно исключение, связанное с переходом по не четному адресу. В этом случае МП производит выборку сначала одного байта по нечетному адресу, а затем продолжает читать слова по четным адресам (рис. 4.16, б).
а) |
|
Загрузка команд |
б) |
Четвертая выборка не |
Загрузка команд |
|
|
i |
|
начинается до освобождения |
j, |
Третья выборка —р» |
Шестой байт |
|
в очереди слова -----> |
Шестой байт |
|
|
|
Пятый байт |
|
Третья выборка |
Пятый байт |
Вторая выборка |
— |
Четвертый байт |
|
X |
Четвертый байт |
|
|
Третий байт |
|
Вторая выборка |
Третий байт |
Первая выборка |
—р» |
Второй байт |
|
X |
Второй байт |
|
|
Первый байт |
|
Первая выборка ---- > |
Первый байт |
|
|
I |
|
|
-I |
|
|
Очередь команд |
|
|
Очередь команд |
Рис. 4.16. Заполнение очереди команд после перехода на четный (а) и нечетный (б) адреса
М икропроцессор 8088. Микропроцессор 8088 имеет 8-разрядную внешнюю шину дан ных, как и МП 8080/8085, но его архитектура аналогична архитектуре МП 8086 и разводка кон тактов корпуса такая же, как и у МП 8086 (см. рис. 4.4). Системы команд у МП 8088 и 8086 также одинаковы.
Микропроцессор 8088 можно применять в ап |
|
Таблица 4.7. Системные |
||
паратуре, реализованной на базе МП 8080 или 8085. |
|
сигналы управления |
||
Поскольку линии управления МП 8088 и 8080/8085 |
Ю /М DT/R |
~SSo |
Состояние МП |
|
различаются, при введении МП 8088 в систему на |
||||
базе МП 8080/8085 требуется значительно изменить |
1 |
0 |
0 |
Interrupt Acknowledge |
логику управления шиной. Особенно важно учесть |
1 |
0 |
1 |
Read I/O Port |
тот факт, что в МП 8088, как и в МП 8085, адреса и |
1 |
1 |
0 |
Write I/O Port |
данные мультиплексируются. В устройствах памяти |
1 |
1 |
1 |
Halt |
и ввода-вывода потребуются небольшие изменения, |
0 |
0 |
0 |
Code Access |
если не увеличивать объем памяти благодаря 20 ли |
0 |
0 |
1 |
Read Memory |
ниям адреса. |
0 |
1 |
0 |
Write Memory |
В отличие от 6-байтной очереди команд МП |
0 |
1 |
1 |
Passive |
8086 в МП 8088 длина очереди команд равна 4 бай |
|
|
|
|
там. Это связано с тем, что МП 8088 может читать из памяти только байты, что увеличивает время их выборки — 6-байтная очередь использовалась бы не полностью. Алгоритм опережаю щей выборки отличается тем, что МП 8088 инициирует выборку команды из памяти, когда в очереди оказывается один свободный байт, а не два, как в МГ1 8086.
346 Глава 4. Микропроцессоры 8086/8088 и сопроцессор 8087
Большая часть сигналов МП 8088 имеет то же назначение, что и соответствующие сигна лы МП 8086 (см. рис. 4.4). Поскольку МП 8088 имеет 8-разрядную внешнюю шину данных, то вместо мультиплексных сигналов адреса-данных А Р 15...ц используются адресные сигналы А |5_8 и не требуется сигнал ВНЕ, который заменен сигналом SS0 (Status line), который эквивалентен сигналу So максимального режима. В максимальном режиме значение сигнала SS0 = 1 (High — высокий уровень напряжения). Понятно, что фиксировать адресные сигналы Л ,5_8 во внешнем регистре памяти не требуется. __
Вминимальном режиме работы вырабатывается сигнал Ю/М, инверсный по отношению
ксигналу M/IO МП 8086. Сигнал Ю /М логически эквивалентен инвертированному сигналу S2
максимального режима. Значения сигналов Ю/М, DT/R и SS0 идентифицируют тип передачи в текущем цикле шины (табл. 4.7).
Управление памятью при использовании МП 8086. На рис. 4.17 изображена структур ная схема памяти (ПЗУ — EPROM 27256/573РФ8 и статическое ОЗУ — SRAM МТ5С2568), об щий объем которой равен 128 Кбайт:
DEN (Data Enable) — сигнал включения приемопередатчиков,
DT/R (Data Transmit/Receive) — сигнал управления направлением передачи данных,
|
MRDC (Memory Read Command) — сиг |
|||
|
нал чтения данных из памяти, |
|
||
|
MWTC (Memory Write Command) — сиг |
|||
|
нал записи данных в память, |
|
||
|
— |
младшая часть мультиплексной |
||
|
шины адреса-данных (от/на МП), |
|
||
|
AD |5_8 |
— старшая часть мультиплексной |
||
|
шины адреса-данных (от/на МП), |
|
||
|
Ai6_o — разряды шины адреса (от адрес |
|||
|
ного регистра), |
|
|
|
|
ВНЕ — сигнал управления старшей ча |
|||
|
стью шины данных (от адресного регистра). |
|||
|
Сигналы |
управления приемопередатчи |
||
|
ками, чтением и записью данных в память |
|||
|
поступают от контроллера шин 8288. Для се |
|||
|
лекции БИС SRAM и EPROM используется |
|||
|
разряд адреса Л,6 (ЛЭ НЕ в данном устройстве |
|||
|
является дешифратором DC 1 х 2), т. е. не |
|||
|
предполагается увеличивать объем памяти за |
|||
|
счет использования адресных сигналов |
|||
|
Статическим оперативным |
запоминаю |
||
|
щим устройством управляют сигналы: |
|||
|
СЕ (Chip Enable) — выбор кристалла, |
|||
|
WE (Write Enable) — разрешение записи, |
|||
|
OE (Output Enable) — разрешение выхода |
|||
|
(запись при WE - MWTC = 0 |
и чтение при |
||
|
Ш. = MRDC = 0, если СЕ{ = Л ,6 = 0). |
|||
|
Из рис.4.17 следует, что адреса EPROM |
|||
|
заключены |
в |
диапазоне 00000/г... OFFFF/г |
|
Рис. 4.17. Структурная схема управления |
(64 Кбайта), |
а |
адреса SRAM (Static RAM) в |
|
памятью |
диапазоне — 10000h ... lFFFF/г (64 Кбайта). |
4.2. Режимы адресации данных и переходов |
347 |
Из-за неполной дешифрации адреса (разряды А19, А|8 и А П могут иметь произвольные зна чения — от ООО до 111) памяти могут быть приписаны и другие адреса.
Чтение памяти всегда производится словами, но МП будет принимать слово или только один из двух байт в зависимости от значений сигналов А0 и ВНЕ в соответствии с табл. 4.3. За пись же данных следует производить строго в соответствии со значениями сигналов А0 и ВНЕ. Для этого использованы ЛЭ ИЛИ, разделяющие ОЗУ на два банка: младший банк (Low Bank), селектируемый значением сигнала А0= 0, и старший банк (High Bank), выбираемый значением сигнала ВНЕ = 0:
0 - запись при Aq = 0 и MWTC = 1,
1 |
-н ет |
записи данных в младший банк; |
|
Р = ВНЕ ■MWTC = |
0 - |
запись при ВНЕ = 1 и MWTC = 1, |
|
1 - нет записи данных в старший банк |
|||
|
(запись, конечно, возможна только при значении сигнала CEt = 0).
Объем |
памяти можно увеличить, добавив еще необходимое число блоков памяти по |
64 Кбайта, |
селектируемых выходными сигналами адресного дешифратора сигналов А19_,6, по |
строенного, например, на ИС 1533ИД7.
4.2. Режимы адресации данных и переходов
Команды МП 8086/8088 могут содержать от одного до шести байт. В первом байте коман ды всегда находится код операции (Opcode — КОП). Во многих командах второй байт команды (постбайт) имеет специальное назначение — задает режим адресации данных, а также может содержать три дополнительных разряда КОП. Это позволило количественно расширить систе му команд и разработать гибкую систему адресации операндов. В однобайтных командах мо жет указываться неявный операнд или регистр. Команды могут иметь не более двух операндов, причем хотя бы один из операндов должен быть регистром. Исключение составляют цепочеч ные команды, оба операнда которых находятся в памяти. Операнд может содержать данное, часть адреса данного, косвенный указатель данного или другую информацию, относящуюся к обрабатываемым командой данным. Наименьшую длину имеют команды, в которых исполь зуются только операнды, находящиеся в регистрах МП.
Ф орматы команд. На рис. 4.18 изображены форматы первого байта команд с указанием специальных бит (индикаторов) и групп бит (полей), используемых для адресации операндов:
w (word) — индикатор, определяющий операцию с байтом (w = 0) или словом (w = 1), если команда может оперировать байтом и словом;
d (direction) — индикатор, указывающий направление передачи данных в двухоперандных командах за исключением команд с непосредственным операндом и цепочечных команд. Од ним из операндов должен быть регистр, определяемый полем reg во втором байте команды (rf = 0 — регистр является операндом-источником, d = 1 — регистр является операндом-
получателем);
s (sign) — индикатор, |
используемый только совместно с индикатором w для расширения |
|
знака непосредственных 8 |
-разрядных операндов, представленных в дополнительном коде, до |
|
16-разрядных операндов (s:w = 00 — 8-разрядная операция, ,s:iv = 01 — |
16-разрядная операция |
|
с 16-разрядным непосредственным операндом без знака, s :w = ll — |
16-разрядная операция |
с 8-разрядным непосредственным операндом, который расширяется со знаком до 16 разрядов).
348 Глава 4. Микропроцессоры 8086/8088 и сопроцессор 8087
Последний вариант допускает использование однобайтного операнда для чисел -128 ...+127 в 16-разрядных операциях (экономится один байт). Индикатор 5 имеется только в командах сложения, вычитания и сравнения операндов;
у (value) — индикатор, определяющий число сдвигов в командах сдвигов (v = 0 — число сдвигов равно 1, v = 1 — число сдвигов определяется регистром CL);
z (zero) — индикатор, используемый только в команде REP;
reg (register) — 2- или 3-разрядное поле, адресующее сегментные регистры или регистры общего назначения в соответствии с табл. 4.8. Неоднозначности использования поля reg для указания сегментных регистров и регистров общего назначения не возникает, так как они рас познаются с помощью КОП.
D l D 6 D 5 D 4 D 3 D 2 D 1 DO D7 D 6 D 5 D 4 D 3 D 2 D 1 DO
|
|
|
|
|
|
КОП |
|
|
|
|
|
|
|
|
I__ |
|
|
|
|
|
|
|
Т олько одн о б а й т о вы е ком анд ы |
|||
|
|
|
|
|
|
КОП |
|
reg |
|
|
|
|
|
J ______ I______ L. |
|
|
|
|
|
|
|
|
КОП |
reg |
КОП |
|
|
|
|
|
|
|
|
_I_ |
|
|
|
|
|
|
|
КОП |
|
|
|
|
Рис. 4.18. Форматы первого байта команд |
|
|||||
|
|
Таблица 4.8. Кодирование регистров |
|
|||||
Адрес регистра |
Регистры |
Адрес регистра |
|
Сегментный |
||||
(поле reg) |
w = 1 |
w = 0 |
(поле reg) * |
|
регистр |
|||
О О О |
АХ |
AL |
0 0 |
|
ES |
|||
0 |
0 |
1 |
СХ |
CL |
0 |
1 |
|
CS |
0 |
1 |
0 |
DX |
DL |
1 |
0 |
|
SS |
0 |
1 |
1 |
ВХ |
BL |
1 |
1 |
|
DS |
1 |
0 |
0 |
SP |
АН |
|
|
|
|
1 |
0 |
1 |
ВР |
СН |
|
|
|
|
1 |
1 |
0 |
SI |
DH |
|
|
|
|
1 |
1 |
1 |
DI |
ВН |
|
|
|
|
П р и м е ч а н и е : * старший разряд поля reg равен 0, если поле reg трехразрядное.
На рис. 4.19 показаны форматы всех команд сложения без переноса ADD, содержащие от двух до шести байт (штриховыми линиями изображены операнды, наличие которых определя ется режимом адресации операндов и индикаторами s и н>). Один байт disp L задает 8-разрядное смещение disp8 (расширяется со знаком), а два байта clisp Н и disp L — 16-разрядное смещение disp\6, участвующие в вычислении эффективного адреса памяти ЕА. Байт данных L представ ляет 8-разрядный непосредственный операнд (операнд, содержащийся в самой команде), а бай ты данных data Н и data L — 16-разрядный непосредственный операнд. Второй байт в первых двух командах сложения используется для задания режима адресации операндов. Второй байт второй команды содержит еще 3-разрядный код операции КОП = ООО.