Эмуляторы 8-разрядных ОЭВМ к IBM PC

В настоящее время наиболее массовый - это рынок 8-разрядных систем на основе микропроцессоров (МП) и однокристальных микроЭВМ (ОЭВМ). Одновременно изготовители инструментария предлагают разработчикам изделий аппаратно-программные отладочные средства. Их архитектуру и использование определяет методология схемной эмуляции. У всех этих средств есть обширные меню пользовательских команд и функций. Многие в качестве инструментальной используют ЭВМ IBM PC, но возможности отладки и цена их весьма различны. В основе различий - разные аппроксимации метода схемной эмуляции. Пользователь отладочных средств должен ясно представлять себе ограничения различных подходов к эмуляции каждого типа БИС МП и ОЭВМ, чтобы в зависимости от решаемой задачи выбрать себе инструмент с наилучшим сочетанием цены и функциональных возможностей. Особенно это касается ОЭВМ, эмуляция которых сложна, но их умелое применение дает самый большой эффект.
Авторы предлагают вниманию разработчиков МП систем схемные эмуляторы 8-разрядных ОЭВМ серии К1816 (аналоги семейств Untel MCS-48, MCS-51). Эмуляторы выполнены на основе интеграции прототипной БИС ОЭВМ и микропрограммируемого автомата в совокупности с инструментальной ПЭВМ типа IBM PC. При таком подходе сочетание точности эмуляции и стоимости средства отладки наилучшие.
Знать детали структуры, схемотехнику программирования ОЭВМ и эмулятора обязательно при комплексной отладке системы пользователя в реальном времени. Поэтому вкратце напомним операции и функции схемной эмуляции как метода, их реализацию и ограничения.

Что такое внутрисхемная эмуляция?
Термин "внутрисхемный эмулятор" (in-circuit emulator (ICE) - ВСЭ) был введен фирмой Intel. Этот термин обозначает аппаратно-программное устройство, предназначенное для отладки МП систем. Эмулятор подключается к отлаживаемому устройству (МПУ) вместо МП БИС через выносную вилку, замещает БИС в функциональном и электрическом аспектах, но находится под управлением и наблюдением проектировщика. Оператор имеет доступ ко всем ресурсам эмулятора и программно-доступным ресурсам МПУ, может управлять выполнением рабочей программы.
Внутрисхемная эмуляция - это отладка МПУ с помощью эмулятора. Для данного метода характерны специфические функции и операции. Необходимы и достаточны функции замещения, наблюдения и управления, а также операции чтения-модификации, отработки шага программы и последовательности команд в реальном масштабе времени. Если для каждой операции определены все три функции эмуляции, то ВСЭ обеспечивает практически все известные режимы отладки МПУ.

Каковы особенности эмуляции ОЭВМ?
С точки зрения метода внутрисхемной эмуляции у ОЭВМ есть ряд отличительных от МП особенностей:
-    внутренние ресурсы, которые применяются при автономной работе (память программ и данных, счетчики-таймеры и др.);
-    большинство внешних выводов микросхемы используется в составе портов общего назначения, есть альтернативные функции для некоторых битов;
-    временная диаграмма обращения к внешним ресурсам "жесткая", т. е. количество тактов для выполнения каждой команды фиксировано;
-    остановить работу ОЭВМ, если не предусмотрен специальный вход управления, невозможно.
Три подхода к построению эмуляторов ОЭВМ Первый - использовать БИС ОЭВМ - прототип для реализации функции замещения обычно в комбинации с дополнительными блоками. При этом часть портов ввода-вывода буферизованы относительно МПУ, остальные подключены непосредственно.' Первый подход наиболее дешев, но требует полностью согласовать работу ОЭВМ и вспомогательных блоков, а это не всегда достижимо.
Второй подход - применить специальный отладочный или эму- ляционный вариант БИС ОЭВМ.
Третий предполагает создание имитирующего процессора, реализованного на дискретных компонентах или на основе микропрог- раммируемого комплекта БИС с разрядно-модульной организацией. При втором и третьем подходах достоверность эмуляции максимальна. Однако сложность и стоимость специального варианта БИС ОЭВМ весьма высоки, а создать имитирующий процессор из-за больших аппаратурных затрат (от 200 - 300 до 800 корпусов микросхем) сложно. На практике, выбирая эмулятор для отладки конкретного МПУ, разработчик руководствуется требуемой достоверностью эмуляции, стоимостью и надежностью отладочного средства.
Для многих применений и типов ОЭВМ первый подход дает приемлемые результаты, поэтому он применяется в эмуляторах известных фирм (из состава комплексов Intellec фирмы Intel, Mice-II фирмы Microtec и др.). Для этих эмуляторов характерна реализация блоков обрамления в виде заказных БИС, уникальных для каждого типа ОЭВМ. Микропрограммный супервизор формализует разработку блоков обрамления для различных типов ОЭВМ, увеличивает точность эмуляции прототипа.
Как реализуются функции эмуляции?
Эмулятор, использующий микропрограммный супервизор, по структуре - это контроллер, управляемый инструментальной ПЭВМ через параллельный 8-разрядный интерфейс. Управляющая программа, функционирующая в среде ОС инструментальной ПЭВМ, управляет эмулятором исходя из функционально ориентированных команд отладки. Развитое ПО и большие вычислительные возможности инструментальной ПЭВМ позволяют создать мощный интерфейс пользователя, сосредоточиться на разработке аппаратно-программных компонент нижнего уровня эмуляции, увеличить ее точность.
 

Структура схемного эмулятора с микропрограммируемым супервизором (в отличие от других) модульная. Эмулятор включает в себя традиционные блоки (прототипную ОЭВМ, память программ и данных, память трасс, эмуляционный буфер), реализующие функции наблюдения и замещения, а также специфические блоки (функционального управления и микропрограммного супервизора) для управления на нижнем уровне.
Рассмотрим особенности реализации функций замещения и управления, которые определяют построение эмуляционного буфера и обоих блоков управления, проблемы и возможности их решения.
Когда эмулятор замещает ОЭВМ МПУ, неизбежны искажения временных и электрофизических параметров взаимодействия ОЭВМ с внешней средой. Искажения появляются на буферизованных портах ввода-вывода; как правило, это порты обращения к внешней памяти программ и данных (РО и Р2 в ОЭВМ К1816ВЕ48/51). Буферизация необходима по двум причинам:
1. В блоке эмулятора размещается аппаратная модель внешней памяти программ и данных, которая может замещать соответствующие ресурсы МПУ абсолютно или по карте памяти (memory map).
2. Чтение-модификация внутренних ресурсов ОЭВМ проводится с помощью специальной служебной программы, размещенной в памяти эмулятора, которая, как правило, использует эти порты для передачи данных.
ОЭВМ серии К1816 имеют два режима работы: с внешней памятью программ и с внутренней (тогда порты РО и Р2 можно использовать как порты ввода-вывода).
Если для эмуляции режима работы с внешней памятью программ в качестве буферов применить двунаправленные шинные формирователи с тремя состояниями на выходе, то эмуляция универсальных портов РО и Р2 будет затруднена. Дело в том, что каждый бит портов ОЭВМ может индивидуально программироваться для ввода или вывода информации. Если в бит регистра порта записана "1", то порт запрограммирован как входной. При этом на выходе присутствует "1" (выходное сопротивление порядка 20 кОм). Если нагрузочная способность "0" у источника сигнала, подключенного к входу-выходу порта, не хуже 0,25 мА, то его логическое состояние - доминирующее. В то же время с точки зрения входа цифрового элемента (ТТЛ, КМОП, пМОП) логическое состояние порта равно "1". При записи в бит регистра порта "0" он считается запрограммированным как выходной и на выходе присутствует "0". Быстро переключать выход порта из "0" в "1" удается благодаря особой структуре динамической нагрузки выходного буфера и ее управлению. Адекватно эмулировать электрофизические параметры портов практически невозможно. Результат приемлемый, если эмулирующий буфер построен на микросхемах с открытым коллектором. Для передачи импульсного сигнала по кабелю от эмулятора к МПУ сопротивление резисторов нагрузки R делается меньшим, чем эквивалентное сопротивление порта ОЭВМ.
 

Функциональная адекватность при эмуляции портов Р0 и Р2 также не достижима из-за ограничений при выполнении команд типа "чтение-модификация-запись". Это команды ANL BUS,Л и OR'. BUS,А для ОЭВМ Ki8I6BE48/49 и команды ANL Рх,А; ORL Рх,А; JBC Px.y.Addr; СР1 Рх.у; INC Рх; DEC Рх; DJNZ Px.Addr; MOV Рх.у .С; О Ж Рх.у; SET Рх.у для ОЭВМ КШ6ВР51. Во время выполнения этих команд модофициругтея информация регистра порта (см рис.2) Запись нового значение в регистр совмещена с выборкой кода
следующей операции из памяти программ. При эмуляции режима К1816ВЕ48 (или ВЕ51) программа пользователя размещена в памяти программ эмулятора, поэтому невозможно считать содержимое регистра порта, применяя буфер порта для внешнего обмена в реальном масштабе времени.
 

Управление эмулирующей ОЭВМ - это останов выполнения рабочей программы (статический или динамический), принудительный переход к отработке служебной программы для чтения-модификации внутренних состояний и продолжение рабочей программы. Статический останов - прекращение операций ОЭВМ:
1)    с помощью специального входа управления ОЭВМ (Single Step для К1816ВЕ48/49);
2)    прекращением подачи тактовой частоты (для КМОГ1 кристалла со статическим ОЗУ).
Для динамического останова (пМОП ОЭВМ отечественного и зарубежного производства, К1816ВЕ31/51) надо подставить вместо следующей команды инструкцию с кодом 80Н, FEH (LABEL: SJMP LABEL). Чтобы выполнить служебную программу, процессору подставляется команда безусловного перехода на требуемый адрес. Служебную программу можно разместить в памяти программ эмулятора (замещая фрагмент программы пользователя), в дополнительном ПЗУ (ОЗУ), в блоке эмулятора или во внутреннем ПЗУ эмуляционной ОЭВМ. Возврат из служебной программы, чтобы продолжить рабочую программу, также происходит с помощью команды JMP (AJMP).
При отработке операций управления ОЭВМ К1816ВЕ51 сложно определить момент коммутации шины данных и подстановки кодов перехода. Эту операцию необходимо проводить в момент чтения кода следующей операции, т. е. необходимо отслеживать ход программы, учитывая 2- и 3-байтные команды. Поскольку временная диаграмма каждой команды ОЭВМ жестко фиксирована, следящее устройство должно представлять собой конечный автомат с переключаемыми функциями. Каждая функция соответствует определенному типу диаграммы. Функции должны переключаться при чтении кода следующей команды, т. е. автомат должен самосинхронизироваться с программой посредством обратной связи. Начальная синхронизация автомата и ОЭВМ возможна по сигналу RESET. Таким образом, следящее устройство работает в режиме супервизора и в любой момент времени позволяет определить, какой цикл обращения к памяти выполняет ОЭВМ.
Если организовать супервизор на принципах микропрограммного управления, то появляется возможность обеспечить управление эмулятором в реальном масштабе времени с точностью до такта синхронизации. Кроме функции управления эмуляционной ОЭВМ микропрограммный супервизор обеспечивает управление эмуляционным буфером портов РО и Р2, блоком памяти трассы программы и специальными блоками.
При внутрисхемной эмуляции функция наблюдения меняется в зависимости от выполненной операции. После останова это означает доступ ко всем ресурсам эмулятора и программно-доступным ресурсам ОЭВМ и МПУ для чтения и модификации. После запуска программы в реальном масштабе времени проводятся трассировка выполняемых команд (фиксация адреса обращения к памяти при чтении кода операции) и анализ заданного условия останова. В зависимости от аппаратной реализации эмулятора условием останова может быть контрольная точка (записанная, например, в дополнительном бите памяти программ) или появление комбинации сигналов (или последовательности комбинаций) на шинах адреса, данных, управления ОЭВМ и эмулятора. Последний способ задать условия представляет собой функцию логического анализатора. Функциональные блоки, характерные для логического анализатора, могут быть интегрированы в эмулятор. Это значительно повышает мощность отладочного средства в целом.
Адекватно ли функционирование ОЭВМ при внутрисхемной эмуляции?
Если использовать эмуляционный буфер, то результат операций типа чтение-модификация-запись портов РО и Р2 не будет достоверен. Других ограничений на функциональную адекватность в режиме отработки программы нет.
При останове ОЭВМ и выполнении служебных процедур может нарушиться адекватность выполнения программы , т. е. состояние таймеров-счетчиков, функционирование последовательного порта ввода- вывода, а также состояние некоторых внутренних регистров. Когда появятся эти нарушения? Если при отработке служебной программы возникает разрешенное прерывание. Рассмотрим подробнее ситуации, нарушающие адекватность эмуляции.
Таймеры-счетчики. Если используется таймер-счетчик, то при выполнении первых команд служебной программы он будет инкремен- тироваться. Очевидная защита от этого - останов таймера при входе в служебную процедуру и запуск его перед продолжением программы пользователя.
Однако, во-первых, в ОЭВМ К1816ВЕ48 невозможно непосредственно определить, запущен таймер-счетчик в момент останова программы или нет. Во-вторых, служебная программа перед обработкой таймера должна выдать эмулятору содержимое аккумулятора и обработать прерывания (в ОЭВМ К1816ВЕ51). Сохранив состояние таймера (для К1816ВЕ48) или значения битов запуска (для К1816ВЕ51), нужно принять меры, чтобы гарантировать достоверность работы программы. В ОЭВМ К1816ВЕ51 таймер можно остановить, поскольку состояние регистра управления таймером сохранено в эмуляторе. В ОЭВМ К1816ВЕ48 лучше всего в регистре таймера выставить нули (чтобы избежать переполнения при отработке служебной программы). Перед продолжением программы пользователя состояние ОЭВМ восстанавливается в обратном порядке. Итак, служебная программа нарушает счет включенного таймера-счетчика. Можно ли его скорректировать?
В ОЭВМ К1816ВЕ48 таймер инкрементируется после каждых 32 машинных циклов. Счетчик-делитель на 32 программно недоступен. Следовательно, счет таймера-счетчика в этой ОЭВМ может нарушаться на единицу при каждом останове или шаге. Единственный способ полностью эмулировать таймер-счетчик - аппаратно смоделировать внутренний счетчик-делитель на 32. Синхронизирует его работу с ОЭВМ микропрограммируемый супервизор. В ОЭВМ К1816ВЕ51 таймер инкрементируется после каждого цикла и величину его коррекции можно рассчитать.
В любом случае, выполняя первые инструкции служебной программы, имеем вероятность того, что состояние ОЭВМ будет необратимо нарушено: будет переполнен таймер-счетчик и установлен соответствующий бит. В ОЭВМ К1816ВЕ48 этот бит сбрасывается по команде JTF Addr или при обработке прерывания. Для К1816ВЕ51 сброс возможен только при обработке прерывания.
Неопределенность возникнет и при подсчете таймером-счетчиком внешних импульсов.
Как нарушается работа последовательного порта ввода-вывода (в K1816BE5U? Характер сбоя при обмене данными по линии связи зависит от способа останова ОЭВМ (статический или динамический) и от организации обмена данными в системе пользователя.
Статический останов равносилен разрыву связи на период останова. Если останов динамический, то и при обработке служебной программы и ожидании действий оператора последовательный порт может принимать текущий байт и пересылать его в регистр SBUE, а также заканчивать передачу байта. В дальнейшем принимаемые байты могут потеряться.
Как нарушается система прерываний? Прерывания в ОЭВМ серии К1816 могут произойти от внешнего источника, по переполнению таймера-счетчика или от последовательного порта (только для К1816ВЕ51).
В ОЭВМ К1816ВЕ51 регистр разрешения прерываний доступен для чтения и записи. Поэтому прерывания можно запретить на время выполнения служебной программы и останова ОЭВМ.
В ОЭВМ К1816ВЕ48 флаги разрешения прерываний программно недоступны. Следовательно, запрет прерываний (на время, пока выполняются служебные процедуры) можно устанавливать лишь в том случае, если эти флаги эмулируются аппаратно (как в ситуации с таймером-счетчиком). Если прервать служебную программу, то это может исказить информацию во внутренних регистрах, так как эмулятор будет считывать, а затем восстанавливать ошибочные значения. От искажения информации можно защититься, если при останове анализировать неполадки выполнения служебной программы и устанавливать новые векторы прерываний.
Что предлагается пользователю?
На основе нашей концепции разработаны схемные эмуляторы ОЭВМ К1816ВЕ48/49 и К1816ВЕ31/51. Это одноплатные конструкции, подключаемые к инструментальной ПЭВМ типа IBM PC XT/AT через гибкий кабель и плату адаптера, устанавливаемую в слот расширения.
Микропрограммный супервизор позволил реализовать на ограниченном объеме аппаратных средств полный набор эмуляционных модулей и максимально адекватную эмуляцию. Эмуляторы имеют память программ и данных, картирование памяти (для К1816ВЕ31/51), блок трассировки реального времени, память контрольных точек останова, эмуляционный буфер (для К1816ВЕ48/49). Рабочая программа выполняется по шагам, в режиме прогона с остановом в контрольных точках.
Управляющая программа снабжена развитым интерфейсом пользователя (в виде меню и окон). Ее возможности: работа с директориями файловой системы ПЭВМ, экранное редактирование всех модифицируемых ресурсов эмулятора и МПУ, дизассемблирование памяти программ и памяти трассы, корректировка программы в мнемониках ассемблера. Программный интерфейс с зарубежными и отечественными кросс-трансляторами построен через файл в форматах HEX и REX.
 


Обсудить вопрос в студенческом форуме

 

Сайт содержит информацию о учебном заведении и студенческой общине и не является официальным