Unique và priority: kiểm điều kiện chọn nhánh, không sửa input giúp bạn
Tiên quyết
- Module B1: Data types: Đang tải
- Case decode: full coverage không phải lời hứa one-hot: Đang tải
Sau bài này bạn sẽ
- Tách kiểm overlap khỏi kiểm no-match và khỏi assignment coverage
- Dự đoán tác động của else/default tới no-match check
- Đọc violation theo simulator/option và không biến assumption thành bảo đảm
Có default không có nghĩa đã kiểm one-hot
Req 11 không phải named case item của decoder exact. Default trả 0, và unique không tự báo rằng producer đã gửi hai request cùng lúc. Nếu one-hot là yêu cầu, cần kiểm riêng yêu cầu ấy thay vì trông cậy vào tên keyword.
Ba qualifier hỏi các câu khác nhau
Unique kiểm overlap và no-match khi không có else/default; unique0 kiểm overlap nhưng cho phép no-match; priority cho phép overlap và chọn nhánh đầu, kiểm no-match khi không có else/default. Đây là contract chọn nhánh, khác câu hỏi mọi output có được gán trên mọi đường hay không. [1]
Default đáp ứng no-match nhưng không xoá overlap
Main example unique case liệt kê 01/10, có default 0. Req 00/11 đều đi default, không vi phạm no-match. Một probe đổi điều kiện thành overlap vẫn bị runtime check khi chạy với Verilator --assert dù có else. Severity/điểm báo phụ thuộc flow; không gọi mọi simulator đều phải dừng như probe này. [2]
Priority cho thứ tự có chủ ý
Ordered ưu tiên req[1] rồi req[0], có else 0. Vì thế req 11 cho 2. Decoder exact cho 0 ở cùng input. Hai hàm khác nhau theo contract; qualifier không khiến chúng thành tương đương hoặc tự sửa điều kiện đã viết sai thứ tự.
Unique0 cho phép no-match không tự gán 0
Zero_ok được gán default 0 trước unique0 if. Hai điều kiện req 1/req 2 loại trừ nhau; req 0/req 3 không vào nhánh nào nhưng output vẫn xác định nhờ assignment ban đầu. Bỏ default assignment có thể để lại đường giữ/latch; cho phép no-match không phải bảo đảm combinational completeness.
Assumption cho tối ưu phải có bằng chứng từ producer
Tool tổng hợp có thể khai thác qualifier theo flow. Nếu input vi phạm assumption, netlist có thể khác điều bạn suy từ nhánh RTL. Bài chỉ tổng hợp source main với các default rõ, kiểm không FF/latch; không đo PPA hoặc công nhận input ngoài contract luôn an toàn.
Bật check và giữ diagnostic của input sai
Pipeline Verilator dùng --assert. Probe overlap đã compile rồi runtime bị từ chối; không lọc warning hoặc thêm qualifier khác để che nó. Trong regression thật, phân loại reset/unknown và vi phạm sau reset theo contract, không vô hiệu toàn bộ check vì tutorial gọi một warning là harmless.
Bốn selector nhị phân, hai hàm khác nhau tại 11
Tính trước: unique-default 0/1/2/0; priority 0/1/2/2; unique0 với pre-default 0/1/2/0.
Main chỉ binary 2 bit; parse/lint/Verilator/generic synthesis đạt, không claim 4-state hoặc mọi scheduling rule của violation. [3]
Tự kiểm tra
Kiểm domain, selection và assignment riêng
Nêu input nào hợp lệ, nhánh nào thắng, no-match có được phép và output lúc ấy là gì. Keyword giúp phát hiện vi phạm đã khai, không thay constraint/monitor của producer. Bài vẫn draft/LRM needs-spec-check.
Nguồn và mức độ đối chiếu
- SystemVerilog 'unique' and 'priority' if-else — bản chụp resources.zip, Qualifier checks. Trích dẫn; nguồn đã đọc các mục liên quan.
- chipverify_com_systemverilog_systemverilog_unique_priority_case — bản chụp resources.zip, Case và default. Trích dẫn; nguồn đã đọc các mục liên quan.
- Thí nghiệm nguyên bản ex.b3.unique-priority, Bằng chứng. Trích dẫn; nguồn đã đọc toàn văn.
- IEEE 1800-2023 SystemVerilog LRM, unique-priority procedural 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.b3.unique-priority, Source, self-checks, metadata, verification.json và mutation probes. Trích dẫn; nguồn đã đọc toàn văn.
- SystemVerilog 'unique' and 'priority' if-else — bản chụp resources.zip, Syntax; unique-if and unique0-if; priority-if. Trích dẫn; nguồn đã đọc các mục liên quan.
- chipverify_com_systemverilog_systemverilog_unique_priority_case — bản chụp resources.zip, Syntax; unique and unique0 case; priority case. Trích dẫn; nguồn đã đọc các mục liên quan.