Mengapa beberapa mikrokontroler mengalami penundaan sinkronisasi yang sangat besar?

11

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?

supercat
sumber
2
Terima kasih atas pertanyaan ini. Itu membuat saya akhirnya mengerti masalah yang ada di tangan saya. Saya datang ke sini karena saya tidak mengerti mengapa menghapus Watchdog Timer (WDT) akan memakan waktu hampir 5 milidetik luar biasa pada SAMD20 / 21. Sekarang saya tahu itu karena desain perangkat keras, bukan kesalahan saya. (WDT memiliki clock 1024 Hz, yang merupakan satu-satunya pilihan yang masuk akal.) Sekarang saya setidaknya bisa mengatasinya.
T-Bull
2
@ T-Bull: Hal yang sangat menyenangkan tentang anjing penjaga pada bagian-bagian itu adalah bahwa ia dinonaktifkan antara perangkat lunak waktu mengeluarkan perintah reset dan waktu perintah melewati sinkronisasi. Jika perangkat pergi ke tidur selama interval itu, pengawas tidak akan berjalan kecuali atau sampai sesuatu yang lain wake up bagian.
supercat

Jawaban:

2

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.

Guy Perangkat Keras
sumber
2
"Enam siklus" adalah enam siklus jam periferal; jika seseorang menetapkan misalnya modul jam waktu nyata untuk diberi makan pada 1024Hz (yang tampaknya merupakan rekomendasi Atmel) dan jam CPU pada 48MHz, enam siklus jam periferal akan menjadi 281.250 siklus jam CPU yang merupakan waktu yang sangat panjang waktu untuk berputar, terutama jika ada gangguan yang perlu diservis. Spinning hanya cukup mengerikan jika clock lambat adalah 8Mhz (berarti putaran 36-CPU-cycle) tetapi kesalahan yang keras akan lebih baik daripada spin pada clock 1024Hz.
supercat