Dễ

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

fsmmealysequence-detectoroverlaptrap

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 clk lấy mẫu một bit din.
  • hit = 1 khi 3 bit đã lấy mẫu gần nhất (cũ → mới) là 1, 1, 0 và din hiện tại bằng 1. Nói cách khác: nếu cạnh lên kế tiếp lấy mẫu din, thì 4 bit cuối sẽ là 1101.
  • Cho phép chồng lấn: chuỗi 1101101 khớp hai lần.
  • rst_n = 0 xoá 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

  1. Một lần khớpmẫu
  2. 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.

Đang kết nối máy chấm…
Đang nạp bản nháp…

Tab để thụt lề. Nhấn Esc rồi Tab để rời trình soạn. Bản nháp tự lưu trong trình duyệt.

Gợi ý

Mỗi gợi ý mở trước khi AC giảm 10% điểm của đề.

Lời giải và phân tích

Lịch sử nộp bài

Chưa có lượt nào.

Độ khó: Dễ. Điểm gốc 20.