Altifigence Academy

29 / 63 · Konsep

Jumlah keadaan, lebar pencacah, dan kode tidak terpakai

Tentukan lebar dari rentang hitungan dan definisikan pemulihan keadaan tidak valid.

Pencacah juga merupakan mesin keadaan

Pencacah berulang 0–9 memerlukan sepuluh keadaan dan minimal ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4 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.

N=⌈log⁡2M⌉,unused codes=2N−MN=\left\lceil\log_2 M\right\rceil,\qquad \text{unused codes}=2^N-M

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.

Lebar penyimpanan dan kondisi putaran dirancang terpisah
  1. 10 keadaan: count normal adalah 0–9
  2. Penyimpanan 4 bit: 16 kode; 10–15 tidak digunakan
  3. 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.

SystemVerilog
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
end

Contoh 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 128−100=28128-100=28 kode tidak terpakai. Kenaikan biasa melewati 99 hingga 127: hasilnya modulo-128, bukan modulo-100.

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