我給大家講一個有關功耗的bug。
那是我在前東家所參與的第一個重點的芯片設計計畫。那個計畫之初的設計目標就是低功耗,當時市面上競爭對手的最低休眠功耗在1.1V電壓下可以做到1uA,但是他們用了較為舊的工藝,所以芯片面積大。而我們選擇了更新的工藝,面積可以減小一半多,但是由於新工藝的漏電流較大,經過初期的估算,我們的目標是接近1uA。最後在前端設計完成後,用PTPX後仿真的結果就是1.5uA。老大覺得達到了預期,於是就送出去流片了。
芯片回來後bring up,在基本功能正常, 無線收發的指標都達到預期之後,組裏的老板,director,甚至部門的VP就關心一個東西:休眠狀態下的靜態功耗。當我們滿懷期待地接上電流表之後,電流表穩定在了6uA,是預期值的整整4倍,足足大了4.5uA!換了5塊板子,都是這個數,換了socket 板子,再測了三四顆芯片,都沒有比6uA低的。這可要了命了,我們的芯片主打就是面積小低功耗,現在這功耗簡直被競爭對手吊打啊,director下了死命令,必須在下一次流片之前把問題找出來,而下一次流片就是量產流片了。
組裏所有人開始行動起來開始找原因。我並不是always on模組的設計者,但是是我跑的PTPX仿真,我於是先又跑了一遍仿真,重新檢查了各種設定,沒有發現任何問題,仿真就是告訴我是1.5uA。同時跑其他非休眠狀態的仿真,仿真功耗值和實測值可以對得上,證明設定是正確的,工藝庫的值也是準確的。
接下來懷疑是板子上哪裏有漏電或者是板子設計的問題,但是經過將近一周的重新排查,PCB板設計並沒有問題,那麽就是芯片內部的問題了。
always on模組的設計者也和大家重新review了design,各種猜想被提出,但是又各種被實測否定。比如說,猜測某個isolation cell沒有插入對,於是我們和模擬團隊坐在一起,把上千個訊號又一起review了一遍,最後發現都是正確的。類似這樣的頭腦風暴幾乎每天都在進行,每次大家滿懷希望以為找到一個合理解釋,但是最終都是失望而歸。
這裏要和大家講述一下silicon debug的難度。 軟體debug通常有日誌,有偵錯程式的幫助,單步執行足以找出絕大多數bug。但是小小的芯片就難了,封裝好的芯片還沒有小拇指甲蓋大,上面的引腳比頭發絲也粗不了多少,GPIO一共也就二三十個,每個IO後面能mux出來的訊號也是有限的幾個,要是動態的訊號好歹可以利用示波器和邏輯分析儀看波形,但是這種靜態功耗的debug,示波器和邏輯分析儀也只能抓瞎。我們測算過,4.5uA說大也大,說小也很小,一個transistor短路就足以引起這麽大的short circuit current,可是小小芯片裏面幾千萬上億個transistor,找出這個無異於大海撈針。
大海撈針也得撈啊,在我們大家都想不出其他解釋之後,老大批準了給芯片照熱成像和FIB。給芯片照熱成像是啥意思,因為芯片在執行的時候是有功耗,那麽在有電流流過的地方就會有功耗,那麽相應的溫度就比周邊稍稍高一點點,這個時候用專用的熱成像儀照一個照片,只要看到哪一個地方比其他地方紅一些,那麽就大概可以定位出功耗大的區域,然後再在layout上找到那片區域對應的模組。