Текст
                    1.7. Форт-микропроцессор K1865BMI
Микропроцессор К1865ВМ1 — КМОП БИС, представляющая собойоднокрн-
стальный 16-раэрядный МП, непосредственно реализующий язык программирова-
ния Форт (Forth).
Микропроцессор характеризуется следующими особенностями:
RISC-архитектура;
стек-ориентированная архитектура;
50

Рис. 1.16. Структурная схема микропроцессора К1865ВМ1 частота синхронизации 0...4 МГц; высокая скорость обработки (цикл 250 нс); выполнение всех команд за один или два цикла (такта); возможность параллельного выполнения нескольких команд в течение одного цикла; высокая скорость реакции на прерывание (250 нс); поддержка выполнения команд умножения, деления, извлечения квадратного корня. Микропроцессор можно использовать как процессор общего назначения для работы в реальном времени, в частности в высокоскоростных контроллерах, а также для построения сопроцессорных плат к универсальным ЭВМ. Аппаратная поддер- жка интерактивного языка программирования высокого уровня Форт обеспечивает возможность выполнения программ с экономией до 75 % времени в сравнении с традиционными языками программирования. К1865ВМ1 относится к вычислительным устройствам со стековой архитекту- рой. В таких устройствах обрабатываемые данные находятся в стеке и большинство команд используют в качестве операндов один или два верхних элемента стека. Подобный тип архитектуры особенно удобен для выполнения компиляции блочно- структурированных языков. Особенность архитектуры МП состоит также в том, что он содержит два стека — данных и возвратов, которые могут работать параллельно. Стек данных содержит обрабатываемые данные. Стек возвратов содержит адреса возвратов из подпрограмм. Использование стека возвратов позволяет эффективно реализовывать обращение к подпрограммам: вызов — один такт, возврат — один или нуль тактов (возврат может быть выполнен одновременно с выполнением операции над стеком данных). Структурная схема микропроцессора (рис. 1.16) включает следующие функци- ональные блоки: L — регистр команд, Т — верхний регистр стека данных, N — следующий регистр стека данных, 1 — верхний регистр стека возврата, PC — счетчик команд.
JK — объединенный указатель стеков данных и возврата, MD, SR — рабочие регистры расширенной арифметики, port В — регистры управления портом В, port X— регистры управления портом X, MUXA — мультиплексор адресов, ALU — арифметико-логическое устройство, CU — блок управления процессором. Стек данных PS и стек возвратов RS емкостью 256 слов каждый составляет неотъемлемую часть архитектуры микропроцессора, но они располагаются вне кристалла ЙП, в самом МП предусмотрев интерфейс для подключения внешней памяти, реализующей функциистеков. Стек данных состоит из внешней к МП памяти PS и регистров N и 1. Данные, записываемые вовнешнюю память стека, всегда берутся из регистра N, а загружа- емые из внешней памяти записываются в регистр N или игнорируются. При загруз- ке из стека содержимое регистра N помешается в регистр I через АЛУ. При выгруз- ке в стек содержимое регистра I может непосредственно записываться в регистр N. Операции пересылки данных между регистрами I и N и между N и стеком независимы й позволяют выполнить комбинированные действия, что увеличивает эффективность использования стека без дополнительных затрат времени. Стек возвратов состоит из внешней памяти RS и регистра I. Все обращенния к стеку возвратов осуществляются через регистр I, который может быть прочитан без загрузки из стека Новогозначения. При записи в регистр 1 прежнее значение всегда выгружается в стек RS. Как отмечалось выше, стек возвратов эффективно реализу- ет обращение к подпрограммам. К примеру, две команды ххх 000555 —вызов подпрограммы по адресу 555(8); 555104361 —; осуществят: первая — вызов подпрограммы по адресу 555 (8). где размещена ко- манда 10436); вторая — выполнение операции сложения регистров Т и N с учетом переноса и с последующим сдвигом вправо на один бит с продвижением стека данных вниз, а также возврат из подпрограммы к следующей команде по адресу Микропроцессор содержит несколько внутренних регистров. Большая часть из них объединена в файл из 16 регистров, называемых "внутренней памятью". Ниже приводится более подробная информация об отдельных регистрах. 15-битовый счетчик команд PC содержит увеличенный на 1 адрес текущей команды. Он доступен только по чтению. Запись информации по адресу PC не изменяет его значения. Однако возможна косвенная запись информации в PC. По- следовательное выполнение действий Т®>1, Return вызовет прием команды по адресу (Т)и запись в PC значения (T)-f-l. 16-битовый регистр текущей команды L содержит команду, выполняемую в текущем такте. Регистр L непосредственно недоступен. В случае ситуаций "Сброс” или "Прерывание" он устанавливается в ГОООН или 0020Н соответственно. Регистр JK является указателем для стека возвратов и стека данных. Старшая часть (J) адресует стек возврата, а младшая (К) — стек данных. Регистр доступен по чтению н записи. В регистре^ располагается верхний элемент стека данных. По умолчанию этот регистр является источником операнда АЛУ и приемником результата операции. Каждый раз при изменении Т в отдельном триггере запоминается условие Т = 0. Это позволяет быстро выполнять команду условного перехода. Кроме того, регистр Т содержит адрес для команд чтения/записи основной памяти. Регистр N хранит второй сверху элемент стека данных. Он используется для арифметических операций во время длинных сдвигов (когда Т и N образуют 32-би- товый регистр), а при выполнении команды записи в память регистр N хранит данные. Триггер С содержит бит переноса при арифметических операциях АЛУ. При команде CALL и при прерывании содержимое С сохраняется в 15-м бите адреса, записанном в 1. Состояние С восстанавливается из регистра I при возврате из подпрограммы. Регистр 1 хранит верхний элемент стека возвратов. При чтении регистра I 52
возможно продвижениестека возвратов вверх. При записи в I стек возвратов всегда продвигается вниз. Регистр I используется в следующих случаях: по команде CALL адрес возврата (PC+D записывается в I, а по команде Return читается из 1; команды цикла (NEXT) и потоковой обработки используют регистр I каксчет- чик числа тактов повторного выполнения команды; для хранения локальных переменных. Для оптимизации команд цикла и потоковой обработки регистр 1 имеет воз- можность уменьшения содержимого на 1 до 0 без использования АЛУ, При измене- нии содержимого I он тестируется на 0 и результат записывается в отдельный триггер. Регистр умножения/деления MD выполняет несколько функций, При базовом алгоритме умножения MD содержит множимое, которое добавляется к Произведе- нию, когда соответствующий бит в множителе имеет значение 1. При реализации алгоритма деления Ми содержит делитель, который условно вычитается из дели- мого. При вычислении квадратного корня MD содержит исходное число; при этом используется специальная логика для условного изменения содержимого MD. Ре- гистр MD имеет доступ по чтению/записи и может использоваться как рабочий, когда не используются команды арифметических функций. Алгоритм вычисления квадратного корня по сравнению с делением'требует одного дополнительного регистра. В регистре SR размещают данные, которые сдви- гаются при вычислении квадратного корня. Для этого SR имеет возможность сдвига данных без участия АЛУ., Если SR не занят при вычислений квадратного корня, то он может быть использован как рабочий регистр. Управление портом В осуществляется через четыре регистре, доступных по чтению/записи; регистр данных Bdata. регистр маски Bmaak, регистр направления Bdlг. регистр состояния Bstate. Каждый регистр выполняет определенную функцию для определенного бита порта (Bport) в соответствии с табл. 1.0. Т а б л и ца 1.9 Функции регистров управления портом В Операция Bdata Bmask Bdir Bstate Bport Ybus 0 Вывод Bdata 0 — 1 — 0 — Вывод Bdata 1 — | — 1 — Запись Bdata т 0 — — — Запись Bdata — 1 — — — . — Запись Bmask — т — — Запись Bdir — — Г — — — Запись Bstate — • — Т — — Чтение Bdata — 0 0 — Bdata xor Bport Чтение Bdata — — 0 1 — Bdata Чтение Bdata — — 1 — data Zero Чтение Bmaak — — — — — Bmask Чтение Bdir — — — — — Bdir Чтение Bstate — — — — — Bstate — везраэлнчноесостояиие.нетопераиин; "г“ — отхлючекное(»ым«ооиное) 53
При сбросе регистры порта не меняют своего значения, кроме регистра Bstate, который принимает значение FFFFH. Команда записи в Bdata всегда сопровождается сигналом WEB. Порт X аналогичен порту В. Он представлен регистрами данных Xdata, маски Xmask, направления Xdir, состояния Xstate. Различие состоит в том, Что X — пяти- разрядный порт, и поэтому только пять младших битов во всех регистрах ведут себя подобно регистрам порта В. Кроме того, бит 8 в регистре Xstate является битом разрешения прерывания. Этот бит устанавливается в О по сигналу “Сброс”, запре- щая прерывания. Он доступен по чтению или записи при обращении к регистру Xstate, а также только по чтению при обращении к другим регистрам порта X. Неиспользуемые биты регистров порта X недоступны при записи, а при чтении их значение всегда равно 0. Операции АЛУ. АЛУ имеет два входа: регистр Т и внутреннюю шину Ybus. Информация на Ybus может поступать из регистра N, ’’внутренней памяти" или пятибитового литерального поля команды (как число без знака). Операция АЛУ выполняется в каждом такте работы МП. Результат операции АЛУ всегда записывается в регистр Т. АЛУ выполняет следующие функции: а)Т; б) Т and Ybus; в)Т — Ybus; г)Тог Ybus; д) Т + Ybus; е)Т хог Ybus; ж)Т —Ybus; 3)Ybus. Функция АЛУ задается, как правило, трехбитовым полем в коде команды. Управление битом переноса осуществляется либо отдельным битом в коде команды, либо более сложным образом. После выполнения операций а), в), д), ж) полученный результат может быть дополнительно модифицирован следующим образом: сдвиг вправо на J бит, сдвиг влево на 1 бит, размножение знака. Сдвиг вправо — арифметический, если используется функция а). Если же он выполняется после арифметической функции, то в старший бит заносится бит пере- носа. Сдвиг влево всегда логический. Размножение знака дает-— 1 или 0 взависи- мости от значения старшего бита результата. Имеется возможность для сдвига содержимого регистра N совместно со сдви- гами, описанными выше. Когда выход АЛУ сдвигается влево, содержимое N также может быть сдвинуто влево и его старший бит будет установлен равным значению младшего бита выхода АЛУ. При сдвиге вправо в младший бит выхода АЛУ будет задвинут знаковый бит регистра N. Описание функционирования. Порядок функционирования МП следующий. По положительному фронту сигнала СЁК в регистр команды L записывается команда. Блок СU осуществляет дешифрацию команды и определяет код опера- ции ALU, а также тип обмена со стеками. В следующем такте в регистр команд записывается новая команда. Если необходим прием операнда из ЗУ, то команда выполняется за два такта: в первом — прием данного, во втором — выполнение операции на ALU. Для тактирования МП требуется один вывод CLK и тактовые импульсы с периодом, равным базовому времени выполнения команды. За время одного такта должны быть выполнены все операции обмена по внешним шинам. Если этого не произошло (т. е. МП совершает обмен с медленным устройством), то внешняя логи- ческая схема должна определить эту ситуацию, остановить такткрованиеМПидать возможность выполнить заново обмен по сигналу готовности устройства. Микросхема имеет асинхронный вход сброса RST, при подаче сигнала на кото- рый выполняются: установка регистра команд в состояние 1000Н; 54
сброс триггеров запроса прерывания, разрешения прерывания, потоковой об- работки; установка регистров Bstate, Xstate. Во время сброса МП осуществляет обращение за командой по адресу 1000Н. После завершения сброса МП фиксирует содержимое памяти по адресу 1000Н в регистре команд и начинает обычное функционирование. В процессе работы после приема очередной команды в регистр команд счетчик команд увел ичивается На 1 и начинается выборка следующей команды параллельно с выполнением текущей. Микропроцессор имеет прерывание по входу'ШТ. Отрицательный фронт этого сигнала вызывает установку внутреннего триггера запроса прерывания. Когда прерывание разрешено, МП проверяет запрос на прерывание в каждом такте рабо- ты, кроме первого такта двухтактных команд и тактов, когда команда выполняется в потоковом режиме. Если запрос присутствует, то вовремя приема новой команды в регистр команд (по положительному фронту сигнала CLK) будет записан код 0020Н; считываемая из ЗУ команда при этом игнорируется. Завершение подпрог- раммы обработки прерывания осуществляется по команде RETURN. При выборке очередной команды ее адрес берется по одному из четырех источ- ников, определяемому текущей выполняемой командой: регистра Р для последовательного исполнения, , регистра I для выхода изподпрограммы, регистра L для команды CALL, конкатенации трех старших битов регистра PC и 12-битового поля из регистра L для команды перехода (это дает возможность перехода внутри страницы). Новая команда передается в регистр L в конце такта. Если очередной выпол- няемой командой является однотактная потоковая команда, процессор выбирает следующую команду и игнорирует ее до завершения исполнения текущей команды. Система команд .Однотактные команды. Команда CALL. Формат команды "Оааа ааа ааа ааа ааа". Микропроцессор осуществляет вызов подпрограммы по адресу "Оааа ааа ааа ааа”, загружая при этом адрес возврата в стек возвратов. Бит переноса С сохраня- ется в старшем бите адреса возврата. Выполняются действия (Оааа ааа ааа ааа ааа+1) (Оааа ааа ааа ааа ааа) •» RS => PC параллельно в течение одного такта. Стек данных не изменяется. Команда RETURN (или EXIT) осуществляет выход из подпрограммы и пере- дает управление по адресу, находящемуся в регистре I. Выполняются действия (также параллельно за один такт): ( 1(14:0] ) “> L - прием новой команды 1(14:0] + 1 => PC - новое значение PC 1[15] => С - бит переноса RS => I - выталкивание стека возвратов ' Если команда двухтактная, то перечисленные выше действия выполняются во втором такте параллельно с выполнением основной команды. Если команда с уста- 55
новленным битом выполняется в потоковом режиме, то действия будут выпол- няться в последнем, завершающем такте выполнения команды. Команды ветвлений. При ветвлении управление передается в следующем так- те команды по адресу "ррр ррр ррр ррр" внутри текущей страницы. Старшие три бита PC определяют номер страницы. Команда условного перехода BRANCH. Формат команды ”001 ррр ррр ррр ррр”. Выполняемые действия, если Т=0 : N => Т PS N (РС[15:12] ррр ррр ррр ррр) + 1 => ₽С (РС[15:12) ррр ррр ррр ррр) => L если Т /= 0 : N => Т ' PS => N PC + 1 => PC При выполнении команды независимо от значения регистра Т стек данных всегда проталкивается и содержимое Т замещается новым значением. Команда организации циклов NEXT. Формат команды '1*10 ррр ррр ррр ррр". Выполняемые действия, если I /= 0 : 1-1 => I (РС[15:12) ррр ррр ррр ррр.) + 1 => PC (РС[15:12] ррр ррр ррр ррр) => L если 1=0 : RS => I PC + 1 => PC (PC) => L Переход выполняется, если I 4= 0- При этом J уменьшается на 1. Если 1—0, то стек возвратов выгружается в 1 и исполняется команда, следующая за командой NEXT. Цикл выполняется J-H раз. Команда безусловного перехода GOTO. Формат команды "1011 ррр ррр ррр ррр". Выполняемые действия: (РС[15:12] ррр ррр ррр ррр) + 1 => PC (РС(15:12) ррр ррр ррр ррр) => L Арифметические команды. Данный класс, команд выполняет операцию fff над Т и N, помещая результат В Т. Кодирование функций разрядами поля команды; 1000 fff Oct; Sd 01г" следующее: биты fff; 56
ООО — копировать Т, 00 1 — Т and Ybus, 0 10 —Т —Ybus, О 1 1 — Tor Ybus, 1 00 — T+Ybus, 1 0 1 —Txor Ybus, 1 1 0 — Ybus — T, 111 — копировать N; s = 1 — активность стека данных; О 1 — PS = >N, PS. Биты d, 1, г управляют операцией сдвига следующим образом: ООО — нет операции, 0 0 1 — сдвиг результата операции АЛУ вправо, 0 10 — сдвиг результата операции АЛУ влево, 0 11 — расширение знака, 100 — недопустим, ГО 1 — 32-битный сдвиг (АЛУ, N) вправо, 1 10 — 32-битный сдвиг(АЛУ, N) влево, 111 — недопустим. Команды математических функций. Формат команд "1000 Iff Iqt; sd/lr”. Поле Iff и биты s,t,d, I, г; имеют те же значения, что и в предыдущей команде. Код команды определяется битами q и /. Команда "1000 100 ЮГ’ si 001" — шаг умножения. При ее выполнении множи- тель помещается в MD, множимое — В N, начальное значение произведения — в Т. В шаге умножения в случае NO= 1 происходят сложение Т сМОи сдвиг результата операции вправо на один разряд При сдвиге разряд Т15 загружается значением переноса из АЛУ. При NO = 0 происходит только арифметический сдвиг регистра Т на один разряд вправо (знаковый разряд при этом размножается). Управляя функциями АЛУ и сдвигом, можно получить разные варианты команды. Команда "1000 010 101; si 110” — шаг деления. Делимое размещается в разные варианты команды. Команда ”1000010 1 It; si 110" — шаг квадратного корня. Аргументы — в паре [Т, N], в MD — нуль и в SR — значенние 8000Н. Каждый шаг похож на деление, но значение на Ybus равно логическому выражению (SRIMD- 2). Если на этом шаге возник перенос, то Значение (5Е! MD) помещается bMD. В каждом такте SR сдвигается вправо. В конце операции результат помещается в MD и N. а остаток — в Т. Операции с регистрами. Помимо того, что регистры неявно используются в некоторых командах, большинство регистров доступны как элементы регистрового файла "внутренняя память". Команды REG©, REGI и REG@t читают, пишут, обме- нивают содержимое Т и значение внутреннего регистра, номер которого записан в литеральном поле команды iiii: 57
1100 fff Oil ;ri iii - REG? - чтение регистра Выполняемые действия: Я»> Т Т => N Т -fff- (iiii) =? Г 1100 fff 111 ;ri iii - REG? - чтение регистре Выполняемые действия: Т -fff- (iiii) »> Т •Здесь fff — обозначение операции. Содержимое регистра iiii выдается на шину Ybus, и производится операция fff гia АЛУ. Бит г=1 означает, что будет выполнена выгрузка стека возвратов, т. е. RS = > I. 1101 fff 010 jsi iii - REGI - запись регистра Выполняемые действия: Т => (iiii) T-fff-N => Т PS => N 1101 fff Oil jei iii - REGI - запись регистра Выполняемые действия: Т «> (iiii) T-fff-N -> Т 1101 fff 111 ;si iii - REG?J— обмен с регистром Выполняемые действия: Г => (iiii) T-fff-(iiii) => T Бит s=l вызывает установку в следующем такте триггера потоковой обработ- ки, и следующая за данной команда будет выполняться в потоковом режиме (см. ниже). Операции с коротким литералом. Значение литерала ddddd помещается на шину Ybus, и выполняется операция fff. Старшие биты литерала заполняются нулями. 1101Jfff 1с0 ;dd ddd - короткий литерал Выполняемые действия: Г -fff- ddddd => Т 1101 fff 101 jdd ddd - короткий литерал Выполняемые действия: N «> PS ' Т > N Т -fff- ddddd =* Т 58
Двухтактные команды. В первом такте МП осуществляет доступ к внешней памяти для чтения или записи данного. Возможно выполнение операции АЛУ в соответствии с кодой {К. Во втором такте выполняются операция Ш на АЛУ и выборка следующей команды. Операции с внешней локальной памятью. Данный класс двухтактных команд осуществляет операции с внешней памятью в диапазоне адресов от 0000Н до 001FH, т. е.’с первыми 32 словами памяти. Адрес ячейки памяти содержится в поле "aaaaa" кода команды ПОР fff ОсО jaa ааа - локальное чтение Выполняемые действия! такт 1 (aaaaa) => N => PS такт 2 т -fff- N => т PS => N 1100 fff ОсО ;аа ааа - локальное чтение Выполняемые действия: такт.1 (aaaaa) => N => PS такт 2 Т -fff- N => Т => N 1101 fff ООО ;аа ааа - локальная запись Выполняемые действия: такт 1 Т -fff- N => Т => (aaaaa) такт 2 Т -fff- N => Т PS => N 1101 fff 001 ?аа ааа - локальная запись Выполняемые действия:' такт 1 Т -fff- N =?• Т => (aaaaa) тахт 2 Т -fff- N => Т =* И Операции с 1в-битовым литералом. Данный класс команд содержит 16-бито- вый операнд Literal в ячейке памяти, следующей за кодом команды: 1100 fff 1с0 ;хх ххх < 16-бит литерал > Выполняемые действия: такт 1 (Literal) => N => ₽S такт 2 Т -fff- N => Т PS => N 1100 fff’101 ;хх ххх < 16-бит литерал > Выполняемые действия: тахт 1 (Literal) -> N => PS такт 2 Т -fff- н => Т =•> N
Операции с внешней глобальной памятью. Данный класс двухтактных команд осуществляет операции со всей анешней памятью в диапазоне адресов от 0000Н до FFFFH, Адрес ячейки памяти содержится в регистре Т. Содержимое »той ячейки в описании команд обозначается (Т). 1110 fff -с0 ।хх ххх - чтение Выполняемые действия: такт 1 (TJ я» N => Т ачии 3 Т -fff- N •> г РВ -> N 1110 fff -01 j хх ххх - чтение Выполняемые действия: такт 1 (Г) «> n » т такт 2 т -fff- Л > т > n 1110 fff Oil ,хх ххх - чтение Выполняемые действия: тахт 1 Г -fff- N -> Г »> N => PS (Т> > игнорируется такт 2 Т -> N > PS 1110 fff 111 »хх ххх - чтение Выполняемые действия: тахт 1 (Г) •=> N > PS Т -fff- ddddd -> Т тахт 2 мет операции 1111 fff -оО (хх ххх - запись Выполняемые действия: такт 1 Р6 -> N -> (Г) Г -fff- N «> Т такт 2 PS > N Т -fff- N -> Т 1111 fff 001 }Хх ххх - запись Выполняемые действия: такт 1 И •> И > (I) Г -fff- и -> т такт 2 Г -fff- N -> Т -> 1» 1111 fff 011 (хх ххх -запись Выполняемые действия: тахт 1 PS > N •> (Т) Т -fff- к > т такт 2 нет операции 1111 fff 101 ;хх ххх - запись
Выполняемые действия: такт 1 N => (Т) Т -fff- N => Т => N => PS такт 2 Т -fff- N => Т => N => PS 1111 fff 111 ;dd ddd - запись Выполняемые действия: такт 1 PS => N => (Т) Т -fff- ddddd => Т такт 2 нет операции Признаки операции. Как и во всех традиционных МП, выполнение операции на АЛУ в форт-микропроцессоре приводит к установке признаков результата опера- ции. К таким признакам относятся: триггер переноса С, триггер нулевого результа- ’мш сожалению, в МП нет прямого доступа к этим признакам, как, например, к PSW в других МП. Однако признаки можно проанализировать косвенно. Признак нулевого результата можно проанализировать командой ветвления BRANCH, которая была описана выше. Анализ переноса более сложен. Доступ к этому признаку возможен, если учесть, что в команде CALL он сохраняется в старшем бите регистра 1. Таким образом, если в памяти есть подпрограмма .АС 147301 I => Т 100043 0< , то анализ переноса осуществляется следующим образом: * CALL АС вызов п/программы BRANCH ветвление по С=0. Итак, посредством использования команды условного ветвления можно про- анализировать признак переноса, потратив для этого три дополнительных такта. Кроме того, можно использовать признак "знак результата”, который содер- жится в старшем бите регистра Т. Для анализа знака потребуется один дополни- DUP 0< размножение знака BRANCH ветвление. Аналогично можно выделить признак переполнения. Перепишем приведенную выше подпрограмму: .AV 145301 I хот Т -> Т 100043 0< , Анализ переполнения в такой программе будет иметь вид вызов п/программы ветвление по V=0. CALL AV BRANCH
Таким же образом можно проанализировать и другие, более сложные признаки результата операции. Потоковая обработка. МП поддерживает специальный режим выполнения команд, называемый "потоковая обработка". Суть ее состоит в циклическом (по- вторном) выполнении команды, которая была принята в регистр ^омаяд после установки триггера потоковой обработки. Установка триггера выполняется коман- дой REG! или REG@!, когда бит s=l. В этом случае следующая за REG! (REG@!) команда будет выполняться в потоковом режиме. Число повторных выполнений команды определяется значением регистра I. В каждом такте осуществляются уменьшение I на 1 и проверка на равенство нулю. Потоковый режим выполнения для одно- и двухтактных команд различен. Для однотактных команд в начале каждою такта проверяется 1. Если содержимое 1 не равно 0, то оно уменьшается на 1 и потоковый режим продолжается. При этом МП приостанавливает увеличение PC и выборку следующей команды в конце такта. Если в начале такта содержимое I оказывается равным 0, то МП производит вы- грузку из стека возвратов, помещая в 1 новое значение. На этом потоковый режим завершается, и продолжается обычное выполнение команд. Однотактная команда выполняется на два такта дольше, чем этоопределяет значение счетчика в регистре I. Двухтактные команды начинают выполняться так же, как и однотактные, но в потоковом режиме исполняются только действия первого такта. При обнаружении в начале такта 0 в регистре 1 стек возвратов выгружается и выполняются действия второго такта двухтактной команды. При том же значении 1 двухтактная команда будет выполняться за столько же тактов, что и однотактная, но первый такт выпол- няется на 1 раз меньше, чем у однотактных команд, но на I раз больше, чем значение в регистре I. Отметим, что поскольку установка триггера потоковой обработки блокирует наращивание счетчика команд, варианты использования комадд с длинным литера- лом в потоковом режиме ограничены. Построение вычислительной системы на основе форт-микролроцессора Интерфейс МП состоит из нескольких дискретных линий и четырех независи- мых шин: основной памяти А[0—15],D[O—15]; стека данных К [0 — 7], S [0 — 15]; стека возвратов J [0 — 15], R [0 — 15]; портов ввода-вывода В {0 — 15], X [О — 4]. Микропроцессор может осуществлять по внешним шинам два вида обменов — чтение и запись. Временное диаграммы циклов чтения н записи для шин основной памяти, стека данных и стека, возврата одинаковы (рис. 1.17). В табл. 1.) О приведе- ны временные параметры микросхемы. Интерфейс основной памяти включает: шину адреса А [ 15:0); шину данных D {15:0]; строб чтение/запись WED. ----- SRUSx(O-fS) WEx ___f Чтение a) Рис. 1.17. Временные диаграммы циклов чтения (а) и записи (б)
Таблица 1.10 Временное параметры микросхемы К1865ВМ1 Параметр Шина памяти Шняв стеков mln m«v mln m«v Задержка выдачи сигнала, нс 145 165 195 215 Задержка снятия сигнала, нс 20 • 30 20 30 Время предварительной установки дан- ных, нс 30 45 30 45 Микропроцессор адресует до64К слов основной памяти; при этом существуют ограничения и определенные правила при ее построении: а) первые 4К слова памяти от 0 до 1000Н должны быть ОЗУ, так как первые 32 слова памяти прямо адресуются специальными командами и удобны как рабочая память или как регистры для часто используемых глобальных переменных. Кроме того, адрес ЗОН зарезервирован'под первую команду обработки прерываний; б) следующие 4К слова от 1000Н до 2000Н должны быть ПЗУ, так как при сбросе МП управление передается по адресу 1000Н; г) остальная часть 64К-словной памяти может состоять из ОЗУ, ПЗУ И регист- ров периферийных устройств; д) МП может выбирать команды только из первой половины памяти (первые 32К слов), так как длина счетчика команд 15 бит Первые 32К слов называются "памятью программ", вторые 32К слова — "памятью данных”. е) первые 32К слова разбиты на "страницы" по 4К слов каждая. Команды ветвлений могут работать только внутри страницы. Для перехода между страница- ми используется команда вызова CALL. ж) для приложений, требующих более 64К слов, можно воспользоваться пор- тами X и В для расширения адресного пространства. Стеки данных и возврата. Каждый стек имеет свой интерфейс, состоящий из шины адреса К [7:0] (J [7;0]), шины данных S [15:0] (R [15:0]), строба "чтение/запись" WES (WER). Память стеков выбирается в каждом такте работы МП, причем, если содержимое стека в этом такте не нужно, оно считывается и игнорируется. Порты ввода-вывода. Интерфейс портов ввода-вывода состоит из: 16-разрядного двунаправленного порта В [15:0]; 5-раэрядного двунаправленного порта X [4:0]; строба "чтение/запись" WEB порта В. Каждый порт в МП представлен четырьмя регистрами: данные; маска; на- правление, состояние. Каждый вывод порта может быть индивидуально запрограм- мирован на выдачу или прием информации. Обработка прерывания. Запрос на прерывание текущего процесса обработки может быть получен посредством подачи на вход ШТ активного сигнала (переход линии INT из состояния "активный высокий" в состояние "активный низкий"). В ре- зультате этого устанавливается флаг запроса прерывания микропроцессора. Чтобы запрос на прерывание был обслужен, необходимо выполнение следующих условий: а) флаг разрешения прерывания установлен; б) в случае двухтактной команды выполняется второй такт обработки; в) в случае потоковой команды выполняется последний такт обработки; г) следующей принимаемой командой не является команда вызова или ветвле- ний. При выполнении всех перечисленных выше условий в момент приема новой команды в регистр команд возникает строб прерывания, который устанавливает в регистре команд код 20Н. Принятая команда игнорируется, однако счетчик команд увеличивается на 1. Обработка прерывания занимает два такта. В первом такте: по адресу 20Н из памяти читается комайда и игнорируется; сч етчик команд.остается неизменным и равным AR+1 • где AR — адрес воз- врата из прерывания;
ст ек возврата проталкивается, н на верхушку стека (в регистр I) заносится значение счетчика команд AR-j-1; флаг запроса прерывания сбрасывается. Во втором такте: по адресу 20Н из памяти читается команда и в конце такта запТгсывается в регистр команд; в счетчик команд записывается значение 21Н; стек возврата проталкивается, и на верхушку стека (в регистр I) заносится значение счетчика команд AR+1. Для правильного выполнения входа в программу обработки прерывания в ячейке памяти по адресу 20Н должна находиться команда вызова 21Н, а начиная с ячейки 21Н, должна размещаться программа обработки прерывания (или команда перехода на программу обработки). Таким образом, после входа в процедуру обработки прерывания содержание 1 регистров МП будет следующим: L — (21 Н) начальная команда программы обработки прерывания; PC —22Н; ( — 2<Н; RS(J) —АР+1; RS (J — I)—AR-J-1; RS (J — 2) — ?, где J — значение указателя стека возврата. Чтобы правильно выйти из программы обработки прерывания для продолже- ния прерванного процесса вычислений, необходимо, чтобы стек возврата имел вид: 1_ —EXIT; PC — адрес текущей команды-pi; I — AR; RS(J) —?. Из сравнения значений можно сделать вывод о необходимости выполнения определенных действий для приведения стека возврата в соответствие е требуемым ; состоянием. Флаг разрешения прерывания доступен по адресу регистра состояния порта X внутренней памяти МП. При записи поданному адресу восьмой разряд регистра Т записывается в флаг разрешения прерывания. Данный флаг может быть прочитан при чтении любого из регистров порта X. Необходимо отметить, что прерывание может быть обслужено только между выполняемыми командами. Однако имеется одно ограничение, связанное с коман- дой потоковой обработки. Если вовремя записи любого внутреннего регистра бит 4 команды записи установлен, то следующая команда будет выполняться в потоковом режиме. Однако если в момент приема этой команды имеется запрос на прерывание и триггер разрешения прерывания установлен, то произойдет прерывание и даль- нейшие действия МП непредсказуемы. Поэтому перед запуском потоковой команды Необходимо избегать возникновения прерывания. При использовании форт-микропроцессора следует учитывать некоторые осо- бенности его функционирования. Так, в шаге беззнакового умножения в случаях: NO=.l —• происходят сложение Т с MD и сдвиг результата операции вправо на один разряд. Т15 при сдвиге загружается значением переноса из АЛУ; N0=0 — происходит арифметический сдвиг регистра Т на один разряд вправо, т. е. знаковый разряд размножается. Это неправильно для беззнакового умножения (в Т15 должен помещаться нуль). Возможность возникновения такой ситуаций на- кладывает ограничения на множитель, множимое и начальное значение а Т. При небольших значениях операндов операция выполняется корректно. При сдвиге регистра N влево в его младший разряд записывается текущее значение переноса из АЛУ. Это не всегда правильно, так как его значение должно быть нулевым. Поэтому после сдвига влево на младший разряд необходимо нало- жить маску(операция AND с операнде^ FFFEH). П'ри выполнении правого сдвига - в старший разряд поступает младший разряд выхода АЛУ. В команде вычитания с переносом на вход переноса АЛУ всегда подается значение переноса от предыдущей команды, но проинвертнрованное.