Отладка микропроцессоров: 1980–2016 — Исчерпывающая история
С зари дизайна электроники баги были неизбежны, а отладка — необходимой дисциплиной для борьбы с ошибками и определением, кто победит — и насколько тщательно.
Технологии отладки эволюционировали так же увлекательно, как и дизайны, которые они поддерживают. От простых подходов стимул-ответ-наблюдение до сегодняшних изощренных инструментов, оборудования и методологий, область выросла в такт с все более сложными системами. В 2017 году началась новая эра с введением отладки через функциональный I/O, обещающей еще большую эффективность и возможности.
После десятилетий глобальной инновации, я занимаюсь отладкой с 1984 года. Чтобы оценить парадигмальный сдвиг, который мы сейчас переживаем, полезно пересмотреть вехи, сформировавшие индустрию.
1970-е – 1980-е
Системный дизайн тогда существенно отличался от сегодняшнего. Типичная плата включала CPU, (EP)ROM, RAM и периферийные IC вроде PIC, UART, DMA-контроллеров, таймеров и I/O устройств, каждый реализованный на отдельных чипах.
1980-е одноплатный компьютер (SBC)
(Источник: https://oldcomputers.net/ampro-little-board.html)
Разработчики писали код на ассемблере или C, компилировали, линковали и производили HEX-файл для ROM-образа. Процесс включал ручное стирание EPROM с UV-стирателем, программирование через последовательный или параллельный интерфейс и переустановку чипов на плату. Если программа не вела себя как ожидалось, доступно было несколько техник отладки.
Инспекция кода:
Самый фундаментальный подход, все еще используемый многими, включает пошаговое прохождение кода мысленно или с текстовым редактором — навык, остающийся ценным, когда инструменты недоступны или слишком дороги.
Светодиоды:
Классический метод использует набордовые LED или другие индикаторы для сигнализации состояния программы. Вставляя переключение LED в ключевых точках, разработчики могут визуально проследить поток выполнения. Когда доступны дополнительные I/O пины и логический анализатор, реальное время трассировки состояний становится возможным.
On-target Monitor:
Платы с последовательным портом и достаточной памятью могли хостить небольшую мониторную программу. Прыгая в этот монитор, разработчик мог пошагово проходить ассемблер, инспектировать регистры и память через RS-232 команды вроде s (step) или m 83C4,16 (показать память).
In-Circuit Emulator (ICE):
Для тех, кто мог позволить, ICE был высшим отладчиком. Он заменял CPU эмуляционной схемой, которая могла наблюдать и контролировать внутренние сигналы. Хотя громоздкий и дорогой — часто стоил тысячи долларов — ICE предоставлял продвинутые брейкпоинты, трассировку и возможность замены EPROM на эмуляционную RAM, устраняя необходимость стирать и перепрошивать во время разработки.
Motorola Exorciser ICE
(Источник: https://www.exorciser.net/personal/exorciser/Original%20Files/exorciser.jpg)
Intel MDS ICE
(Источник: https://www.computinghistory.org.uk/userdata/images/large/PRODPIC-731.jpg)
1982–1990
Три ключевых изменения возникли для встроенных разработчиков:
- Интегрированные IC: CPU начали включать периферию — например, Intel 80186/80188 (эволюция 8086/8088), Zilog Z180 (от Z80) и Motorola CPU32 семья (например, 68302) от 68000.
- Доступные ICE: Производители выпустили более дешевые ICE без bond-out чипов, снизив цену до $10,000 для 80186 ICE.
- Вызов тактовых частот: Растущие скорости CPU нагружали кабели ICE и контрольную логику. Решением стала on-chip debug circuitry (OCD), предоставляющая пошаговое выполнение, доступ к регистрам и брейкпоинты на полной скорости CPU, хотя ранние реализации не имели полной трассировки.
OCD доступ обычно использовал проприетарные интерфейсы вроде Background Debug Mode (BDM) или более распространенный JTAG, традиционно используемый для производственного тестирования. Пока некоторые инструменты могли обращаться к памяти пока CPU работал, другие не могли, приводя к вариациям между реализациями.
1990–2000
Внешняя трассировка стала непрактичной из-за высоких тактовых частот и внутреннего кэша. Вместо этого производители ввели сжатые данные трассировки ядра — захватывающие только не-последовательные изменения программного счетчика и сжимая их для off-chip транспорта. Это позволяло отладчику реконструировать пути выполнения, используя знание запущенной программы. Ключевые архитектуры включали IBM PowerPC, Motorola ColdFire и ARM 7TDMI ядра.
2000–2010
Сжатые датасеты трассировки позволили on-chip трассировочные буферы вроде ARM Embedded Trace Buffer (ETB), доступные через JTAG. Размер буфера мог быть сконфигурирован, балансируя площадь кремния против трассировочной производительности. Многоядерные SoC ввели новые вызовы: JTAG scan chains исчезали, когда ядра отключались. ARM CoreSight архитектура решила это, предоставляя единственный JTAG-based debug access port, который мог достичь всех memory-mapped CoreSight компонентов, включая множественные ядра, способные независимо циклировать питание.
2010–Настоящее
С подъемом 64-битных ядер и повсеместным использованием Linux/Android, on-device отладка набрала тягу. Kernel драйверы теперь экспонируют CoreSight компоненты, позволяя on-target захват трассировки через perf подсистему. ARM Embedded Logic Analyzer (ELA) возвращает богатство ранних ICE, предлагая сложные брейкпоинты, триггеры и доступ к внутренним SoC сигналам — все внутри кремния.
После 40 лет неистовой инновации, область стоит на пороге новой главы: отладка и трассировка через существующий функциональный I/O. Этот сдвиг обещает более легкие решения, сокращающие время разработки и затраты, повышая возможности, продолжая долгую войну с багами.
Встроенный
- Эволюция SPICE: от CANCER к современной симуляции схем
- Основы программирования микропроцессоров
- Комментарии в C++: лучшие практики для читаемого и поддерживаемого кода
- Cadence запускает Cloud Passport Partner Program для ускорения облачной миграции чип-дизайна
- Структура программы на C: разбор Hello World и процесс компиляции
- Makino: пионер первого японского НУ-фрезерного станка и машцентра
- Джин Хаас: создание наследия ЧПУ и империи моторспорта
- Mazak Corporation: от основания 1919 г. к мировому лидеру станкостроения
- Структура программы на C#: основные компоненты и пример Hello World
- Основы программирования ЧПУ: пошаговые уроки и примеры кода