本文轉自:自己的微信公眾號《集成電路設計及EDA教程》
理論:
漏電流隨着閾值電壓Vt的增加而指數下降,如下圖所示:
我們可以通過在不同的時序路徑上使用不同閾值電壓的標准單元來降低漏電流。
低閾值電壓標准單元:速度快、泄漏功耗高;
高閾值電壓標准單元:速度慢、泄漏功耗低。
綜合和布局布線工具可以根據功耗和時序的需求自動選擇不同閾值的標准單元。例如,在時序的關鍵路徑上采用低閾值電壓單元,而在非關鍵路徑上采用高閾值電壓標准單元。
后端物理實現:
1、在設置MCMM的時候設置至少有一個scenario被用來優化leakage power:
set_scenario_status -leakage_power true
2、多閾值電壓庫單元由threshold_voltage_group屬性標識。給定的庫單元可能具有低閾值電壓、常規閾值電壓或高閾值電壓。
如果在我們使用的參考庫不具有threshold_voltage_group屬性,則可以使用set_attribute命令給庫里面的Cell設置這些屬性。例如,要將名稱以FAST開頭的所有Cell的threshold_voltage_group屬性設置為LVt(這里只是自己定義的一個屬性,可以不必和真實的閾值種類相匹配),可以用下面的命令:
icc2_shell> set_attribute -objects [get_lib_cells */FAST*] \
-name threshold_voltage_group -value LVt
注意:
在get_lib_cells命令中引用庫時,必須使用參考庫的名稱而不是邏輯庫(.db庫)的名稱。要搜索所有庫,需要在庫名上使用星號(*)。
3、前面為庫里面的Cell指定了threshold_voltage_group屬性,但是工具並不能准確知道哪種屬性是常規閾值,哪種是高閾值,哪種是低閾值。要標識與每個threshold_voltage_group屬性值關聯的閾值電壓類型,可以使用下面的命令:
set_threshold_voltage_group_type
必須指定屬性值並使用-type選項來指定閾值電壓類型,該閾值電壓類型是low_vt(低閾值電壓),normal_vt(正常閾值電壓)或high_vt(高閾值電壓)之一。
例如,指定那些threshold_voltage_group屬性值為LVt的Cell為低閾值電壓Cell,可以使用以下命令:
icc2_shell> set_threshold_voltage_group_type -type low_vt LVt
兩者不用非得對應,LVt只是一個自己打的標識或者庫里面定義的一個標識。在設計庫里面沒有LVt的時候我們還可以把SVt的Cell標識成low_vt,也就是說兩者沒有必要一致,只是為了方便讓工具識別出這種Cell在后邊限制這種Cell的百分比。
注意:
set_threshold_voltage_group_type命令指定的設置未保存在Block中,必須在IC Compiler II工具的每個session中指定。
4、用下面的命令指定設計中的低閾值電壓單元在設計中所占的最大比例
set_max_lvth_percentage
5、通過設置以下閾值電壓百分比優化:
用set_app_options命令將以下兩個應用程序選項設置成對應的值:
opt.power.leakage_type percentage_lvt
opt.power.mode leakage
6、做好以上設置之后工具便會在執行以下命令時做leakage power的優化:
place_opt , refine_opt , clock_opt