34 / 37 · Khái niệm
Ranh giới clock domain và metastability
Hiểu phạm vi bộ đồng bộ hai tầng, phân biệt truyền một bit, xung ngắn và nhiều bit.
Bài học miễn phí. Đăng ký để lưu tiến độ học tập.
Đầu vào từ clock khác không bảo đảm khoảng cách cạnh
Setupsetup Thời gian tối thiểu dữ liệu đầu vào phải ổn định trước cạnh clock lấy mẫu. Vi phạm thì không thể bảo đảm kết quả lưu. Tìm hiểu thêm, holdThời gian hold Thời gian tối thiểu đầu vào phải tiếp tục ổn định sau cạnh clock bắt dữ liệu. Cần phân biệt yêu cầu thời gian này với hành vi giữ giá trị thông thường. Tìm hiểu thêm yêu cầu dữ liệu ổn định đủ quanh cạnh clock nhận. Nút nhấn hoặc đầu ra clock domain độc lập có quan hệ tùy ý với cạnh nhận, nên khó luôn bảo đảm điều kiện này.
Vì vậy trạng thái nội flip-flopFlip-flop Phần tử lưu đầu vào tại cạnh clock chỉ định rồi giữ đến cạnh sau. Đầu vào phải thỏa setup và hold. Tìm hiểu thêm có thể không nhanh chóng quyết định 0 hay 1 trong một khoảng, gọi là metastability. Mô phỏng RTL 0/1 thông thường không biểu diễn trực tiếp hiện tượng tương tự này. Dạng sóng sạch không chứng minh CDC an toàn.
Bộ đồng bộ hai tầng dành cho một bit giữ đủ lâu
module level_synchronizer (
input logic clk_dst,
input logic rst_dst,
input logic async_level,
output logic synced_level
);
logic first_stage;
always_ff @(posedge clk_dst) begin
if (rst_dst) begin
first_stage <= 1'b0;
synced_level <= 1'b0;
end else begin
first_stage <= async_level;
synced_level <= first_stage;
end
end
endmoduleCấu trúc cho tầng đầu thời gian ổn định trước khi tầng sau đọc, ngay cả nếu tầng đầu bất ổn. Mạch chức năng dùng đầu ra tầng cuối, không phân nhánh trực tiếp từ tầng đầu. Reset phía trên được giả định đồng bộ với clock đích.
Triển khai thực cần thuộc tính synchronizerBộ đồng bộ Mạch đưa tín hiệu từ miền thời gian khác vào xử lý theo clock nhận. Không áp trực tiếp chuỗi flip-flop dành cho một bit vào dữ liệu nhiều bit., dây giữa tầng ngắn, STA/CDC và xử lý phù hợp công cụ, linh kiện. Chỉ dùng hai thanh ghiThanh ghi Mạch lưu trạng thái nhiều bit. Thanh ghi đồng bộ trong khóa học lưu đầu vào đã quy định tại cạnh clock. Tìm hiểu thêm không bảo đảm cả bố trí và điều kiện đường.
Đầu vào bất đồng bộ vào tầng đầu, mạch chức năng chỉ dùng tầng cuối. Thời gian giữa tầng cho cơ hội ổn định nhưng không bảo đảm metastabilityMetastability Trạng thái tương tự trong đó phần tử lưu tạm thời chưa ổn định về 0 hay 1. Bộ đồng bộ giảm xác suất lan truyền, không làm xác suất xảy ra bằng 0. tương tự chắc chắn biến mất.
- Mức bất đồng bộ: Không có quan hệ pha với clock đích
- meta FF: Có thể bất ổn
- synced FF: Bắt tại cạnh clock đích kế tiếp
- Mạch chức năng: Chỉ dùng tầng cuối
Giảm xác suất lỗi, không đưa về 0
Trong một mô hình đơn giản, thời gian trung bình giữa lỗi MTBF có xu hướng sau.
là thời gian có thể ổn định, là đặc tính linh kiện, là tần số nhận, là tần suất chuyển đầu vào bất đồng bộ. Tính thực cần hằng số riêng của linh kiện; không thể chỉ dùng công thức này gắn số “an toàn bao nhiêu năm” cho mạch bất kỳ.
Không dùng cùng một mạch cho các vấn đề khác nhau
| Thông tin truyền | Chỉ đồng bộ hai tầng một bit có đủ? | Cấu trúc cần xét |
|---|---|---|
| Mức giữ đủ lâu | Dùng được nếu thỏa xác suất và trễ | Đồng bộ phía đích |
| Xung ngắn hơn chu kỳ đích | Có thể bỏ lỡ toàn xung | Kéo dài xung, toggle, handshake |
| Nhiều bit phải có nghĩa đồng thời | Các bit có thể thuộc thời điểm khác nhau | Bus ổn định với handshake, FIFO bất đồng bộ |
| Nút cơ khí | Dội tiếp điểm là vấn đề riêng | Đồng bộ rồi debounce |
Ví dụ giá trị bốn bit đổi 0111→1000, đồng bộ từng bit độc lập có thể tạo tổ hợp thoáng qua chưa từng tồn tại. Giữ nhất quán bus cần thiết kế quan hệ giữa toàn dữ liệu và hoàn tất truyền.
Đọc thêm: MIT OpenCourseWare — Synchronization, Metastability and Arbitration
Tự thử
Clock nhận 50MHz, xung đầu vào rộng 5ns. Có thể khẳng định mọi xung được phát hiện vì có đồng bộ hai tầng không? Dội nút cũng bị loại không?
Đọc giải thích
50MHz có chu kỳ 20ns. Xung 5ns có thể xuất hiện rồi mất giữa hai cạnh nhận, nên ngay tầng đầu cũng bỏ lỡ. Chỉ tăng số tầng không giải quyết bảo toàn xung; cần kéo dài xung hoặc handshake. Dội nút cần debounce riêng.