CDC: đồng bộ level, giữ payload và hiểu giới hạn của Gray
Tiên quyết
Sau bài này bạn sẽ
- Phân biệt level ổn định với pulse có thể mất khi qua2FF
- Dùng request/acknowledge và payload giữ ổn định cho một transfer outstanding
- Suy luận Gray pointer/full-empty của async FIFO mà không nhầm với proof analog
- Nhận diện reset, reconvergence và physical constraints chưa được simulation chứng minh
Đổi clock không chỉ là thêm một always
Một producer và consumer khác clock không có cùng thời điểm lấy mẫu. Digital simulation hữu ích để kiểm protocol trao đổi, nhưng không tạo mô hình analog metastability hay con số MTBF có ý nghĩa vật lý. Bài dùng hai clock khác chu kỳ/pha, và chỉ claim những quan sát chức năng đã kiểm.
Hai tầng FF cho level, không bảo đảm mọi event
Tầng đầu lấy asynchronous level; tầng sau cho thời gian giải quyết trước khi dùng trong logic đích. Không dùng output tầng đầu cho nhiều nhánh logic rồi gọi tất cả đã synchronized. Thuộc tính async_reg trong source là hint cho flow, không tự chứng nhận placement hoặc timing. Số tầng và margin phải theo library/clock/reliability target. [1]
Pulse ngắn có thể hoàn toàn không được thấy
Destination có posedge 6,16,26,... Sau reset release, pulse 38..39 nằm giữa 36 và 46 nên không được lấy mẫu; checker 60 ns thấy 0. Level bắt đầu 61 được lấy qua hai tầng ở 66/76, checker 77 thấy 1. Không có metastability trong phép thử này; pulse mất chỉ vì không có cạnh sample. Vì vậy 2 FF level không tự là event counter.
Toggle handshake giữ dữ liệu tới khi consumer xác nhận
Source chỉ nhận send khi busy 0, chốt payload rồi đổi request toggle. Destination đồng bộ request hai tầng, khi thấy request khác ack thì capture payload, phát valid một chu kỳ và cập nhật ack toggle. Ack qua hai tầng về source; chỉ khi bằng request source mới được thay held data. TB cố ý thay input và gửi thêm lúc busy để kiểm payload đã giữ không bị phá. [2]
Reset và reconvergence là phần của contract
Mỗi domain có reset-release hai tầng để deassert theo clock local; thử nghiệm chỉ kiểm coordinated startup trước truyền. Reset một domain riêng lúc có outstanding có thể làm token/ack mất đồng bộ và cần protocol recovery riêng, chưa được chứng minh ở đây. Đồng bộ từng bit của bus tùy ý không bảo đảm word coherent; hai bản sao cùng control được đồng bộ riêng rồi hội tụ cũng cần phân tích, không chỉ nhìn waveform nhị phân đẹp.
Gray chỉ có một bit đổi giữa hai giá trị kề
Với binary 3 bit, Gray là b XOR (b>>1), chuỗi vòng kết thúc 100 rồi 000; mỗi bước kề đổi một bit. Điều đó không nói destination luôn cách current source đúng±1 khi có thể bỏ qua nhiều lần tăng. Gray nên được tạo/đăng ký ở source và chịu kiểm tra skew/path constraint thích hợp; biểu thức XOR tổ hợp từ binary đang đổi nhiều bit có thể có glitch vật lý.
Async FIFO chuyển pointer, không đồng bộ từng bit payload độc lập
Kiến trúc có bộ nhớ, pointer read/write do từng domain sở hữu và Gray pointer qua synchronizer sang phía còn lại. Empty so read Gray với write Gray đã đồng bộ. Với depth 4/pointer 3 bit, full tương ứng đảo hai bit cao của read Gray đã đồng bộ rồi so write Gray; TB kiểm đủ 64 cặp binary-distance 4 cho công thức. Flag có thể bảo thủ do độ trễ pointer sync. Đây là kiểm toán học comparator, không có complete async FIFO implementation hoặc static CDC sign-off trong example. [3]
Pulse, mailbox 16 transfer và 64 cặp Gray
Kỳ vọng trước chạy: pulse ngắn mất, level giữ được thấy;16 send được nhận theo thứ tự n XOR 9,16 send khi busy bị bỏ, cuối 6. Gray 8 state/64 pair và wrap 100→000 phải đúng.
Clock test được chọn để các cạnh producer/consumer không trùng, oracle ghi nhận acceptance rồi so mọi valid/payload và bắt duplicate. Generic synthesis kiểm 2 FF cho reset release,2 FF level và 15 FF mailbox, không latch. Không suy ra metastability probability, bundled-data timing, arbitrary reset hoặc mọi clock ratio đều đã safe. [4]
Tự kiểm tra
Chọn cơ chế theo thông tin cần chuyển
Level, pulse, payload coherent và dòng dữ liệu cần các contract khác nhau. Dùng 2 FF, handshake hoặc async FIFO theo yêu cầu; sau digital tests vẫn cần kiểm CDC topology, constraints, reset và physical implementation. Bài giữ draft/LRM needs-spec-check, không dùng một số MTBF từ tutorial làm bảo đảm cho chip.
Nguồn và mức độ đối chiếu
- Clock Domain Crossing — bản chụp trong resources.zip, 2FF pattern. Trích dẫn; nguồn đã đọc các mục liên quan.
- Clock Domain Crossing — bản chụp trong resources.zip, Handshake data stability. Trích dẫn; nguồn đã đọc các mục liên quan.
- Clock Domain Crossing — bản chụp trong resources.zip, Async FIFO architecture. Trích dẫn; nguồn đã đọc các mục liên quan.
- Thí nghiệm nguyên bản ex.a8.cdc, Bằng chứng. Trích dẫn; nguồn đã đọc toàn văn.
- IEEE 1800-2023 SystemVerilog LRM, cdc semantics. Chưa đối chiếu với văn bản nguồn (chưa mở).
- Thí nghiệm nguyên bản ex.a8.cdc, Code, metadata, self-checks và verification.json. Trích dẫn; nguồn đã đọc toàn văn.
- IEEE 1800-2023 SystemVerilog LRM, cdc RTL/simulation semantics. Chưa đối chiếu với văn bản nguồn (chưa mở).
- Clock Domain Crossing — bản chụp trong resources.zip, Two-Flip-Flop Synchronizer; Gray Code for Counters; Handshake Protocols; Dual-Clock FIFO Architecture; Key FIFO CDC Concepts. Trích dẫn; nguồn đã đọc các mục liên quan.
- Thí nghiệm nguyên bản ex.a8.cdc, Source, assertions, metadata và verification.json. Trích dẫn; nguồn đã đọc toàn văn.