Simulation và synthesis: sensitivity thiếu có thể biến mất khỏi netlist
Tiên quyết
Sau bài này bạn sẽ
- Làm lộ explicit sensitivity thiếu khi input khác thay đổi
- Phân biệt RTL event model với hàm logic mà synthesis xây dựng
- Đọc kết quả netlist functional simulation mà không suy ra timing silicon
Hai tool có thể đang trả lời hai mô hình khác nhau
RTL chỉ chạy always@(a) khi a đổi, dù thân tính a&b. Synthesis có thể xây AND phụ thuộc cả a và b. Khi chỉ b đổi, RTL stale nhưng netlist logic cập nhật. Đây là mismatch cấu trúc mô hình, không phải một glitch vật lý hoặc kết luận simulator nói dối.
Event list thiếu là bug của mô tả tổ hợp
TB drive 00, rồi 01, rồi 11; cả hai bản có kết quả đúng. Tiếp theo chỉ b đổi về 0 trong khi a vẫn 1. Module omitted không được đánh thức nên giữ 1; complete dùng continuous assignment cho 0. Chỉ so kết quả tại những thời điểm a cũng đổi sẽ bỏ sót lỗi.
Yosys giả định logic tổ hợp của thân process
Flow tổng hợp cả omitted và complete thành một AND mỗi top, không FF/latch. Thứ giữ giá trị cũ trong simulation do không evaluation không đồng nghĩa một latch được yêu cầu theo cách synthesis diễn giải ví dụ này. Cần đọc diagnostic và kết quả tool thực, không dùng một quy tắc suy luận chung cho mọi process.
Đối chiếu thêm netlist đã sinh
Probe riêng thực sự xuất generic netlist từ Yosys rồi biên dịch bằng Icarus. Sau a1/b1, chỉ đổi b0, netlist cho y 0. Đây là kiểm chức năng netlist của đúng stimulus, không phải chứng minh equivalence hoặc STA. Pipeline example giữ claim mô phỏng RTL và cell checks riêng; probe không tự trở thành chứng nhận mọi timing target. [1]
Model gap không cho phép diễn giải sai NBA
Zero-delay chức năng không mô hình clock-to-q/setup/hold của cell. Nhưng không được vì thế nói hai NBA một writer ở cùng cạnh chỉ “thường” thấy state cũ tùy thứ tự; lịch NBA đã được kiểm ở A7 trong contract ấy. Nguồn đào tạo dùng để phân biệt abstraction, các ví dụ race/độ trễ tổng quát phải được đối chiếu lại. Zero-delay cũng không đồng nghĩa unit-delay. [2]
Năm observation và điểm khác biệt chỉ-b
Expected trước chạy gồm 00→0,01→0,11→1; b0 làm bad 1/good 0; đổi a0 phục hồi 0.
Bài chọn Icarus cho event model đã thử; không đổi simulator chỉ để tránh symptom. Sửa đúng là mô tả combinational đầy đủ bằng cấu trúc phù hợp, rồi kiểm lại cả RTL và flow synthesis. [3]
Tự kiểm tra
Kiểm input đổi độc lập trước khi tin netlist giống RTL
Tách ba câu hỏi: RTL process được đánh thức khi nào, synthesis xây hàm gì, physical timing yêu cầu gì. Một check thành công không trả lời thay hai câu còn lại. Bài giữ draft/LRM needs-spec-check.
Nguồn và mức độ đối chiếu
- Thí nghiệm nguyên bản ex.a8.sim-vs-synth, Bằng chứng và giới hạn. Trích dẫn; nguồn đã đọc toàn văn.
- chipverify_com_rtl_synthesis_simulation_vs_reality — bản chụp trong resources.zip, Abstraction của RTL. Trích dẫn; nguồn đã đọc các mục liên quan.
- Thí nghiệm nguyên bản ex.a8.sim-vs-synth, Code nguyên bản. Trích dẫn; nguồn đã đọc toàn văn.
- IEEE 1800-2023 SystemVerilog LRM, sim-vs-synth language 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.sim-vs-synth, Source/assertions/verification.json và probe ghi rõ trong bài. Trích dẫn; nguồn đã đọc toàn văn.
- IEEE 1800-2023 SystemVerilog LRM, sim-vs-synth semantics. Chưa đối chiếu với văn bản nguồn (chưa mở).
- chipverify_com_rtl_synthesis_simulation_vs_reality — bản chụp trong resources.zip, Why Zero-Delay Models Exist. Trích dẫn; nguồn đã đọc các mục liên quan.
- Thí nghiệm nguyên bản ex.a8.sim-vs-synth, Source, metadata và verification.json. Trích dẫn; nguồn đã đọc toàn văn.