Khó

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

valid-readyhandshakepipelinebackpressureinterview

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:

  1. Đú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.
  2. Đủ băng thông: khi in_valid và out_ready luô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.
  3. Giữ ổn định khi bị chặn: nếu ở một sườn lên out_valid = 1 và out_ready = 0 thì sau sườn đó out_valid vẫn bằng 1 và out_data không đổi.
  4. Ngõ ra từ flip-flop: in_ready, out_valid, out_data khô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.
  5. 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

  1. Một dữ liệu, phía sau luôn sẵn sàngmẫu
  2. 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.

Đ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ó: Khó. Điểm gốc 80.