29 / 63 · Konsep
Jumlah keadaan, lebar pencacah, dan kode tidak terpakai
Tentukan lebar dari rentang hitungan dan definisikan pemulihan keadaan tidak valid.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
Pencacah juga merupakan mesin keadaan
Pencacah berulang 0–9 memerlukan sepuluh keadaan dan minimal bit. Namun, registerRegister Rangkaian penyimpan beberapa bit keadaan. Register sinkron mata kuliah ini menangkap masukan yang ditentukan pada tepi clock. Selengkapnya empat bit memiliki 16 pola; memilih lebar yang benar saja belum menghasilkan fungsi modulo-10.
M adalah jumlah keadaan, bukan nilai maksimum. Menghitung 0 hingga M−1 berbeda dari 0 hingga M. Jika mendukung M=1, batasi lebar minimum menjadi 1 dan selalu pertahankan 0.
Dari 16 kode empat bit, modulo-10 hanya memakai sepuluh keadaan normal. Setelah lebar ditentukan, tambahkan kebijakan perbandingan dan pemulihan.
- 10 keadaan: count normal adalah 0–9
- Penyimpanan 4 bit: 16 kode; 10–15 tidak digunakan
- Keadaan berikut: Jika en=1 dan count≥9, kembali ke 0
Keadaan di luar rentang juga bagian desain
Apa yang dilakukan pencacah modulo-10 jika menjadi 12? Buktikan kondisi inisialisasi dan resetReset Kontrol yang mengembalikan keadaan ke nilai awal tertentu. Sifat sinkron/asinkron dan prioritas terhadap kontrol lain harus ditetapkan. Selengkapnya yang mencegahnya, atau tetapkan pemulihan ke 0 untuk nilai ≥9. Pemulihan ini tidak menjamin ketahanan terhadap seluruh kerusakan perangkat keras.
always_ff @(posedge clk) begin
if (rst) count <= 4'd0;
else if (en) begin
if (count >= 4'd9) count <= 4'd0;
else count <= count + 4'd1;
end
endContoh ini juga memulihkan nilai salah 10–15, tetapi pada tepi dengan en=1. Jika enable=0, nilai itu tetap dipertahankan. Spesifikasi pemulihan segera membutuhkan prioritas kondisi berbeda.
Pemeriksaan lebar dan fungsi terpisah
Sepuluh bit cukup untuk 0–999, tetapi kenaikan bebas mencapai 1023. Diperlukan perbandingan keadaan maksimum spesifikasi dan seleksi kembali ke 0. Pada alamat memori, jumlah iterasi, atau panjang paket, perbedaan ini menyebabkan akses atau panjang yang salah.
Coba sendiri
Tentukan lebar minimum dan jumlah kode tidak terpakai pencacah berulang 0–99. Apa bedanya jika hanya menambahkan 1 pada lebar tersebut?
Baca penjelasan
Seratus keadaan memerlukan tujuh bit, dengan kode tidak terpakai. Kenaikan biasa melewati 99 hingga 127: hasilnya modulo-128, bukan modulo-100.