Altifigence Academy

26 / 37 · Konsep

Debug pencacah dan contoh penyangkal minimum

Rancang pengujian singkat yang membedakan kesalahan reset, enable, dan batas perputaran.

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

SituasiKetentuan yang diperiksa
reset=1, enable=0Reset tidak tertutup enable
reset=1, enable=1Reset mengalahkan kenaikan
count=M−1, enable=0Tidak berputar saat berhenti
count=M−1, enable=1Tepat kembali dari M−1 ke 0
Reset berubah di antara tepiDiterapkan 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.

Contoh tandingan minimal: reset tertutup enable
Lihat data gelombang
Data gelombang: setiap karakter mewakili satu interval; titik mempertahankan keadaan sebelumnya; p adalah satu siklus clock.
SinyalGelombangNilai bus
edge234E0 → E1 → E2
reset101
enable01.
benar sesudah2340 → 1 → 0
cacat sesudah2345 → 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.

Aktifkan reset dan enable bersamaan

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

Ck+1=rk?0:(ek?((Ck+1) mod M):Ck)C_{k+1}=r_k?0:(e_k?((C_k+1)\bmod M):C_k)

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.

Pilihan berlaku di peramban ini. Ubah kapan saja di bagian bawah halaman.