Hazard và glitch: bảng chân trị đúng vẫn có thể phát xung
Tiên quyết
Sau bài này bạn sẽ
- Phân biệt static-1, static-0 và dynamic hazard
- Lần theo hai đường trễ và đọc xung trên waveform thật
- Giải thích giới hạn của consensus và mô hình timing đã chạy
Đầu ra đúng trước và sau chưa nói hết đoạn giữa
Hàm Y=S·B+S'·C là một mux. Khi B và C đều 1, giá trị ổn định của Y phải là 1 dù S bằng 0 hay 1.
Nhưng hai đường từ S qua cổng trực tiếp và cổng đảo có thể tới đầu ra khác thời điểm. Trong lúc chuyển, cả hai nhánh có thể tạm bằng 0. Một xung thấp ngắn xuất hiện, dù hai đầu trạng thái đều đúng bảng chân trị.
Ba loại diễn biến cần phân biệt
| Loại | Diễn biến lý tưởng | Diễn biến có glitch |
|---|---|---|
| Static-1 | Giữ 1 | 1 → 0 → 1 |
| Static-0 | Giữ 0 | 0 → 1 → 0 |
| Dynamic | Chuyển một lần | Chuyển nhiều lần trước khi ổn định |
Hazard nói về khả năng xuất hiện diễn biến ngoài ý muốn do cấu trúc và trễ; glitch là xung/chuyển mức quan sát được trong một điều kiện cụ thể. Bảng chân trị không có thông tin độ rộng xung.
Không phải mọi glitch đều từ cùng một nguyên nhân. Đổi nhiều đầu vào, đường logic hội tụ, reset hoặc tín hiệu không đồng bộ cần được xét theo điều kiện riêng.
Một mô hình trễ có thể tính tay
Dùng mô hình minh họa: inverter của S trễ 3 ns, mỗi AND trễ 1 ns, OR trễ 1 ns. B và C giữ 1. S từ 1 xuống 0 tại 70 ns.
| Thời điểm | Sự kiện mới | Nhánh trực tiếp S·B | Nhánh đảo S'·C | Y |
|---|---|---|---|---|
| Trước 70 ns | Đã ổn định | 1 | 0 | 1 |
| 70 ns | S xuống 0 | 1 | 0 | 1 |
| 71 ns | AND trực tiếp xuống 0 | 0 | 0 | 1 |
| 72 ns | OR phản ứng | 0 | 0 | 0 |
| 73 ns | Inverter đưa S' lên 1 | 0 | 0 | 0 |
| 74 ns | AND nhánh đảo lên 1 | 0 | 1 | 0 |
| 75 ns | OR hồi phục | 0 | 1 | 1 |
Xung thấp kéo dài 3 ns. Đây là các delay chọn cho bài học, không phải số đo của một công nghệ chip. Đổi delay hoặc độ rộng xung đầu vào có thể làm kết quả khác; phép gán trễ còn có chính sách xử lý xung của mô hình mô phỏng.
Đối chiếu diễn biến với waveform
Mỗi cột là một mẫu cách nhau 1 ns; cột đầu tương ứng 67,5 ns. Clock clk chỉ dùng đặt lưới quan sát của testbench, không phải đầu vào một thanh ghi trong mạch đang học.
Lane fast là nhánh trực tiếp, inv_s là đầu ra inverter, slow là nhánh đảo. Y xuống ở cột 5 và lên lại ở cột 8, đúng các mẫu giữa 72–75 ns. Y_fixed vẫn 1 nhờ nhánh bổ sung sẽ được giải thích ngay sau.
Lưới mẫu giúp nhìn xung này; phép kiểm thời điểm của testbench mới xác nhận hai cạnh ở đúng 72 và 75 ns. Không suy mọi xung giữa các mẫu đều sẽ được hình hiển thị bắt.
Một hạng dư logic có thể nối khoảng trống thời gian
Thêm B·C vào đầu OR: Y_fixed=S·B+S'·C+B·C. Theo luật consensus, hàm ổn định không thay đổi. Khi B và C cùng 1, hạng bổ sung giữ đầu ra 1 trong lúc hai nhánh đổi vai.
Trên K-map của SOP hai mức, hai ô 1 kề nhau có thể được phủ bởi hai tích riêng. Một tích phủ chung cả hai ô giữ đường 1 qua bước chuyển của một biến. Đó là trực giác của việc thêm consensus.
Phân tích này cần điều kiện về cấu trúc và bước đổi đầu vào. Không đem một hạng sửa cho bước S đổi, B/C giữ 1 để khẳng định mọi đổi nhiều biến hoặc mọi mạng nhiều mức đều không glitch.
Tối giản bảng chân trị và tránh hazard là hai mục tiêu có thể dẫn đến số hạng khác nhau. Muốn giữ cấu trúc theo thời gian còn cần quy trình công cụ và xác minh tương ứng.
Đặt rủi ro ở đúng nơi sử dụng tín hiệu
Synthesis có thể bỏ hạng dư hoặc map sang cấu trúc khác; việc thêm consensus trong RTL chưa bảo đảm nó tồn tại như sơ đồ cổng sau mapping.
Trong datapath đồng bộ, chuyển mức phụ có thể không làm sai giá trị được chốt nếu tín hiệu đáp ứng đầy đủ cửa sổ lấy mẫu, gồm setup/hold. Đó là điều phải được kiểm timing, không suy từ một waveform chức năng.
Ở chân clock, reset bất đồng bộ, latch enable hoặc đầu vào bất đồng bộ của khối khác, một xung ngắn có thể kích hoạt hành vi ngoài ý muốn. Không dùng phép AND tùy ý để tạo clock rồi coi đã có clock gating an toàn; cần cấu trúc/cell và điều kiện dùng phù hợp.
Đăng ký đầu ra có thể giúp kiểm soát nơi tín hiệu thay đổi nhưng thêm latency, đồng thời không tự chứng minh reset, CDC hoặc mọi ràng buộc timing đã an toàn. Các chuyển mức phụ cũng có thể tăng năng lượng động; bài này không đo công suất.
Các kết luận cần tránh
- Chỉ kiểm giá trị sau khi ổn định rồi nói không có glitch.
- Dùng mô phỏng RTL không có trễ cổng để thay bằng chứng timing vật lý.
- Gọi một xung trong chu kỳ delta là số đo độ rộng xung thực của silicon.
- Cho rằng thêm một hạng consensus bảo đảm mọi trường hợp không hazard.
- Gọi mọi glitch giữa hai flip-flop là vô hại mà chưa kiểm cửa sổ setup/hold.
Khi báo lỗi, ghi đầu vào nào đổi, các đầu vào nào giữ, mô hình delay, điểm đo và tác động lên bên nhận. Chỉ nói “waveform bị nháy” chưa đủ để thiết kế cách sửa.
Lần trễ rồi xét giới hạn
- Vì sao Y phải giữ 1 theo bảng chân trị khi B và C bằng 1?
- Trong mô hình trên, nếu inverter chỉ trễ 2 ns, cạnh hồi phục sẽ ở đâu và xung thấp rộng bao nhiêu?
- Hạng B·C giữ được Y_fixed vì sao, dù không đổi hàm ổn định?
- Nếu cả B và C cùng đổi, còn được dùng nguyên lập luận một biến đổi hay không?
- Bạn thêm consensus nhưng synthesis loại bỏ. Cần kiểm gì trước khi nói bản netlist đã sửa hazard?
Kiểm tra
Bằng chứng kiểm chứng
Expected tính trước chạy: HAZARD CHECK stable=8 pulses=1 fall_ns=72 rise_ns=75 width_ns=3 fixed_falls=0 time_ns=110.
Tám trạng thái ổn định đối chiếu literal CA. Monitor bật sau khi ổn định, đếm chính xác một cạnh xuống/một cạnh lên của Y và không cạnh xuống của Y_fixed. Giữ thêm lượt S lên tại 90 ns, kết thúc 110 ns. Clock quan sát có cạnh đầu 67 ns, đủ biên cho 16 cột VCD.
Pipeline đầu từ chối Icarus kèm traced trước khi chạy vì chưa hỗ trợ trích trace ở nhánh đó. Kiểm sự kiện Icarus 11 riêng không trích trace đã đạt cùng expected. Giữ ba claim/kỳ vọng, chuyển metadata sang nhánh Verilator 5.050 hỗ trợ trace: parsed/simulated/traced đạt, VCD khớp từng cột. Không sửa verifier hoặc giảm hợp đồng để có PASS.
Đây là mô hình continuous assignment có trễ, không phải RTL synthesis hoặc đo silicon. Initial/X/Z, mọi input transition, điện áp, metastability, physical CDC, STA và hiệu lực sau mapping chưa được chứng minh. LRM về delay/scheduling còn chờ đối chiếu.
Nguồn và mức độ đối chiếu
- Hazards & Glitches — bản chụp resources.zip, Types of Hazards; Anatomy of a Static-1 Hazard; Finding and Removing Hazards on a K-Map; Why Hazard Fixes Rarely Survive. Trích dẫn; nguồn đã đọc các mục liên quan.
- Thí nghiệm nguyên bản A2.hazard, Eight stable truth rows, exact delayed pulse edges, consensus output and sixteen sampled VCD columns. Trích dẫn; nguồn đã đọc toàn văn.
- IEEE 1800-2023 SystemVerilog LRM, Net declaration and continuous assignment delays, inertial scheduling, event observation and simulation time — chưa đối chiếu LRM. Chưa đối chiếu với văn bản nguồn (chưa mở).