晶片除錯:為什麼工程師要看訊號波形
2.1 時序:一切問題的起點
數位電路能正確運作,靠的是一連串「在對的時間做對的事」。時脈(Clock)負責給出節奏,資料(Data)與控制訊號(Control)必須在時脈邊緣前後維持穩定,才能被正確取樣。這就牽涉到幾個經典參數:
這些參數在 datasheet 上都寫得清清楚楚,問題是:datasheet 給的是保證值,不是你的電路板上的實際值。PCB 走線長度、負載電容、驅動強度設定、溫度電壓變化,全部都會改變實際的時序。當你量到建立時間只剩 0.3 ns 而規格要求 0.5 ns 時,你就知道這顆晶片在實驗室裡可能活得好好的,但到了客戶手上、到了高溫環境、到了電壓偏低的那一批,就會開始出問題。
時序問題最惡劣的地方在於,它通常是機率性的。餘裕不足不代表一定錯,而是「錯誤發生的機率提高了」。這也是為什麼除錯時不能只看「這次有沒有錯」,而要看「餘裕還剩多少」。一個量測到餘裕只有 10% 的設計,就算當下測試全過,也應該被視為高風險。
2.2 電壓準位與訊號完整性
理想的數位訊號是完美的方波:瞬間從 0 V 跳到 3.3 V,平頂筆直,邊緣垂直。現實中的訊號則是:有上升時間、有過衝(Overshoot)、有振鈴(Ringing)、有反射(Reflection)、有串擾(Crosstalk)、有地彈(Ground Bounce)。這些現象如果嚴重到某個程度,就會讓接收端「認錯」邏輯準位,或者讓邊緣在中途反覆穿越臨界電壓(Threshold Voltage),造成多次觸發。
訊號完整性問題的可怕之處,在於它常常只在特定條件下出現。例如:只有當某條匯流排同時翻轉時才會串擾;只有當驅動強度設得太弱時才會邊緣太慢;只有當連接器接觸阻抗偏高時才會反射。這些條件在一般功能測試中不容易被涵蓋,但波形會把它們全部攤在陽光下。
值得一提的是,「看起來很漂亮」的波形不代表沒問題。很多工程師看到方波邊緣乾淨就放心了,卻忽略了量測的頻寬是否足夠、探棒是否造成了負載效應。一個被過度濾波的波形,看起來永遠是漂亮的,但它已經不是你電路板上真正的訊號了。
2.3 協議解碼與狀態機
除了類比層面的觀察,波形也是理解「協議層」與「狀態機」的最佳工具。以 I²C 為例,Start Condition、Address、ACK、Data、Stop Condition,每一個階段都有對應的波形特徵。當通訊失敗時,工程師可以透過波形判斷是「Master 沒有發出 Start」還是「Slave 沒有回 ACK」還是「ACK 之後資料被拉低」——這三種情況對應的根因完全不同,一個可能是軟體沒有正確初始化,一個可能是位址設錯或元件沒上電,另一個可能是匯流排被別的元件佔用。
對於更複雜的協議,例如 USB、PCIe、DDR、MIPI,工程師通常會使用協議分析儀(Protocol Analyzer)或示波器上的解碼功能,把實體層波形轉換成封包列表。但即使有解碼工具,回到原始波形仍然是必要的,因為解碼器只能告訴你「它解讀到了什麼」,不能告訴你「為什麼它這樣解讀」。當封包出現 CRC 錯誤時,你需要看波形才能知道是位元錯誤、還是邊緣被雜訊干擾、還是時脈偏移導致取樣點跑掉。
2.4 電源與雜訊:最常被忽略的一環
很多「晶片當機」的問題,最後追根究柢都是電源問題。電源紋波(Ripple)、電源雜訊(Noise)、電壓跌落(Voltage Droop)、接地彈跳(Ground Bounce),這些現象不會出現在資料匯流排上,但會讓晶片內部邏輯瞬間失效。特別是當晶片同時切換大量 IO 時,瞬間電流變化會在電源分配網路(PDN)上產生電壓擾動,嚴重時甚至會讓晶片進入重置狀態。
因此,專業的除錯流程一定會包含「電源軌量測」:用示波器搭配適當的探棒,量測核心電壓、IO 電壓、以及接地參考點的變化,並與功能異常的時間點對照。很多時候,一個看似隨機的當機,只要把電源波形與匯流排波形疊在一起看,就會發現「每次當機都發生在電源跌落之後的幾百奈秒內」,答案瞬間明朗。
三、常見晶片問題類型與波形對照
把問題分類,是加速除錯的有效方法。以下整理幾種在實務上最常見的晶片異常,以及它們在波形上通常會呈現什麼樣的特徵。
這份清單的價值在於:當你看到某種波形特徵時,可以快速縮小假設範圍,而不是漫無目的地猜測。當然,真實世界的问题往往不是單一原因,而是多個因素疊加,例如「時序餘裕本來就小,加上電源紋波造成額外延遲,剛好在高溫時超標」。這也是為什麼除錯時要同時量測多個訊號,而不是只看一條線。
四、除錯流程:從症狀到波形的實戰方法
有了「看什麼」的觀念,接下來要談「怎麼看」。一套好的除錯流程,可以讓你在面對陌生問題時不至於慌亂。
4.1 建立可重現的測試條件
除錯的第一原則:不能重現的問題,幾乎無法有效除錯。因此,第一步永遠是把「偶發」變成「可控制」。做法包括:寫一個最小化的測試程式、固定電壓與溫度、用迴圈反覆執行特定操作、記錄錯誤發生時的計數與時間。當你能把錯誤發生率從「一天一次」提高到「十秒一次」時,除錯難度會下降一個數量級。
在硬體層面,可以透過調整電壓(例如把 Vcore 稍微降低)、調整溫度(用熱風槍或溫控箱)、調整時脈頻率,來「逼出」邊界條件。這些操作的目的不是為了讓系統穩定,而是為了讓問題更容易被觀察。很多工程師會捨不得讓系統「變差」,但實際上,工程師的工作是找出邊界,而不是維持表面穩定。
4.2 觸發策略:讓示波器幫你抓兇手
示波器最強大的功能不是「顯示波形」,而是「觸發」(Trigger)。沒有觸發策略,你只會看到一堆隨機的波形;有了觸發策略,示波器就變成一個針對特定事件的錄影機。
常見的觸發方式包括:
一個實用的技巧是「先遼後細」:先用長時間錄製(Long Memory / Roll Mode)把整個事件錄下來,再用軟體搜尋找到異常點,最後用精細觸發把異常點放大觀察。這樣可以避免「觸發條件設得太窄,結果什麼都抓不到」的窘境。
4.3 交叉比對:不要只看一條線
單一訊號的波形往往資訊不足,真正有價值的是「多個訊號之間的關係」。例如:
把時脈與資料疊在一起看,確認建立/保持時間是否足夠。
把電源與匯流排疊在一起看,確認異常是否發生在電壓跌落之後。
把中斷訊號(IRQ)與匯流排交易疊在一起看,確認中斷是否被正確服務。
把重置信號與系統行為疊在一起看,確認是否發生了非預期的重置。
現代的示波器通常有 4 個類比通道加上多個數位通道(MSO),足以同時觀察時脈、資料、控制與電源。工程師應該養成「至少同時掛三條線」的習慣,因為很多因果關係只有在多通道對照下才會浮現。
五、工具鏈:示波器、邏輯分析儀與協議分析儀
不同的工具解決不同的問題,選錯工具會讓你浪費大量時間。以下用表格整理常見工具的特性與適用場景。
工具
主要功能
優點
限制
適用場景
示波器(Oscilloscope)
觀察類比波形、電壓隨時間變化
可看到訊號完整性、邊緣、雜訊、電源
通道數有限、記憶深度有限、不擅長長期錄製大量匯流排交易
時序分析、訊號完整性、電源量測、異常波形捕捉
邏輯分析儀(Logic Analyzer)
擷取多通道數位訊號並解碼協議
通道多、記憶深、可長時間錄製、協議解碼方便
只顯示邏輯準位,看不到類比細節,難以判斷雜訊或準位邊界問題
匯流排交易分析、狀態機追蹤、協議除錯
協議分析儀(Protocol Analyzer)
針對特定協議(USB、PCIe、DDR 等)進行封包層級分析
高階解碼、錯誤檢查、效能統計
價格高、針對性強、通常不提供實體層細節
高速介面驗證、相容性測試、效能調校
混合訊號示波器(MSO)
結合類比通道與數位通道
可同時觀察類比與數位訊號,關聯性強
價格較高、數位通道取樣率通常低於專用邏輯分析儀
需要同時看時序與協議的整合性除錯
在實務上,最有效率的做法往往是「邏輯分析儀找事件、示波器找原因」。先用邏輯分析儀長時間錄製,找出異常發生的時間點與對應的匯流排交易;再用示波器針對該時間點進行精細量測,觀察類比層面的細節。這種分工可以同時兼顧「廣度」與「深度」。
六、量測的陷阱與實務注意事項
量測本身是一門學問,錯誤的量測比不量測更危險,因為它會給你錯誤的信心。以下整理幾個最常見的陷阱。
此外,工程師也應該養成「記錄量測設定」的習慣:探棒型號、衰減比、頻寬限制、取樣率、觸發條件、時間軸刻度、電壓刻度,全部都要記錄下來。否則三個月後回頭看這張波形圖,你會完全想不起來當初是怎麼量。
七、從波形到根因:幾個實務案例
以下用三個簡化的案例,說明「看波形」如何把一個模糊的症狀,轉化成明確的根因。
7.1 案例一:SPI 讀取偶發錯誤
症狀:系統在讀取 SPI Flash 時,大約每幾萬次會出現一次資料錯誤,重開機後又正常。
初步假設:可能是 Flash 壞掉、SPI 時脈太快、或軟體沒有正確處理忙碌狀態。
波形觀察:用邏輯分析儀長時間錄製 SPI 匯流排,發現錯誤發生時,SCLK 的某個邊緣附近,MOSI 剛好正在翻轉。再用示波器針對該次交易量測,發現 MOSI 的上升邊緣正好落在 SCLK 的取樣邊緣上,建立時間幾乎為零。進一步量測發現,該批電路板的走線長度比預期多了幾公分,加上驅動強度設定偏弱,導致傳播延遲增加。
根因:時序餘裕不足,在特定資料樣式下剛好違反建立時間。
解法:降低 SPI 時脈頻率、提高驅動強度、或調整 PCB 走線。同時在量產測試中加入時序餘裕檢查。
7.2 案例二:DDR 初始化失敗
症狀:部分板子在開機時 DDR 初始化失敗,重試幾次又會成功,且與溫度有關。
初步假設:DDR 參數設定不當、電源不穩、或焊接不良。
波形觀察:量測 DDR 的時脈與 DQS、DQ 訊號,發現初始化失敗時,DQS 與 DQ 之間的相位關係與成功時不同;進一步量測電源軌,發現 VDDQ 在初始化期間有明顯的電壓跌落,且跌落的時間點與失敗時間高度相關。追查後發現,電源層的 decoupling 電容配置不足,導致瞬間電流需求無法被滿足。
根因:電源完整性不足,造成 DDR 時序在初始化階段偏移。
解法:增加高頻去耦電容、調整電源層設計、或在初始化流程中加入電壓穩定等待時間。
7.3 案例三:MCU 偶發當機
症狀:MCU 在運作數小時後偶發當機,看門狗會自動重置,但無法穩定重現。
初步假設:韌體有記憶體泄漏、堆疊溢位、或中斷優先權衝突。
波形觀察:在電源軌與重置信號上掛探棒,長時間錄製。發現每次當機前,Vcore 都會出現一個短暫的電壓突降,隨後重置信號被拉低。進一步檢查發現,當某個高功率週邊被啟動時,瞬間電流超過 LDO 的負載能力,導致電壓跌落。
根因:電源設計餘裕不足,高功率週邊啟動時造成電壓跌落,觸發 Brown-out Reset。
解法:更換更高電流能力的 LDO、增加大容量電容、或在韌體中錯開高功率週邊的啟動時序。
這三個案例的共同點是:如果只看功能層面,永遠找不到根因;只有回到波形,才能看到「時間上的因果關係」。這也是為什麼工程師常說:「功能測試告訴你它壞了,波形告訴你它為什麼壞。」
八、把波形變成組織資產
除錯不應該是個人的英雄主義。一個成熟的團隊,會把每一次除錯的經驗沉澱下來,變成下一次的起點。具體做法包括:
當一個團隊能把「看波形」從個人技能轉化為組織流程時,除錯的效率會有質的飛躍。因為你不再需要每次都從零開始猜測,而是可以站在前人的肩膀上,直接跳到最有可能的方向。
九、結語:波形是工程師與硬體對話的方式
回到最初的問題:「為什麼工程師要看訊號波形?」答案其實很簡單:因為波形是硬體唯一會說的話。晶片不會告訴你它哪裡痛,電路板不會告訴你它哪裡不穩,它們只會透過電壓隨時間的變化,默默地記錄下每一次錯誤發生的瞬間。工程師的工作,就是學會讀懂這門語言。
看波形不是為了炫技,也不是為了讓報告看起來更專業。它是一種把不確定性轉化為確定性的方法:把「偶發當機」變成「時序餘裕不足」,把「怪怪的」變成「電源跌落 200 mV」,把「換零件就好了」變成「我知道為什麼要換這個零件」。當你能做到這一點時,你就不再是被問題追著跑的工程師,而是能主動設計出更穩健系統的工程師。
最後提醒一句:波形量得再多,如果沒有清楚的假設與記錄,也只是在看熱鬧。真正有價值的除錯,是帶著問題去看波形,帶著答案回來。願每一位硬體工程師,都能在示波器的螢幕上,找到屬於自己的那道光。
如果你喜歡這類 3C 科技教學內容,歡迎持續關注雅寶社區 · 頂客論壇的技術專欄,我們會不定期分享更多硬體除錯、量測技巧與系統整合的實務經驗。
```