FSM Mealy phát hiện 1101: ngõ ra cùng nhịp và trạng thái khi gặp 111
Module cần viết: seq1101 · 6 case (2 mẫu) · giới hạn 4 s/case · ~20 phút
Bài seq1011 là FSM Moore: ngõ ra chỉ phụ thuộc trạng thái nên lên sau cạnh clock lấy mẫu bit cuối. Bài này là bản Mealy: ngõ ra phụ thuộc cả trạng thái và đầu vào hiện tại, nên báo khớp sớm hơn một nhịp, ngay khi bit cuối đang có mặt ở din.
module seq1101 (
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 cạnh lên
clklấy mẫu một bitdin. hit = 1khi 3 bit đã lấy mẫu gần nhất (cũ → mới) là1, 1, 0vàdinhiện tại bằng 1. Nói cách khác: nếu cạnh lên kế tiếp lấy mẫudin, thì 4 bit cuối sẽ là1101.- Cho phép chồng lấn: chuỗi
1101101khớp hai lần. rst_n = 0xoá lịch sử ngay lập tức.
| din (theo thời gian) | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
|---|---|---|---|---|---|---|---|
| hit (trong cùng nhịp) | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
Testbench đổi din ở cạnh xuống và kiểm hit 1 ns sau đó, trong cùng nhịp.
Các case
- Một lần khớpmẫu
- Hai lần khớp chồng lấnmẫu
Cùng 4 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à 4 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.