Apa itu metastabilitas?

15

Dari artikel Wikipedia Metastabilitas dalam elektronik :

Metastabilitas dalam elektronik adalah kemampuan sistem elektronik digital untuk bertahan selama waktu yang tidak terbatas dalam keseimbangan yang tidak stabil atau keadaan metastabil. Dalam keadaan metastabil, sirkuit mungkin tidak dapat mengendap menjadi level logika '0' atau '1' yang stabil dalam waktu yang diperlukan untuk operasi sirkuit yang tepat. Akibatnya, sirkuit dapat bertindak dengan cara yang tidak terduga, dan dapat menyebabkan kegagalan sistem.

Itu sepertinya definisi yang bagus, tetapi apa artinya dalam aplikasi?

Dari sudut pandang perancang elektronik, apa saja contoh kapan ini mungkin terjadi dan di mana seharusnya jenis kegagalan ini menjadi perhatian?

Apakah ada definisi yang lebih pragmatis atau terapan - sesuatu dalam istilah yang lebih spesifik?

Berkarat
sumber
2
Leslie Lamport (dia dari $ \ LaTeX $ fame) menulis deskripsi yang baik tentang metastabilitas dalam makalah ini: research.microsoft.com/users/lamport/pubs/buridan.pdf
markrages
@markrages Cemerlang. Ini juga bisa terjadi dengan kucing jatuh dan roti bakar mentega .
Rusty

Jawaban:

15

Jawaban Cepat: Jika Anda melanggar pengaturan dan menahan waktu pada input flip flop, maka output akan tidak dapat diprediksi selama beberapa waktu. Output yang tidak dapat diprediksi itu disebut meta-stable (atau metastability).

Jawaban panjang: Ketika output tidak dapat diprediksi, maksud saya itu tidak dapat diprediksi. Bisa jadi tinggi, bisa rendah, bisa di suatu tempat di antaranya, atau bisa berosilasi. Setelah periode metastabil ini, outputnya akan tinggi atau rendah, tetapi kita tidak tahu kemana akan pergi sampai itu terjadi.

Namun, jumlah waktu yang tidak dapat diprediksi agak dapat diprediksi. Ada dua faktor utama yang menentukan panjang periode metastable: Kecepatan flip-flop, dan seberapa "dekat dengan tepi" Anda mendapatkan waktunya.

Sebagian besar waktu metastable cukup singkat, meskipun kemungkinan memiliki waktu yang lama adalah nol. Secara teoritis Anda bisa memiliki waktu metastable dalam urutan detik, meskipun kemungkinan itu terjadi sangat jarang. Ketika kecepatan flip-flop meningkat, rata-rata waktu metastable berkurang - semua hal lain dianggap sama.

Ada "imajiner" waktu di flip-flop, relatif terhadap tepi jam, di mana Anda paling rentan terhadap masalah metastabilitas. Tepat saat itu tergantung pada banyak faktor seperti suhu, voltase, proses, fase bulan, pengorbanan hewan, dan partai politik apa yang berafiliasi dengan Anda. Setiap kali waktu itu, semakin dekat tepi input data Anda ke waktu itu semakin lama waktu metastabilitas.

Cara terbaik untuk menangani metastabilitas adalah membuat semua logika Anda sinkron, dan tidak melanggar pengaturan dan waktu tunggu Anda. Ini, tentu saja, sulit untuk mustahil bagi sirkuit dengan kompleksitas apa pun. Jadi yang kami lakukan adalah mencoba membatasi tempat-tempat di mana metastabilitas bisa menjadi masalah dan kemudian berurusan dengan tempat-tempat itu.

Metode normal adalah dengan "menggandakan waktu" data. Artinya, miliki dua D Flip-Flops secara seri dengan output dari input pertama input kedua. Harapannya adalah jika flip-flop pertama berjalan metastable maka periode metastable akan berakhir sebelum melanggar pengaturan / tahan waktu yang kedua. Dalam praktiknya ini bekerja dengan cukup baik. Dalam aplikasi yang sangat kritis mungkin ada "triple-clocking" yang terjadi.


sumber
3
Adakah ketergantungan pada jenis hewan yang dikorbankan?
Rusty
11

Keadaan metastabil mirip dengan keseimbangan yang tidak stabil. Contoh umum keseimbangan tidak stabil adalah pendulum terbalik . Jika Anda dapat menyeimbangkan pendulum dalam posisi vertikal, itu adalah kondisi stabil. Namun, jika sesuatu mendorong tuas ke kedua sisi (arus udara atau getaran tanah, misalnya), pendulum tidak akan mengembalikan dirinya ke posisi vertikal, ia akan jatuh ke bawah. Kontras dengan pendulum biasa, yang jika didorong ke satu sisi, pada akhirnya akan menetap kembali ke vertikal.

Keseimbangan stabil digunakan dalam sistem kelistrikan untuk membuat elemen penyimpanan. Equlibria yang tidak stabil tidak membuat elemen penyimpanan yang baik (karena mereka kehilangan keadaannya dengan mudah), tetapi sering ada sebagai keadaan parasit.

Elemen penyimpanan digital yang umum adalah sepasang inverter bersilangan:

Dua inverter terhubung dalam satu lingkaran, keluaran ke input

Elemen penyimpanan memiliki dua keadaan stabil, satu di mana simpul di sebelah kiri berada di tegangan suplai dan simpul di sebelah kanan di tanah, dan yang lainnya di kondisi berlawanan. Ada juga keadaan tidak stabil, di mana setiap node berada pada tegangan menengah.

Untuk lebih memahami bagaimana kondisi tidak stabil muncul, ingat fungsi transfer untuk inverter. Alur fungsi transfer menunjukkan tegangan output inverter untuk tegangan input yang diberikan.

Fungsi transfer inverter

Inverter tidak linier; satu cara sederhana untuk mendapatkan solusi perkiraan dari sirkuit non-linear adalah dengan memplot karakteristik rangkaian; persimpangan plot adalah solusi, atau dengan kata lain, titik-titik di mana karakteristik listrik dari semua komponen rangkaian terpenuhi. Biasanya ini dilakukan dengan plot iv seperti pada contoh dioda ini di Wikipedia . Namun, untuk inverter, kami akan melakukannya dengan plot vv. Overlay fungsi transfer inverter kedua pada plot (dengan kapak ditukar, karena inverter kedua mundur:

Fungsi transfer overlay untuk inverter back-to-back

Ada tiga persimpangan plot: satu di (0, Vs), satu di (Vs, 0), dan satu di (Vs / 2, Vs / 2). Status (Vs / 2, Vs / 2) adalah metastable. Setelah gangguan kecil pada kedua node, rangkaian hampir selalu akan mengendap ke salah satu kondisi stabil daripada kembali ke (Vs / 2, Vs / 2).

Cara untuk menulis nilai ke elemen penyimpanan dual-inverter adalah dengan memaksa salah satu node ke nilai yang diinginkan menggunakan driver yang lebih kuat dari inverter. Salah satu cara umum untuk melakukan ini adalah dengan pass transistor:

Inverter berpasangan silang dengan transistor lulus

Jika Anda menghubungkan gerbang pass transistor ke jam, Anda memiliki kait D (saya meninggalkan struktur output). Ketika jam tinggi, memungkinkan transistor lulus, kait transparan - input langsung ke output. Ketika jam rendah, kait memegang nilai sebelumnya. Metastabilitas muncul pada saat sampel kait. Jika input tegangan tinggi atau rendah stabil ketika sampel kait, maka itu akan berfungsi dengan baik. Namun, jika input berada di sekitar titik Vs / 2 ketika sampel kait, ada kemungkinan kait akan berakhir dalam keadaan metastable (Vs / 2, Vs / 2). Setelah berada dalam kondisi metastabil, ia dapat tetap berada di sana tanpa batas waktu (dengan asumsi kait tidak diulang lagi), tetapi karena ini merupakan kesetimbangan yang tidak stabil, sesuatu biasanya terjadi secara relatif cepat untuk membuatnya keluar dari kondisi metastabil.

Kapan harus khawatir tentang metastabilitas

Jika elemen penyimpanan Anda menjadi metastable, maka Anda setidaknya kehilangan sebagian dari anggaran waktu untuk logika hilir. Logikanya tidak dapat melakukan evaluasi yang diinginkan sampai keadaan metastabil diselesaikan. Dalam kasus terburuk, keadaan metastabil bertahan atau menyebar melalui logika, dan elemen penyimpanan hilir juga menjadi metastabil, atau beberapa elemen penyimpanan terkait menangkap nilai yang tidak konsisten.

Logika sinkron yang dirancang dan berfungsi dengan baik tidak memiliki masalah dengan metastabilitas. Periode jam lebih lama dari waktu evaluasi untuk logika, semua input flip-flop stabil di tepi jam berikutnya (persyaratan setup puas), dan mereka semua memuat nilai yang valid.

Beberapa situasi umum di mana metastabilitas menjadi perhatian adalah:

  • Pengambilan sampel logika input eksternal, misalnya, saklar di panel depan, atau output dari rangkaian monitor yang dapat bertransisi setiap saat (undervoltage, overtemp).
  • Logika menggunakan beberapa jam yang tidak memiliki hubungan sinkron. Ini sering muncul dengan antarmuka I / O yang memiliki persyaratan jam tertentu, tetapi juga terjadi secara internal ketika bagian chip yang berbeda memiliki persyaratan kinerja yang berbeda. Misalnya, tidak semua logika di CPU 3 GHz Anda benar-benar berjalan pada 3 GHz. (CPU bukan contoh yang bagus, karena banyak jam di CPU adalah kelipatan sinkron satu sama lain.)
Andy
sumber
Sebagian besar jawaban yang bagus, tetapi hal lain yang perlu disebutkan adalah bahwa karena keterlambatan propagasi, tidak ada satu negara metastabil melainkan seluruh keluarga mereka, dan tidak ada cara tertentu untuk mengidentifikasi negara metastabil. Seseorang dapat mendesain sirkuit dengan output tiga-negara (tinggi / rendah / metastabil), dan mengatur hal-hal sehingga "tinggi" tidak akan pernah dilaporkan jika output mungkin berakhir rendah, atau sebaliknya, tetapi tidak ada jaminan output tidak akan terpental antara 'tinggi' dan 'metastable' (berakhir 'tinggi'), atau antara 'rendah' ​​dan 'metastable' (berakhir 'rendah').
supercat
+1 Ini adalah hal yang baik tetapi lebih masuk akal setelah membaca jawaban @vid Kessner. +2 Untuk grafik.
Rusty
3

Sinyal metastabil adalah sinyal yang dapat berubah menjadi tinggi atau rendah dalam pola sembarang untuk beberapa jangka waktu yang sewenang-wenang. Jika sinyal mengumpankan beberapa gerbang secara langsung atau tidak langsung , mungkin saja beberapa gerbang itu "melihatnya" tinggi sementara yang lain melihatnya rendah. Hal-hal buruk.

Untuk sistem dengan satu jam, sinyal metastable sering dapat ditangani dengan melewati dua kait. Masalah rumit muncul saat gating jam. Ada banyak sirkuit (terutama menggunakan kait RS) yang akan bekerja luar biasa jika metastabilitas tidak mungkin, tetapi yang dapat, jika metastabilitas terjadi, akhirnya menghasilkan pulsa jam runt (yang pada gilirannya dapat menyebabkan metastabilitas hilir).

Secara kebetulan, poin penting lain yang perlu diperhatikan mengenai metastabilitas: waktu propagasi latch menunjukkan kapan, jika sampel dan waktu penahanan terpenuhi , output akan stabil pada nilai barunya. Jika waktu pengaturan dan penahanan tidak terpenuhi, tidak ada jaminan apakah atau kapan output akan atau tidak akan beralih, sampai saat kait menerima peristiwa pencatatan jam kerja yang valid. Bahkan jika output 'tampaknya' beralih dengan bersih, tidak ada jaminan itu tidak akan secara spontan kembali.

supercat
sumber
2

Kasus klasik adalah jika Anda melanggar pengaturan / tahan waktu untuk kait sinkron, dan merupakan masalah yang perlu Anda ketahui ketika merancang FPGA (saya yakin Xilinx dan Altera akan memiliki catatan tentang ini). Jika suatu sinyal dapat datang kapan saja secara acak, Anda tidak akan pernah bisa memastikan bahwa ketika Anda mencatatnya, itu tidak berubah dalam spesifikasi jendela pengaturan / tahan waktu. Apa yang bisa terjadi adalah alih-alih output kait menjadi tinggi atau rendah pada waktu yang ditentukan setelah jam tepi, itu bisa gentar sekitar untuk sementara waktu sebelum menetap pada keadaan stabil. Cara normal untuk mencegah hal ini adalah dengan menggunakan kait 2-tahap, baik dengan jam yang sama atau jam yang tertunda atau di luar fase tergantung pada keseimbangan antara persyaratan latensi Anda dan kemungkinan metastabilitas. Ini memungkinkan waktu kait pertama untuk stabil sebelum kait kedua mengunci keadaan stabil. Kebetulan, ini adalah sesuatu yang harus ditangani oleh mikrokontroler secara internal, karena sinyal I / O eksternal biasanya tidak sinkron dengan jam CPU, sehingga port I / O sering memiliki pengaturan kait ganda untuk menghindari masalah, dan perangkat lunak tidak perlu khawatir tentang hal itu. . Pembacaan samar-samar bertahun-tahun yang lalu tentang masalah dengan 6502, di mana bus membaca data yang berubah di luar spesifikasi waktu setup / tahan dapat menyebabkan cabang ke alamat yang bukan target cabang atau instruksi berikutnya, karena beberapa internal negara menjadi metastabil. Video ini menunjukkan beberapa contoh: Pembacaan samar-samar bertahun-tahun yang lalu tentang masalah dengan 6502, di mana bus membaca data yang berubah di luar spesifikasi waktu setup / tahan dapat menyebabkan cabang ke alamat yang bukan target cabang atau instruksi berikutnya, karena beberapa internal negara menjadi metastabil. Video ini menunjukkan beberapa contoh: Pembacaan samar-samar bertahun-tahun yang lalu tentang masalah dengan 6502, di mana bus membaca data yang berubah di luar spesifikasi waktu setup / tahan dapat menyebabkan cabang ke alamat yang bukan target cabang atau instruksi berikutnya, karena beberapa internal negara menjadi metastabil. Video ini menunjukkan beberapa contoh:http://www.youtube.com/watch?v=tKHCwjWMMyg

Sebuah analoginya adalah jika Anda melempar bola kepada seseorang - mereka kebanyakan menangkapnya atau menjatuhkannya, jadi setelah waktu tertentu melempar, mereka akan memegangnya atau tidak. Tetapi kadang-kadang mereka akan meraba-raba untuk sementara waktu sebelum menangkap atau menjatuhkannya, sehingga negara mereka tidak memegang atau menjatuhkan - ini adalah negara yang mudah terbakar!

mikeselectricstuff
sumber
Saya masih bekerja dengan sistem berbasis 6502 sebagai hobi. Akan menyenangkan untuk mengetahui beberapa masalah metastabilitas pada data bus. Saya pasti bisa membayangkan bahwa jika akumulator memegang $ FF dan seseorang membaca nilai yang $ 00 atau $ 01, akumulator dapat berakhir dengan nilai yang mungkin. Namun, sebelum cabang apa pun diambil, saya berharap dua siklus lagi harus berlalu, di mana bendera-bendera itu akan dikunci dua kali. Saya tidak bisa membayangkan keadaan metastabil yang tersisa selama itu.
supercat
Ini adalah sesuatu yang saya dengar dari tangan kedua atau ketiga mungkin 20 tahun yang lalu, tetapi itu memang berasal dari orang-orang yang benar-benar tahu apa yang mereka lakukan - itu berkaitan dengan antarmuka Tube pada prosesor 6502 detik untuk BBC Micro, dan pembacaan status bendera, dan merupakan kejadian bulan-sekali-biru-bulan tetapi cukup sering sehingga menunda peluncuran produk. Itu tidak perlu diperlukan untuk bertahan 2 siklus karena sinyal mungkin terkunci secara internal di berbagai tahap pipa. Saya pikir itu juga varian 6502 tercepat yang tersedia saat itu - 3MHz 65C02 ISTR.
mikeselectricstuff
Menarik. [BTW, apakah ada cara untuk menggunakan tanda baca tanpa StackExchange munging itu?] Dalam perilaku normal misalnya "ADC 0xD000" alamat akan menjadi output pada fase 1 dari siklus keempat, dan data akan terkunci pada akhir fase 2 dari siklus itu. Data akan dimasukkan ke dalam ALU dalam fase 1 dari siklus berikutnya (yang akan menjadi opcode fetch untuk instruksi berikut). Siklus setelah itu akan menjadi operan fetch. Jika hal-hal yang masih metastable pada saat itu, sistem dapat meleleh, tetapi itu tampaknya tidak mungkin karena register dinamis akan dikunci dua kali.
supercat
Saya tidak ingin mengatakan tidak mungkin metastabilitas data-bus mempengaruhi 6502, karena saya tahu ada beberapa perilaku aneh yang tidak bisa saya jelaskan. Misalnya, bus data terkunci selama fase 2 jam, dan ditindaklanjuti selama fase 1. berikut. Dengan demikian tidak masalah jika itu berubah selama fase 2 asalkan itu stabil di akhir. Namun, ada beberapa instruksi yang tidak terdokumentasi, yang perilakunya dipengaruhi oleh isi bus data selama bagian awal siklus (ditunjukkan pada mesin seperti C64 dan Apple yang mengambil video selama fase 1). Saya tidak tahu bagaimana ...
supercat
... perilaku dari instruksi tersebut sebenarnya dipengaruhi oleh perilaku bus data awal, tapi saya curiga ini semacam kondisi ras yang aneh. IIRC, salah satu opcodes cocok dengan pola decode untuk LDA #imm, LDX #imm, dan PAJAK, sehingga output ALU sedang dipetakan kembali ke inputnya. Aneh.
supercat