信号跨越不同级别电压模块进行驱动时,需要使用level shifter。
为什么现在的IC中高低电压差别不大,仍然需要LS(level shifter)?
如果是1V的signal去驱动5V的signal,那么需要LS的理由是很充足的,因为1V的信号在5V的domain中甚至达不到阈值电压。但是为什么如今的IC中高低电压域差别不大,比如0.9v到1.2v,仍然需要LS呢?
这是因为0.9v的信号在1.2v的domain里,会造成PMOS和NMOS的同时开启,产生额外的动态短路电流,也就是internal power。
H2L Level shifer
从高电压到低电压的level shifter,可以是两个反相器的串联。
输入高电平区域信号INH,输出低电平区域信号OUTL,注意供应电源由低电压模块提供
,即图中的VDDL。因此H2L level shifter一般放在低电压模块中,
如果高低电压差别不大,对VDDL的cell的时序影响可接受,是不需要H2L LevelShift的。
从图中可以看出,H2L的level shifter只会引入一个buffer的延迟,对时序的影响较小。
L2H Level shifer
低电压域的信号驱动高电压域的cell时,由于驱动能力不足,会使得高电压域cell的input transition变得更大,也就是说这个信号有更长的时间是处于接近Vth的范围内,从而造成短路电流持续的时间更长,因此消耗更多的internal power。
用低电压区域的信号invert和buffer之后得到的一对信号来驱动工作在高电压区域的交叉耦合晶体管结构。
输入低电平区域信号INL,输出高电平区域信号OUTH,注意电源电压由高电压模块提供,level shifter也放置在高电压模块中
。
L2H level shiter有明显的延迟。
Lib文件中对level shifter的描述
cell(level_shifter) {
is_level_shifter : true ; #定义为true,则该Cell被认为是lever shifter cell
level_shifter_type : HL | LH | HL_LH ; #定义电平转换方向,HL表示高电平转低电平,LH直低电平转高电平,HL_LH表示都可以用
input_voltage_range (, ); #输入电压范围,指该Cell输入连接的电路,电压工作范围,EDA工具会根据Operating Condition的选择,检查该Cell是否满足电路需要,可以在功能pin中进行定义,如果在cell主体定义,则必须与output_voltage_range同时存在
output_voltage_range (, );#输出电压范围,指该Cell输出连接的电路,电压工作范围,EDA工具会根据Operating Condition的选择,检查该Cell是否满足电路需要,可以在功能pin中进行定义,如果在cell主体定义,则必须与input_voltage_range同时存在
…
pg_pin(<pg_pin_name_P>) {
pg_type : primary_power;
std_cell_main_rail : true; #该primary_power连接在Cell设计中的主rail
…
}
pg_pin(<pg_pin_name_G>) {
pg_type : primary_ground;
…
}
pin (data) {
direction : input;
input_signal_level : “<voltage_rail_name>”; #输入信号电压环名
input_voltage_range ( , );
level_shifter_data_pin : true ; #数据功能Pin
…
}/* End pin group /
pin (enable) {
direction : input;
input_voltage_range ( , );
level_shifter_enable_pin : true ; #使能Pin,如果level shifter还作为isolation cell的时候,使能信号会在电源关闭时停止level shifter功能,仅仅作为isolation cell存在
…
}/ End pin group /
pin (output) {
direction : output;
output_voltage_range ( , );
power_down_function : (!pg_pin_name_P + pg_pin_name_G);
…
}/ End pin group /
…
}/ End Cell group */