Pada mikrokontroler seri Atmel SAM-D21, banyak periferal menggunakan jam yang tidak sinkron dengan jam CPU utama, dan akses ke periferal ini harus melalui logika sinkronisasi; pada periferal yang jamnya relatif lambat terhadap waktu CPU, ini dapat menambahkan beberapa penundaan yang sangat besar. Misalnya, jika RTC dikonfigurasi untuk menggunakan jam 1024Hz (seperti yang terlihat sebagai tujuan desain) dan CPU berjalan pada 48Mhz, membaca register "saat ini" akan menyebabkan logika bus untuk memasukkan lebih dari 200.000 status tunggu (minimum) dari lima siklus jam 1024Hz). Meskipun dimungkinkan untuk meminta CPU membaca permintaan, mengeksekusi beberapa kode lain yang tidak terkait, dan mengembalikan 200.000+ siklus kemudian untuk mengambil waktu, sepertinya tidak ada cara untuk benar-benar membaca waktu lebih cepat.
Dengan pemahaman saya tentang sinkronisasi, sirkuit sinkronisasi bit tunggal akan menunda sinyal sebanyak 2-3 siklus jam tujuan; menyinkronkan kuantitas multi-bit sedikit lebih sulit, tetapi ada berbagai pendekatan yang dapat menjamin perilaku yang andal dalam lima siklus jam tujuan jika lebih cepat dari jam sumber, dan hanya beberapa siklus lebih banyak jika tidak. Apa yang akan dilakukan Atmel SAM-D21 yang memerlukan enam siklus dalam domain jam sumber untuk sinkronisasi, dan faktor-faktor apa yang akan mendukung desain yang keterlambatan sinkronisasinya cukup lama sehingga memerlukan interupsi "sinkronisasi yang dilakukan", versus yang memastikan penundaan sinkronisasi cukup singkat untuk membuat gangguan seperti itu tidak perlu?
sumber
Jawaban:
Itu cara yang berbeda dalam melakukan sesuatu untuk saya, saya sudah terbiasa dengan arsitektur saya di mana register saya baik pada jam CPU saya atau setidaknya 1/2 dari jam itu. Jadi, Anda menulis register dan langsung siap. Mungkin mereka melakukannya dengan cara ini untuk menghemat daya? Jika mereka meletakkan register periferal pada domain clock terpisah mereka yang sangat lambat mungkin mereka tidak perlu bangun dan menjalankan osilator utama atau jam CPU tetapi dapat terus memperbarui nilai pada periferal tersebut.
Jika demikian, Anda dapat menulis register di blok periferal super lambat, lalu nonaktifkan pulau daya untuk seluruh CPU atau gerbang waktu, dan biarkan sinkronisasi lambat membacanya hingga bahagia dan kemudian mengganggu CPU untuk mengeluarkannya. tidur.
Atau itu bisa membuat Anda menjejalkan jumlah maksimum instruksi ke waktu terjaga Anda, alih-alih berputar enam siklus dan menunggu setiap penulisan.
Mengenai mengapa mereka menggunakan begitu banyak siklus sinkronisasi, bisa paranoia, atau mereka mungkin memenuhi beberapa standar keandalan tinggi untuk salah satu pelanggan mereka. Saya tidak bisa mengatakan dengan pasti tetapi saya tahu saya telah melihat pelanggan dengan tuntutan seperti setiap ram harus memiliki EC dan dimuat ke nilai yang ditetapkan, dll.
Saya kira itu bukan jawaban yang pasti tetapi itu adalah pikiran saya setelah melihat sedikit lembar data.
sumber