Искусство схемотехники. Том 3 (Изд.4-е) - Хоровиц Пауль. Страница 29

ПЗУ-монитор. Если в вашем приборе имеется последовательный порт, можно упростить процедуру разработки программного обеспечения, запрограммировав небольшое РПЗУ — «монитор», задачей которого является не управление прибором, а лишь обеспечение связи между памятью и портом. Простейший монитор позволяет загрузить в ОЗУ программу и запустить ее выполнение. Это заметно ускоряет разработку программного обеспечения, потому что пробные программы можно загружать в ОЗУ прибора непосредственно из компьютера. Не составляет особого труда расширить функции монитора, например, чтобы он мог считывать содержимое указанных ячеек ОЗУ. С таким добавлением пробные программы получают возможность сообщать о том, что происходит, например, путем засылки чисел в определенные ячейки ОЗУ перед возвратом управления монитору (через который компьютер может проанализировать содержимое этих ячеек). Такой монитор позволяет включить в пробную программу «программные точки останова», в которых содержимое требуемых регистров или ячеек памяти копируется в неиспользуемую область ОЗУ, откуда затем считывается через монитор в компьютер. ПЗУ-монитор заметно сокращает длительность разработки, так как помогает вам быстро находить причину неправильной работы программы.

Аппаратный эмулятор. Способ «прожги и ломай», как и его усовершенствования, описанные выше, часто позволяют решить поставленную задачу. Однако этот способ не идеален. Во-первых, он требует использования дополнительных ресурсов, таких, как последовательный порт. Во-вторых, и это более важно, он не обеспечивает обнаружения ошибочных операций на аппаратном уровне. Чтобы понять это последнее утверждение, представьте себе, что в вашем приборе возникает отказ, потому что он неправильно пытается записывать в РПЗУ. Это вы уже поняли, однако дальше дело застопорилось, так как трудно с помощью программной точки останова локализовать ошибку, обнаруживаемую только аппаратно. В нашем примере ошибка могла заключаться в затирании содержимого регистра. Это весьма неприятная ошибка: сбой происходит спустя значительное время после инициировавшего затирание события, и понять, в чем дело, изучая текст программы, нельзя. В таких случаях вам требуется поставить «аппаратную точку останова».

Решение лежит в использовании аппаратного эмулятора. Это коробка (или вставляемая плата) с аппаратными средствами, эмулирующая на этот раз микропроцессор вашего прибора. Она подсоединяется к налаживаемому прибору посредством кабеля, имеющего на конце разъем, имитирующий ЦП. Аппаратный эмулятор может выполнять как программу, находящуюся в памяти налаживаемого прибора (РПЗУ или ОЗУ), так и программу, загружаемую вами в эмулятор. В любом случае эмулятор осведомлен обо всем, что происходит в ЦП; он может следить за содержимым регистров, а также устанавливать аппаратные точки останова. Например, для решения нашей гипотетической проблемы можно потребовать от эмулятора, чтобы он фиксировал циклы записи в адресное пространство, занимаемое РПЗУ, и выдавал дамп регистров и листинг последних 100 команд, выполнявшихся перед неправильной записью в РПЗУ.

Аппаратная эмуляция является наилучшим средством разработки программ, обеспечивая максимальную гибкость и скорость работы. К ее недостаткам следует отнести высокую стоимость (несколько тысяч долл., иногда гораздо больше) и необходимость приобретать новый эмулятор для каждого типа используемого вами микропроцессора. Эмулятор ПЗУ, для сравнения, не является «процессорно-зависимым», но и уступает аппаратному эмулятору по своим возможностям. Это, так сказать, аппаратный эмулятор бедняка.

Системы разработки. «Система разработки» — это обобщенный термин для комбинации кросс-ассемблера, программатора РПЗУ и аппаратного эмулятора. Традиционно такие средства выпускались в виде внушительных автономных систем, однако в настоящее время большую популярность завоевывают вставные платы, использующие компьютер в качестве вычислительной базы, и, возможно, управляющие внешним блоком, содержащим дополнительные схемы. Как бы они не выглядели, вам необходимо приобрести такого рода систему, если вы специализируетесь на разработке микропроцессорных устройств, ориентированных на конкретный микропроцессор. Обычно системы разработки предлагаются фирмами, выпускающими микропроцессорные семейства. Некоторые фирмы, кроме того, изготавливают «универсальные эмуляторы», в которые можно вставлять платы с микропроцессорами разных типов. Системы разработки выпускаются, в частности, фирмами Hewlett-Packard, Tektronix, Microcosm, Applied Microsystems.

Логические анализаторы. Логические анализаторы можно назвать «супер-осциллографами» для разработки цифровой аппаратуры. Логический анализатор выступал в качестве главного действующего лица в книге Трейси Киддера «Душа новой машины». Эти замечательные устройства выглядят, как странные осциллографы, но в действительности включают в себя десятки каналов, большие объемы памяти, сложную логику «распознавания слов», а также средства деассемблирования выполняемых команд и представления их на экране. Логический анализатор может работать в двух режимах: анализа состояний и временного анализа. Вот как вы их должны использовать.

Анализ состояний. В этом режиме на вход статического анализатора подается синхронизирующий тактовый сигнал от вашей схемы (обычно тактовый сигнал ЦП), а сонм выводов (торчащих из анализатора) подключается к линиям данных и адреса, а также к другим интересующим вас сигналам. Хороший логический анализатор обслуживает 60–80 каналов при тактовой частоте до 25 МГц или больше. Затем вы устанавливаете сигнал запуска так, чтобы зафиксировать интересующее вас программное событие. Обычно в анализаторе имеется несколько регистров распознавания слов, в которые вы можете вводить любую последовательность 0,1 и X (произвольное состояние); это, разумеется, биты адреса и данных. В хорошем логическом анализаторе предусматривается возможность комбинирования выходов регистров распознавания слов в виде булевых выражений и функций состояния; например, можно образовать сигнал запуска от десятого прохода некоторой подпрограммы.

Логический анализатор ожидает сигнала запуска, затем запоминает последовательность состояний всех входных линий. Их можно наблюдать в виде цифрового сигнала или как последовательность нулей и единиц (либо шестнадцатеричных или восьмеричных чисел), рядом с которыми приводятся результаты деассемблирования. Вы можете просматривать массив запомненных состояний (обычно 4К или больше) и, что особенно важно, двигаться по нему от сигнала запуска «назад во времени». Это дает возможность проанализировать несколько тысяч состояний, предшествующих сигналу запуска, что, как правило, позволяет найти источник неприятностей.

Временной анализ. В режиме временного анализа логический анализатор работает от асинхронного тактового сигнала высокой частоты, обычно 100 МГц, который фиксирует логические состояния меньшего числа входных линий (чаще всего 16). Логика запуска поневоле проще и допускает обычно лишь одно слово распознавания. Анализатор ожидает установленного условия запуска, после чего заполняет свою память быстрыми выборками. В режиме временного анализа вы можете наблюдать кратковременные выбросы и другие искажения формы сигнала, которые незаметны в режиме анализа состояний. Можно перейти в режим «обнаружения выбросов», когда анализатор ищет два перепада, возникающих в течение 10 нc — периода дискретизации.

Перекрестный запуск. Объединение анализа состояний и временного анализа дает мощную методику, называемую перекрестным запуском. В этом комбинированном режиме анализ состояний может инициировать временной анализ и наоборот. Так, вы можете настроить логику запуска, чтобы она фиксировала заданное состояние в конкретном программном цикле и запускала временной анализ, который после обнаружения заданного слова (условия) запуска записывает в память пакет данных. Таким образом удается обнаруживать короткие выбросы логического происхождения, возникающие редко.