Saya menggunakan mikrokontroler PowerPC freescale. Dalam modul memori flash dalam lembar data, jumlah "status tunggu dari akses memori flash" dapat dikonfigurasi.
Berikut ini adalah bagian dari datasheet yang mengajukan pertanyaan saya, diambil dari deskripsi register dari modul PFlash:
Bidang ini harus disetel ke nilai yang sesuai dengan frekuensi operasi PFlash dan waktu akses baca aktual PFlash. Frekuensi operasi yang lebih tinggi memerlukan pengaturan bukan nol untuk bidang ini untuk operasi Flash yang benar.
0 MHz, <23 MHz, status tunggu diperlukan = 0 ---
23 MHz, <45 MHz, status tunggu diperlukan = 1 ---
45 MHz, <68 MHz, tunggu status yang diperlukan = 2 ---
68 MHz, <90 MHz, status tunggu diperlukan = 3 ---
(PFlash adalah modul pengontrol Platform Flash)
Saya mengerti bahwa prosesor lebih cepat daripada flash, itu sebabnya status tunggu diperkenalkan. Apa yang saya tidak mengerti, adalah: jika prosesor lebih cepat dari flash, maka prosesor adalah yang perlu diperlambat bukan flash, tetapi paragraf di atas mengatakan sebaliknya (atau apakah saya tidak mengerti ini?), Itu mengatakan bahwa jika Pflash dioperasikan dengan frekuensi tinggi, maka kita perlu memperlambatnya dengan menambahkannya status tunggu tambahan !!
Apa yang salah dengan pengertian saya?
Terima kasih
Jawaban:
Untuk memperkuat jawaban stevenvh, semua jenis logika, ketika diberi sinyal input, akan membutuhkan waktu untuk menghasilkan sinyal keluaran; memori seringkali sangat lambat dibandingkan dengan logika lain. Seringkali, akan ada jaminan bahwa sinyal output akan menjadi valid dalam jumlah waktu tertentu, tetapi hanya itu. Secara khusus, ada kemungkinan bahwa sinyal mungkin berubah beberapa kali dalam interval itu, dan tidak akan ada indikasi, sebelum akhir interval itu, bahwa sinyal telah mencapai nilai "benar" terakhir.
Ketika mikrokontroler atau mikroprosesor biasa membaca byte (atau kata, atau unit apa pun) dari memori, itu menghasilkan alamat dan, beberapa waktu kemudian, melihat output nilai oleh memori dan bertindak berdasarkan itu. Antara waktu controller menghasilkan alamat dan waktu melihat nilai dari memori, itu tidak peduli kapan atau apakah sinyal output dari memori berubah. Di sisi lain, jika sinyal dari memori belum stabil ke nilai akhir pada saat pengontrol melihatnya, pengontrol akan salah membaca memori karena telah menahan nilai apa pun yang sedang dikeluarkan pada saat itu terlihat. Biasanya pengontrol akan melihat nilai dari memori segera setelah siap untuk melakukan sesuatu dengannya, tetapi jika nilai memori tidak siap maka itu mungkin tidak berfungsi. Karena itu, banyak pengendali memiliki opsi untuk menunggu sedikit lebih lama setelah mereka siap memproses data dari memori, untuk memastikan bahwa output dari memori benar-benar valid. Perhatikan bahwa menambahkan penundaan seperti itu akan memperlambat segalanya (controller akan dengan senang hati bertindak berdasarkan data dari memori lebih cepat), tetapi tidak akan memengaruhi kebenaran operasi (kecuali segala sesuatu diperlambat sedemikian rupa sehingga kewajiban waktu lainnya tidak dapat dipenuhi).
sumber
Status tunggu ditambahkan ke siklus akses memori yang diprakarsai oleh CPU. Jadi memang CPUlah yang harus menunggu Flash yang lebih lambat. Pengontrol memori memberi sinyal "tidak siap" ke CPU untuk sejumlah siklus (0 hingga 3), dan sementara itu CPU tetap dalam kondisi saat ini, yaitu telah menulis alamat Flash, tetapi belum membaca data. Hanya ketika pengontrol memori memberi sinyal "data siap" CPU akan membaca dari bus data dan melanjutkan instruksinya (mengunci data ke register atau ke dalam RAM).
sumber
Prosesor mungkin perlu menunda memori, tetapi desain yang cerdas tidak perlu.
Saya pikir teknologi utama yang tidak Anda sadari adalah burst / akses mode halaman . Yang memungkinkan bandwidth dari akses memori menjadi sangat dekat dengan kecepatan prosesor (tapi mungkin Flash masih menjadi hambatan karena saya belum pernah melihat MCU berbasis Flash yang berjalan pada> 200MHz)
Namun, latensi tetap sama. Sebagai contoh, untuk MCU STM32F4 yang saya gunakan, #wait States = floor (clockSpeed / 30MhZ). Itu berarti latensi selalu 33ns, terlepas dari kecepatan clock. Ada pepatah, "Uang bisa membeli bandwidth, tetapi latensi selamanya ..."
Bahkan jika bandwidth Flash tidak cukup untuk membuat CPU sibuk, Anda dapat dengan mudah mendesain cache kode yang menyimpan dan mengambil instruksi yang diharapkan untuk dieksekusi. ST memiliki petunjuk tentang ini untuk MCU STM32F4 mereka (168 MhZ):
Sebenarnya, pernyataan itu juga menunjukkan bahwa mode burst tidak diperlukan dan antarmuka memori yang sangat luas juga cukup. Tetapi idenya sama (menggunakan paralelisme untuk menyembunyikan latensi). Pada chip, kabel gratis, jadi memori 128bit masuk akal.
sumber