这个是低功耗设计的范围,isolation cell 是在一个模块的电源可以关闭,那么这个模块的输出到另一个模块需要port需要加isolation cell, 确保电源关闭是输出不产生X态,
level shift单元主要是两个模块的供电的电压不一样,需要模块port加level shift cell.
在低功耗多电压技术包括MSV, DVFS, AVFS和电源门控Power Gating技术中,为了正确的实现多电压或者某个电压域关断,需要特殊的单元,主要包括:
-
Isolation cells
-
Level shifter cells
-
Power switch cells
-
Always-on cells
-
Retention cells
-
Standard cells with PG (power and ground) pins
-
Memories and other IP with PG pins
下面分别介绍这些特殊的cells
1. Isolation Cell
Isolation cell : 隔离单元,一种可以在某个电源域关断时,可以保持输入或者输出为常数的单元。
Isolation cell (简写为ISO)一般接在可以关断的电源域的输出,防止关掉电源后无效信号传播。
为什么电源域关掉后需要把输出用ISO隔离成常数呢?主要有两个原因:
-
防止虚假的信号传播到未关掉电源的域,造成逻辑错误;
-
防止瞬态开路电流产生的静态功耗;
如下图所示:
当左边的Voltage Area处于关断状态,右边的Voltage Area却始终处于开启状态,左边的PD关断使电路输出悬空,处于未知状态X,可能造成右边的域功能出错。
另外,PMOS管和NMOS管可能同时导通,造成器件短路,形成瞬态开路电流。
一个Shutdown PD的ISO典型摆放如下图所示:
AND和OR门都可以组成一个isolation cell。ISO两种类型:
-
AND类型:输出iso成0;
-
OR类型:输出iso成1;
控制信号power_ctrl必须在AON域。如下图所示:
Isolation cell可以放在input端,output端,或者第三方Voltage Area中,但是考虑到power-on rail的走线,isolation cell自身的功耗,一般还是放在input端比较好,因为放在input端不需要always-on的power。
下面是一个库文件中ISO的描述的例子:
cell(A2ISO_X4) {
is_isolation_cell : true ;
pg_pin(VDD) {
voltage_name : VDD ;
pg_type : primary_power ;
}
pg_pin(VSS) {
voltage_name : VSS ;
pg_type : primary_ground ;
}
pin(A) {
direction : input ;
input_voltage : default ;
related_ground_pin : VSS ;
related_power_pin : VDD ;
isolation_cell_data_pin : true ;
}
pin(EN) {
direction : input ;
input_voltage : default ;
related_ground_pin : VSS ;
related_power_pin : VDD ;
isolation_cell_enable_pin : true ;
}
pin(Y) {
direction : output ;
function : “(A&EN)” ;
output_voltage : default ;
related_ground_pin : VSS ;
related_power_pin : VDD ;
power_down_function : “!VDD + VSS” ;
}
}
一些属性如下:
-
is_isolation_cell: 是否是ISO门;
-
isolation_cell_enable_pin:标明是enable pin
-
isolation_cell_data_pin:标明是输入data pin;
-
power_down_function: 标明何种条件下,ouptut被关断;
从描述可以看到,这是一个AND门的ISO,当EN=0时,输出Y被固定成0.
2 Level Shifter Cell
Level Shifter(LS): 电压/电平转换器的主要作用是将信号从一个电压域切换到另一个电压域。不同电压域的VDD是不一样的,如果不进行电压转换,器件就无法正常工作。
举个例子,将1.0V的电压信号送到1.8V的电压域,有可能连1.8V区域MOS的VTH都达不到(通常VDD越高的工艺对应MOS的VTH也越高),器件自然无法工作了.
如下图所示:
1.0V的驱动对1.8V的接收端来说,如果落在不定态区域(黄色区域),不一定能区分出0/1的电平。
一个LS使用例子如下图所示:
需要在两个Power domain之间插入LS的情况有三种:
-
VDD_PD1 < VDD_PD2;
-
VDD_PD1 > VDD_PD2;
-
VDD_PD1 > VDD_PD2但是两者相差不多;
情况1和情况2如果不插入LS,可能造成功能错误或者芯片不稳定;
情况3虽然VDD_PD1传入VDD_PD2可能能够正确识别逻辑功能,但是由于VDD_PD1和VDD_PD2不是完全相同,为了保证时序,还是需要插入LS;
Level Shifter可以加在source的Voltage Area端,也可以加在destination的Voltage Area端。一般来说,推荐加在destination端,因为不需要连secondary pg pin,更加节省resource。
LS摆放的例子如下图所示:
这里是一个LS库描述的例子:
voltage_map (COREVDD1,1.0)
voltage_map (COREVDD2,0.8)
…
cell (LVL_HL_X1) {
is_level_shifter : true;
level_shifter_type : HL;
input_voltage_range (0.72, 1.1);
output_voltage_range (0.72, 1.1);
pg_pin (VDD) {
pg_type : primary_power;
voltage_name : COREVDD2;
std_cell_main_rail : true;
}
pg_pin (VSS) {
pg_type : primary_ground;
voltage_name : COREGND1;
}
pin(I) {
direction : input;
input_signal_level : COREVDD1;
level_shifter_data_pin : true;
related_ground_pin : VSS;
related_power_pin : VDD;
}
pin(Z) {
direction : output;
output_signal_level : COREVDD2;
power_down_function : “!VDD + VSS”;
function : “I”;
related_ground_pin : VSS;
related_power_pin : VDD;
}
}
上面是一个高电平转低电平(high-to-low )的LS. 有4个门级的属性:
-
is_level_shifter:是否是LS
-
level_shifter_type: LS类型,有三种,HL(high-to-low), LH(low-to-high), HL-LH(可以高低互相转换)
-
input_voltage_range:输入有效电平范围
-
output_voltage_range:输出有效电平范围
还有下面这些pin级的属性:
-
std_cell_main_rail:定义了电源引脚的主电源轨道(main rail)是那个,这个决定了LS能摆放的电源域的位置。
-
level_shifter_data_pin:输入数据
-
input_voltage_range: 输入电压范围
-
output_voltage_range:输出电压范围
-
input_signal_level: 输入电平
-
output_signal_level:输出电平
-
power_down_function:关断条件
上面这个列子是一个buffer类型的LS, 逻辑上相当于一个buffer,只是输入输出的电压不一样。
通常LS和ISO会一起用,所以会把两个cell合成一个,叫做enable level shifter (ELS),如下图所示:
ELS既有LS功能,又有ISO的功能。在库文件中会多一个level_shifter_enable_pin 也就是Enable pin。
3 Power Switches
Power Switches:电源开关单元提供了关闭逻辑域的电源的能力。下图是一个典型的header类型的PG cell:
供电需要数字电VDD和接地VSS,Power Switch可以关断VDD也可以关断VSS, 这样就分为两种PG:
-
header 类型,关断VDD;
-
footer 类型,关断VSS.
上图中是header类型。其中:
VDDG: primary power,主电源,aways-on 电源
VDD: switched power/ virtual power,关断电源,或者叫虚电源
NSLEEPIN信号控制Power Switch
NSLEEPOUT是可选的,只是NSLEEPIN的延时。在PG cell需要串成chain的时候,会需要NSLEEPOUT。
典型的PG cell是一个HVt Cell,这样静态功耗会较小。
下面的列子是一个header switch cells 在lib中的描述:
cell(HEADBUF_X16) {
dont_touch : true ;
dont_use : true ;
switch_cell_type : coarse_grain ;
leakage_power() {
related_pg_pin : “VDDG” ;
value : “0.0245051892” ;
}
/* IV curve information */
dc_current (ivt125x25) {
related_switch_pin : INT ;
related_pg_pin : VDDG ;
related_internal_pg_pin : VDD ;
index_1(“0, 0.0081, 0.0162, 0.0243, 0.0324, \
. . . 0.7776, 0.7857, 0.7938, 0.8019, 0.81”);
index_2(“0, 0.162, 0.324, 0.486, 0.648, 0.6561, \
. . . 0.7776, 0.7857, 0.7938, 0.8019, 0.81”);
values(“2.71498, 2.43708, 2.135, 1.77218”,\
. . .
“ 1.39179e-05, 9.75069e-06, 5.11841e-06, 0”);
}
pg_pin(VDD) {
voltage_name : VDD ;
pg_type : internal_power ;
direction : output ;
switch_function : “!NSLEEPIN” ;
pg_function : “VDDG” ;
}
pg_pin(VDDG) {
voltage_name : VDDG ;
pg_type : primary_power ;
}
pg_pin(VSS) {
voltage_name : VSS ;
pg_type : primary_ground ;
}
pin(INT) {
direction : internal ;
timing () {
related_pin : “NSLEEPIN” ;
timing_sense : negative_unate ;
timing_type : combinational ;
…
}
}
pin(NSLEEPIN) {
direction : input ;
input_voltage : header ;
related_ground_pin : VSS ;
related_power_pin : VDDG ;
switch_pin : true ;
always_on : true ;
}
user_function_class : HEAD ;
}
可以看到:
dont_touch : true ;
dont_use : true ;
don’t_use 属性说明综合工具在综合的时候,不会用这个单元;
dont_touch属性说明,综合工具在优化的时候,是不会优化这个单元;
switch_cell_type : coarse_grain ;PG类型是coarse grain, 只能是这个值;
dc_current属性提供流经开关的电流。这个一般是控制信号INT和VDD的二值查找表;这个值可以用来计算PG on的时候的电源drop和off的时候的漏电流;
related_switch_pin : INT ;控制信号
related_pg_pin : VDDG ; 主电源
related_internal_pg_pin : VDD ;虚电源
switch_function属性指定关闭开关的条件。
pg_function属性指定引脚的功能;
switch_pin属性指定开关单元的控制引脚。
NSLEEPIN pin用always_on属性标记,表示只有always-on逻辑可以驱动该pin。
上面描述的是header类型的switch cell;同样还会有footer 类型的switch cell:
上面讲的两种类型都只有一个控制输入信号:
header type switch cell: NSLEEPIN
footer type switch cell: SLEEPIN
有的Power switch有两个控制输入信号:
header type switch cell: NSLEEPIN1, NSLEEPIN2
footer type switch cell: SLEEPIN1, SLEEPIN2
如下图所示:
这是一种Mother-daughter switch cell 配置:
NSLEEPIN1首先被激活; 这导致子开关(较弱的开关,较大的打开电阻)打开。
随后,NSLEEPIN2被打开,导致较强的母开关(具有较低的打开电阻)打开。
相反的情况通常发生在关闭期间。
这种方法的优点是可以将冲击电流控制在两步,防止电流太大。
4 Always-on Cells
电源管理单元需要保持激活,即使这些单元周围的逻辑已经被关闭,这就行需要用到Always-on cells. AON cell 是一种特殊的cell,它的供电来自于不会被关断的电源域(always-on domain), 但是被摆放在可以被关断的电源域。
AON cell被设计为可以放置在可关断的power domain,因为它的供电是true power或者是main power,或者叫always-on power。和Power Switch类似,AON cell也有header和footer类型两种,对应的供电分别为:
-
VDDG / VSS: header类型
-
VDD / VSSG: footer类型
下面是库文件中header type always-on buffer cell描述的一个例子:
cell (AO_X1) {
always_on : true;
pg_pin (VDD) 8 {
pg_type : primary_power;
voltage_name : COREVDD1;
}
pg_pin (VDDG) {
pg_type : backup_power;
voltage_name : COREVDD2;
}
pg_pin (VSS) {
pg_type : primary_ground;
voltage_name : COREGND1;
}
pin(I) {
direction : input;
related_ground_pin : VSS;
related_power_pin : VDDG;
}
pin(Z) {
direction : output;
power_down_function : “!VDDG + VSS”;
function : “I”;
related_power_pin : VDDG;
related_ground_pin : VSS;
}
}
如上面描述的,供电是VDDG+VSS, 是header类型的AON cell,功能上就相当于一个buffer。
一般的库都提供三种类型的AON cell:
-
header type always-on buffer cell
-
footer type always-on buffer cell
-
always-on inverting cells
AON cell用于可关断电源域中一些需要始终处于激活状态的cell中。
下面的例子是shutdown domain中retention flipflop 需要加上AON cell:
下面另外一个例子是一个信号需要穿过一个可关断电源域,需要增加AON cel:
在物理设计实现过程中,某些类别的单元会被自动视为需要AON单元:
-
enable pins of enable level shifters
-
enable pins of isolation cells
-
save and restore pins of retention cells
-
control pins of switch cells.
这些pin会自动加上AON cell,直到这些特殊单元总是能够被打开和关闭为止。
5 Retention Cells
Retention cell: 保留单元,一种能够在电源关闭的情况下,能保持内部状态的特殊单元。
Retention cell是时序逻辑,有两种类型:
-
retention flip-flop ;
-
retention latch.
A retention cell is comprised of a regular fl ip- fl op (or a
latch) with an additional save -latch that holds the state when the primary power is
shut down and can restore the state when the primary power is restored
一个Retention cell是由一个普通的flip-flop(或者latch) 加上一个额外的save-latch组成。save-latch可以在关电的时候保存状态,在重新上电的时候恢复普通flip-flop的状态。
如下图所示:
可以看到,Retention flip-flop和普通的flip-flop的差别就是多了一个save-latch.
-
Save-latch一般是一个HVt cell, 以节省静态功耗;
-
Save-latch是由备用电源供电;
正常情况下,Retention flip-flop和普通的flip-flop功能一样,但是会把输出锁存在Save-latch中,当电源关掉时,由于Save-latch是由备用电源供电,Save-latch还是保持原有状态;当RESTORE信号拉成1时,Save-latch会把输出送给前面的flip-flop,就能立刻恢复下电时的状态了。
如果需要保留某些关机逻辑的状态,则使用保留单元。保留单元对于希望在关闭后恢复状态的设计非常有用。保留单元有一个主电源和一个备用电源(保持通电)。
一个在可关掉电源域使用保留单元的例子如下面所示:
为了使SAVE/NRESTORE一直生效,使用了always-on cell (AO),always-on cell供电是一直生效的VDDG。SAVE保存数据,NRESTORE恢复数据。
Retention cell 库描述如下所示:
cell(DRFFQX0) {
pg_pin(VDD) {
voltage_name : VDD ;
pg_type : primary_power ;
}
pg_pin(VDDG) {
voltage_name : VDDG ;
pg_type : backup_power ;
}
pg_pin(VSS) {
voltage_name : VSS ;
pg_type : primary_ground ;
}
ff(IQ,IQN) {
clocked_on : “CK” ;
next_state : “(D) (NRESTORE !SAVE)” ;
}
retention_cell : DRFF ;
pin(Q) {
direction : output ;
function : “IQ” ;
related_ground_pin : VSS ;
related_power_pin : VDD ;
power_down_function : “!VDD + !VDDG + VSS” ;
}
pin(NRESTORE) {
direction : input ;
related_ground_pin : VSS ;
related_power_pin : VDDG
retention_pin (restore, “1”);
always_on : true ;
}
pin(SAVE) {
direction : input ;
related_ground_pin : VSS ;
related_power_pin : VDDG
retention_pin (save, “0”);
always_on : true ;
}
}
可以看到DRFFQX0是一个flip-flop类型的Retention cell.
如果是latch类型的Retention cell,那么和普通的latch相比,在data_in属性有区别:
data_in: D; // In a normal latch
data_in: D & (SAVE & RESTORE); // In a retention latch
Retention cell 也被称为SRPG ( State Retention Power Gating) cells.
6 Dual Rail Memories
一个功耗友好的存储器可能会保护如下功能:
-
可以选择性地包括一个电源门控来控制主电源
-
为存储器核心和存储器外围逻辑有提供单独的电源供应
如下图所示:
PG_PE: Memory 外围逻辑的power gate enable
PG_CE: Memory 核心逻辑的power gate enable
不同输入值下不同模式如下所示:
通常需要一个顺序来控制memory从active mode转换到retention mode,再回到active mode。比如,它可能需要:
active mode -> standby mode -> transition mode -> retention mode;
要回到active mode,可能需要:
retention mode -> transition mode -> standby mode -> active mode
7 Summary
这里简单介绍了六种低功耗设计中会用到的特殊单元,加上前面文章介绍的clock gating cells和普通的standard cells, 一共八种cell都是可能会用到的。
但是,并不是所有的技术都会用到所有的这些单元。比如:
多电压设计中,Level shifter cell是必不可少的;
带可关断电源域(shutdown domain)的设计,就必须要使用isolation cells和power switch cells;
如果设计是多电压域,可关断,还需要状态恢复,那么level shifters, isolation cells, power switches, retention registers 和always-on cells 就都需要了。
后记
低功耗技术中使用的特殊单元是低功耗设计的基础,理解这些单元是低功耗设计中必不可少的过程。这些特殊单元都是为了解决低功耗技术中出现的问题而产生的,理解他们也能加深对低功耗技术的理解。
转自:https://zhuanlan.zhihu.com/p/146526532