第三章結構功耗

2022-11-18 08:48:02 字數 4094 閱讀 7723

本章討論數字設計的三個主要物理性質之一:功耗。同時,我們也會討論在fpga中如何用結構化的方法來對功耗進行優化。

與asic器件(application specific integrated circuits)相比,在具相似處理能力的情況下,fpga的功耗要大得多,它並不符合低功耗的設計。一部分fpga廠商的確推出了一些低功耗的cpld(complex programmable logic device),但是在器件的尺寸和功能方面都有很多限制,因此有時它們無法滿足那些具有大量計算功耗的應用。本節我們將討論在cpld和fpga的設計中,如何實現功耗效率的最大化。

基於cmos電路中,動態功耗與邏輯門以及金屬走線上的寄生電容的充電,放電有關。流經乙個電容的電流,可以由下面的等式計算:

i = v*c*f

上式中:i表示流過電容的總電流,v表示電容兩端的電壓,c表示電容,f表示電壓的頻率。

那麼,為了減少電流的消耗,我們必須減少等式右邊三個引數。在fpga設計中,電壓一般是固定的,這樣就只有改變c和f這兩個引數來控制總電流。電容c是直接與在一定時間內開啟的邏輯門的數量,以及連線到這些邏輯門的走線長度相關。

頻率f直接與時鐘的頻率相關。所有的降功耗技術最終都是以降低這兩個引數之一為目標。

在本章的內容中,我們將討論以下幾個主題:

● 時鐘控制對於動態功耗的影響

● 門控時鐘的問題——控制門控時鐘的偏斜

● 控制輸入使功耗最小

● 核電壓供電的影響

● 關於雙沿觸發的觸發器的一些原則

● 在終端減少靜態功耗

通過減少高頻網路的走線長度的方法來降低功耗,需要對布局佈線的相關問題進行討論,這部分內容將會在第15章「布局平面」中討論。

在同步數位電路中,最有效的,並且也是使用最廣泛的降低動態功耗的技術是:在資料處理過程中某些時候不處於工作狀態的特殊區域,將時鐘動態的去使能。因為fpga中的動態功耗與系統時鐘的切換直接相關,那麼暫時地停止設計中非活動區域的時鐘是降低此類功耗的最直接的方法。

建議使用觸發器上的時鐘使能管腳或者全域性時鐘復用器(在xilinx器件中就是bufgmux單元)的方法來實現。如果在某些設計中沒有提供時鐘使能單元,設計者有時需要直接使用門控系統時鐘。需要注意的是,這在fpga中是不提倡的方法,但本節將會討論與直接門控系統時鐘有關的問題。

應該使用觸發器的時鐘使能輸出端和全域性時鐘復用器這類的時鐘控制資源代替直接使用門控時鐘的方法。

本節的討論中,假設讀者已經對fpga中的時鐘原則比較熟悉。通常情況,fpga屬於同步器件,當由於門控時鐘或者非同步介面引入了多個時鐘域的時候,就會出現一些問題。關於時鐘域的更深入的討論,請參見第6章。

圖3.1 簡單的門控時鐘:差的設計例項

如3.1所示,這是乙個較差的例項,設計裡使用了乙個簡單的門控時鐘。在這樣的時鐘拓撲結構中,當「main clock」有效地時候所有的觸發器和與之對應的組合邏輯都隨之有效(開啟)。

然而,在面虛線框內的邏輯只有當「clock enable」訊號為1的時候才會有效。這裡我們把「clock enable」訊號作為門控訊號或者使能訊號。如上文所說的,通過邏輯使能一部分電路,設計者嘗試著通過減少邏輯單元數量(c)以及對應邏輯門的平均切換頻率(f)的方法成比例的減小動態功耗。

門控時鐘對於減小動態功耗有直接的幫助,但是它增加了設計實現與時序分析的難度。

在繼續討論實現的細節之前,務必認識到仔細的時鐘規劃對於fpga設計是何等重要。系統時鐘是所有同步數位電路的核心。eda(electronic design automation)工具是基於系統時鐘來進行優化,綜合,布局以及時序分析等。

系統時鐘非常重要,它的特徵必須首先確定,用以驅動設計實現的程序。

即使經過邏輯門控制的時鐘只有很細微的變化,仍然要把邏輯門輸出用來驅動時鐘管腳的這個新的網路看作另外乙個時鐘域。在這個時鐘域內,這個時鐘網路需要乙個低偏斜的路徑來驅動所有的觸發器,這一點與產生它的系統時鐘是一致的。對於asic設計者來說,這個低偏斜的路徑可以通過定製的時鐘樹獲得。

但是在fpga中由於低偏斜路徑的佈線資源是固定的並且有數量的限制,這就給設計者提出了難題。

門控時鐘引入了新的時鐘域,並且會對fpga設計帶來困難。

下面幾節我們重點討論門控時鐘帶來的問題。

在研究門控時鐘有關的話題之前,我們必須首先簡要的回顧一下時鐘偏斜的問題。在時序邏輯設計中,時鐘偏斜的概念非常重要。

在圖3.2中,第一級觸發器與第二級觸發器之間時鐘訊號的傳輸延時被看作零。如果訊號通過組合邏輯有乙個正的延時,那麼電路的時序裕量就取決於「時鐘週期」與「組合邏輯延時+ 走線延時 + 觸發器建立時間」之間的相對關係。

訊號在每個時鐘有效沿,只能在一級觸發器的兩端傳輸。然而對於第二級和第**觸發器這種情況卻有所不用。由於兩個觸發器之間的時鐘路徑存在延時,因此時鐘的有效邊沿將不會在兩個觸發器輸入端同時出現。

相反的,由於時鐘路徑的延時,第**觸發器輸入的時鐘有效邊沿將會延後一段時間出現。

圖3.2 時鐘偏斜

如果通過邏輯的延時(定義為dl)小於時鐘路徑的延時(定義為dc)。那麼將會出現這種情況:通過第二級觸發器的訊號將會先於時鐘訊號的有效沿到達第**觸發器。

當時鐘有效沿到達的時候,這個訊號就會穿過第**觸發器。那麼,這個訊號在乙個時鐘有效邊沿穿過了第二級和第**觸發器。這種情形將會導致電路災難性的失敗,因此在進行時序分析的時候必須把時鐘偏斜考慮進去。

另外,注意到時鐘偏斜與時鐘頻率是相互獨立的也很重要。即使不考慮時鐘頻率的影響,上文提到的這種「訊號飛越」的案例同樣會出現。

在fpga設計中,對時鐘偏斜錯誤的處理會導致災難性的失敗。

fpga提供的低偏斜資源能夠確保時鐘訊號在其所有的輸入端盡量一致(在ps級以內)。在圖3.3所示的案例中,時鐘網路上引入了乙個邏輯「與門」。

這條時鐘路徑肯定會被從低偏斜的全域性資源中移除,連線到這個「與門」上。這裡在時鐘線上增加了偏斜,其根本問題和前文提到的案例是一樣的:時鐘的門延時(dg)加上走線延時將會大於訊號的邏輯延時(dl)。

為了解決這個潛在的問題,必須給實現和分析的工具一組約束,這樣由於門控引起的與偏斜有關的任何時序問題都能得到正確的分析和解決。

圖3.3 門控時鐘引起的時鐘偏斜:差的設計例項

作為乙個例子思考下面模組,裡面使用了門控時鐘:

// poor design practice

module clockgating(

output dataout,

input clk, datain,

input clockgate1);

reg ff0, ff1, ff2;

wire clk1;

// clocks are disabled when gate is low

assign clk1 = clk & clockgate1;

assign dataout = ff2;

always @(posedge clk)

ff0 <= datain;

always @(posedge clk)

ff1 <= ff0;

always @(posedge clk1)

ff2 <= ff1;

endmodule

在上面的例子中,在資料路徑的觸發器之間沒有邏輯,但是在時鐘路徑上有邏輯,如圖3.4所示:

圖3.4 時鐘偏斜作為主要的延時

不同的工具在處理這種情況的時候,會採用不同的方法。一些像synplify這樣的工具會預設地移除門控時鐘,產生乙個純粹的同步設計。其他工具在沒有時鐘約束的情況下會忽略偏斜的問題,但是一旦對時鐘作了正確的約束,工具將會自動新增乙個延時。

與asic設計不同,在fpga設計中保持時間錯誤(hold violations)很少是由於邏輯模組和佈線資源內建的延遲引起的。然而如上文提到的,在時鐘走線上過大的延遲會導致保持時間錯誤。因為資料在連個觸發器之間傳輸時間少於1ns,而時鐘則要將接近2ns,因此資料將會領先時鐘大約1ns達到下一級,這將會導致嚴重的時序錯誤。

取決於綜合工具,有時候可以通過新增時鐘約束來修正這個問題。但是這種人為地在資料路徑新增佈線延時從而消除保持時間錯誤的方法,在隨後的分析報告中有可能顯示也可能不會顯示出來。

門控時鐘導致的保持時間錯誤,可能會也可能不會被實現工具糾正。

值得再次重申,絕大部分廠商具備了高階時鐘快取技術,能夠在時鐘樹的某乙個分支上提供時鐘使能。這種方式總是優於使用邏輯單元的門控時鐘方式。

通過控制輸入訊號的擺率(slew rates)來降低功耗方法經常被人忽視。在上拉二極體和下拉二極體同時導通的時候,cmos輸入緩衝會產生很大的電流。

第三章順序結構

一 c語句概述 1 c程式的結構 2 c語句的型別 1 控制語句 用於控制程式的流程,以實現程式的各種結構方式,可分成以下三類 1 條件判斷語句 if else語句 switch語句 2 迴圈執行語句 do while語句 while語句 for語句 3 轉向語句 break語句 goto語句 co...

第三章順序結構

c 的程式採用了結構化程式設計.結構化程式設計要求的順序 選擇 迴圈的控制結構,使編寫的程式結構清晰。順序結構就是按照語句的先後順序來執行的方式。第一節賦值語句 賦值語句的一般形式 變數名 表示式 變數名必須在變數說明部分已經定義過。與 兩個等號連線在一起 的區別 賦值號是將其右邊的表示式的值賦給左...

第三章順序結構

3.1 與輸入 輸出有關的控制項 乙個程式,如果沒有輸出操作則沒有什麼實用價值,而如果沒有輸入操作,則必然缺乏靈活性。因此,輸入與輸出是應用程式最基本的功能。在標準 standard 元件板中,delphi 提供了最為基本的輸入 輸出控制項 標籤 label 控制項 編輯框 edit 控制項 進行多...