29 / 37 · Konsep
Proyek terpadu: detektor 101 bertumpang tindih
Terapkan pengurangan keadaan, validitas masukan, keluaran terdaftar, dan verifikasi independen dalam satu desain.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
Tetapkan kebutuhan dahulu
Pada tepi naikTepi naik Saat clock berubah 0 ke 1, berbeda dari tingkat yang mencakup seluruh interval CLK=1. Selengkapnya dengan valid=1, terima bit_in. Jika akhir bit diterima adalah 101, set hit=1 selama satu siklus setelah tepi itu. Tumpang tindih diizinkan: 10101 harus memberi hit pada bit ketiga dan kelima. Saat valid=0, tahan keadaan dan set hit=0; reset menginisialisasi keadaan serta hit.
Simpan hanya masa lalu yang diperlukan
S0 berarti tidak ada prefiks cocok, S1 berarti akhir 1, dan S10 berarti akhir 10. Setelah 101, bit 1 terakhir dapat memulai pola berikutnya, sehingga kembali ke S1.
| Keadaan sekarang | Bit 0 diterima | Bit 1 diterima |
|---|---|---|
| S0 | S0, hit=0 | S1, hit=0 |
| S1 | S10, hit=0 | S1, hit=0 |
| S10 | S0, hit=0 | S1, hit=1 |
Setiap kolom mengamati tepi, masukan sebelum dan keadaan after sesudah; penjajaran bukan tundaan fisikTundaan propagasi Waktu sejak masukan berubah hingga keluaran stabil pada nilai benar. Kesetaraan logika berbeda dari karakteristik waktu. Selengkapnya. Setelah reset di S0, valid selalu 1. Kembali ke S1 setelah deteksi bit ketiga memungkinkan deteksi bit kelima.
Lihat data gelombang
| Sinyal | Gelombang | Nilai bus |
|---|---|---|
| bit diterima | 10101 | |
| keadaan sesudah | 23452 | S1 → S10 → S1 → S10 → S1 |
| hit sesudah | 0.101 |
Implementasikan keluaran deteksi terdaftar
module pattern_101 (
input logic clk, rst, valid, bit_in,
output logic hit
);
typedef enum logic [1:0] {S0, S1, S10} state_t;
state_t state;
always_ff @(posedge clk) begin
if (rst) begin
state <= S0;
hit <= 1'b0;
end else begin
hit <= 1'b0;
if (valid) begin
case (state)
S0: state <= bit_in ? S1 : S0;
S1: state <= bit_in ? S1 : S10;
S10: begin
state <= bit_in ? S1 : S0;
hit <= bit_in;
end
default: state <= S0;
endcase
end
end
end
endmodulehit menyimpan fungsi keadaan dan masukan yang diterima pada tepi ke registerRegister Rangkaian penyimpan beberapa bit keadaan. Register sinkron mata kuliah ini menangkap masukan yang ditentukan pada tepi clock. Selengkapnya. Tidak seperti keluaran Mealy kombinasional, hit tidak langsung bereaksi terhadap perubahan bit_in di antara tepi. Contoh dibaca sebagai SystemVerilog umum; dukungan sintaks dan bukti eksekusi mesin praktikum satu clock harus diperiksa terpisah.
Hitung kriteria kelulusan secara independen
Bentuk string hanya dari bit diterima dan, setelah panjang minimal tiga, periksa apakah tiga karakter terakhir 101. Acuan ini tidak menyalin enkode keadaan FSMMesin keadaan Model yang menentukan keadaan berikutnya dan keluaran dari keadaan tersimpan serta masukan. Transisi, keluaran, dan reset ditetapkan bersama. Selengkapnya.
- 101 → hit posisi 3.
- 10101 → posisi 3 dan 5.
- 11101 → posisi 5.
- 1001 → tidak terdeteksi.
- 1,0 lalu reset, kemudian 1 → tidak terdeteksi.
- Sisipkan valid=0 di antara atau setelah 1,0 → hasil sama menurut nomor masukan diterima.
Latihan pola bit memeriksa masukan valid kontinu. Hasilnya tidak membuktikan reset, penghentian valid, atau timing fisik.
Ubah masukan
Coba sendiri
Jika setelah deteksi 101 kembali ke S0, urutan terpendek apa yang berbeda dari kontrak awal?
Baca penjelasan
10101 adalah kasus berbeda terpendek. Rangkaian benar mendeteksi masukan ke-3 dan ke-5. Kembali ke S0 kehilangan bit 1 terakhir deteksi pertama sebagai awal pola berikutnya, sehingga deteksi kelima terlewat.