…
pg_pin ( <VDD/VSS pin name> ) { #申明电源和地的pg_pin格式
pg_type : primary_power | primary_ground; #他们是主电源和主地
direction : input ; #方向是输入
…
}
/* Virtual power and ground pins use “switch_function” to describe the
logic to
shut off the attached design partition */
pg_pin ( <virtual VDD/VSS pin name>) { #申明内部电源和地,这
就是输出电源/地的端口
pg_type : internal_power | internal_ground;
direction: output; #方向是输出
…
switch_function : “<function_string>”; #定义开断控制功能,例如
SLEEP
pg_function : “<function_string>”;#内部电源或地功能与输入的
pg_pin一致,对于header switch来说就是premary_power的Pin
Name,对于Footer Switch来说就是primary_ground的Pin Name
}
dc_current ( <dc_current_name> ) { #定义不同条件下输出Pin的稳
定电流值,EDA工具利用该数据计算IR Drop,并进行Switch的
优化。
related_switch_pin : <input_pin_name>; #定义控制开断的Pin
related_pg_pin : <VDD pin name>; #定义可以被控制开断的电源
Pin,如果是Footer Switch则是地Pin
related_internal_pg_pin : <Virtual VDD>; #定义不会被关闭的内部
电源Pin,Footer Switch则是地Pin
values(”<float>, …”); #定义不同状态下的该Cell输出的电流值
}
pin (SLEEP) { #Pin SLEEP定义开始,SLEEP只是举例
direction : input;
switch_pin : true; #表示该输入Pin是switch pin,控制电源/地的开
5 / 26
断
…
/* The acknowledge output pin uses “function” to represent the
propagated switching signal
*/
pin(<acknowledge_output_pin_name>) { #定义应答输出Pin开始,
完成开断后,与switch pin状态一致,有的Switch Cell可能没有
该pin
…
function : “<function_string>”; #功能定义,应该与SLEEP状态一
致
power_down_function : “function_string”; #定义关断后电源状态,
如对于Header switch来说可以是!VDD+VSS,而Footer Switch来
说可以是!VSS+VDD
direction : output;
…
} /* end pin group */
} /* end cell group */
另外,为了更好的控制电源通断控制,可以专门设计带有电源控制的逻辑单元,实现时,不需要添加额外的控制电路,这种电源开关结构叫做Fine Grain Power Switch Cell,结构简单,但每个单元都有一个控制器,面积比较大。
下面是一个Fine Grain Power Switch Cell的Liberty格式描述
cell(<cell_name>) { #Fine Grain Power Switch Cell都是某个Cell内
的一部分,不单独出现
is_macro_cell : true; #定义是不是macro cell
switch_cell_type : coarse_grain | fine_grain; #多数设置为fine_grain
pg_pin ( <power/ground pin name> ) { #定义电源信号,primary_是
可以断开的,backup_是不会断开的。
pg_type : primary_power | primary_ground | backup_power |
backup_ground;
direction: input | inout | output;
…
}
/* This is a special pg pin that u ses “switch_function” to describe the
logic to shut
off the attached design partition */
pg_pin ( <internal power/ground pin name>) { #定义内部电源/地
direction: internal | input | output | inout;
pg_type : internal_power | internal_ground;
switch_function : “<function_string>”;
pg_function : “<function_string>”;
…
}
pin (<input_pin_name>) {
direction : input | inout;
switch_pin : true | false; #如果是switch pin就是true
…
}
…
pin(<output_pin_name>) {
direction : output | inout;
power_down_function : <function_string>;
…
6 / 26
} /* end pin group */
} /* end cell group */
3.2.1.2. Isolation Cells
我们知道,在CMOS数字逻辑电路当中,当某根信号为VDD时,我们认为是逻辑1,如果为GND,则认为是逻辑0。但当某块电路不供电后,其输出就失去了驱动,输出网络如果没有其他信号驱动,其电平就会为高阻态,换句话说,就是不知道电压是多少。
因此,在低功耗设计中,如果需要切断某块电路电源的话,则该电路的输出就会出现不定值,而与这些输出连接的电路也就出现输入浮空的状态,因此就需要在关断电路的输出及其连接的模块之间加一个Isolation Cell,在电源关闭时,将输出网络固定在某一个电平上,而打开电源后,该电路的输出等于输入,不影响电路功能。
Isolation Cell可以利用逻辑门来实现,利用与门实现可以使输出在关闭电源时为0,被称为Low Clamped Isolated Signal,利用或门实现可以使输出在关闭电源时为1,被称为High Clamped Isolated Signal,如下图所示,X是输出信号,“ISOLN”和”ISOL”分别是开关控制信号:
图 3-3 逻辑门组成的Isolation Cell
利用逻辑门组成的Isolation Cell,会产生延时,对速度很快的电路来说可能会有所影响,因此也可以利用一个N-MOS或者一个P-MOS以Pull-Up和Pull-Down电路实现,但这会产生多驱动问题,不是常用的方法。
利用逻辑门组成的Isolation Cell是常见的Cell,下面所示是一个Isolation Cell的Liberty 格式描述:
cell(isolation_cell) {is_isolation_cell : true ; #定义该Cell是isolation_cell
…
pg_pin(<pg_pin_name_P>) { #电源Pin定义
pg_type : primary_power;
…
}
pg_pin(<pg_pin_name_G>) { #地Pin定义
pg_type : primary_ground;
…