26 / 37 · Konsep
Debug pencacah dan contoh penyangkal minimum
Rancang pengujian singkat yang membedakan kesalahan reset, enable, dan batas perputaran.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
Nilai akhir benar dapat menyembunyikan urutan salah
Berakhir pada 0 tidak membuktikan reset dan wraparound benar: rangkaian yang terus macet di 0 juga memberi hasil itu. Amati kenaikan, penahanan, resetReset Kontrol yang mengembalikan keadaan ke nilai awal tertentu. Sifat sinkron/asinkron dan prioritas terhadap kontrol lain harus ditetapkan. Selengkapnya, dan perputaran batas secara terpisah.
Sengaja pertemukan dua fungsi
| Situasi | Ketentuan yang diperiksa |
|---|---|
| reset=1, enable=0 | Reset tidak tertutup enable |
| reset=1, enable=1 | Reset mengalahkan kenaikan |
| count=M−1, enable=0 | Tidak berputar saat berhenti |
| count=M−1, enable=1 | Tepat kembali dari M−1 ke 0 |
| Reset berubah di antara tepi | Diterapkan sinkron pada tepi berikutnya |
Menguji tiap kontrol sendirian sulit menemukan kesalahan prioritas.
Setiap kolom mengamati tepi naikTepi naik Saat clock berubah 0 ke 1, berbeda dari tingkat yang mencakup seluruh interval CLK=1. Selengkapnya, masukan sebelum dan keadaan after setelah pembaruan. Ini bukan tundaan fisikTundaan propagasi Waktu sejak masukan berubah hingga keluaran stabil pada nilai benar. Kesetaraan logika berbeda dari karakteristik waktu. Selengkapnya. Dari count awal=5, rangkaian salah hanya memeriksa reset di dalam enable sehingga mempertahankan 5 pada tepi pertama. Nilai akhir sama, tetapi perbedaan pertama mengungkap cacat.
Lihat data gelombang
| Sinyal | Gelombang | Nilai bus |
|---|---|---|
| edge | 234 | E0 → E1 → E2 |
| reset | 101 | |
| enable | 01. | |
| benar sesudah | 234 | 0 → 1 → 0 |
| cacat sesudah | 234 | 5 → 6 → 0 |
Mulai model modulo-8 pada 101. Pilih enable=0, reset=1 lalu majukan clock: nilai benar 000, tetapi RTL dengan reset di dalam enable mempertahankan 101. Lepas reset, lalu bedakan penahanan saat enable=0 dari kenaikan saat enable=1.
Reset sinkron lebih diprioritaskan daripada enable. Jika enable=0, pertahankan nilai tersimpan. q=101; q_next = (q + 1) mod 8
Temukan perbedaan pertama dengan model acuan
Model fungsi ini mengasumsikan keadaan normal 0 hingga M−1. Tambahkan kebijakan pemulihan di luar rentang secara terpisah. Hitung dan bandingkan nilai harapan di setiap tepi. Masukan serta keadaan tepat sebelum kegagalan pertama menjadi awal diagnosis terkecil.
Jika kegagalan muncul setelah 1000 siklus, buang bagian masukan yang tidak perlu hingga dapat direproduksi dalam tiga sampai lima tepi. Simpan contoh minimum itu sebagai uji regresi setelah perbaikan. Tinjau spesifikasi dan kode secara terpisah agar desain serta tes tidak sama-sama diubah ke kondisi salah.
Coba sendiri
Kode salah menempatkan reset dalam if(en) begin if(rst) ... end. Keadaan awal dan masukan apa yang memberi contoh penyangkal terpendek?
Baca penjelasan
Mulai dari keadaan bukan nol dan berikan satu tepi naik dengan rst=1,en=0. Kontrak reset berprioritas mewajibkan 0, tetapi rangkaian salah mempertahankan keadaan lama. Nilai awal 0 menyembunyikan cacat.