為什麼我的處理器功耗大於產品資料手冊所提供的值?

筆者的回答是:在我的某一篇文章中,曾經談到了一個功耗過小的元件——是的,的確會有這種情況——它帶來麻煩的事情,但這種情況很罕見。我處理的更常見情況,是客戶抱怨元件功耗大於產品資料手冊所宣稱的值。

記得有一次,客戶拿著處理器電路板走進我的辦公室,說它的功耗太大,耗盡了電池電量。由於我們曾驕傲地宣稱該處理器屬於超低功耗元件,因此舉證責任在我們這邊。我準備按照慣例,一個一個地切斷電路板上不同元件的電源,直至找到真正肇事者,這時我想起不久之前的一個類似案例,那個案例的「元兇」是一顆獨自掛在供電軌和接地端之間的LED,沒有限流電阻與之為伍。LED最終失效是因為過電流,還是純粹因為它覺得無聊了,我不能完全肯定,不過這是題外話,我們暫且不談。

從經驗出發,我做的第一件事是檢查電路板上有無閃閃發光的LED。但遺憾的是,這次沒有類似的、顯示問題的希望曙光。另外,我發現處理器是板上的唯一元件,沒有其他元件可以讓我歸咎責任。客戶接下來拋出的一條資訊讓我的心情更加低落:透過實驗室測試,他發現功耗和電池壽命處於預期水準,但把系統部署到現場之後,電池電量快速耗盡。此類問題是最難解決的問題,因為這些問題非常難以再重現「第一案發現場」。而這就為數位世界的問題增加了「類比」性的無法預測性和挑戰,而數位世界通常只是可預測的、簡單的1和0的世界。

在最簡單的意義上,處理器功耗主要有兩方面:核心和I/O。當涉及到抑制核心功耗時,我會檢查諸如以下的事情:PLL配置/時脈速度、核心供電軌、核心的運算量。有多種辦法可以使核心功耗降低,例如:降低核心時脈速度,或執行某些指令,以迫使核心停止運行或進入睡眠/休眠狀態。如果懷疑I/O吞噬了所有功耗,我會關注I/O電源、I/O開關頻率及其驅動的負載。

我能探究的只有這兩個方面。而其結果是,問題與核心方面沒有任何關係,因此必然與I/O有關。這時,客戶表示他使用該處理器純粹是為了運算,I/O活動極少。事實上,元件上的大部分可用I/O介面都沒有得到使用。

「等等!有些I/O沒有使用。你的意思是這些I/O 接腳「未使用」。你是如何連接它們的?」

「理所當然,我沒有把它們連接到任何地方!」

「原來如此!」

這是一個令人狂喜的時刻,我終於找到了問題所在。雖然沒有沿路尖叫,但我著實花了一會工夫才按捺住興奮之情,然後坐下來向他解釋。

典型CMOS數位輸入類似下圖:

20180419TA01P1 圖1 典型CMOS輸入電路(左)和CMOS位準邏輯(右)。

當以推薦的高(1)或低(0)位準驅動該輸入時,PMOS和NMOS FET一次導通一個,絕不會同時導通。輸入驅動電壓有一個不確定區,稱為「門檻區域」,其中PMOS和NMOS可能同時部分導通,從而在供電軌和地之間產生一個洩漏路徑。當輸入浮空並遇到雜散雜訊時,可能會發生這種情況。這既解釋了客戶電路板上功耗很高的事實,又解釋了高功耗為什麼隨機發生。

20180419TA01P2 圖2 PMOS和NMOS均部分導通,在電源和地之間產生一個洩漏路徑。

某些情況下,這可能引起「閂鎖」之類的狀況,即元件持續汲取過大電流,最終燒毀。可以說,這個問題較容易發現和解決,因為眼前的元件正在「冒煙」,證據確鑿。客戶報告的問題則更難對付,因為當您在實驗室的涼爽環境下進行測試時,它還沒什麼問題,但送到現場時,就會引起很大麻煩。

現在我們知道了問題的根源,顯而易見的,其解決辦法是將所有未使用輸入驅動到有效邏輯位準(高或低)。然而,有一些細微事項需要注意。再看幾個CMOS輸入處理不當引起麻煩的情形,需要擴大範圍,不僅考慮徹底斷開/浮空的輸入,而且要考慮似乎連接到適當邏輯位準的輸入。

如果只是透過電阻將接腳連接到供電軌或接地端,應注意所用上拉或下拉電阻的大小。它與接腳的拉/灌電流一起,可能使接腳的實際電壓偏移到非期望位準。換言之,需要確保上拉或下拉電阻足夠強。

如果選擇以主動方式驅動接腳,務必確保驅動強度對所用的CMOS負載夠好。若非如此,電路周圍的雜訊可能強到足以超過驅動訊號,迫使接腳進入非預期的狀態。

現在讓我們來研究幾種情形。

在實驗室正常工作的處理器,在現場可能莫名重啟,因為雜訊耦合到沒有足夠強上拉電阻的復位(RESET)線中。

20180419TA01P3 圖3 雜訊耦合到帶弱上拉電阻的RESET接腳中,可能引起處理器重啟。

請想像CMOS輸入屬於一個閘極驅動器的情況,該閘極驅動器控制一個高功率MOSFET/IGBT,後者在應當斷開的時候意外導通!簡直糟糕透了。

20180419TA01P4 圖4 雜訊過驅一個弱驅動的CMOS輸入閘極驅動器,引起高壓匯流排短路。

另一種相關但不那麼明顯的問題情形,是當驅動訊號的上升/下降非常慢時。這種情況下,輸入可能會在中間位準停留一定的時間,進而引起各種問題。

20180419TA01P5 圖5 CMOS輸入的上升/下降很慢,導致過渡期間暫時短路。

我們已經在一般意義上討論了CMOS輸入可能發生的一些問題,值得注意的是,就設計而言,有些元件比其他元件更擅長處理這些問題。例如,採用施密特觸發器(Schmitt trigger)輸入的元件能夠更良好地處理具有高雜訊或慢邊緣的訊號。

一些最新處理器也注意到這種問題,並在設計中採取了特殊預防措施,或發佈了明確的指南,以確保運行順利。例如,ADSP-SC58x/ADSP-2158x產品資料手冊便清楚說明了有些接腳具有內部端接電阻或其他邏輯電路,以確保這些針腳不會浮空。

最後,正如大家常說的,正確完成所有收尾工作很重要,尤其是CMOS數位輸入。