マイクロプロセッサデバッグの歴史:1980年~2016年
エレクトロニクス設計の夜明け以来、バグは避けられず、デバッグはどの障害が勝つのか、そしてどの程度徹底的に勝つのかを決定するための必須の規律でした。
デバッグ技術は、それを支える設計と同様に魅力的な進化を遂げてきました。単純な刺激・応答・観察アプローチから、今日の洗練されたツール、装置、方法論まで、この分野はますます複雑化するシステムと歩調を合わせて成長してきました。2017年には、機能I/Oを介したデバッグの導入により、さらなる効率と能力を約束する新時代が始まりました。
数十年にわたる世界的なイノベーションの後、私は1984年からデバッグに携わってきました。現在経験しているパラダイムシフトを理解するには、業界を形作ったマイルストーンを振り返るのが有用です。
1970年代~1980年代
当時のシステム設計は今日とは大きく異なりました。典型的なボードはCPU、(EP)ROM、RAM、およびPIC、UART、DMAコントローラ、タイマー、I/Oデバイスなどの周辺ICで構成され、それぞれが別チップで実装されていました。

1980年代シングルボードコンピュータ(SBC)
(出典: https://oldcomputers.net/ampro-little-board.html)
開発者はアセンブリやCでコードを書き、コンパイル、リンクし、ROMイメージ用のHEXファイルを生成しました。プロセスには、UVイレイサーでEPROMを手動消去し、シリアルまたはパラレルインターフェースでプログラミングし、チップをボードに再実装することが含まれていました。プログラムが期待通りに動作しない場合、いくつかのデバッグ技術が利用可能でした。
コード検査
最も基本的なアプローチで、多くの開発者が今でも使用しています。コードを頭の中で、またはテキストエディタでステップ実行し、ツールが利用できないか高価な場合でも価値のあるスキルです。
LED
オンボードLEDやその他のインジケータを使ってプログラム状態を知らせる古典的な手法です。キーポイントでLEDトグルを挿入することで、実行フローを視覚的にトレースできます。追加のI/Oピンとロジックアナライザがあれば、リアルタイム状態トレースも可能です。
オンターゲットモニタ
シリアルポートと十分なメモリを持つボードでは、小さなモニタプログラムをホストできました。このモニタにジャンプすることで、開発者はアセンブリをステップ実行し、RS-232コマンド(s(ステップ)やm 83C4,16(メモリ表示)など)でレジスタとメモリを検査できました。
インサーキットエミュレータ(ICE)
予算が許せば、ICEは究極のデバッガでした。CPUをエミュレーション回路に置き換え、内部信号を観測・制御できました。大型で高価(しばしば数千ドル)でしたが、高度なブレークポイント、トレース、エミュレーションRAMでEPROMを置き換える機能を提供し、開発中の消去・再書き込みの必要性を排除しました。

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年
組み込み開発者にとって3つの重要な変化が現れました:
- 集積IC:CPUが周辺機能を内蔵し始めた(例:Intel 80186/80188(8086/8088の進化版)、Zilog Z180(Z80から)、Motorola CPU32ファミリ(例:68302、68000から))。
- 手頃なICE:メーカーがボンドアウトチップなしの低コストICEを製造し、80186 ICEで1万ドルを切る価格を実現。
- クロック速度の課題:CPU速度上昇がICEケーブルと制御ロジックを圧迫。解決策はオンチップデバッグ回路(OCD)で、フルCPU速度でシングルステップ、レジアクセス、ブレークポイントを提供したが、初期実装にはフルトレース機能が欠けていた。
OCDアクセスは通常、Background Debug Mode(BDM)や、従来は製造テストに使われたJTAGなどの独自インターフェースを使用しました。一部ツールはCPU稼働中にメモリアクセス可能でしたが、他は不可能で、実装間でばらつきがありました。
1990年~2000年
高クロック速度と内部キャッシュにより外部トレースが非現実的になりました。代わりに、メーカーは圧縮コアトレースデータを導入しました。非連続なプログラムカウンタ変更のみを取得し、オフチップ転送用に圧縮します。これにより、デバッガは実行中プログラムの知識を用いて実行パスを再構築できます。主要アーキテクチャにはIBMのPowerPC、MotorolaのColdFire、ARMの7TDMIコアが含まれます。
2000年~2010年
圧縮トレースデータセットにより、ARMのEmbedded Trace Buffer(ETB)のようなオンチップトレースバッファが可能になり、JTAG経由でアクセスできるようになりました。バッファサイズは設定可能で、シリコン面積とトレース性能のトレードオフを調整できます。マルチコアSoCは新たな課題をもたらしました:コアがパワーダウンするとJTAGスキャンチェーンが消失。ARMのCoreSightアーキテクチャが、単一のJTAGベースデバッグアクセスポートで全メモリマップドCoreSightコンポーネント(独立してパワーサイクル可能な複数コアを含む)に到達できるようにすることで解決しました。
2010年~現在
64ビットコアの台頭とLinux/Androidの広範な採用により、オンデバイスデバッグが注目されました。カーネルドライバがCoreSightコンポーネントを公開し、perfサブシステム経由でオンターゲットトレース取得を可能にしました。ARM Embedded Logic Analyzer(ELA)が初期ICEの豊富さを取り戻し、複雑なブレークポイント、トリガー、内部SoC信号アクセスをすべてシリコン内で提供します。
40年にわたる絶え間ないイノベーションの後、この分野は新たな章の入り口に立っています:既存の機能I/Oを介したデバッグとトレース。このシフトは、開発時間とコストを削減しながら能力を向上させる、よりリーンなソリューションを約束し、バグとの長い戦いを継続します。
埋め込み
- SPICEの進化:CANCERから現代の回路シミュレーションへ
- マイクロプロセッサプログラミングの基礎
- マキノ(Makino)の軌跡:日本初のNCフライス盤とマシニングセンタを開拓した80余年の革新
- ジーン・ハース:CNC帝国とモータースポーツ王国を築いた起業家の軌跡
- マザック(Mazak)の100年史:鍋釜製造から世界的工作機械リーダーへ
- CNCプログラミング基礎:ステップバイステップ チュートリアル & サンプルコード
- Cadence、Cloud Passportパートナープログラム発表 - チップ設計のクラウド移行を加速
- タングステンワイヤーの歴史:エジソンのカーボンフィラメントから現代のAKS合金まで
- C++コメント完全ガイド:読みやすく保守しやすいコードのためのベストプラクティス
- Cプログラム構造の理解:初心者向けガイド
- C#プログラム構造の理解:コアコンポーネントと例