23 / 37 · 概念
波形的取樣時點與因果關係
分開組合穩定、時脈擷取與事件順序來閱讀波形。
單元可免費閱讀,註冊課程即可儲存學習進度。
同一個時間值內也有順序
波形中的訊號看似在同一時間戳改變,不表示它們無因果地同時改變。事件驅動 RTL 模擬器會處理作用中事件、nonblocking非阻塞賦值(nonblocking)在循序 RTL 中以 <= 表示。它先求右側運算式的值,再排程更新,讓同一邊緣的暫存器都能依據先前狀態計算。 詳細內容 更新等步驟後才穩定。實際元件則經過 clock-to-Q 與組合傳播延遲傳播延遲是輸入改變後,輸出穩定至正確值所需的時間。邏輯式是否等價與時間特性是兩個不同問題。 詳細內容才改變,必須區分這兩種模型。
本練習依「施加輸入 → 組合求值 → 上升緣上升緣是時脈由 0 變成 1 的瞬間。它與表示整段 CLK=1 期間的高準位不同。 詳細內容擷取 → 狀態更新」建立預測表,並確認工具的輸入施加與結果記錄時點。
需確認實際模擬器的事件排程及輸出記錄時間。下列順序是編寫預測表時應區分的四個階段,不是四個時脈週期。
- 驅動輸入: 改變 a、b、sel
- 組合邏輯求值: y = sel ? b : a
- 上升緣: 擷取邊緣前的 y
- 更新後觀察: 比對 sampled_y
先獨立計算預期值
計算每組輸入的 y,再分欄記錄它在哪個邊緣反映到 q。找出實際與預期第一次不同的列,就能把原因縮小到輸入施加、選擇函數或儲存行為。
區分切換與穩態
選擇線切換時若兩筆資料相同,最終輸出應相同,但內部路徑延遲差仍可能產生短毛刺。反之,正常切換到不同結果,也不能全部稱作毛刺。邏輯波形比較與實體時序分析回答的是不同問題。
一般測試平台若在與 DUT 相同的上升緣改變激勵並立即讀值,可能形成競爭。應分開激勵驅動與觀察時點,或採用 clocking block 等明確同步方式。目前 DDS 練習使用輸入 JSON 與工具的單一時脈規則,不加入任意 #delay 測試平台。
自己試試看
波形最後的 y 與 sampled_y 都是 1,能否認定中間各週期也正確?
查看解說
不能。即使選擇線接反,或晚一週期儲存,只要最後 a=b=1,也可能得到相同最終值。必須逐邊緣與預期值比較,並包含 a、b 不同時的 sel 切換。