1. Asitektur Mikroprosesor Sejak Intel mengeluarkan seri 4004 sekitar tahun 1970 dikenal ada dua jenis arsitektur mikroprosesor dilihat dari cara penggunaan memorinya. Jauh sebelum ini, pada tahun 1944 Howard Aiken dari Harvard University bekerja sama dengan engineer IBM membuat mesin electromechanical yang terbuat dari banyak sekali transistor tabung dan relay. Mesin ini dikenal sebagai komputer pertama di dunia yang diberi nama Harvard Mark I. Belakangan baru diketahui bahwa sebelumnya pada tahun 1941 Konrad Zuse dari Jerman sudah membuat mesin yang dapat diprogram dan bekerja dengan sistem biner. Namun karena Jerman kala itu terisolasi saat perang dunia ke-II, Harvard Mark I diyakini sebagai komputer pertama yang memakai prinsip digital. Mesin Harvard ini tidak lain adalah mesin kalkulator yang dikendalikan oleh pita kertas yang berisi instruksi. Waktu itu belum terpikirkan konsep komputer yang memakai memori. Hanya sebelumnya Alan Turing seorang ahli matematika Inggris pada tahun 1939 mengemukanan konsep mesin universal (universal machine). Hampir satu dekade kemudian pada tahun 1945, Dr. John von Neumann ahli matematika yang lahir di Budapest Hongaria, membuat tulisan mengenai konsep komputer yang menurutnya penting untuk menyimpan instruksi dan data pada memori. Sehingga mesin komputer ini dapat bekerja untuk berbagai keperluan. Dari dulu hingga saat ini konsep dasar dari komputer yang dikendalikan oleh program sekuensial masih sama, yaitu terdiri dari CPU, Memori dan I/O (input-output). CPU (Central Processing Unit) sendiri terdiri dari blok unit control dan ALU (Aritmathic Logic Unit). Konsep dasarnya semua sama, tetapi kemudian adalah bagaimana implementasi dan realisasinya. Desainer dan pabrik mikroprosesor membuatnya dengan arsitektur yang berbeda-beda. Sebagai pionir era komputer digital, nama Harvard dan Von Neumann diadopsi untuk menggambarkan dua tipe arsitektur mikroprosesor. Kedua arsitektur itu berbeda pada cara penempatan memorinya dan dikenal dengan sebutan arsitektur Harvard dan arsitektur Von Neumann. Arsitektur Von Neumann adalah arsitektur komputer yang menempatkan program (ROM=Read Only Memory) dan data (RAM=Random Access Memory) dalam peta memori yang sama. Arsitektur ini memiliki address dan data bus tunggal untuk mengalamati program (instruksi) dan data. Contoh dari mikrokontroler yang memakai arsitektur Von Neumann adalah keluarga 68HC05 dan 68HC11 dari Motorola. Sebaliknya, arsitektur Harvard memiliki dua memori yang terpisah satu untuk program (ROM) dan satu untuk data (RAM). Intel 80C51, keluarga Microchip PIC16XX, Philips P87CLXX dan Atmel AT89LSXX adalah contoh dari mikroprosesor yang mengadopsi arsitektur Harvard. Kedua jenis arsitektur ini masing-masing memiliki keungulan tetapi juga ada kelemahannya. Dengan arsitektur Von Neuman prosesor tidak perlu membedakan program dan data. Prosesor tipe ini tidak memerlukan control bus tambahan berupa pin I/O khusus untuk membedakan program dan data. Karena kemudahan ini, tidak terlalu sulit bagi prosesor yang berarsitektur Von Neumann untuk menambahan peripheral eksternal seperti A/D converter, LCD, EEPROM dan devais I/O lainnya. Biasanya devais eksternal ini sudah ada di dalam satu chips, sehingga prosesor seperti ini sering disebut dengan nama mikrokontroler (microcontroller). Arsitektur Von Neumann Keuntungan lain dengan arrrsitektur Von Neumann adalah pada fleksibilitas pengalamatan program dan data. Biasanya program selalu ada di ROM dan data selalu ada di RAM. Arsitektur Von Neumann memungkinkan prosesor untuk menjalankan program yang ada didalam memori data (RAM). Misalnya pada saat power on, dibuat program inisialisasi yang mengisi byte di dalam RAM. Data di dalam RAM ini pada gilirannya nanti akan dijalankan sebagai program. Sebaliknya data juga dapat disimpan di dalam memori program (ROM). Contohnya adalah data look-up-table yang ditaruh di ROM. Data ini ditempatkan di ROM agar tidak hilang pada saat catu daya mati. Pada mikroprosesor Von Neumann, instruksi yang membaca data look-up-table atau program pengambilan data di ROM, adalah instruksi pengalamatan biasa. Sebagai contoh, pada mikrokontroler 8bit Motorola 68HC11 program itu ditulis dengan : LDAA $4000 ; A <-- $4000 Program ini adalah instruksi untuk mengisi accumulator A dengan data yang ada di alamat 4000 (ROM). Instruksi tersebut singkat hanya perlu satu baris saja. Pada prinsipnya, kode biner yang ada di ROM atau di RAM bisa berupa program dan bisa juga berupa data. Arsitektur Von Neumann bukan tidak punya kelemahan, diantaranya adalah bus tunggalnya itu sendiri. Sehingga instruksi untuk mengakses program dan data harus dijalankan secara sekuensial dan tidak bisa dilakukan overlaping untuk menjalankan dua isntruksi yang berurutan. Selain itu bandwidth program harus sama dengan banwitdh data. Jika memori data adalah 8 bits maka program juga harus 8 bits. Satu instruksi biasanya terdiri dari opcode (instruksinya sendiri) dan diikuti dengan operand (alamat atau data). Karena memori program terbatas hanya 8 bits, maka instruksi yang panjang harus dilakukan dengan 2 atau 3 bytes. Misalnya byte pertama adalah opcode dan byte berikutnya adalah operand. Secara umum prosesor Von Neumann membutuhkan jumlah clock CPI (Clock per Instruction) yang relatif lebih banyak dan walhasil eksekusi instruksi dapat menjadi relatif lebih lama. Arsitektur Harvard Pada mikroprosesor yang berarsitektur Harvard, overlaping pada saat menjalankan instruksi bisa terjadi. Satu instruksi biasanya dieksekusi dengan urutan fetch (membaca instruksi ), decode (pengalamatan), read (membaca data), execute (eksekusi) dan write (penulisan data) jika perlu. Secara garis besar ada dua hal yang dilakukan prosesor yaitu fetching atau membaca perintah yang ada di memori program (ROM) dan kemudian diikuti oleh executing berupa read/write dari/ke memori data (RAM). Karena pengalamatan ROM dan RAM yang terpisah, ini memungkinkan CPU untuk melakukan overlaping pada saat menjalankan instruksi. Dengan cara ini dua instruksi yang beurutan dapat dijalankan pada saat yang hampir bersamaan. Yaitu, pada saat CPU melakukan tahap executing instruksi yang pertama, CPU sudah dapat menjalankan fetching instruksi yang ke-dua dan seterusnya. Ini yang disebut dengan sistem pipeline, sehingga program keseluruhan dapat dijalankan relatif lebih cepat. prinsip pipeline Pada arsitektur Harvard, lebar bit memori program tidak mesti sama dengan lebar memori data. Misalnya pada keluarga PICXX dari Microchip, ada yang memiliki memori program dengan lebar 12,14 atau 16 bits, sedangkan lebar data-nya tetap 8 bits. Karena bandwith memori program yang besar (16 bits), opcode dan operand dapat dijadikan satu dalam satu word instruksi saja. Tujuannya adalah supaya instruksi dapat dilakukan dengan lebih singkat dan cepat. Kedua hal di atas inilah yang membuat prosesor ber-arsitektur Harvard bisa memiliki CPI yang kecil. PICXX dari Microchip dikenal sebagai mikroprosesor yang memiliki 1 siklus mesin (machine cycle) untuk tiap instruksinya, kecuali instruksi percabangan. Dari segi kapasitas memori, tentu arsitektur Harvard memberi keuntungan. Karena memori program dan data yang terpisah, maka kavling total memori program dan data dapat menjadi lebih banyak. Mikrokontroler 8bit Motorola 68HC05 memiliki peta memori 64K yang dipakai bersama oleh RAM dan ROM. Oleh sebab itu pengalamatan ROM dan RAM hanya dapat mencapai 64K dan tidak lebih. Sedangkan pada mikrokontroler Intel keluarga 80C51 misalnya, memori program (ROM) dan memori data (RAM) masing-masing bisa mencapai 64K. Tetapi ada juga kekurangannya, arsitektur Harvard tidak memungkinkan untuk menempatkan data pada ROM. Kedengarannya aneh, tetapi arsitektur ini memang tidak memungkinkan untuk mengakses data yang ada di ROM. Namun hal ini bisa diatasi dengan cara membuat instruksi dan mekanisme khusus untuk pengalamatan data di ROM. Mikroprosesor yang memiliki instruksi seperti ini biasanya disebut ber-arsitektur Modified Harvard. Instruksi yang seperti ini dapat ditemukan pada keluarga MCS-51 termasuk Intel 80C51, P87CLXX dari Philips dan Atmel AT89LSXX. Tetapi instruksi itu keseluruhannya menjadi program yang lebih panjang seperti contoh program dengan 80C51 berikut ini. MOV DPTR,#4000 CLR A ;DPTR = $4000 ;@A = 0 MOVC A,@A+DPTR ;A <-- (DPTR+@A) Urutan program di atas adalah : 1. load/isi data pointer dengan #4000 2. set accumulator A = 0 sebagai offset 3. load/isi accumulator A dengan data di alamat 4000+offset Bandingkan dengan instruksi 68HC11 yang cukup dengan satu instruksi LDAA $4000. Seperti yang dikemukan pada tulisan ini, Arsitektur Harvard dan Von Neuman keduanya memiliki kelebihan sekaligus juga kekurangan. Dalam memilih prosesor tentu saja tidak hanya dengan mempertimbangkan arsitekturnya. Motorola dengan varian singlechip-nya ada yang dilengkapi dengan konventer A/D dan D/A, PWM control, port I/O, EEPROM dan sebagainya. Tetapi tidak ketinggalan juga keluarga Intel 80C51 dan klonnya, memperkenalkan bus serial I2C yang sangat praktis untuk penambahan devais eksternal. Intel based MCS-51 adalah arsitektur yang paling banyak diadopsi misalnya oleh Philips dan Atmel, sehingga kompatibilitas diantaranya semakin besar. Karena desain arsitektur yang demikian, jumlah siklus mesin (machine cycle) per instruksi keluarga 68HC05/11 relatif lebih banyak dari keluarga 80C31/51. Misalnya instruksi 68HC05 Motorola untuk program percabangan, seperti contoh dibawah ini diselesaikan dengan 6 siklus mesin. Motorola 68HC05/11 : DECX BNE LOOP Intel 80C31/51 : DJNZ R0,LOOP Dibandingkan dengan 80C51 Intel, instruksi yang sama dapat diselesaikan dengan 2 siklus mesin saja. Namun demikian satu siklus instruksi, kecepatannya ditentukan juga oleh peran kristal/osilator. Satu siklus mesin mikrokontroler Motorola adalah frekuensi kristal dibagi 4 sedangkan untuk Intel dibagi 12. Sehingga jika menggunakan kristal yang sesuai, program percabangan itu dapat diselesaikan oleh kedua contoh mikrokontroler di atas dalam waktu yang relatif sama.