FSM Moore phát hiện chuỗi 1011 (chồng lấn)
Module cần viết: seq1011 · 7 case (2 mẫu) · giới hạn 4 s/case · ~25 phút
Viết FSM Moore phát hiện chuỗi 1011 trên ngõ vào nối tiếp din, cho phép chồng lấn:
module seq1011 (
input logic clk,
input logic rst_n, // reset BẤT ĐỒNG BỘ, tích cực mức thấp
input logic din,
output logic hit
);
- Mỗi sườn lên
clklấy mẫu một bitdin. hit = 1trong đúng một chu kỳ ngay sau sườn clock mà 4 bit vừa lấy mẫu (cũ → mới) là1, 0, 1, 1.- Moore:
hitchỉ phụ thuộc trạng thái, nên chỉ đổi ngay sau sườn lênclk. Testbench đổidingiữa hai sườn clock và kiểm rằnghitkhông nhảy theo. - Chồng lấn:
1011011cho hai lần hit, vì1cuối của lần khớp đầu được dùng lại. rst_n = 0xoá mọi lịch sử ngay lập tức.
| bit thứ | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
din |
1 | 0 | 1 | 1 | 0 | 1 | 1 |
hit sau sườn clock |
0 | 0 | 0 | 1 | 0 | 0 | 1 |
Các case
- Chuỗi 101100: đúng một lần hitmẫu
- Chồng lấn 1011011: hai lần hitmẫu
Cùng 5 case ẩn kiểm các yêu cầu còn lại của đề. Case ẩn chỉ báo đúng/sai, không nói chi tiết: tự tìm chỗ sai từ đề, hoặc mở gợi ý.
Testbench có mô hình tham chiếu riêng, độc lập với lời giải mẫu. Lời giải mẫu đã chạy qua mọi case trên simulator thật, và 3 bản lỗi mẫu đều bị ít nhất một case bắt. Case mẫu sai sẽ cho biết chỗ sai đầu tiên (giá trị mong đợi so với giá trị nhận được); case ẩn chỉ báo đúng/sai.