重置解除不是一個全晶片同時發生的瞬間。安全許可若跨時鐘域或早於啟動檢查,就可能在系統「看起來已經開機」時先被使用。
啟動是一段有條件的序列
想像醫院備援發電切換:燈亮不代表每個病房都已完成自我檢查。管理員必須等電源穩定、設備自測通過,再開放特定插座。晶片也要分辨電源穩定、reset解除、OTP/生命週期資料有效、ROM檢查完成與CPU可取指;這些事件不是同義詞。生活類比只能提示「逐項就緒」,醫院沒有對應的非同步 reset 網路、亞穩態或多個安全熔絲狀態。
先把每個時域的 reset assertion 與 deassertion 列成事件。非同步 assert 可快速拉低狀態;deassert 通常要在各目的時鐘域同步,避免 recovery/removal 違例。OpenTitan lifecycle controller 的公開理論描述先等待 OTP sensing,再解碼並廣播 lifecycle,待穩定後才檢查 strap/ROM;這是特定設計文件,不可直接當成所有產品的時序保證。Lifecycle controller。
單一 ready bit 跨域若直接取樣,短脈衝可能漏掉;多位元 lifecycle bus 即使每一位都有雙觸發器,也可能在不同週期到達而組成從未存在的值。用握手/穩定編碼傳輸資料,並讓目的域以本地同步 reset 狀態授權。不同 reset 分組還要檢查 producer 已醒、consumer 尚未醒時的交易與 FIFO 清空。CDC 工具報告是結構證據,不會證明生命週期政策正確。
失敗反例:ROM check 已在 clk_sys 完成,但 clk_dbg 尚未同步看到 check_done。若 permission 先到,目的域便提前接受 debug。安全性質要寫在真正接受 debug 的邊界,而非只查 reset controller 最終狀態。以下片段是待接入 harness 的 SVA 草案,尚未編譯;debug_accept 每次成立都必須有已穩定的 lifecycle 與完成檢查。
驗收邊界
測試 reset 解除順序、任一域暫停/加速、跨域單拍請求、重複 reset,以及各 lifecycle 值。正向控制要證明合法啟動最終可用;安全性則要求條件未滿足時沒有接受。這種以時脈邊緣為單位的模型,不能代替 RDC/CDC 分析、reset-tree STA、電源斜率測試或類比 brownout 驗證。
離線互動實驗
RTL/SVA 審查方向
以下為性質草案:先定義 harness 的 transaction、reset 與 oracle,並確認取樣邊界,再接入設計;尚未編譯或證明。
assert property (@(posedge clk_dbg) disable iff (!rst_dbg_n)
debug_accept |-> reference_lifecycle_stable_sync && reference_rom_check_done_sync);
cover property (@(posedge clk_dbg) disable iff (!rst_dbg_n)
debug_accept && reference_lifecycle_stable_sync && reference_rom_check_done_sync);
reference_* 是 harness 中獨立於 DUT 的 oracle。同步旗標只表示目的域已觀察到狀態;它不證明跨域傳輸正確,也不證明來源 lifecycle 合法。
此片段不證明 CDC、timing、side-channel 或實體注入;需由各自工具與測量提供證據。
檢核問題
- 辨認:啟動時哪些事件必須分開處理? 推理: Reset 解除、lifecycle 資料有效、ROM check 完成,以及 CPU 或 debug 接受請求是不同事件。單一 ready bit 不能代替全部條件。
- 比較:為什麼 reset deassertion 要在各目的域同步,而多位元 lifecycle 值要用 handshake? 推理: 各域的 reset synchronizer 控制本地解除時序。Handshake 或穩定編碼則維持多個資料位元之間的關係。
- 情境:沿共用教學事件順序,permission 先到目的域;來源 check_done 後來才完成,且尚未同步到 clk_dbg。debug_accept 應如何處理? 推理: 目的域觀察到前提前必須維持低。弱政策若先接受 permission,就是反例。
- 故障診斷:lifecycle bus 每個 bit 各自通過 synchronizer,可能出現什麼問題? 推理: 不同 bit 可能在不同週期到達,組合成來源端從未送出的值。應使用一致的傳輸協定或穩定保持的編碼。
- 設計風險/轉移:producer 重啟時,consumer 和 FIFO 仍在運作。Review 必須先釐清什麼? 推理: 定義哪些 reset groups 可以獨立重啟、在途資料要清除或排空,以及哪些 transaction 仍有效。CDC/RDC 結構報告本身不能證明政策正確。
延伸閱讀
OpenTitan Lifecycle Controller
MY ACADEMY · LESSON FILM
教學影片
影片依序說明本課的資料路徑。看完一段,可以回到下面的互動練習,改變輸入或故障條件。動畫呈現教學模型;它沒有替代 RTL 模擬。
左右滑動影片,或用方向鍵查看圖卡。
圖卡的範圍說明
教學模型 · 非 RTL 模擬或晶片實測
共同教學時間線;不是跨域週期比較、亞穩態機率或 STA 結果
旁白使用合成聲音。互動教學與動畫均有模型邊界;請以本課的來源與驗證範圍解讀結果。
Wrap-up|把這一課帶回設計審查
- 威脅模型與成立條件
啟動期間,debug permission 與 ROM check_done 分屬不同時脈域;目的域 reset 解除後,可能先看到 permission,還沒同步到 check_done。
- 失效原因
目的域在 synchronized check_done 前接受 debug permission;不同 reset release 與時脈相位可讓這條路徑先到。
- 防護方法
在每個域同步解除 reset,以握手傳遞 lifecycle/check 狀態,接受端就地檢查穩定條件。
- 驗證方式與待做檢查
相位與狀態交叉列舉、CDC/RDC 結構檢查、時序與正向啟動控制;本課尚未執行 RTL/formal/STA。
- 防護界線與未驗證項目
緣模型不代表亞穩態機率、類比電源、真實 reset tree 或實體生命週期熔絲。
換個情境再想一次
改變目的域頻率並加入一個跨域 FIFO。定義哪些 reset 分組可獨立重啟,並提出接受端需要的最小證據。
以上整理對照本課的教學案例、參考資料與實驗範圍;未列為已完成的驗證,都是後續工作。