Coding guidelines: biến quy ước thành hợp đồng kiểm được
Tiên quyết
- Module A7: Hành vi & ngữ nghĩa mô phỏng: Đang tải
- Module A5: FSM: Đang tải
- Coding style: chức năng giống nhau, PPA phải đo riêng: Đang tải
- Latch inference: đường không gán cũng mô tả phần cứng: Đang tải
Sau bài này bạn sẽ
- Tách quy ước dễ đọc khỏi yêu cầu chức năng và luật ngôn ngữ
- Dùng một procedural owner cho state và ưu tiên reset/clear/load rõ
- Kiểm priority trên mọi state, control và dữ liệu của ví dụ
Style guide cần trả lời lỗi nào nó ngăn được
Một checklist như “reset trước, dùng NBA, đặt tên rõ” chỉ hữu ích khi gắn với contract. Bài chọn register 4 bit, reset đồng bộ active-low ưu tiên hơn clear, clear hơn enable load, còn lại giữ state. Các nhánh chồng lấn được đưa vào test thay vì chỉ đọc code rồi tin đúng.
Một owner cho state không phải một block cho mỗi bit
Mỗi state cần quyền ghi rõ; trong ví dụ q chỉ được gán bởi một clocked process. Một process có thể sở hữu nhiều register liên quan, và nhiều bit trong một vector không cần tách thành hàng loạt block. Tránh nhiều writer độc lập hoặc reset từ nơi khác mà không có hợp đồng. Đây là guideline về cấu trúc và khả năng review, không tuyên bố mọi dạng cú pháp khác đều bất hợp lệ.
Ưu tiên phải đúng cả khi control cùng bật
TB kiểm reset 0 cùng clear 1/en 1 vẫn ra 0; khi reset nhả nhưng clear 1, clear vẫn thắng data. Chỉ khi reset 1/clear 0/en 1 mới load d, còn reset 1/clear 0/en 0 giữ state. Nếu chỉ kiểm mỗi control riêng, một cây ưu tiên viết sai vẫn có thể pass. Expected dùng bảng control index độc lập với cách đặt if trong RTL.
Width, reset và implicit net là lựa chọn có ý nghĩa
Register và dữ liệu đều 4 bit; các port được nối rõ và default_nettype none hạn chế implicit wire do typo. Reset là synchronous trong bài, nên output được kiểm sau cạnh. Không tự đổi sang asynchronous chỉ vì một style guide khác dùng nó. Default_nettype không bắt được tên sai nhưng vẫn trỏ tới biến hợp lệ; chức năng vẫn phải được kiểm.
Preload state qua interface thay vì force vào DUT
Mỗi ca nạp state khởi đầu bằng một clock load hợp lệ, xác nhận nó rồi mới áp control/dữ liệu cần thử. Không force q hoặc sửa hierarchy để “đạt coverage”. Có 16 state,8 control pattern và 16 giá trị d, thành 2048 ca; mỗi ca có setup và observation thật. Quy trình này kiểm cả khả năng đi tới state lẫn priority từ state ấy.
2048 ca, đủ reset/clear/load/hold
Kỳ vọng trước chạy là 1024 reset,512 clear,256 load và 256 hold. Q có 4 bit storage, không latch.
Checker sample sau NBA, có watchdog và case inequality; parse/lint/sim/synthesis đều đạt đúng phạm vi. Đây không phải formal proof mọi thiết kế dùng guideline. [1]
Tự kiểm tra
Review contract trước khi review dấu cách
Chốt ownership, width/sign, reset priority, enable và điểm sample. Guideline giúp diễn đạt nhất quán; expected và report kiểm điều nó có thực sự làm. Nguồn coding style chỉ là tham khảo, không biến cách viết ngắn hơn thành PPA tốt hơn. [2]
Nguồn và mức độ đối chiếu
- Thí nghiệm nguyên bản ex.a8.guidelines, Bằng chứng. Trích dẫn; nguồn đã đọc toàn văn.
- Verilog Coding Style Effect — bản chụp trong resources.zip, Style và report. Trích dẫn; nguồn đã đọc các mục liên quan.
- IEEE 1800-2023 SystemVerilog LRM, guidelines 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.guidelines, 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, guidelines semantics. Chưa đối chiếu với văn bản nguồn (chưa mở).
- Verilog Coding Style Effect — bản chụp trong resources.zip, RTL Schematic vs Optimized Netlist; Resource Sharing. Trích dẫn; nguồn đã đọc các mục liên quan.
- Thí nghiệm nguyên bản ex.a8.guidelines, Source, metadata và verification.json. Trích dẫn; nguồn đã đọc toàn văn.