Skid buffer valid/ready: đủ băng thông, mọi ngõ ra từ flip-flop
Module cần viết: skid_buf · 7 case (2 mẫu) · giới hạn 4 s/case · ~45 phút
Trong pipeline có handshake valid/ready, tín hiệu ready đi ngược chiều dữ liệu. Nối nhiều tầng mà ready đi qua cổng tổ hợp thì nó thành một đường dài xuyên suốt pipeline và giết timing. Skid buffer cắt đường đó: mọi ngõ ra đều lấy thẳng từ flip-flop, mà băng thông vẫn đủ một dữ liệu mỗi nhịp. AXI register slice chính là khối này.
module skid_buf (
input logic clk,
input logic rst_n, // reset bất đồng bộ, tích cực thấp
// phía vào
input logic in_valid,
output logic in_ready,
input logic [7:0] in_data,
// phía ra
output logic out_valid,
input logic out_ready,
output logic [7:0] out_data
);
Quy tắc handshake: một dữ liệu được chuyển ở sườn lên khi cả valid và ready của phía đó cùng bằng 1.
Yêu cầu:
- Đúng dữ liệu: mọi dữ liệu nhận ở phía vào đều ra ở phía ra, đúng thứ tự, không mất, không lặp.
- Đủ băng thông: khi
in_validvàout_readyluôn bằng 1, mỗi nhịp chuyển được một dữ liệu. Dòng N dữ liệu phải ra hết trong N + 3 nhịp. - Giữ ổn định khi bị chặn: nếu ở một sườn lên
out_valid = 1vàout_ready = 0thì sau sườn đóout_validvẫn bằng 1 vàout_datakhông đổi. - Ngõ ra từ flip-flop:
in_ready,out_valid,out_datakhông được phụ thuộc tổ hợp vào bất kỳ đầu vào nào. Đổi đầu vào giữa hai sườn clock không được làm chúng đổi theo. - Sau reset:
out_valid = 0,in_ready = 1.
Phía nguồn của testbench tuân theo luật valid: đã bật in_valid thì giữ nguyên in_valid và in_data cho tới khi được nhận. Testbench đổi đầu vào ở sườn xuống của clock.
Các case
- Một dữ liệu, phía sau luôn sẵn sàngmẫu
- Dòng 20 dữ liệu liên tục: một dữ liệu mỗi nhịpmẫu
Cùng 5 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.