В чем функциональная разница между внутрисхемным отладчиком и внутрисхемным эмулятором?

12

Внутрисхемные эмуляторы (сокращенно ICE) могут похвастаться удивительными функциями отладки, а также высокими ценами.

Внутрисхемные отладчики (сокращенно ICD) могут делать большую часть того, что может делать ICE, но часто стоят гораздо дешевле.

Я знаю, что в свое время ICE фактически удаляли проблемный чип из сокета и заменяли его кабелем эмулятора, но с современными пакетами QFN, BGA и хрупкими TQFP кажется, что большинство продуктов называют себя отладчиками ICE. подключаются к отладочному заголовку почти так же, как ICD.

Вот несколько примеров продуктов, которые используют «ICE» в названии:

Существуют также продукты JTAG «ICE» от нескольких поставщиков. Обратите внимание, что я не обесцениваю их, потому что они не являются физически действующими, но я бы не стал принимать их во внимание, если они не функционируют как настоящий ICE.

В каких задачах по разработке мне нужен ICE, и когда я должен довольствоваться ICD? Давайте предположим, что я хочу пройтись по моему коду, а не использовать светодиоды и операторы printf ().

Какие примеры проблем, которые вы решили с помощью ДВС, но не могли бы (реально) решить без него?

Кевин Вермеер
источник

Ответы:

19

ICE (In-Circuit Emulator) заменяет целевой чип. Он действует как настоящая микросхема для остальной части схемы, но имеет все виды хуков внутри, так что вы можете видеть, что происходит, устанавливать точки останова, загружать новый код, захватывать трассы и т. Д. ICD (In-Circuit Debugger) использует Специальное отладочное оборудование добавлено к целевому чипу для этой цели и пытается дать вам возможность, подобную ICE. К сожалению, маркетологи вовлеклись и пытались переопределить эти давние термины, пытаясь обмануть вас, заставляя думать, что их продукт лучше, чем следующий. RealIce Microchip является особенно вопиющим примером этого. Это реально, но это не ЛЕД.

Настоящий ICE (а не RealIce) - лучшая внутрисхемная среда отладки. К сожалению, они в значительной степени исчезли из-за высокой стоимости создания специальной версии целевого чипа для использования в ICE, а также из-за того, что скорости стали настолько высокими, что снять что-либо с чипа проблематично. Другая проблема заключается в том, что для ICE требуется, чтобы целевой чип находился в гнезде, или требовался специальный адаптер, установленный вместо целевого чипа, чтобы ICE мог подключаться к своим линиям.

Итак, сегодня мы застряли с ICD. К счастью, они делают большинство вещей, которые вы хотели бы сделать с ICE. У них даже есть одно преимущество в том , что код работает на реальной целевой чип, а не что - то пытается быть как целевой микросхемы. Недостатком является то, что им требуются ресурсы на кристалле, поэтому они не полностью прозрачны для вашего кода и аппаратного обеспечения, как ICE. ICD нужен доступ к линиям отладки, которые часто могут иметь несколько ролей. Вы не можете использовать эти контакты в других ролях во время отладки. Количество схем отладки, встроенных в каждую часть, должно составлять небольшую долю от общего количества, иначе стоимость будет слишком высокой, поэтому функции должны быть скомпрометированы. Хорошая функция трассировки - это хорошая функция, которую было бы слишком дорого добавлять на каждый чип, поскольку для этого требуется большой буфер ОЗУ.

Каждая проблема может быть в конечном итоге решена с помощью различных инструментов. Дело не в том, сможешь ли ты это решить, а в том, сколько времени и сил нужно. Когда я регулярно использовал ICE (Microchip ICE-2000 и ICE-4000), я не часто использовал функцию трассировки, но когда я делал другие средства, это было бы значительно дороже. Иногда у вас есть ошибка, когда переменная вдруг имеет неправильное значение. Вы проходите через код, и все в порядке, и подпрограмма, которая манипулирует переменной, кажется, делает все правильно, но когда вы ее запускаете, в конечном итоге все выходит из строя, и вы обнаруживаете, что эта переменная уничтожена. Причиной является какой-то другой код с неверным указателем, переполнением буфера, несовпадением стека или тому подобным. С помощью ICE вы можете установить точку останова для изменяемой переменной,

Большую часть времени, ICD будет достаточно хорошо. Особенно с большими чипами, пара контактов, предназначенных для отладки, не является большой проблемой. В настоящее время я в основном использую RealIce для отладки. Это намного более стабильно и менее хлопотно, чем ICD2. Вы учитесь жить с этим.

Олин Латроп
источник