Mana yang lebih cepat, Menjalankan program dari ROM atau RAM?

8

Sebagian besar dari kita yang berasal dari latar belakang elektronik tahu bahwa SRAM lebih cepat dari DRAM. Tetapi ketika membandingkan RAM dengan ROM, saya tidak yakin.

Pertanyaan saya terkait dengan micro-controller: "Jika sebuah kode dieksekusi langsung dari RAM / ROM, yang kinerjanya akan lebih baik ?? 1) eksekusi dari RAM atau 2) eksekusi dari ROM atau 3) keduanya akan bekerja sama"

Juga mempertimbangkan fakta bahwa ROM dirancang untuk memiliki kecepatan BACA yang lebih tinggi. sedangkan untuk RAM, ada trade off kecepatan baca karena memiliki kemampuan menulis.

Pangeran Rambade
sumber
10
Membaca datasheet (seksama) adalah cara terbaik. Terkadang lebih cepat menjalankan program dari RAM daripada memori flash. Beberapa micros tidak dapat menjalankan program dari RAM sama sekali dan beberapa lainnya dapat berjalan pada kecepatan yang sama.
Spehro Pefhany
Saya belum dapat menambahkan komentar, hanya berusaha membantu. Tergantung jika ROM sebenarnya lebih cepat dari RAM yang Anda gunakan. Apakah mereka memiliki kecepatan yang sama?
OzzieSpin
Banyak bagian ARM Cortex-M saat ini adalah contoh utama dari mereka yang dapat mengeksekusi dari SRAM tetapi lebih lambat ketika melakukannya karena jalur instruksi khusus untuk flash tidak dapat digunakan. Sebaliknya, akses data ke flash dapat lebih lambat daripada ke RAM
Chris Stratton
Tetapi dengan chip ARM7 yang sedikit lebih tua (pengalaman saya dengan LPC2106 dan LPC2148) pengecualian dari RAM seringkali lebih cepat daripada dari FLASH. Yang, bersama dengan jawaban Chris, membuktikan bahwa satu-satunya hal yang dapat kita katakan adalah "itu tergantung".
Wouter van Ooijen
Jika Anda sudah memiliki perangkat keras, cara termudah adalah dengan hanya menjalankan dua skenario dan membandingkan. Jika tidak, lembar data adalah taruhan terbaik Anda.
Luaan

Jawaban:

16

Lembar data harus memberi tahu Anda berapa lama setiap instruksi diperlukan, dan perbedaan apa yang ada, jika ada, antara mengeksekusi dari RAM atau ROM.

Untuk mikrokontroler yang menawarkan opsi mengeksekusi dari RAM, itu mungkin lebih cepat, kemungkinan menjadi titik utama menggunakan ruang RAM tambahan untuk mengeksekusi kode dari. Mungkin juga ada beberapa masalah tumpang tindih. Dalam beberapa kasus mungkin lebih cepat untuk dieksekusi dari ROM karena itu adalah memori yang terpisah dan akses RAM dapat berlangsung secara bersamaan.

Sekali lagi, satu-satunya cara untuk mengetahui mikro tertentu adalah BACA DATASHEET .

Olin Lathrop
sumber
Bahkan lebih cepat untuk dieksekusi dari register.
Joshua
@ Joshua Apakah Anda memiliki contoh tentang apa yang mungkin Anda lakukan dengan program yang dijalankan dari register? Tampaknya pintar jahat, tetapi terbatas pada ukuran program yang agak kecil. Saya pernah mendengar tentang demo grafis 64kB, tetapi demo 16 register? =)
Cort Ammon
3
@CortAmmon: Saya punya satu duduk di meja saya dengan 512 register, 400 di antaranya berisi kode program. RAM 3 kali lebih lambat, dan ROM sangat lambat sehingga disalin ke RAM saat startup (yang membutuhkan 100 detik milidetik). Saya memiliki penginisialisasi / pembaca kartu SD yang sesuai dengan 300 register, tanpa dukungan perangkat keras di luar pin GPIO. Penulis mengambil 100 register atau lebih sehingga semuanya tidak cocok dalam register, (ini akan meninggalkan tidak cukup untuk melakukan sesuatu yang menarik) tapi saya tidak perlu inisialisasi lagi, jadi timpa.
Yosua
9

Itu sepenuhnya tergantung pada arsitektur memori dan CPU. Sebagai patokan, SRAM lebih cepat daripada flash, terutama pada MCU berkecepatan tinggi (> 100 MHz). Sel bit SRAM menghasilkan output level logika (lebih atau kurang), sementara memori flash harus melalui proses penginderaan saat ini yang lebih lambat.

Seberapa jauh lebih cepat (jika ada) lagi tergantung pada arsitektur - ukuran kata dari kenangan, jumlah status tunggu pada masing-masing, keberadaan caching, ukuran instruksi CPU, dll. Jika Anda menjalankan pada Frekuensi yang cukup rendah, Anda dapat memiliki status tunggu nol pada flash dan RAM, sehingga mereka dapat berjalan pada kecepatan yang sama.

Kode juga penting. Jika kode Anda benar-benar linier (tidak bercabang), lampu kilat dapat mengambil instruksi cukup cepat untuk menjaga CPU jenuh bahkan pada frekuensi yang lebih tinggi. Seperti kata Olin, CPU arsitektur Harvard dengan program terpisah dan jalur pembacaan data dapat tampil berbeda ketika kode dan data berada dalam ingatan yang berbeda.

ROM logam (dan memori non-volatil lainnya seperti FRAM) memiliki karakteristiknya sendiri, dan mungkin atau mungkin tidak secepat SRAM. Kemampuan menulis tidak harus membuat perbedaan; ini lebih tentang karakteristik output sel bit dan sirkuit penginderaan.

Lembar data akan memberi Anda gambaran kasar tentang perbedaan kecepatan, tetapi satu-satunya cara untuk mengetahui dengan pasti adalah membuat profil kode Anda.

Adam Haun
sumber
1

"Menjalankan program" membutuhkan CPU dengan jam yang sinkron. Memori lambat dapat diakomodasi dengan menjalankan seluruh sistem pada jam yang cukup lambat, atau dengan memasukkan wait states(siklus clock tanpa-lakukan tambahan antara fase pengambilan dan dekode), aktif hanya untuk rentang alamat tertentu (lihat contoh kuno 8085). Pengambilan instruksi CPU tidak tahu atau peduli kapan tepatnya data ditetapkan ke nilai akhirnya, asalkan tidak berubah selama interval pengaturan / penahanan.

Sebuah mikrokontroler biasanya memiliki semua on-chip memorinya, jadi kecuali dinyatakan lain saya akan menganggap sistem memori semuanya nol-tunggu-keadaan. (tapi baca lembar data untuk mengonfirmasi). Mikrokontroler tipikal dimaksudkan untuk menjadi lebih sederhana, solusi chip tunggal dibandingkan dengan desktop, jadi keadaan tunggu tidak mungkin dalam mikrokontroler. Jadi tidak mungkin bahwa mikrokontroler akan memiliki kecepatan memori on-chip yang tidak cocok.

Memori yang lebih cepat umumnya berharga premium (tegangan lebih tinggi, kapasitansi lebih rendah, permintaan lebih banyak). 80xx86 memiliki SRAM cepat di cache L2 dan SRAM lebih cepat di cache L1, dan banyak DRAM off-chip yang lebih lambat terpasang pada pengontrol memori. Sistem semacam ini jauh lebih rumit daripada mikrokontroler, dan berada di luar cakupan pertanyaan. (Tapi sangat menarik bagi insinyur komputer!)

MarkU
sumber
1
Sebenarnya desain yang sangat cocok tidak mungkin tanpa kendala. Prosesor baik memisahkan instruksi dan memori data, kurang memanfaatkan kecepatan memori dalam instruksi non-memori data, menderita keadaan menunggu, atau menggunakan memori multi-port.
Chris Stratton
2
Status tunggu sangat umum di mikrokontroler berperforma tinggi. Flash lambat.
Adam Haun
@AdamHaun: Di sisi lain, banyak array flash internal dapat membaca banyak kata sekaligus; jika kode melompat ke beberapa lokasi acak dalam sekejap, mungkin diperlukan beberapa siklus untuk mengambil instruksi pertama, tetapi begitu diambil, beberapa instruksi berikutnya mungkin tersedia tanpa penundaan lebih lanjut. Dalam banyak kasus, mengakses sesuatu di dekat ujung buffer akan mempersiapkan sistem untuk memuat set kata berikutnya.
supercat