16 / 37 · Konsep
Pencacah modulo, saturasi, dan pulsa terminal
Rancang penanganan maksimum dan siklus tepat sinyal terminal-count.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
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.
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.
Lihat data gelombang
| Sinyal | Gelombang | Nilai bus |
|---|---|---|
| edge | 234523452 | E0 → E1 → E2 → E3 → E4 → E5 → E6 → E7 → E8 |
| mod10 sesudah | 234523452 | 9 → 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 |
| wrap4 sesudah | 234523452 | 9 → 10 → 11 → 12 → 13 → 14 → 15 → 0 → 1 |
| sat4 sesudah | 2345234.. | 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”.
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
endPenugasan 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.
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.