А. Федорцов
В настоящее время наблюдается взрывной рост объемов производства изделий на основе микропроцессорных технологий, постоянно появляются новые области для их применения.
Микропроцессорные системы с достаточной долей условности можно разделить на универсальные и специализированные. Универсальные микропроцессорные системы (компьютеры) предназначены в основном для выполнения математических расчетов и обработки информации. Соответственно, главной характеристикой таких систем является отношение цены и производительности. Их аппаратная часть имеет ограниченное число разновидностей, они хорошо стандартизированы и изготавливаются на основе классических микропроцессоров, поэтому отладочные средства применяются здесь лишь для разработки программного обеспечения.
Иная ситуация складывается в области специализированных (встраиваемых) систем. Поскольку эти системы предназначены в основном для управления различными процессами и находят применение в самых разнообразных устройствах, в том числе изделиях массового производства, здесь определяющими факторами являются стоимость изготовления и эксплуатации, эргономичность, надежность. В целях обеспечения этих характеристик необходимо разрабатывать аппаратное и программное обеспечение таких систем в соответствии с требованиями задачи, поэтому они проектируются, как правило, на основе различных микроконтроллеров, число разновидностей которых составляет несколько тысяч. Кроме того, при необходимости в систему включают дополнительные устройства (память, порты, таймеры), а также схемы сопряжения с датчиками, индикаторами и пр. Все это требует использовать средства комплексной отладки (то есть средства, позволяющие производить совместную отладку программного и аппаратного обеспечения).
В качестве средств комплексной отладки систем на базе микропроцессоров и микроконтроллеров (в дальнейшем будем использовать термин "процессор") широко применяются внутрисхемные эмуляторы. Эти устройства позволяют заменять целевой процессор на плате проектируемой системы и обеспечивают гибкий контроль за процессом выполнения программ пользователя в режиме отладки [1]. Как правило, для каждого типа процессора проектируются свои отладочные средства, в том числе и эмуляторы. Данный подход имеет существенные недостатки, поскольку временные затраты на разработку эмулятора для конкретного процессора весьма велики, а процесс этот приходится многократно повторять. Кроме того, такое положение дел невыгодно и разработчикам, использующим отладочные средства. При переходе на новый тип процессора им нужно не только выделить значительные средства на покупку соответствующих отладочных систем, но и потратить много времени на приобретение навыков работы с ними.
Общие принципы построения универсального эмулятора
Как средство решения проблем, описанных во введении, предлагается универсальный внутрисхемный эмулятор. Универсальный эмулятор позволил бы значительно сократить материальные и временные затраты на разработку отладочных средств, а также облегчить адаптацию разработчиков к новым процессорам и снизить себестоимость готовых микропроцессорных устройств. Универсальность достигается за счет трех основных принципов: модульность, программируемая внутренняя структура и поддержка интерфейса JTAG. Рассмотрим каждый из принципов в отдельности.
Промышленностью выпускается весьма широкий спектр процессоров. Они имеют самые разнообразные способы реализации процессорного ядра, различные разрядности, наборы команд, способы организации шин, внутренние периферийные устройства, параметры сигналов, типы корпусов и пр. Для эффективной поддержки этого многообразия имеет смысл объединить общие для всех эмуляторов узлы в одном модуле базовом, а настройку под конкретный процессор осуществлять при помощи стыкуемого с ним сменного модуля. Причем в большинстве случаев на сменном модуле будет находится лишь целевой процессор, так что затраты на его разработку и изготовление будут минимальными. Программное обеспечение универсального эмулятора тоже будет модульным. Интегрированная среда отладки и все стандартные для подобных систем функции объединяются в главной программе, а настройки под конкретные типы процессоров реализуются в подключаемых DLL-файлах.
Универсальный эмулятор планируется реализовать на микросхемах программируемой логики. Наряду с такими преимуществами этого подхода, как упрощение конструкции, снижение трудоемкости разработки и стоимости производства, уменьшение габаритов и потребляемой мощности конечных изделий, появляется возможность гибко изменять реализацию структурных элементов базового модуля эмулятора в соответствии с особенностями того или иного процессора.
Для реализации этого принципа можно выбрать микросхемы программируемой логики с загружаемой структурой на основе быстродействующих ОЗУ с изменяемой конфигурацией, такие как Altera FLEX [2].
В 1985 группой ведущих производителей электронной техники был создан комитет JTAG, который принял новый стандарт тестирования и проверки цифровых устройств. Стандарт предусматривает наличие у каждой микросхемы четырех дополнительных выводов для по-следовательного ввода тестов и вывода результатов тестирования. В настоящее время выпускаются серии логических микросхем, а также процессоры с поддержкой этого стандарта. Использование схемы интерфейса JTAG в универсальном эмуляторе позволит унифицировать методы подключения и отладки соответствующих процессоров. Также при использовании JTAG можно производить отладку процессоров, не вынимая их из отлаживаемых устройств, что весьма важно для высокоинтегрированных систем с затрудненным доступом к электронным цепям.
Кроме того, интерфейс JTAG может применяться для загрузки схемы эмулятора в микросхемы программируемой логики Altera FLEX [2].
Структура эмулятора
Рассмотрим обобщенную структурную схему эмулятора, пригодную для большинства типов процессоров. В состав базового блока эмулятора входит блок интерфейса JTAG, блок управления, память эмулятора, память монитора, контроллер точек останова, блок переадресации и буфер данных.
Эмулятор подключается к персональному компьютеру через двунаправленный параллельный порт. Для загрузки структуры эмулятора в микросхемы программируемой логики служит блок интерфейса JTAG. Этот же блок используется для обмена с процессорами, поддерживающими JTAG.
Блок управления служит для доступа различным объектам эмулятора, а также для формирования необходимых управляющих сигналов. Совместно с ПК и интегрированной средой отладки, блок управления образует систему управления эмулятором.
Память эмулятора предназначена для хранения инструкций и данных программ пользователя. По сути этот блок эмулирует память отлаживаемой системы. Для хранения специальной программы, вызываемой в контрольных точках программы пользователя для получения информации о текущем состоянии процессора, предназначен блок памяти монитора.
Контроллер точек останова используется для перевода процессора из режима выполнения программы пользователя в режим контроля со стороны эмулятора по достижению точки останова или при выполнении очередного шага в пошаговом режиме, а также для обратного переключения на выполнение программы пользователя.
Блок переадресации призван решать задачи сопряжения адресного пространства целевого процессора с памятью эмулятора. При этом обеспечивается постраничное размещение памяти с отлаживаемой программой и данными в произвольных участках адресного пространства процессора, а также мэппинг (замещение) отдельных адресов памяти ячейками, находящимися в отлаживаемом устройстве.
Буфер данных служит для прозрачного (без использования дополнительных ресурсов процессора) считывания информации о состоянии внутренних ресурсов процессора.
Как уже отмечалось выше, целевой процессор выведен на сменный модуль и выполняет функции непосредственной эмуляции.
Функционирование эмулятора
Рассмотрим более подробно работу эмулятора. В начале программируется внутренняя структура эмулятора в соответствии с выбранным типом процессора. При этом данные поступают через параллельный порт ПК в блок интерфейса JTAG, который формирует необходимые управляющие сигналы. После загрузки программируемой логики эмулятор переходит в режим инициализации и самотестирования, в котором проверяются правильность соединения элементов, наличие микросхем ОЗУ, сменного модуля, инициализируются регистры, триггеры и пр.
Далее, при помощи блока управления, с ПК загружаются коды программ и данных пользователя в память эмулятора, служебные программы в память монитора, а также информация об установленных точках останова в блок памяти контроллера точек останова.
После выполнения этих действий с блока управления поступает сигнал инициализации целевого процессора и начинается выполнение программы пользователя, записанной в памяти эмулятора.
Внутри блока контроллера точек останова анализируется текущий адрес, выставляемый целевым процессором на шину. По достижению программой пользователя адреса, соответствующего одной из установленных точек останова, запоминается текущее состояние адресной шины. Далее контроллер точек останова вырабатывает сигналы переключения памяти. При этом память монитора становится доступной для целевого процессора, а память эмулятора захватывается блоком управления.
Доступ локализуется внутри небольшого участка монитора, где записаны команды установки программного счетчика на начало служебной программы монитора. После того, как на адресной шине целевого процессора появляется адрес, соответствующий началу монитора, локализация снимается, и с этого момента возможен доступ целевого процессора ко всему адресному пространству памяти монитора.
Во время работы монитора происходит обмен информацией между целевым процессором и системой управления эмулятором. При этом в буфер данных из целевого процессора поступает информация о текущем состоянии ресурсов отлаживаемой системы (регистров, внутренней и внешней памяти и пр.). При необходимо-сти, эти состояния изменяются по команде системы управления. При этом система управления эмулятором динамически изменяет коды монитора в соответствии с теми или иными действиями, которые должен выполнить процессор.
На завершающем этапе происходит возврат в основную программу. Для этого соответствующим образом устанавливается программный счетчик целевого процессора. При появлении на адресной шине адреса возврата, вырабатывается сигнал обратного переключения памяти, и выполнение программы пользователя возобновляется с адреса только что обработанной точки останова. Для предотвращения повторного срабатывания контроллер точек останова временно отключается (на несколько обращений к памяти).
Методы проектирования
Для проектирования принципиальной схемы эмулятора используется система высокоуровневого проектирования чипов HLCCAD, разрабатываемая в Гомельском государственном университете им. Ф. Скорины [3]. Система предназначена для ввода, редактирования, моделирования и анализа результатов моделирования цифровых устройств.
Разработка принципиальной схемы эмулятора ведется методом иерархического проектирования сверху вниз. При этом на главной схеме отображаются наиболее общие блоки эмулятора и связи между ними, а деталировка описывается на более низких уровнях иерархии.
Для моделирования эмулятора весьма важной является возможность HLCCAD работать с моделями процессоров, а также поддержка моделирования программно-аппаратных систем, работающих под управлением ПК.
Программное обеспечение эмулятора состоит в общем случае из двух компонент: управляющей программы на ПК и программы-монитора, выполняемой целевым процессором.
Реальный эмулятор работает под управлением программы, запускаемой на ПК, а обмен данными ведется через параллельный порт. При моделировании эмулятора можно использовать ту же самую программу, но вместо параллельного порта поток ввода/вывода нужно направить в специальный файл обмена. Модель использует файл как источник входных воздействий и направляет туда ответные реакции. При этом управляющая программа запускается на ПК в стандартном отладчике, и ее можно будет выполнять по шагам и переключаться в окно HLCCAD для анализа реакции модели.
Для отладки программ, исполняемых целевыми микроконтроллерами, можно пользоваться, например, средствами HLCCAD, которая поддерживает окна дизассемблера и ресурсов процессора.
На завершающем этапе планируется автоматически получить синтезируемое VHDL-описание проекта для программирования ПЛИС, используя для этого соответствующие средства HLCCAD.
Многие из описанных методов были опробованы при моделировании внутрисхемного эмулятора ANT-97 [4-6].
Литература
E-mail: fedortsov@gsu.unibel.by
Ваш комментарий к статье | ||||