Lower power design & UPF
只記錄部分內容以供查閱,完整內容還是看手冊
- Lower power design & UPF
- C1 -- Lower-power design strategies
- C2 -- Library Requirements
- C3 -- Power Intent Specification
- 1. UPF中的通配符
- 2. 電源意圖概念
- 3. Synopsys 多電壓域流程
- Supply Sets
- Golden UPF Flow
- C4 -- UPF Script Examples
C1 -- Lower-power design strategies
1. Dynamic and Static Power


Dynamic power
-
Switch power:取決於時鍾頻率(每秒翻轉的次數)以及開關活動性(在連續時鍾周期實際反轉的次數)
-
Internal power: 當輸入信號處於翻轉的中間狀態時在p和n之間形成短路通路,形成crowbar current 。
- 較低的閾值電壓和長的翻轉時間會導致更多的短路功耗。
Static (leakage) power
在早期的CMOS工藝中,leakage current幾乎可以忽略,但隨着工藝進步,閾值電壓逐漸降低,leakage power越發顯著,有時甚至達到動態功耗的水平。

泄露功耗主要有三種:
- reverse-bias p-n junction diode leakage
- 二極管反偏漏電在CMOS電路一直存在,主要是在NMOS管中表現為n型漏極到接地p襯底的漏電;在 PMOS中表現為n阱到p型漏極的漏電。
- 這部分leakage相對較小
- sub-threshold leakage
- 亞閾值漏電是指在關閉狀態下源到漏的短路電流。當閾值電壓降低,開啟和關閉的電壓越發接近,當柵極電壓接近閾值電壓,亞閾值電流呈指數級上升
- gate leakage
- 柵極采樣了較薄的絕緣層,柵極電子可能發生量子隧穿通過柵氧化層到達源或漏,導致泄露電流。
泄露電流無法通過控制時鍾解決,但可以通過降低供電電壓或關斷電壓來改善或解決。
2. 降低功耗的方法
Supply Voltage Reduction

功耗隨電源電壓降低成平方關系降低。
Clock Gating

時鍾門控的主要挑戰是找到使用它的最佳位置,並在適當的時間創建關閉和打開時鍾的邏輯。
優點:時鍾門控實現起來相對簡單,因為它只需要在netlist中進行更改。不需要額外的電壓供電變化。
Multiple-Vt Library Cells
可以提供具備多種閾值的cell。
低VT的cell有更高的速度,但亞閾值漏電更高。
高VT的cell有較低的亞閾值電流,但速度慢
Multivoltage Design

在一個芯片上提供兩個或多個電源電壓會帶來一些復雜性和成本。需要額外的電源輸入管腳提供芯片電壓,而電源網絡必須將每個電壓電源分別分配到相應的塊。
此外,當兩個不同電壓域的信號有通信時,需要加level-shifter cell來轉換電平:

Power switching (gating)
當電路中某一部分不活動時,徹底關斷其與電源的鏈接。
能同時降低動態和靜態功耗,但有代價:
-
power controller
-
power-switching network
-
isolation cells
-
連在被關斷的block后,提供一個常值輸出防止關斷后出現X態。例如下圖,block關斷后P_UP置為0,輸出常值0
-
-
-
retention registers
-
通常被加載普通寄存器上作為影子寄存器,當power down時將之前的數據重新放到主寄存器內,通常用高VT的管子減少漏電
-
-

通常采用高閾值的管子做開關管來降低泄露功耗。
Dynamic Voltage and Frequency Scaling
動態電壓調整需要一個多級電源和一個邏輯塊來確定給定任務的最佳電壓水平。由於必須分析和調節電壓水平和工作頻率的范圍和組合,設備的設計、實現、驗證和測試可能特別具有挑戰性。
3. 標准UPF
由一組用於指定多電壓系統的命令組成。使用UPF命令,可以為芯片設計指定supply network, power switches, isolation, retention 和其他方面。
C2 -- Library Requirements
C3 -- Power Intent Specification
1. UPF中的通配符
- ?匹配任意單個字符,除了層次划分符號'/'
- * 匹配0個或多個字符,除了'/'
2. 電源意圖概念
-
power domain : 設計中的一組元素,它們共享一組公共的電源。默認情況下,電源域中的所有邏輯元素使用相同的主電源和主地。
- 每個domain 都有一個scope和一個extent
- scope是這個電壓域被定義的邏輯層次,而extent則是屬於這個電壓域的邏輯元素集合。
-
supply nets 和supply ports: 每個scope都有一組supply nets 和 ports 在特定的層次結構上。
-
supply net 是在給定的電源區域內承載電源電壓或接地的導體,跨越多個電壓域的net被定義為“reused".
-
supply port 是設計層次結構的兩個相鄰層次之間、層次結構的父塊和子塊之間的電源連接點。
-
supply net 通過 supply port從設計層次結構的一個層次跨越到下一個層次
-
-
supply set: 是一個supply nets的抽象集合,一般就是一根vdd一根gnd的net。
- 是domain-independent的,在supply set中的power和ground可以被任意在該scope中定義的power domain使用。
-
supply set handle: 給一個power domain定義的抽象supply set。
-
默認情況下,每個電源domain有supply set handle for domain’s primary supply set, a default isolation
supply set, and a default retention supply set. -
supply set handle允許您在為電源域創建任何電源集、電源網絡和電源端口之前綜合設計。
-
-
power switch: 是一個裝置,打開和關閉電源的供應網絡。一個開關有一個輸入供應網,一個輸出供應網,以及至少一個用於控制開關的輸入信號,可以通過多個信號控制,也可以輸出多個信號。
-
power state table: 列出本設計中所有電源域的電壓值和電源開關狀態的允許組合。
-
level shifter: 電平移位器將信號從第一個域的電壓擺幅轉換為第二個域的電壓擺幅。
-
isolation cell: 在電壓域關閉期間生成一個已知的邏輯值。
-
retention registers:在具有電源開關的電源域中,在關機期間必須保留數據的任何寄存器都必須實現為保留寄存器。保留寄存器有一個單獨的、始終在線的供應網絡,有時稱為備份供電,它在域的主供電關閉時保持保留寄存器中的數據穩定。
Example
下面這個芯片工作在三個電源下,Top level 包含了 top-level的power domain: PD_TOP。
- PD_TOP包含了四個supply ports: VDD1, VDD2, VDD3, and GND.
- 除了PD_TOP,還有三個power domain: PD1, PD2, and PD3 . 分別定義在三個內層的blocks中。每個block都有若干supply ports(黑色方塊),連線就是supply nets。
- 這個例子中,PD_TOP,PD2,和PD3是常開的,工作在VDD1,VDD2和VDD3下。PD1有兩個supplies,一個可開關的supply: VDD1g以及一個常開的VDD1。當VDD1g關斷時,其中常開的VDD1用來維持block1中的retention register。
- top-level中有一個power-down controller來控制VDD1g的開關。同時也生成retenrion register的save和restore信號。
- PD1到PD2和3之間都有isolation cell.

訪問電壓域,電壓端口,電源網絡,
有兩種方法,一種是申明絕對層次結構,一種是讓工具進去該層后訪問。
第一種:
create_supply_net VDD1 -domain Block1/PD1
create_supply_port PRT1 -domain Block1/PD1
connect_supply_net Block1/VDD1 -ports {Block1/PRT1}
第二種:
set_scope Block1
create_supply_net VDD1 -domain PD1
create_supply_port PRT1 -domain PD1
connect_supply_net VDD1 -ports {PRT1}
set_scope ...
如果Block2和3公用相同的電源特性,他們可以連接到同一個domain,該domain可以直接在頂層中定義為PD2,所以他們可以直接鏈接到top level的supply port上,而不用在PD2中定義port,此時block2和3使用了頂層的supply net:

電源網VDD2是在頂層PD_TOP中定義的,但在PD2中也使用了VDD2,所以在域PD2中可以重用VDD2。一個reused的supply net 可以跨越不同的domains,並且具有相同的名稱。
定義電壓域
create_power_domain PD_TOP
create_power_domain PD1 -elements {Block1} -scope Block1
create_power_domain PD2 -elements {Block2} -scope Block2
create_power_domain PD3 -elements {Block3} -scope Block3
對於第二種情況,可以這么寫:
create_power_domain PD_TOP
create_power_domain PD1 -elements {Block1} -scope Block1
create_power_domain PD2 -elements {Block2 Block3}
或者:
create_power_domain PD_TOP
set_scope Block1
create_power_domain PD1
set_scope ...
create_power_domain PD2 -elements {Block2 Block3}
3. Synopsys 多電壓域流程

Basic Power Network Commands
create_power_domain
create_power_domain domain_name
[-elements list]
[-supply {supply_set_handle supply_set_name}]
[-include_scope]
[-scope instance_name]
[-update]
create_supply_port
create_supply_port port_name
[-domain domain_name]
[-direction in | out]
creat_supply_net
create_supply_net net_name
[-domain domain_name]
[-reuse]
[-resolve unresolved | parallel | one_hot | parallel_one_hot |
user_defined_resolution_function]
connect_supply_net
connect_supply_net supply_net_name
-ports list
[-vct vct_name]
每個supply port都有內外兩個port,上層次的net只能鏈接外端口。一個port一次只有一個端口能被連接。對於輸入port,reading side是外部net,driving side是內部net.對於輸出port則相反。不能給一個supply net連接多個driver, 或者說reuse一個net給多個drivers。(這里我的理解是一根net線只能連接一個driver port,如果從一個port需要drive多個port,需要指定不同的net)


create_supply_port VDD1P -domain Block1/PD1
create_supply_net VDD1 -domain Block1/PD1
connect_supply_net Block1/VDD1 -ports Block1/VDD1P
connect_supply_net VDD1 -ports Block1/VDD1P
set_domain_supply_net
set_domain_supply_net domain_name
-primary_power_net supply_net_name
-primary_ground_net supply_net_name
example:
set_domain_supply_net Block1/PD1 \
-primary_power_net Block1/VDD1 \
-primary_ground_net Block1/GND
該命令用來申明電壓域的主電源網絡以及主地網絡。每個電壓域都需要定義這些主網絡。
create_power_switch (power gating)
create_power_switch switch_name
-domain domain_name
-output_supply_port {port_name supply_net_name}
{-input_supply_port {port_name supply_net_name}}*
{-control_port {port_name net_name}}*
{-on_state {state_name input_supply_port {boolean_function}}}*
[-ack_port {port_name net_name [{boolean_function}]}]*
[-ack_delay {port_name delay}]*
[-off_state {state_name {boolean_function}}]*
[-on_partial_state {state_name {boolean_function}}]*
[-error_state {state_name {boolean_function}}]*
map_power_switch
map_power_switch switch_name
-domain domain_name
-lib_cells list
create_supply_set
create_supply_set supply_set_name
[-function {function net_name}]
[-update]
包含兩種functions:
• Power
• Ground
associate_supply_set
associate_supply_set supply_set_name
-handle supply_set_name
當兩個set被associate后,他們將被連到相同的supply net或相同的PG pins對上。
set_equivalent
set_equivalent -nets supply_nets | -sets supply_sets
[-function_only]
指定一系列supply nets或一系列supply sets是相等的。表示他們具有相同的狀態和電壓,無論他們是否是電氣相連的。例如:
prompt> set_equivalent -nets {VDDa VDDb VDDc} # equivalent supply nets
prompt> set_equivalent -sets {SS1a SS1b} # equivalent supply sets
funtion_only 選項指定這些相同的set是電氣等價的還是相互獨立並行的等價,並非一定是短路的。
Level Shifter Commands
set_level_shifter
set_level_shifter strategy_name
-domain domain_name
[-elements port_pin_list]
[-exclude_elements exclude_list]
[-applies_to inputs | outputs | both]
[-applies_to_boundary upper | lower | both]
[-threshold float]
[-rule low_to_high | high_to_low | both]
[-location self | parent | fanout | automatic]
[-no_shift]
[-force_shift]
[-name_prefix prefix_string]
[-name_suffix suffix_string]
[-update]
[-source source_supply]
[-sink sink_supply]
set_level_shifter –domain domain_name –elements ... [–applies_to ...]
set_level_shifter –domain domain_name –applies_to [inputs | outputs]
set_level_shifter –domain domain_name [–applies_to both]
map_level_shifter_cell
map_level_shifter_cell strategy_name
-domain power_domain_name
-lib_cells list
use_interface_cell
use_interface_cell
interface_implementation_name
-domain domain_name
-lib_cells lib_cell_list
-strategy list_of_one_level_shifter_and_or_one_isolation
[-port_map port_net_list]
[-force_function]
Isolation Commands
set_isolation
set_isolation isolation_strategy_name
-domain power_domain
[-elements objects]
[-exclude_elements exclude_list]
[-applies_to inputs | outputs | both]
[-applies_to_boundary upper | lower | both]
[-clamp_value 0 | 1 | latch]
[-isolation_power_net isolation_power_net]
[-isolation_ground_net isolation_ground_net]
[-isolation_supply isolation_supply_set]
[-source source_supply_set_name]
[-sink sink_supply_set_name]
[-diff_supply_only true | false]
[-no_isolation]
[-force_isolation]
[-name_prefix prefix_string]
[-name_suffix suffix_string]
[-update]
set_isolation_control
set_isolation_control isolation_strategy_name
-domain power_domain
-isolation_signal isolation_signal
[-isolation_sense high | low]
[-location self | parent | fanout]
map_isolation_cell
use_interface_cell
Retention Commands
set_retention
set_retention_control
set_retention_elements
map_retention_cell
Power Model Commands
Power State Table Commands
Logic Editing Commands
Utility Commands
load_upf
load_upf upf_file_name
[-supplemental supf_file_name]
[-scope string]
[-noecho]
[-simulation_only]
[-strict_check string]
save_upf
save_upf upf_file_name
[-supplemental supf_file_name]
[-include_supply_exceptions]
[-full_upf]
Query Commands
Simulation/Verification Extension Commands
Supply Sets
Golden UPF Flow

- 在整個流程中,黃金UPF文件保持不變,它保留了在UPF文件中使用的表單、結構、注釋行和通配符命名。
- 可以使用特定於工具的條件語句在不同的工具中執行不同的任務。這些語句在傳統的UPF-prime流中丟失了。
- power意圖的更改很容易在補充的UPF文件中進行跟蹤
- 您可以選擇使用Verilog netlist來存儲所有PG連接信息,這使得在UPF文件中不必使用connect_supply_net命令。這可以顯著地簡化和減少UPF文件的總體大小。
C4 -- UPF Script Examples
Simple Multivoltage Design

Bottom-Up Power Intent Specification
從內到外的方式,先寫CPU.upf:
create_power_domain PD
create_supply_net VN -domain PD
create_supply_net GN -domain PD
set_domain_supply_net PD -primary_power_net VN -primary_ground_net GN
create_supply_port VN
create_supply_port GN
connect_supply_net VN -ports {VN}
connect_supply_net GN -ports {GN}
之后寫頂層的upf:
load_upf CPU.upf -scope CPU_1
load_upf CPU.upf -scope CPU_2
# still at scope SODIUM
create_supply_port VDD1
create_supply_port VDD2
create_supply_port VSS
create_power_domain PD
create_supply_net VN1 -domain PD
connect_supply_net VN1 -ports {VDD1 CPU_1/VN}
create_supply_net VN2 -domain PD
connect_supply_net VN2 -ports {VDD2 CPU_2/VN}
create_supply_net GN -domain PD
connect_supply_net GN -ports {VSS CPU_1/GN CPU_2/GN}
set_domain_supply_net PD -primary_power_net VN1 -primary_ground_net GN
# PD, CPU_1/PD and CPU_2/PD are different power domains.
使用save_upf命令后工具會自動將頂層導入的其他upf整合到一起。
Top-Down Power Intent Specification
create_power_domain PD_CPU_1 -elements {CPU_1}
create_power_domain PD_CPU_2 -elements {CPU_2}
create_power_domain PD_SODIUM
create_supply_port VDD1
create_supply_port VDD2
create_supply_port VSS
create_supply_net VN1 -domain PD_CPU_1
create_supply_net VN1 -domain PD_SODIUM -reuse
connect_supply_net VN1 -ports {VDD1}
create_supply_net VN2 -domain PD_CPU_2
create_supply_net VN2 -domain PD_SODIUM -reuse
connect_supply_net VN2 -ports {VDD2}
create_supply_net GN -domain PD_CPU_1
create_supply_net GN -domain PD_CPU_2 -reuse
create_supply_net GN -domain PD_SODIUM -reuse
connect_supply_net GN -ports {VSS}
set_domain_supply_net PD_CPU_1 \
-primary_power_net VN1 -primary_ground_net GN
set_domain_supply_net PD_CPU_2 \
-primary_power_net VN2 -primary_ground_net GN
set_domain_supply_net PD_SODIUM \
-primary_power_net VN1 -primary_ground_net GN
Hierarchy and the get_supply_nets Command

create_power_domain PDY -scope L1 -elements {L1}
create_supply_net SN1 -domain L1/PDY
create_supply_port L1/L2/L3/P1
set n [get_supply_nets SN1 -domain L1/PDY -scope L1/L2]
connect_supply_net $n -ports {L1/L2/L3/P1}
# an alternative to connect_supply_net L1/SN1 -ports {L1/L2/L3/P1}
get_supply_nets 可以在指定范圍的指定域中查找與supply net關聯的邏輯網名
上面例子給出了跨層次連接net和port的示例。
特定工具使用建議
VCS NLP Low Power Simulation Flow
Debugging Low-Power Designs Using Verdi
The following is the syntax to compile a low power design:
% vcs -sverilog design_file -upf upf_file -power_top design_top -kdb \ -debug_access+all compile_options
The following is the syntax to invoke the Verdi GUI:
% simv -verdi
Logic Synthesis Using Design Compiler
-
DC可以基於UPF命令和UPF指定的電源狀態自動插入level shifters,isolation cells,rentention registers。
-
DC的輸入文件包括RTL和用戶編寫的UPF,綜合之后會生成一個新的UPF,新的UPF包含了一些綜合過程中與電源管理單元相關的連接,如level shifters,isolation cells,rentention registers。
To synthesize a design with UPF power intent, the top-down flow is the most straightforward. These are the general steps in the flow:
- Read the RTL file.
- Use the load_upf command to read the UPF file.
- Specify the timing and power constraints.
- Compile the design using the compile_ultra command.
- Insert the scan chains using the insert_dft command.
- Use the save_upf command to save the updated constraints into a new UPF file, which can be used as input to downstream tools.
- Write the synthesis netlist into a file, which can be used as input to downstream tools.
電壓域層次范例:

create_power_domain TOP
create_power_domain PD1 -elements {A/D}
create_power_domain PD2 -elements {B/E/J}
create_power_domain PD3 -elements {B/F}
create_power_domain PD4 -elements {B/G}
Specifying Operating Voltages
可以使用set_voltage命令在設計中指定供電網絡的工作電壓。
例如,以下命令指定目標庫、工作條件和為設計提供凈電壓:
## Target Libraries
set target_library "HVT.db LVT.db SVT.db"
## Design operating condition name
set_operating_conditions WC09
## Set voltages on PN1 and PN2 supply nets
set_voltage 1.1 -object_list PN1
set_voltage 0.7 -object_list PN2
電源網絡上設置的電壓必須與UPF中定義的允許電壓一致。
set_voltage命令允許為供電網絡指定最小和最大工作條件電壓。如果只指定一個電壓,它適用於最大工作條件。要指定最大和最小操作條件下的電壓,請使用-min選項,如下面的示例所示:
set_voltage 0.86 -min 1.06 -object_list VDD