<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > SoC設計流程中的功耗管理

          SoC設計流程中的功耗管理

          作者: 時間:2017-06-05 來源:網(wǎng)絡 收藏

          長期以來,降低功耗一直是芯片設計中的重要需求。隨著更大、更快的集成電路應用于便攜式產(chǎn)品中,這個需求變得日益重要。因此,貫穿整個設計流程的技術也在不斷改進,以確保產(chǎn)品的各個部分均得到適當、高效的功率供應,同時保證產(chǎn)品的可靠性。諸如多電壓島,以及時鐘頻率和閾值電壓的動態(tài)調(diào)整等技術,均有助于在提供高性能的同時,節(jié)省便攜產(chǎn)品中的電池能量。

          本文引用地址:http://www.ex-cimer.com/article/201706/349098.htm

          更為重要的是,SOC在尺寸和速度方面的增長已經(jīng)給大量的設計帶來了功耗方面的挑戰(zhàn),而這些挑戰(zhàn)并不屬于傳統(tǒng)的受供電限制的范疇。在這些設計中,熱耗散和可靠性方面的問題,例如電遷移和電壓降已經(jīng)變得極為關鍵。深亞微米設計中的功率問題可能會限制設計的功能或性能,并嚴重影響到芯片的可制造性和良率。較高的功耗會造成結點區(qū)溫度上升,導致晶體管動作速度變慢,并增加互連電阻。如果不考慮功率問題,會導致器件性能低于預期,進而使得器件良率下降。此外,較高的功耗會要求在溫度管理方面采取更多的系統(tǒng)級措施??偠灾?,這些功率問題正在造成和系統(tǒng)成本的增加。在設計流程中進行功耗管理,能夠有效控制這些成本。

          中的功耗

          芯片的總功率等于動態(tài)功率加上靜態(tài)功率。動態(tài)功率是指在開關邏輯狀態(tài)轉換過程中所消耗的功率,包括單元內(nèi)部(內(nèi)部功率)和驅動芯片節(jié)點及外部負載的功率(開關功率)。動態(tài)功率 = CV2F其中,C為負載,V為電壓擺幅,F(xiàn)為邏輯狀態(tài)轉換的頻率。隨著半導體器件結構日趨小型化,器件和互連電容降低,芯片獲得了更高的性能和更低的功耗。而更大規(guī)模的設計以及更高的開關速率將會導致功率增加。靜態(tài)功率(泄漏功率)是指在晶體管不進行開關動作時消耗的功率。

          靜態(tài)功率=VISTAT盡管在晶體管漏極和襯底之間的一些反向偏置二極管中存在著漏電流,但大部分泄漏功率來自晶體管關斷時的亞閾值電流。由于亞閾值漏電流隨著晶體管閾值電壓(Vth)的降低而增大,從而帶來了一定的麻煩。隨著工藝技術向130nm及以下不斷發(fā)展,泄漏功率可能會占到芯片總功率的50%(見圖1)。泄漏功率的增加,會使得芯片中與可靠性相關的故障(即使是在待機狀態(tài)下)呈指數(shù)增長。

          隨著CMOS工藝尺寸的減小,降低功率的主要方法轉為降低供電電壓VDD。由于功率和電壓的平方成正比,所以降低電壓對于控制芯片的動態(tài)功率極為有效。但是,由于開關延遲時間與負載電容和Vth/VDD成正比,因此,僅降低供電電壓會導致電路速度降低。為了保證快速開關所需的足夠的驅動能力,Vth必須與VDD成正比下降,這又會導致泄漏功率的增加。較好的方式是采用考慮了的設計流程,在時序要求和各類功耗目標之間取得平衡。

          功率解決方案

          設計抽象層次越高,對功耗的影響也就越大。例如,在系統(tǒng)級和算法級上,采用并行實現(xiàn)而非串行實現(xiàn)能夠降低時鐘頻率,從而顯著降低功耗。但并行方法的低功率可能要以面積增加或性能降低為代價。

          以一個用于串行接收數(shù)據(jù)樣本的芯片為例,來說明并行架構與串行架構的不同效果。將數(shù)據(jù)樣本并行處理,可將芯片邏輯電路的時鐘從80MHz降低至10MHz,供電電壓也可從1.8V降低至1.25V。并行處理邏輯電路要比相同的串行處理電路的面積大得多,但較低的電壓和工作頻率可將功耗降低75%。在其它一些設計中,占用面積上付出的代價較小,而功率節(jié)省效果卻很明顯,所以這是值得探索的一種折衷方案。圖2中介紹了幾種功率優(yōu)化和分析的技術,這些技術在SoC的整個設計流程中均可得到應用。本文所涉及的功率解決方案如下:(1)模塊門控時鐘(2)多供電電壓;(3)多閾值電壓;(4)綜合過程中的功率優(yōu)化,包括RTL級門控時鐘。


          功率估計和分析

          設計過程中,在如表1所示的4個階段內(nèi)進行功耗估計是非常有用的。每個階段所估計的功耗準確度隨增補設計和可利用的庫信息的增加而提高。


          RTL級功率分析

          在設計流程早期,功率分析可對設計的功耗進行粗略估計。此時可能尚未選擇庫,所以庫數(shù)據(jù)有限,這時,電子數(shù)據(jù)表(spreadsheet)分析可以用于找出最佳的注重功率的庫和設計架構。在選定庫之后,即可用Design Compiler和Power Compiler來代替電子數(shù)據(jù)表,或向電子數(shù)據(jù)表提供數(shù)據(jù)。

          功率分析的電子數(shù)據(jù)表中包含了大致的門數(shù)和每個模塊的活動值、mW/MHz數(shù)據(jù)以及相關的功率估計。這時進行的分析也有助于確認一項設計的功耗是否過大而不現(xiàn)實,從而可避免花費數(shù)周時間來實現(xiàn)一個根本無法制造的設計方案。

          為了使用電子數(shù)據(jù)表分析方法,有必要對每一模塊的門數(shù)(每一種類型的庫單元數(shù)量)和活動水平進行估計。同時還需知道每種類型的單元在開關時所耗費的能量,庫供應商手冊中的數(shù)據(jù)可用于確定正確的功率速度比(mW/MHz)。一個模塊內(nèi)每種類型的單元的內(nèi)部功耗可由下式計算:功耗=門數(shù)×mW/MHz×活動×頻率。將一個模塊內(nèi)所有不同類型的單元的功率加在一起,就可得出這一模塊總的內(nèi)部動態(tài)功率的估計值。在綜合前,可根據(jù)所選擇的體系結構和對設計本身的理解來對門數(shù)進行估計。例如,從總線寬度、字長、控制層和存儲器深度等可得出大致的門數(shù)。在選擇了庫以后,模塊的門數(shù)就可以利用Design Compiler的report-reference命令在初期綜合后進行估計,這項功能將報告設計中每個例化設計的數(shù)量。功率計算的一個關鍵方面是指定活動水平。設計中的門電路都具有不同的活動水平,在對設計進行仿真提取開關動作或不進行仿真的情況下進行估計均可。但在選擇了庫之后,推薦進行功能仿真來確定開關動作。

          開關動作以翻轉率(TR)衡量。翻轉率是指在單位時間內(nèi),一個設計對象(如節(jié)點、引腳或端口)從邏輯0至邏輯1以及從邏輯1至邏輯0進行轉換的次數(shù)。對于一個節(jié)點來說,如果它在100ns的時間間隔內(nèi)有50次從邏輯1至邏輯0的轉換,以及50次從邏輯0至邏輯1的轉換,則其翻轉率為1,表示每ns有1次動作轉換。功率與轉換率之間的關系可以理解為,在狀態(tài)改變的時間間隔內(nèi),為了完成內(nèi)部電路的狀態(tài)轉換,就必須提供一定的能量,因此,每次轉換都會消耗功率。

          重要的是,只有在開關動作代表了芯片的實際工作狀態(tài)的情況下,在任何抽象層次上的功率估計才有意義。常見的錯誤是在試圖確定活動時,使用一個向量來仿真系統(tǒng)啟動序列。此項活動極少能夠代表真實的工作狀況,因而會導致不準確的功率估計。采用RTL級仿真能夠自動生成一個SAIF(Switching Activity Interchange Format)文件,但是活動值只有在此向量現(xiàn)實時才是準確的。目前的工具尚不能自動生成這樣的向量,因為它需要對電路的實質(zhì)有明確的理解。

          圖3所示為可以在VCS內(nèi)使用的編程語言接口(PLI)系統(tǒng)任務,用于在仿真期間生成SAIF文件。Power Compiler提供了一項power_estimate功能,這項功能使用SAIF文件來定義庫和約束條件,以及對設計進行注釋,以用于功率估計。Power Compiler針對未注釋端口的默認開關動作是,每個上升沿有1/4的概率翻轉,此數(shù)值在整個模塊內(nèi)應用和傳送。

          表2和表3所示為采用上述方式的估計結果。計算出內(nèi)部功率之后,開關功率可以按內(nèi)部功率的30%進行估計。由于沒有精確的負載和開關數(shù)據(jù),此數(shù)值僅為粗略的估計值。這樣的估計主要用于對不同設計方案的功耗進行比較,而非用于預測芯片的實際功耗。但是,正如前文所述,RTL級的近似估計的確能夠在早期對芯片設計的可實現(xiàn)性提供參考意見。

          泄漏功率可以根據(jù)每種單元類型的泄漏數(shù)據(jù)進行估算。由于高態(tài)和低態(tài)下的泄漏不同,所以泄漏功率分析必須在信號處于一定邏輯狀態(tài)的靜態(tài)概率的基礎上進行。靜態(tài)概率表示為0至1之間的一個數(shù),該數(shù)值可以根據(jù)信號的功能進行估計。例如,一般情況下,一個低態(tài)有效的復位信號的邏輯“1”靜態(tài)概率(SP1)等于或接近1.0(100%)。對于一個數(shù)據(jù)總線信號而言,除非某些架構特性建議有其它概率,其SP1通??梢?假設為0.5(50%)。在選定了庫之后,靜態(tài)概率可在仿真期間,通過將信號處于某一特定邏輯狀態(tài)下的時間和總仿真時間進行比較來計算得到。

          門電路級功率分析

          在綜合完成后,有可能根據(jù)實際門數(shù)和仿真得到的活動來從Power Compiler中獲得相當精確的功率估計值。這時估計的不準確性來自活動以及布局前的線負載值。通過從門級仿真中生成SAIF文件,準確性可以得到改善。在VCS中,與圖3中相同的指令可用于生成SAIF文件,只是其中的第一條指令應當改為:

          $set_gate_level_monitoring (on);

          這里必須再次強調(diào),只有在仿真向量代表了真實的應用行為時,活動值才是準確的。Physical Compiler工具在物理優(yōu)化后使用write_parasitics -distributed指令用于改善負載的準確性,這項指令能夠產(chǎn)生注釋了Steiner路徑和寄生電阻、電容估計值的SPEF文件。

          布局完成后,門級仿真能夠生成VCD(Value Change Dump)文件,用于PrimePower分析。VCD文件的記錄在仿真過程中變?yōu)橐粋€信號值,并提供了設計的節(jié)點活動、結構數(shù)據(jù)體系連接性、路徑延遲、時序和事件方面的信息。

          如果芯片的I/O數(shù)量眾多、在高速下切換開關并驅動很長的線路,那它將有可能成為造成估計不準確的重要因素。如果設計目標要求得到準確而非最壞情況下的功率估計時,I/O的集總負載模型可能會產(chǎn)生過分悲觀的估計結果。要想獲得更為準確的結果,可以在關鍵的I/O單元類型中利用精確的分布阻抗模型進行HSPICE仿真。然后,I/O單元的功率即可采用確定每次上升/下降沿的電荷和能量的數(shù)值性方法來進行計算。在得到HSPICE的電流和時間輸出后,每個瞬態(tài)的內(nèi)部功率就可以利用梯形積分法(如在Matlab軟件中)來進行計算。在PrimePower分析中記錄的I/O活動可以用于對I/O功率按比例進行調(diào)整,同時總的I/O功率可與核心功率相結合,用于整體功率估計。為了表明在采用本文所述的不同設計階段和實施循環(huán)中的估計方法所獲得的功率估計值的差別,圖4列舉了在DSP設計中的一個高速FIR濾波器模塊的實例。這一實例驗證了,根據(jù)所提供的信息準確度的不同,功率估計值會有所差異。此圖也表明了范例模塊在設計流程中的4個不同階段下功率估計值的變化情況:

          (1)示例1-采用最壞情況下的開關動作和線負載估計值所得到的功率估計值;

          (2)示例2-采用較為準確的線負載估計值和最壞情況下的開關動作所得到的功率估計值;

          (3)示例3-采用準確的線負載估計值和實際活動所得到的功率估計值;

          (4)示例4-采用精確的線負載(提取后)和基于SPICE準確仿真的實際活動所得到的功率估計值。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();