Vừa

FSM one-hot an toàn: tự hồi phục từ trạng thái cấm

Module cần viết: fsm_safe · 6 case (2 mẫu) · giới hạn 4 s/case · ~25 phút

fsmone-hotsafe-fsmreliabilitytrap

Trên silicon, một hạt neutron hay một glitch nguồn có thể lật một bit của thanh ghi trạng thái. FSM one-hot vào một trạng thái cấm (hai bit 1, hoặc không bit nào), và nếu code không lường trước thì nó kẹt lại đó mãi. Ô tô, hàng không và vũ trụ đòi hỏi FSM an toàn: mọi trạng thái cấm tự quay về trạng thái đã biết. Bài này có một cổng "nạp trạng thái" (như chuỗi scan khi test) để testbench đưa FSM vào trạng thái bất kỳ.

module fsm_safe (
  input  logic       clk,
  input  logic       rst_n,      // reset bất đồng bộ: st = IDLE
  input  logic       start, stall, finish,
  input  logic       load,       // nạp st = load_val ở sườn lên (ưu tiên cao nhất, giá trị bất kỳ)
  input  logic [3:0] load_val,
  output logic [3:0] st          // thanh ghi trạng thái one-hot
);
Trạng thái Mã Chuyển (ở sườn lên, khi load = 0)
IDLE 0001 start → RUN
RUN 0010 stall → WAIT; ngược lại finish → DONE
WAIT 0100 !stall → RUN
DONE 1000 → IDLE
mọi giá trị khác → IDLE ở sườn kế tiếp

Không có điều kiện nào thì giữ nguyên trạng thái hợp lệ. Testbench đặt tín hiệu và đọc st ở sườn xuống.

Các case

  1. Một vòng IDLE → RUN → DONE → IDLEmẫu
  2. RUN ⇄ WAIT theo stallmẫ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ó: Vừa. Điểm gốc 40.