低功耗技术——低功耗中使用的特殊单元

这个是低功耗设计的范围,isolation cell 是在一个模块的电源可以关闭,那么这个模块的输出到另一个模块需要port需要加isolation cell, 确保电源关闭是输出不产生X态,
level shift单元主要是两个模块的供电的电压不一样,需要模块port加level shift cell.

在低功耗多电压技术包括MSV, DVFS, AVFS和电源门控Power Gating技术中,为了正确的实现多电压或者某个电压域关断,需要特殊的单元,主要包括:

  1. Isolation cells

  2. Level shifter cells

  3. Power switch cells

  4. Always-on cells

  5. Retention cells

  6. Standard cells with PG (power and ground) pins

  7. Memories and other IP with PG pins

下面分别介绍这些特殊的cells

1. Isolation Cell

Isolation cell : 隔离单元,一种可以在某个电源域关断时,可以保持输入或者输出为常数的单元。

Isolation cell (简写为ISO)一般接在可以关断的电源域的输出,防止关掉电源后无效信号传播。

为什么电源域关掉后需要把输出用ISO隔离成常数呢?主要有两个原因:

  1. 防止虚假的信号传播到未关掉电源的域,造成逻辑错误;

  2. 防止瞬态开路电流产生的静态功耗;
    如下图所示:
    在这里插入图片描述
    当左边的Voltage Area处于关断状态,右边的Voltage Area却始终处于开启状态,左边的PD关断使电路输出悬空,处于未知状态X,可能造成右边的域功能出错。

另外,PMOS管和NMOS管可能同时导通,造成器件短路,形成瞬态开路电流。

一个Shutdown PD的ISO典型摆放如下图所示:

在这里插入图片描述
AND和OR门都可以组成一个isolation cell。ISO两种类型:

  1. AND类型:输出iso成0;

  2. 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” ;

}

}

一些属性如下:

  1. is_isolation_cell: 是否是ISO门;

  2. isolation_cell_enable_pin:标明是enable pin

  3. isolation_cell_data_pin:标明是输入data pin;

  4. 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的情况有三种:

  1. VDD_PD1 < VDD_PD2;

  2. VDD_PD1 > VDD_PD2;

  3. 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个门级的属性:

  1. is_level_shifter:是否是LS

  2. level_shifter_type: LS类型,有三种,HL(high-to-low), LH(low-to-high), HL-LH(可以高低互相转换)

  3. input_voltage_range:输入有效电平范围

  4. output_voltage_range:输出有效电平范围

还有下面这些pin级的属性:

  1. std_cell_main_rail:定义了电源引脚的主电源轨道(main rail)是那个,这个决定了LS能摆放的电源域的位置。

  2. level_shifter_data_pin:输入数据

  3. input_voltage_range: 输入电压范围

  4. output_voltage_range:输出电压范围

  5. input_signal_level: 输入电平

  6. output_signal_level:输出电平

  7. 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:

  1. header 类型,关断VDD;

  2. 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类型两种,对应的供电分别为:

  1. VDDG / VSS: header类型

  2. 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:

  1. header type always-on buffer cell

  2. footer type always-on buffer cell

  3. always-on inverting cells

AON cell用于可关断电源域中一些需要始终处于激活状态的cell中。

下面的例子是shutdown domain中retention flipflop 需要加上AON cell:
在这里插入图片描述
下面另外一个例子是一个信号需要穿过一个可关断电源域,需要增加AON cel:

在这里插入图片描述
在物理设计实现过程中,某些类别的单元会被自动视为需要AON单元:

  1. enable pins of enable level shifters

  2. enable pins of isolation cells

  3. save and restore pins of retention cells

  4. control pins of switch cells.

这些pin会自动加上AON cell,直到这些特殊单元总是能够被打开和关闭为止。

5 Retention Cells

Retention cell: 保留单元,一种能够在电源关闭的情况下,能保持内部状态的特殊单元。

Retention cell是时序逻辑,有两种类型:

  1. retention flip-flop ;

  2. 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.

  1. Save-latch一般是一个HVt cell, 以节省静态功耗;

  2. 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

一个功耗友好的存储器可能会保护如下功能:

  1. 可以选择性地包括一个电源门控来控制主电源

  2. 为存储器核心和存储器外围逻辑有提供单独的电源供应

如下图所示:
在这里插入图片描述
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

  • 17
    点赞
  • 220
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BLE(低功耗蓝牙)是一种通过蓝牙无线技术进行低功耗通信的协议。它是在传统蓝牙(Classic Bluetooth)的基础上发展而来,主要用于物联网、智能家居和健康追踪等领域。 BLE主要特点有以下几个方面: 1. 低功耗:BLE采用了一种优化的通信方式,使设备在通信过程的功耗大大降低,从而延长了设备的电池寿命,这对于需要长时间运行的设备非常重要。 2. 简化传输:BLE使用了一种称为GATT(通用属性)的协议,将数据分为服务和特征,通过读、写或订阅操作来传输数据,这种简化了传输过程,减少了额外的开销。 3. 快速连接:BLE的连接速度比传统蓝牙更快,可以在几十毫秒内建立连接,这对于移动设备和传感器等需要快速响应的设备非常重要。 4. 多设备连接:BLE支持同时连接多个设备,可以通过同一个移动设备与多个BLE设备进行通信,提高了系统的灵活性和可扩展性。 Android提供了一套完整的BLE开发API,开发者可以使用这些API来实现BLE通信功能。在Android,开发BLE应用涉及到四个主要组件:BLE设备扫描、设备连接、数据传输和GATT服务管理。 开发者可以使用Android的BluetoothAdapter类来进行设备扫描和连接操作,可以通过BluetoothGatt类来进行GATT服务的操作,包括读、写、订阅等。 总之,BLE作为一种低功耗的蓝牙通信协议,在物联网和智能设备领域应用广泛。在Android平台上进行BLE开发,可以借助Android提供的API,快速实现BLE通信功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值