Altifigence Academy

16 / 37 · Konsep

Pencacah modulo, saturasi, dan pulsa terminal

Rancang penanganan maksimum dan siklus tepat sinyal terminal-count.

Tiga kebijakan pelampauan yang berbeda

Pada registerRegister Rangkaian penyimpan beberapa bit keadaan. Register sinkron mata kuliah ini menangkap masukan yang ditentukan pada tepi clock. Selengkapnya N bit yang sama, berputar, mempertahankan maksimum, atau melaporkan kesalahan ditentukan spesifikasi.

Cnextwrap=(C+1) mod 2NC_{next}^{wrap}=(C+1)\bmod2^N
Cnextsat=min⁡(C+1,2N−1)C_{next}^{sat}=\min(C+1,2^N-1)

Pada delapan bit, 255→0 secara modulo dan 255→255 secara saturasi merupakan fungsi berbeda. Akumulator signed juga harus menetapkan rentang serta kedua batas saturasinya.

Setiap kolom mengamati tepi naikTepi naik Saat clock berubah 0 ke 1, berbeda dari tingkat yang mencakup seluruh interval CLK=1. Selengkapnya: masukan sebelum, keadaan after sesudah. Penjajaran menunjukkan sampel, bukan tundaan fisikTundaan propagasi Waktu sejak masukan berubah hingga keluaran stabil pada nilai benar. Kesetaraan logika berbeda dari karakteristik waktu. Selengkapnya. Dengan count awal=8, reset=0, dan enable=1, modulo-10, wrap empat bit, dan saturasi empat bit menghasilkan lintasan berbeda.

Tiga kebijakan setelah nilai maksimum
Lihat data gelombang
Data gelombang: setiap karakter mewakili satu interval; titik mempertahankan keadaan sebelumnya; p adalah satu siklus clock.
SinyalGelombangNilai bus
edge234523452E0 → E1 → E2 → E3 → E4 → E5 → E6 → E7 → E8
mod10 sesudah2345234529 → 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7
wrap4 sesudah2345234529 → 10 → 11 → 12 → 13 → 14 → 15 → 0 → 1
sat4 sesudah2345234..9 → 10 → 11 → 12 → 13 → 14 → 15

Bandingkan keadaan terakhir modulo-M

Untuk pulsa setiap sepuluh kenaikan, gunakan 0–9 dan hitung hanya tepi valid dengan enable. Pulsa terdaftar dapat berarti “tepi ini mengonsumsi 9 dan kembali ke 0”.

SystemVerilog
always_ff @(posedge clk) begin
  if (rst) begin
    count <= 4'd0;
    pulse <= 1'b0;
  end else begin
    pulse <= 1'b0;
    if (en) begin
      if (count == 4'd9) begin
        count <= 4'd0;
        pulse <= 1'b1;
      end else count <= count + 4'd1;
    end
  end
end

Penugasan bawaan mengembalikan pulse ke 0 pada tepi berikutnya. Keluaran sederhana count==9 dapat tetap 1 beberapa siklus jika enable=0. Bedakan keadaan terminal dari kejadian selesai.

Tentukan awal penghitungan periode

Setelah reset ke count=0, diperlukan sepuluh tepi dengan enable=1 untuk pulse pertama. Yang penting bukan penomoran tepi pertama 0 atau 1, melainkan konsistensi tabel masukan/keadaan/keluaran.

Praktikum ini modulo-16. Dari 1110, satu tepi menghasilkan 1111, berikutnya 0000. Berhenti pada 1111 dengan enable=0. Penahanan dan saturasi dapat tampak sama, tetapi berbeda saat dilanjutkan. Bandingkan dengan perilaku pencacah saturasi.

Berhenti atau berputar pada nilai maksimum 4 bit

Reset sinkron lebih diprioritaskan daripada enable. Jika enable=0, pertahankan nilai tersimpan. q=1110; q_next = (q + 1) mod 16

Coba sendiri

Dari count=9,pulse=0, berikan dua tepi dengan en=0 lalu satu dengan en=1. Bagaimana count dan pulse berubah?

Baca penjelasan

Selama dua tepi berhenti, count=9 dan pulse=0. Pada tepi ketiga, count=0 dan pulse=1. Tepi berikutnya mengembalikan pulse ke 0 melalui penugasan bawaan.

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