Debugging Mikroprosesor: 1980–2016 – Sejarah Komprehensif
Sejak dawn desain elektronik, bug tidak dapat dihindari, dan debugging telah menjadi disiplin ilmu penting untuk membuahkan kesalahan dan menentukan mana yang akan menang—dan seberapa menyeluruh.
Teknologi debugging telah berkembang sepesat desain yang didukungnya. Dari pendekatan stimulus–response–observe sederhana hingga alat, peralatan, dan metodologi canggih saat ini, bidang ini tumbuh seiring dengan sistem yang semakin kompleks. Pada 2017, era baru dimulai dengan perkenalan debug over functional I/O, yang menjanjikan efisiensi dan kemampuan yang lebih besar.
Setelah dekade inovasi global, saya terlibat dalam debugging sejak 1984. Untuk menghargai pergeseran paradigma yang kita alami sekarang, berguna untuk meninjau tonggak sejarah yang membentuk industri.
1970-an–1980-an Desain sistem pada saat itu berbeda secara signifikan dari saat ini. Papan biasa terdiri dari CPU, (EP)ROM, RAM, dan IC periferal seperti PIC, UART, DMA controller, timer, dan perangkat I/O, masing-masing diimplementasikan pada chip terpisah.
Papan komputer tunggal (SBC) tahun 1980-an (Sumber: https://oldcomputers.net/ampro-little-board.html)
Pengembang menulis kode dalam assembly atau C, mengkompilasi, melakukan linking, dan menghasilkan file HEX untuk citra ROM. Proses melibatkan menghapus EPROM secara manual dengan UV eraser, memprogramnya melalui antarmuka serial atau parallel, dan memasang kembali chip pada papan. Jika program tidak berperilaku seperti yang diharapkan, beberapa teknik debugging tersedia.
Code Inspection: Pendekatan paling dasar, yang masih digunakan banyak orang, melibatkan menjalani kode secara mental atau dengan editor teks, keterampilan yang tetap berharga saat alat tidak tersedia atau terlalu mahal.
LEDs: Metode klasik menggunakan LED papan atau indikator lain untuk menyalin status program. Dengan menyisipkan toggle LED pada titik kunci, pengembang dapat secara visual melacak alur eksekusi. Saat pin I/O tambahan dan logic analyzer tersedia, pelacakan status real-time menjadi mungkin.
On-target Monitor: Papan dengan port serial dan memori yang cukup dapat menempatkan program monitor kecil. Dengan melompat ke monitor ini, pengembang dapat menjalani assembly, memeriksa register dan memori melalui perintah RS-232 seperti s (step) atau m 83C4,16 (display memori).
In-Circuit Emulator (ICE): Bagi yang mampu membelinya, ICE adalah debugger terbaik. Digantikan CPU dengan rangkaian emulasi yang dapat mengamati dan mengontrol sinyal internal. Meskipun besar dan mahal—sering kali berdolar ribuan—ICE menyediakan breakpoint lanjutan, trace, dan kemampuan untuk menukar EPROM dengan emulasi RAM, menghilangkan kebutuhan untuk menghapus dan mem-flash ulang selama pengembangan.
1982–1990 Tiga perubahan kunci muncul untuk pengembang embedded:
Integrated ICs: CPU mulai menyertakan periferal—misalnya, Intel 80186/80188 (evolusi dari 8086/8088), Zilog Z180 (dari Z80), dan keluarga Motorola CPU32 (misalnya, 68302) dari 68000.
ICE yang terjangkau: Produsen memproduksi ICE dengan biaya lebih rendah tanpa chip bond-out, menurunkan harga menjadi di bawah $10.000 untuk ICE 80186.
Tantangan kecepatan clock: Kecepatan CPU yang naik menebani kabel dan logika kontrol ICE. Solusinya adalah rangkaian debug on-chip (OCD), menyediakan single-step, akses register, dan breakpoint pada kecepatan CPU penuh, meskipun implementasi awal kurang kemampuan trace penuh.
Akses OCD biasanya menggunakan antarmuka proprietary seperti Background Debug Mode (BDM) atau JTAG yang lebih umum, yang tradisional digunakan untuk uji produksi. Sementara beberapa alat dapat mengakses memori saat CPU berjalan, yang lain tidak dapat, mengakibatkan variasi di seluruh implementasi.
1990–2000 Trace eksternal menjadi tidak praktis karena kecepatan clock tinggi dan cache internal. Sebaliknya, produsen memperkenalkan data trace core terkompresi—menangkap perubahan program counter non-sekuensial saja dan mengompresinya untuk transportasi off-chip. Ini memungkinkan debugger untuk merekonstruksi jalur eksekusi menggunakan pengetahuan tentang program yang berjalan. Arsitektur kunci termasuk PowerPC IBM, ColdFire Motorola, dan inti ARM 7TDMI.
2000–2010 Dataset trace terkompresi memungkinkan buffer trace on-chip seperti Embedded Trace Buffer (ETB) ARM, yang dapat diakses melalui JTAG. Ukuran buffer dapat dikonfigurasi, menyeimbangkan area silikon dengan kinerja trace. SoC multi-core memperkenalkan tantangan baru: rantai scan JTAG hilang saat core mati. Arsitektur CoreSight ARM menyelesaikan ini dengan menyediakan port akses debug JTAC tunggal yang dapat mencapai semua komponen CoreSight yang di-memori, termasuk beberapa core yang dapat power cycle secara independen.
2010–Sekarang Dengan munculnya core 64-bit dan penggunaan yang luas Linux/Android, debug on-device gaining traksi. Driver kernel sekarang mengekspos komponen CoreSight, memungkinkan capture trace on-target melalui subsistem perf. Embedded Logic Analyzer (ELA) ARM membawa kembali kekayaan ICE awal, menawarkan breakpoint kompleks, trigger, dan akses sinyal internal SoC—semua dalam silikon.
Setelah 40 tahun inovasi tanpa henti, bidang ini berdiri di ambang bab baru: debugging dan tracing melalui functional I/O yang ada. Pergeseran ini menjanjikan solusi yang lebih ringkas yang mengurangi waktu dan biaya pengembangan sambil meningkatkan kemampuan, melanjutkan perang panjang terhadap bug.