Lint: hiểu warning trước khi quyết định sửa hay giữ
Tiên quyết
- Module A7: Hành vi & ngữ nghĩa mô phỏng: Đang tải
- Module A5: FSM: Đang tải
- Synthesizable subset: simulator hiểu chưa đủ để có phần cứng: Đang tải
Sau bài này bạn sẽ
- Đọc diagnostic theo tool/version, vị trí và yêu cầu dữ liệu
- Làm lộ carry bị mất bằng input biên có expected độc lập
- Phân biệt ví dụ cố ý warning với chấp nhận warning trong RTL sản phẩm
Cú pháp hợp lệ vẫn có thể mất dữ liệu
Hai byte 4 bit cộng nhau cần 5 bit để giữ 30. Gán tổng mở rộng 5 bit vào output 4 bit hợp lệ trong ngôn ngữ nhưng làm mất carry. Lint có thể phát hiện mismatch trước khi một stimulus phù hợp làm bug lộ trong simulation. Nó không tự biết thiết kế muốn sum đầy đủ hay modulo 16.
Diagnostic cần tên tool và nguyên văn mã
Flow ghim Verilator 5.050, lint-only với Wall; ví dụ nhận WIDTHTRUNC cho assignment 5 xuống 4. Tài liệu cũ có thể ghi WIDTH hoặc tên nhóm khác; không sửa mã kỳ vọng bằng trí nhớ. Warning cũng có thể làm command trả nonzero tùy option. Bài giữ diagnostic dự kiến theo tập mã, không tắt cảnh báo khác. [1]
Truncation có chủ ý phải được diễn đạt rõ
Nếu contract thật là modulo 16, lấy rõ bốn bit thấp có thể là thiết kế đúng. Nếu cần carry, output và phép tính phải giữ 5 bit. Không thêm cast chỉ để hết warning khi cast vẫn bỏ dữ liệu cần thiết. Trong bài, truncated_sum là mẫu cố ý sai contract giữ carry; full_sum là bản đáp ứng yêu cầu.
120 ca trong 256 cặp làm lộ carry
Với a0 có 0 giá trị b làm sum>=16; a1 có 1; lần lượt tới a15 có 15. Tổng 0+1+...+15=120. TB kiểm đủ 256 cặp bằng oracle integer, xác nhận bản tốt đủ 5 bit và bản lỗi chỉ còn low 4. Nếu chỉ thử 0+0, warning đã có nhưng simulation dễ cho cảm giác cả hai đều đúng.
Zero warning không phải chức năng đúng
Sửa theo nguyên nhân và chạy lại check liên quan. Các lỗi đảo priority, sai hằng số hoặc latency có thể không sinh warning. Ngược lại, warning của fixture cố ý lỗi cần được giữ để dạy và kiểm khả năng phát hiện, không phải giấy phép waive cùng cảnh báo trong sản phẩm. Hướng dẫn tổng quát về width trong training phải đặt trong quy tắc expression context/sign của LRM. [2]
Hai module, một oracle và carry count 120
Expected trước chạy gồm 256 cặp;120 sum có carry; tại ff, good 1 e và bade.
Simulation đạt nghĩa là TB xác nhận cả lỗi đã chủ ý đưa vào và bản đúng. Không gọi truncated_sum là verified cho contract full sum. Generic synthesis không có FF/latch và không phải bằng chứng lint bắt mọi lỗi. [3]
Tự kiểm tra
Gắn mỗi warning với một quyết định có lý do
Ghi mã, tool version, đường dữ liệu bị ảnh hưởng và contract. Sửa nguồn gây lỗi, rồi kiểm stimulus biên và report; đừng biến số warning thành điểm số duy nhất của chất lượng thiết kế.
Nguồn và mức độ đối chiếu
- Linting your design — bản chụp trong resources.zip, Lint command và width. Trích dẫn; nguồn đã đọc các mục liên quan.
- IEEE 1800-2023 SystemVerilog LRM, Cần đối chiếu. 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.lint, Bằng chứng. Trích dẫn; nguồn đã đọc toàn văn.
- IEEE 1800-2023 SystemVerilog LRM, lint 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.lint, 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, lint semantics. Chưa đối chiếu với văn bản nguồn (chưa mở).
- Linting your design — bản chụp trong resources.zip, The Linting Command; Understanding Width Matching; Assignment Truncation. Trích dẫn; nguồn đã đọc các mục liên quan.
- Thí nghiệm nguyên bản ex.a8.lint, Source, metadata và verification.json. Trích dẫn; nguồn đã đọc toàn văn.