Reset: sinkron vs asinkron

15

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

Aurelien Ribon
sumber

Jawaban:

11

Tampaknya ada banyak pandangan tentang ini.
Asynchronous assersion, sinkron deassertion dikatakan praktik yang baik. Ini menghindari masalah jam tidak berjalan (atau berjalan terlalu lambat untuk menangkap sinyal reset) pada pernyataan sinkron, dan kemungkinan metastabilitas pada deassertion asinkron.

Anda akan menggunakan sinkronisasi ulang (dua FF) dengan output terikat ke sisa desain ulang:

Setel ulang

Beberapa diskusi:
Async dan sinkronisasi reset
Letters On Sync vs Async Reset

Oli Glaser
sumber
Bagaimana persyaratan pengaturan / tahan waktu antara pelepasan sinyal reset kait dan jam dibandingkan dengan yang untuk input data? Saya akan merasa lebih nyaman jika kait di sistem melihat akhir dari sinyal reset terjadi di tepi jam tidak aktif. Apakah pelepasan async yang diatur ulang pada tepi jam aktif dijamin tidak akan mempengaruhi siklus di mana itu terjadi?
supercat
Tidak, pelepasan reset secara asinkron tidak dijamin akan bersih karena diperlukan waktu pemulihan yang diatur ulang (seperti pengaturan / penahanan) Inilah sebabnya Anda akan melepaskan pengaturan ulang secara sinkron.
Oli Glaser
Pertanyaan saya adalah apakah memiliki latch1 melepaskan latch2 makan sinyal reset pada tepi jam yang sama dengan latch2 akan menggunakan benar-benar halal, yaitu apakah waktu propagasi minimum dari jam latch1 ke outputnya akan memenuhi persyaratan tahan untuk input reset latch2. BTW, apa pendapat Anda tentang jawaban saya di atas? Sirkuit yang Anda buat menawarkan sedikit kekebalan untuk menjatuhkan pulsa pada garis reset, ketika hampir total imunitas seharusnya dimungkinkan.
supercat
Atas pertimbangan lebih lanjut, seseorang dapat menambahkan perlindungan dari pulsa runt dengan menambahkan kait ketiga, dan memiliki sinyal reset async-nya menjadi versi kesalahan-tertekan dari sinyal yang diumpankan ke dua yang pertama, sehingga sinyal yang secara asinkron mengganggu kait ketiga akan menjadi dijamin untuk mereset dua yang pertama dengan bersih. Sebuah pulsa runt pada input reset dapat menyebabkan jalur reset utama dalam chip untuk mendapatkan pulsa runt, tetapi jika pulsa tersebut terjadi itu akan diikuti oleh pulsa reset sinkron.
supercat
Maaf, saya pikir saya mengerti maksud Anda sekarang. Jika yang Anda maksud adalah output dari kait kedua di sinkronisasi untuk pengaturan ulang sistem FF, pemahaman saya adalah bahwa waktu pemulihan ulang biasanya kurang dari waktu pengaturan data untuk FF yang sama, jadi seharusnya tidak apa-apa. Saya setuju tentang runt pulsa, tidak menawarkan kekebalan kepada mereka tanpa sesuatu seperti Anda sarankan diimplementasikan.
Oli Glaser
7

Saya lebih suka reset asinkron daripada reset sinkron karena beberapa alasan (tanpa urutan tertentu):

  • Menambahkan fungsi asynchronous set atau reset ke flip-flop mungkin akan menghasilkan desain yang lebih kecil karena integrasi logika ke dalam sel tunggal (vs. flip-flop yang tidak dapat disetel ulang dengan gerbang AND pada input)
  • Lebih sedikit gerbang menghasilkan kabel / tempat dan rute yang kurang padat
  • Ini adalah proses yang lebih sederhana / lebih mudah untuk mengatur ulang chip (lebih ramah pengguna / uji coba)
  • Membuat jalur reset asinkron menyederhanakan partisi analisis pewaktuan statis sinyal reset
  • Reset yang sinkron akan menambah logika tambahan ke jalur kritis aliran data, dan membuatnya lebih sulit untuk memenuhi persyaratan pengaturan dan penyimpanan
  • Sementara FPGA memiliki fungsi logika sewenang-wenang 4-6 input pada input, Anda "membayar" untuk setiap input ke gerbang pada ASIC (lebih banyak input = gerbang lebih besar; fungsi kompleks = banyak gerbang)

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.

W5VO
sumber
2
Salah satu bahaya dengan menggunakan pengaturan ulang asinkron ke dalam logika internal seseorang adalah bahwa pulsa runtuh pada input reset dapat mendatangkan berbagai macam malapetaka. Jika seseorang akan membiarkan sirkuit seseorang disetel ulang secara tidak sinkron, seseorang harus mendesain sirkuit input sedemikian rupa untuk memastikan bahwa setiap pulsa reset yang cukup untuk menyebabkan segala jenis reset asinkron untuk mencapai sirkuit internal akan dijamin juga menyebabkan reset sinkron terjadi.
supercat
4

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.

mixed_signal_old
sumber
Salah satu masalah yang saya pikir Mr. Cummings meleset di makalahnya adalah bahwa sementara detektor kesalahan dapat menekan apa yang seharusnya menjadi pulsa runtuh, mereka juga dapat mengubah apa yang akan menjadi pulsa panjang sah menjadi pulsa runtuh. Efek dari hal ini adalah bahwa pulsa yang panjangnya tepat dapat secara sewenang-wenang mengalahkan kondisi sistem tanpa menyebabkan reset yang tepat. Karena sangat sulit untuk menghindari metastabilitas dalam semua kasus tanpa sinkronisasi ganda, saya akan menyarankan memiliki dua sirkuit tangkap async, salah satunya memiliki kriteria pendeteksi kesalahan yang lebih ketat, dan kemudian ...
supercat
... mengatur berbagai hal sehingga kesalahan pendek dapat menyebabkan atau tidak menyebabkan reset terjadi satu atau dua siklus kemudian, tetapi pulsa yang cukup lama akan menyebabkan reset segera. Selain itu, saat menggunakan input 'reset async' pada sandal jepit dapat membantu sintesis dalam beberapa topologi, itu tidak berarti mereka harus digunakan secara tidak sinkron. Mungkin akan membantu jika sebagian besar sinyal reset internal disinkronkan ke jam bahkan ketika mengemudi input "async reset" pada kait.
supercat
Cummings mengatakan filter kesalahan "jelek." Saya belum pernah melihat satu pun di IC yang saya kerjakan. Kami cenderung menggunakan pemicu Schmitt di semua sel panel input untuk menghindari masalah ini, dan pengaturan daya yang saya gunakan juga dibersihkan. Omong-omong, dalam kasus apa Anda memiliki pulsa pendek pada garis reset? Saya telah melihat ini dalam beberapa skenario tes pemindaian, tetapi mereka masih dalam urutan sebagai siklus clock panjang, bukan pulsa pendek yang disengaja. Pada komentar terakhir Anda, deassertion of reset harus disinkronkan ke jam untuk menghindari pelanggaran s / h pada reset, dan memastikan semua jepit keluar reset di tepi yang sama.
mixed_signal_old
Filter kesalahan sering berguna untuk menentukan jenis input mana yang dapat menyebabkan metastabilitas, tetapi mereka tidak menghilangkan status metastabil. Sasaran dengan filter kesalahan harus untuk memastikan bahwa setiap kondisi yang dapat menyebar yang mungkin terjadi berada dalam situasi "tidak peduli". Terkadang diperlukan satu perangkat agar dapat mengatur ulang perangkat lain yang dicolokkan ke dalamnya. Kecuali jika kabel reset disinkronkan dua kali lipat, akan ada risiko pulsa runtuh dari peristiwa ESD terdekat dan nasties semacam itu.
supercat
Adapun poin terakhir, saya hanya mengatakan bahwa bahkan seseorang sedang mensintesis desain pada perangkat keras yang menyediakan input reset async "gratis" pada sandal jepit, itu tidak berarti seseorang tidak dapat sepenuhnya menyinkronkan sinyal ke jam utama di kedua pernyataan dan pembebasan. Sinyal yang menghadap ke luar mungkin harus bereaksi secara asinkron dengan input reset, tetapi itu tidak berarti seseorang harus secara asinkron mengatur ulang semua kait seseorang. Memang, untuk menghindari keadaan tidak konsisten, mungkin berguna untuk hanya memiliki semua kecuali dua kait dalam desain seseorang menjadi sinkron.
supercat
2

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').

supercat
sumber
Saya pikir ini sepertinya ide yang bagus. begitu banyak nuansa abu-abu dengan hal-hal yang tampaknya sederhana seperti reset.
Oli Glaser
0

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.

Achex
sumber
Saya tidak setuju dengan pernyataan Anda bahwa "Pelaksana tidak tahu apa itu jam dan setel ulang sinyal". Alat sintesis menyimpulkan jam mana dan mana yang disetel ulang dengan cara mereka digunakan. Sinyal jam digunakan dengan spesifikasi tepi, reset tidak. Selanjutnya, setiap flip-flop dapat digunakan dengan spesifikasi ulang sinkron dan, seperti yang Anda amati, ini sering mengarah ke jalur kritis lebih cepat.
Joe Hass