Saya telah bekerja dengan fpgas selama bertahun-tahun, dan selalu menggunakan reset sinkron untuk setiap bagian (yang membutuhkannya) dari sirkuit saya. Ini membantu sirkuit diatur ulang secara global pada siklus jam tertentu.
Namun, saya diberitahu bahwa di sirkuit ASIC, orang cenderung menggunakan reset asinkron di mana-mana. Saya bertanya-tanya mengapa, dan jika demikian halnya dalam beberapa desain FPGA juga. Saya ingin mendengar pendapat profesional.
Terima kasih
Saya lebih suka reset asinkron daripada reset sinkron karena beberapa alasan (tanpa urutan tertentu):
Pada akhirnya saya tidak berpikir salah satu dari isu-isu ini adalah penghenti acara, tetapi mereka pasti akan berkontribusi pada preferensi yang kuat dari pengaturan ulang asinkron pada ASIC.
sumber
Reset asinkron dengan pernyataan tidak sinkron bekerja dengan sangat baik. Seperti disebutkan di atas, jepit reset async lebih kecil dan tidak memerlukan jam aktif untuk memastikan reset, sehingga Anda dapat memaksa bagian ke reset (biasanya dikenal, daya rendah) hanya dengan daya dan satu pin kabel keras atau daya - di reset.
Jika Anda benar-benar ingin menggali lebih dalam, Anda bisa membaca makalah Cumming tentang ini, khususnya:
http://www.sunburst-design.com/papers/CummingsSNUG2003Boston_Resets.pdf
Bersulang.
sumber
Pendekatan lain, yang tampaknya bahkan lebih aman daripada pendekatan 'async assert / sync release', akan memiliki detektor reset asynchronous (seperti yang dijelaskan di tempat lain, dengan 'asynchronous' menegaskan 'dan' rilis 'sinkron), tetapi memiliki output dari Gerbang yang ada di perangkat I / O yang menghadap ke luar tanpa menyetel ulang apa pun secara sinkron (selain kait pada detektor itu sendiri). Jika seseorang menggunakan dua detektor reset asinkron, satu untuk jalur I / O dan satu untuk memberi makan detektor reset sinkron, dan jika satu mendesain satu untuk saluran I / O sehingga hanya akan tersandung oleh pulsa reset yang cukup masuk akal untuk diandalkan. trip detektor utama, orang dapat menghindari bahkan memiliki kesalahan output dalam kasus yang tidak akan mengatur ulang CPU. Perhatikan bahwa jika seseorang melakukan ini, pulsa reset panjang yang sah akan mengatur ulang output secara tidak sinkron,
Satu hal yang perlu dipertimbangkan adalah bahwa sistem sering memiliki beberapa register yang tidak seharusnya dipengaruhi oleh reset. Jika reset asinkron bisa mengenai sirkuit yang menulis ke register itu, akan mungkin untuk pulsa reset yang tiba pada waktu yang salah untuk mengalahkan register itu, bahkan jika itu adalah pulsa bersih (non-runt). Misalnya, jika kode mencoba menulis ke alamat 1111 dan reset async yang tiba tepat sebelum pulsa clock memaksa salah satu alamat terkunci ke nol tepat saat pulsa clock tiba, itu dapat menyebabkan penulisan yang salah ke alamat 1110. Sementara seseorang dapat menggunakan beberapa garis pengaturan ulang internal dengan penundaan kombinatorial untuk memastikan bahwa penulisan register dinonaktifkan sebelum alamatnya dihancurkan, menggunakan logika pengaturan ulang internal yang sinkron menghindari masalah tersebut sama sekali.
BTW, inilah rangkaian yang menggambarkan konsep tersebut. Dekat sudut kiri bawah adalah dua input logika untuk reset. Satu akan menghasilkan pulsa reset "bersih", dan yang lain akan menghasilkan pulsa yang benar-benar menjijikkan. LED kuning menunjukkan pengaturan ulang sistem utama; LED cyan menunjukkan I / O aktif. Menekan reset bersih akan menyebabkan "reset" langsung dari output; Menekan reset yang icky akan menyebabkan reset yang tertunda dari output, atau membiarkannya tidak terpengaruh (dalam simulator, tidak ada cara untuk menyebabkan case 'biarkan mereka tidak terpengaruh').
sumber
Sebagai seorang insinyur yang berpengalaman ( 3 tahun dengan desain dan sistem embedded FPGA ), saya memberi tahu Anda bahwa Anda perlu memeriksa lembar data dan panduan pengguna FPGA. Itu bukan jawaban yang sederhana.
Anda harus membuat desain Anda SESUAI dengan jenis FPGA yang Anda pilih. Beberapa FPGA memiliki FlipFlops yang dirancang untuk pengaturan ulang Async, beberapa dirancang untuk pengaturan ulang Sync.
Anda harus memeriksa panduan pengguna FPGA untuk jenis FlipFlops yang Anda miliki.
Implementor / Mapper akan memilih rute khusus untuk reset Anda ( kode dapat berjalan di freq lebih tinggi dan mengambil lebih sedikit ruang ) jika Anda mencocokkan kode Anda dengan tipe primitif FPGA.
Desain Anda akan berfungsi dalam kasus APAPUN , tetapi kadang-kadang Implementor FPGA akan keluar dari jalannya untuk membuat logika Anda berfungsi ( menambah lebih banyak logika ), tetapi itu akan menyebabkan frekuensi maksimum yang lebih rendah dan / atau lebih banyak sumber daya FPGA.
Contoh: diuji dengan Xilinx's ZYNQ ( FPGA dirancang untuk pengaturan ulang yang disinkronkan - lihat panduan pengguna primitif ). Dengan mengubah reset dari async ke sinkronisasi , frekuensi stabil max berubah dari 220MHz ke 258MHz dan jadi saya melewati margin frekuensi saya.
Saya juga dapat menambahkan bahwa Implementor tidak tahu apa itu sinyal clock dan reset. Ini memberikan pin flipflop ke sinyal oleh ORDER, bukan dengan nama. Jadi dalam beberapa FPGA, implementor memilih sinyal pertama setelah "proses () mulai" di VHDL sebagai jam, di beberapa sebagai reset, tergantung pada apa FPGA implementor diatur.
sumber