解決六個低功耗調試陷阱

解決六個低功耗調試陷阱

在從前端設計階段到後端實施階段驗證功耗管理SoC的行為時,會出現基於仿真的調試挑戰。

我們還想表彰本文的第四位合著者Gabriel Chidolue,他是西門子公司Mentor的Questa功能驗證小組的解決方案架構師。

低功耗驗證的調試挑戰由於低功耗設計中使用的複雜電源管理架構和技術而變得複雜。設計人員使用複雜的功耗感知技術,如電源門控,電壓調節和體偏置來節省功耗並最大限度地減少散熱。因此,芯片的功耗感知驗證是一個相當複雜的過程。

統一功率格式(UPF)標準提供了許多新功能,這些功能已經放寬了功率意圖規範流程,並啟用了新的功率管理驗證流程,以滿足當今基於IP的SoC設計的需求。不幸的是,UPF標準的發展並沒有降低電源管理驗證任務的複雜性。此外,傳統的調試技術和方法假定設計是“始終開啟”的,因此無法解決與功耗相關的新問題。

讓我們來看看六個低功耗調試挑戰和常見陷阱,以及如何讓它們更容易解決或完全避免的一些想法。雖然這些調試挑戰對於那些參與電源管理驗證的用戶來說都不是什麼新鮮事,但我們的意圖是根據實際用戶體驗為非入門用戶提供實用指南。

1.不需要的X值

低功耗仿真中的主要調試問題是未知(X)值的根本原因分析。 X值在低功耗模擬中出現在信號上可能有幾個原因。這些原因可能是不正確的UPF規範(缺少隔離/電平轉換保留單元或不正確的電源域分區)或UPF 1.0到UPF 2.0模擬語義差異(由於初始塊的使用)(信號初始化和域加電)。

為了區分信號的正常未知值,大多數仿真工具都能夠突出顯示波窗中功率域損壞引起的未知值。在正常模擬中,未知X信號值通常使用波形窗口中未知值區域周圍的單箇中高紅線或紅色輪廓框來顯示。在低功耗模擬中,整個低 - 高區域使用紅色,粗粒或細粒交叉影線填充,表明X值是直接功率域腐蝕的結果(圖1)。

解決六個低功耗調試陷阱

(1).使用紅色,粗粒或細粒交叉影線填充仿真波窗口中的整個低高區域,以指示X值是直接功率域損壞的結果。

通常情況下,腐敗突出顯示僅在驅動邏輯的直接輸出中才可見,並且不會顯示在受損網絡粉絲支持的後續邏輯的輸出中。即使未知的X值信號在波形中未被突出顯示,追蹤網絡連接回到突出顯示的信號可見的位置的能力也可以極大地簡化確定X值來源的任務。大多數EDA供應商提供波形比較工具來確定這些不需要的X值的根本原因。

如果波形比較不可用,捕獲不需要的X值的另一種有用技術是將它們的出現與以下變化相關聯:功率域SIM狀態或功率狀態,功率控制信號(包括功率開關的功率控制信號,隔離啟用和保留保存) /恢復信號。大多數功耗感知模擬器可以提供打印低功耗相關消息的功能。這些消息通常是關於供電網/端口,電源開關,各種電源控制信號和電源域的狀態變化。斷言還有助於檢測由於與功率控制序列相關的問題而導致的X值來源。

除了低功耗斷言檢查以在模擬過程中捕獲可能的X值來源外,處理UPF文件時的靜態分析還可以確定是否有任何缺失,冗餘或無效的隔離/電平轉換器,這些也可以幫助捕獲它們。當斷電時,未隔離的電源域端口顯然會向其他電源域傳播X值。

在非功耗感知模擬中,信號的驅動通常是一些RTL邏輯。但是,在功耗感知仿真的情況下,它可以是從RTL邏輯到UPF插入單元的任何範圍。對於信號出現意外值的情況,可能是該信號的功率感知活動的影響,或者它可能是功率感知活動對其某些驅動信號/邏輯的傳播效應。在這些情況下,驅動程序跟蹤是查找驅動程序信號及其值的有用方法。

另一個有用的功能是信號的數據流/原理圖調試。這有助於追蹤遠處邏輯驅動的信號的值。在功耗感知調試中,它還在數據流路徑中顯示UPF插入的單元。圖2是來自仿真器的數據流示例,示出了信號“/ tb / out1”'的數據流路徑中遇到的隔離單元和電平移位器。

解決六個低功耗調試陷阱

(2).來自模擬器的數據流顯示在信號'/ tb / out1'的數據流路徑中遇到隔離單元和電平移位器。

2.一些信號沒有損壞

當設計的某個部分無法關閉並且該部分內部的邏輯永遠不會被破壞時,雖然用戶期望它被關閉並顯示損壞的值,但是會出現一個非常常見的低功耗調試問題。這種行為可能有多種原因。

由於功率域規範不正確,所關注的設計元素被置於不可切換的電源域。調試此類問題的第一步是確定該區域所屬的電源域。這可以通過查看由工具生成的功耗感知文本報告或使用工具的GUI功能來完成。下一步是確定該域的電源是否被關閉。只要電源域更改其狀態,就可以使用該工具報告的動態消息進行驗證。

當EDA供應商提供機制來跳過設計某些部分的損壞時,可能會排除行為模型;例如通過UPF指定DONT_TOUCH元素,或者使用單獨的文件從功耗感知行為中排除元素。在這種情況下,查看工具生成的報告以確定設計元素是否已被該工具排除。

禁用設計元素的模擬語義意味著該工具不會在該元素上傳遞任何電源切斷/損壞。該工具會禁用功耗感知模擬語義,因此不會有工具注入損壞。所有這些區域都可以使用驗證工具報告的消息輕鬆識別,例如:

注意:(vopt-9693)針對chip_top / u_hm_top_0 / u_ip_1禁用了Power Aware模擬語義。

3.非法權力和轉軌

當今的低功耗設計有許多操作模式。低功耗設計的主要調試任務之一是驗證設計的運行功耗狀態。這需要驗證每個電源域的每個定義的電源狀態已被覆蓋並正常工作。它還要求驗證組成每個運行電源狀態的所有域的所有電源狀態組合。隨著電源域數量和運行電源狀態的設計不斷增加,驗證過程的複雜性會增加多倍。

UPF通過提供add_power_state和describe_state_transition命令來解決這些挑戰。不僅add_power_state支持偏置狀態,分層電源狀態創建和增量更新功能,還允許將任何命名電源狀態聲明為合法或非法。使用這兩個命令需要低功耗模擬器在發生非法電源狀態或發生任何非法電源狀態轉換時發佈運行時錯誤消息。

UPF還規定,未命名或未定義的電源狀態是非法的。如果在從一個定義狀態轉換到另一個定義狀態時出現意外功率狀態,則未定義功率狀態的檢測特別有用。在合法電源狀態轉換期間發生未定義的電源狀態可能是由於通過UPF封裝supply_on / supply_off函數更改UPF電源與同時切換電源控制邏輯信號之間的競爭造成的。比賽引起的未定義功率狀態可能表示電壓上升/下降時間與邏輯開關時間必須考慮的區域,以確保設計的正確操作。

但是,有時候,知識產權的所有基本權力狀態都沒有確定;這可能會導致仿真期間發生意外的非法狀態消息。用戶可以使用UPF 3.0語法,該語法允許將給定對象的一組功率狀態的指定標記為完整,這表明該對象的所有基本狀態已被定義為命名功率狀態。

如果一個對象的電源狀態集已經完成,那麼UNDEFINED電源狀態應該是該對象的當前電源狀態的錯誤。如果在電源狀態標記完成後定義新的基本電源狀態,那也是一個錯誤。如果給定對象的功率狀態未標記為完整,則假定所有基本狀態尚未定義,並且不會被標記為錯誤行為。

類似地,describe_state_transition(UPF 2.0 / 2.1)和add_state_transition(UPF 3.0)命令可以使兩個電源狀態之間的任何轉換被聲明為合法或非法。 UPF 3.0還允許定義一組相關的電源狀態,然後可以在add_power_state命令中使用這些狀態。權力狀態組的合法權力狀態定義該範圍內的其他對象或子孫樹的權力狀態的合法組合;即在設計的操作期間可以同時活動的對象的狀態的那些組合。這個命令可以用來定義非法的電源狀態組合。

4.電源意向規格的複雜性

UPF已經解決了低功耗設計電源管理的功率意圖規範。但是,UPF標準仍在不斷髮展,新版本中增加了新功能,概念和說明。它往往會帶來與向後兼容性,差異和遷移問題有關的問題,這些問題很難調試。

在UPF 1.0中,UPF默認提供ON狀態。參與基於UPF 1.0的功率感知仿真的許多驗證和設計工程師在不知不覺中依賴於這一事實,因此,有一種趨勢是不使用UPF封裝定義的supply_on函數明確地打開它們。因此,在用戶切換到基於UPF 2.0的功率感知模擬語義之後,以前通過基於UPF 1.0的仿真可能會失敗。

許多這些故障的常見原因是,在UPF 2.0中,UPF將默認設置為OFF狀態,導致所有電源域都處於CORRUPT狀態。通過使用UPF封裝定義的supply_on函數明確設置所有創建的UPF電源的UPF狀態和電壓值,可以輕鬆避免此常見遷移問題。

低邊界電源域端口的隔離是另一個遷移問題。在UPF 1.0中,set_isolation -applies_to輸入/輸出端口過濾器僅考慮在模塊邊界上對齊的電源域端口。換句話說,只有模塊的輸入和輸出端口是隔離的。在UPF 2.0中,這些隔離端口過濾器已經擴展到還包括下邊界(不同電源域中的子模塊實例)輸入和輸出電源域端口。下邊界電源域端口隔離的概念可能會由於工具推斷的意外背靠背隔離單元而導致模擬失敗,特別是如果隔離策略包含在任何較低級別的電源域中。

Power-intent規範中的另一個調試挑戰是由於在各種UPF命令中使用列表/通配符擴展而產生的。通常會發生一個不正確的信號列表,作為在通配符中使用錯誤模式的副作用。如果用戶依賴UPF命令find_objects創建信號列表並使用tcl命令放置打印元素列表的內容,則可避免此問題。

獲取擴展信號列表的另一種方法是使用save_upf命令。使用save_upf UPF命令,驗證工具會將解釋的命令轉儲到新的UPF文件中,該文件將包含擴展元素列表。另一個安全的選擇是避免使用非LRM通配符使用,並依賴UPF命令find_objects。

在設計中的宏模型的情況下,電源以及功率感知功能存在於模型本身內部。將此宏模型集成到SoC中時,集成商必須將這些HDL電源連接到UPF網絡。

由於UPF電源是具有狀態和電壓值的supply_net_type類型,並且HDL中定義的電源屬於線型,因此UPF和HDL網絡之間的連接需要一個值轉換表(VCT)。 VCT定義UPF網絡的狀態與HDL端口/網絡的值之間的映射。用戶可以依靠驗證工具來應用默認VCT,或者使用UPF命令connect_supply_net -vct明確指定要使用哪個VCT。請注意,當相同的VCT用於電源/接地/電源/電源網絡時會出現問題。這會導致上電失敗,因為地面/井口供電網線處於低電平並期望地面特定的電壓。

5.提供網絡問題

在實施階段,電力感知設計中的供電網絡往往龐大而複雜。有時,它會變得越來越多,並且難以調試供應網絡中的不正確連接或任何其他問題(或者僅存在於UPF文件中或已經在設計中實現)。您可以使用靜態或動態調試方法調試電源連接。這是一個來自EDA工具的良好用戶界面和連接報告幫助很大的問題。

6.通電失敗

當低功耗設計在斷電期後無法啟動時,會出現常見的調試場景。由於丟失或不正確的隔離/電平移位器,不正確的保留行為以及宏單元損壞,可能會出現此問題。

通過在編譯時執行靜態驗證,使用工具生成的斷言以及使用UPF綁定檢查器,可以調試丟失或不正確的隔離/電平移位器。許多工具靜態地確定隔離和電平移位器單元在PST和UPF中描述的功率狀態的域邊界處的需要。

解決六個低功耗調試陷阱

3.通過在編譯時執行靜態驗證,使用工具生成的斷言以及使用UPF綁定檢查器,可以調試丟失或不正確的隔離/電平移位器。

PST描述兩個域之間的有效交互狀態。這些狀態清楚地定義了兩個域相互作用的電壓範圍,以及一個域是否與另一個域相關。如果信號從低電壓範圍到高電壓範圍,則需要具有“low_to_high”規則的電平移位器。類似地,對於從高電壓到低電壓的信號,需要“高低”規則。如果沒有指定電平轉換器策略或指定具有不同規則的電平轉換器策略(圖3),那麼這是一種錯誤情況。

系統Verilog斷言(SVA)是利用工具生成的自動斷言來實現低功耗設計的動態驗證的一種非常強大的方法,該斷言在運行時檢查丟失或不正確的隔離和電平轉換器。對於域邊界上的每個接口信號,插入一個斷言來檢查是否需要隔離和電平移位器單元。

斷言可用於驗證功率控制邏輯序列,並確保在功耗模式轉換之前和之後滿足特定要求。 UPF還提供了使用bind_checker命令添加自定義斷言的方法,允許您在模塊中編寫自己的斷言,然後將該模塊綁定到邊界實例以檢查信號是否被隔離。

UPF bind_checker命令還允許您使用bind_checker和UPF泛型轉儲自定義保留斷言,從而提供調試不正確保留行為的最簡單方法。 UPF泛型提供了一種自動的方式來為設計的所有順序元素指定通用的bind_checker語句,因此您不必擔心每個順序元素的時鐘/復位條件。仿真工具自動識別每個順序元素的時鐘/復位條件,並相應地應用bind_checker語句。

宏單元的腐敗是由使用宏單元的主要供應來定義腐敗語義的自由屬性來控制的。因此,宏單元的主要電源應該正確連接以實現自由單元的正確功能。電池上電失敗的主要原因之一是電源連接不正確,因此有必要驗證每個電池的電源連接。大多數EDA供應商轉儲所有電源連接的連接報告,並且您必須通過檢查這些報告來驗證電源端口是否正確連接。

結論

調試低功耗設計是當前半導體行業面臨的最嚴峻挑戰之一。認識到調試低功耗設計時遇到的各種挑戰,可以及早發現或避免低功耗問題,從而節省昂貴的設計週期並顯著提高調試過程的生產率。


分享到:


相關文章: