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
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
- Một xung trigmẫu
- 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.