Khó

Chuyển dữ liệu qua hai miền clock bằng bắt tay req/ack 4 pha

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

cdchandshakesynchronizermulti-clockinterview

FIFO bất đồng bộ thì mạnh nhưng tốn bộ nhớ. Khi chỉ thỉnh thoảng mới cần chuyển một giá trị cấu hình hay một sự kiện sang miền clock khác, cách chuẩn là bắt tay req/ack 4 pha. Chỉ hai tín hiệu một bit đi qua miền khác, còn dữ liệu nhiều bit được giữ yên để miền kia đọc an toàn.

module hs_cdc (
  // miền nguồn
  input  logic       sclk,
  input  logic       srst_n,     // reset bất đồng bộ miền nguồn
  input  logic       send,       // gửi sdata ở sườn lên sclk này (bị bỏ qua nếu busy = 1)
  input  logic [7:0] sdata,
  output logic       busy,       // 1 từ sau sườn nhận send cho tới khi bắt tay xong
  // miền đích
  input  logic       dclk,
  input  logic       drst_n,
  output logic       dvalid,     // xung 1 nhịp dclk: ddata hợp lệ
  output logic [7:0] ddata
);

Yêu cầu:

  1. Mỗi lần send được nhận (send = 1 khi busy = 0 ở sườn lên sclk) tạo ra đúng một xung dvalid ở miền đích, với ddata bằng sdata của lúc gửi, đúng thứ tự gửi.
  2. send khi busy = 1 bị bỏ qua hoàn toàn. Sau khi gửi, sdata có thể đổi ở bất kỳ nhịp nào.
  3. busy lên ngay sau sườn nhận send, và hạ xuống trong vòng 8 × (Tsclk + Tdclk) kể từ lúc đó.
  4. Chỉ req và ack (một bit) đi qua miền kia, mỗi tín hiệu qua bộ đồng bộ 2 flip-flop. busy, dvalid, ddata là ngõ ra flip-flop.

Sau reset (cả hai miền cùng lúc): busy = 0, dvalid = 0.

Testbench đổi tín hiệu của mỗi miền ở sườn xuống clock miền đó, và đổi sdata ngẫu nhiên ở mọi nhịp không gửi.

Các case

  1. Một lần chuyển, hai clock cùng tần số lệch phamẫu
  2. Ba lần chuyển liên tiế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.