問:為什么我的處理器功耗大于數(shù)據(jù)手冊給出的值?
答:在我的上一篇文章中,我談到了一個功耗過小的器件——是的,的確有這種情況——帶來麻煩的事情。但這種情況很罕見。我處理的更常見情況是客戶抱怨器件功耗大于數(shù)據(jù)手冊所宣稱的值。
記得有一次,客戶拿著處理器板走進(jìn)我的辦公室,說它的功耗太大,耗盡了電池電量。由于我們曾驕傲地宣稱該處理器屬于超低功耗器件,因此舉證責(zé)任在我們這邊。我準(zhǔn)備按照慣例,一個一個地切斷電路板上不同器件的電源,直至找到真正肇事者,這時我想起不久之前的一個類似案例,那個案例的“元兇”是一個獨(dú)自掛在供電軌和地之間的LED,沒有限流電阻與之為伍。LED最終失效是因?yàn)檫^流,還是純粹因?yàn)樗X得無聊了,我不能完全肯定,不過這是題外話,我們暫且不談。從經(jīng)驗(yàn)出發(fā),我做的第一件事是檢查電路板上有無閃閃發(fā)光的LED。但遺憾的是,這次沒有類似的、昭示問題的希望曙光。另外,我發(fā)現(xiàn)處理器是板上的唯一器件,沒有其他器件可以讓我歸咎責(zé)任??蛻艚酉聛頀伋龅囊粭l信息讓我的心情更加低落:通過實(shí)驗(yàn)室測試,他發(fā)現(xiàn)功耗和電池壽命處于預(yù)期水平,但把系統(tǒng)部署到現(xiàn)場之后,電池電量快速耗盡。此類問題是最難解決的問題,因?yàn)檫@些問題非常難以再現(xiàn)“第一案發(fā)現(xiàn)場”。這就給數(shù)字世界的問題增加了模擬性的無法預(yù)測性和挑戰(zhàn),而數(shù)字世界通常只是可預(yù)測的、簡單的1和0的世界。
在最簡單意義上,處理器功耗主要有兩方面:內(nèi)核和I/O。當(dāng)涉及到抑制內(nèi)核功耗時,我會檢查諸如以下的事情:PLL配置/時鐘速度、內(nèi)核供電軌、內(nèi)核的運(yùn)算量。有多種辦法可以使內(nèi)核功耗降低,例如:降低內(nèi)核時鐘速度,或執(zhí)行某些指令迫使內(nèi)核停止運(yùn)行或進(jìn)入睡眠/休眠狀態(tài)。如果懷疑I/O吞噬了所有功耗,我會關(guān)注I/O電源、I/O開關(guān)頻率及其驅(qū)動的負(fù)載。
我能探究的只有這兩個方面。結(jié)果是,問題同內(nèi)核方面沒有任何關(guān)系,因此必然與I/O有關(guān)。這時,客戶表示他使用該處理器純粹是為了計(jì)算,I/O活動極少。事實(shí)上,器件上的大部分可用I/O接口都沒有得到使用。
“等等!有些I/O您沒有使用。您的意思是這些I/O引腳未使用。您是如何連接它們的?”
“理所當(dāng)然,我沒有把它們連接到任何地方!”
“原來如此!”
這是一個令人狂喜的時刻,我終于找到了問題所在。雖然沒有沿路尖叫,但我著實(shí)花了一會工夫才按捺住興奮之情,然后坐下來向他解釋。
典型CMOS數(shù)字輸入類似下圖:
圖1.典型CMOS輸入電路(左)和CMOS電平邏輯(右)
當(dāng)以推薦的高(1)或低(0)電平驅(qū)動該輸入時,PMOS和NMOS FET一次導(dǎo)通一個,絕不會同時導(dǎo)通。輸入驅(qū)動電壓有一個不確定區(qū),稱為“閾值區(qū)域”,其中PMOS和NMOS可能同時部分導(dǎo)通,從而在供電軌和地之間產(chǎn)生一個泄漏路徑。當(dāng)輸入浮空并遇到雜散噪聲時,可能會發(fā)生這種情況。這既解釋了客戶電路板上功耗很高的事實(shí),又解釋了高功耗為什么是隨機(jī)發(fā)生的。
圖2.PMOS和NMOS均部分導(dǎo)通,在電源和地之間產(chǎn)生一個泄漏路徑
某些情況下,這可能引起閂鎖之類的狀況,即器件持續(xù)汲取過大電流,最終燒毀??梢哉f,這個問題較容易發(fā)現(xiàn)和解決,因?yàn)檠矍暗钠骷诿盁煟C據(jù)確鑿。我的客戶報告的問題則更難對付,因?yàn)楫?dāng)您在實(shí)驗(yàn)室的涼爽環(huán)境下進(jìn)行測試時,它沒什么問題,但送到現(xiàn)場時,就會引起很大麻煩。
現(xiàn)在我們知道了問題的根源,顯而易見的解決辦法是將所有未使用輸入驅(qū)動到有效邏輯電平(高或低)。然而,有一些細(xì)微事項(xiàng)需要注意。我們再看幾個CMOS輸入處理不當(dāng)引起麻煩的情形。我們需要擴(kuò)大范圍,不僅考慮徹底斷開/浮空的輸入,而且要考慮似乎連接到適當(dāng)邏輯電平的輸入。
如果只是通過電阻將引腳連接到供電軌或地,應(yīng)注意所用上拉或下拉電阻的大小。它與引腳的拉/灌電流一起,可能使引腳的實(shí)際電壓偏移到非期望電平。換言之,您需要確保上拉或下拉電阻足夠強(qiáng)。
如果選擇以有源方式驅(qū)動引腳,務(wù)必確保驅(qū)動強(qiáng)度對所用的CMOS負(fù)載足夠好。若非如此,電路周圍的噪聲可能強(qiáng)到足以超過驅(qū)動信號,迫使引腳進(jìn)入非預(yù)期的狀態(tài)。
我們來研究幾種情形:
1. 在實(shí)驗(yàn)室正常工作的處理器,在現(xiàn)場可能莫名重啟,因?yàn)樵肼曬詈系經(jīng)]有足夠強(qiáng)上拉電阻的RESET(復(fù)位)線中。
圖3.噪聲耦合到帶弱上拉電阻的引腳中,可能引起處理器重啟
2. 想象CMOS輸入屬于一個柵極驅(qū)動器的情況,該柵極驅(qū)動器控制一個高功率MOSFET/IGBT,后者在應(yīng)當(dāng)斷開的時候意外導(dǎo)通!簡直糟糕透了。
圖4.噪聲過驅(qū)一個弱驅(qū)動的CMOS輸入柵極驅(qū)動器,引起高壓總線短路
表1. ADSP-SC58x/ADSP-2158x設(shè)計(jì)人員快速參
另一種相關(guān)但不那么明顯的問題情形是當(dāng)驅(qū)動信號的上升/下降非常慢時。這種情況下,輸入可能會在中間電平停留一定的時間,進(jìn)而引起各種問題。
圖5.CMOS輸入的上升/下降很慢,導(dǎo)致過渡期間暫時短路
我們已經(jīng)在一般意義上討論了CMOS輸入可能發(fā)生的一些問題,值得注意的是,就設(shè)計(jì)而言,有些器件比其他器件更擅長處理這些問題。例如,采用施密特觸發(fā)器輸入的器件能夠更好地處理具有高噪聲或慢邊沿的信號。
我們的一些最新處理器也注意到這種問題,并在設(shè)計(jì)中采取了特殊預(yù)防措施,或發(fā)布了明確的指南,以確保運(yùn)行順利。例如,ADSP-SC58x/ADSP-2158x數(shù)據(jù)手冊清楚說明了有些管腳具有內(nèi)部端接電阻或其他邏輯電路以確保這些管腳不會浮空。
最后,正如大家常說的,正確完成所有收尾工作很重要,尤其是CMOS數(shù)字輸入。