Dễ

Kéo dài xung có kích lại (retrigger), tham số N tuỳ ý

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

counterparameterclog2off-by-onetrap

Một xung trig dài 1 nhịp thường quá ngắn để một khối chậm hơn kịp thấy, ví dụ bật đèn LED báo lỗi hay giữ một yêu cầu ngắt. Bộ kéo dài xung (pulse stretcher) giữ ngõ ra ở mức 1 thêm N nhịp. Bản có kích lại (retriggerable) đếm lại từ đầu mỗi khi có trig mới.

module pstretch #(parameter int N = 4) (   // N ≥ 1
  input  logic clk,
  input  logic rst_n,      // reset bất đồng bộ, tích cực mức thấp
  input  logic trig,
  output logic out
);

Quy tắc: out bằng 1 ở nhịp t khi và chỉ khi trig được lấy mẫu bằng 1 tại một trong N cạnh lên gần nhất trước nhịp t. Nói cách khác, một xung trig được lấy mẫu ở cạnh k làm out = 1 từ ngay sau cạnh k cho đến hết cạnh k + N − 1, và mỗi trig mới đặt lại mốc này.

clk   _/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_
trig  __/‾‾‾\_______/‾‾‾\______________
out   ______/‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\__   (N = 4)

Testbench gắn ba bản: N = 1, N = 4 và N = 20, cùng nhận một trig. Sau reset, out = 0. Testbench đổi trig ở cạnh xuống và kiểm out 1 ns sau đó.

Các case

  1. Một xung trigmẫu
  2. Hai xung cách xa nhaumẫ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.