当一个芯片中的电源数目不止一个的时候,就需要小心谨慎地描述各电源之间的关系。这种设计类型被称为Multi-Voltage(MV)。
一个相对独立的电源区域和周围区域的关系可以简化如下:
VDD IVDD/IVSS ? VSS RVDD/RVSS ? +--------------------+ | PVDD/PVSS | | IVDD/IVSS ? | input | RVDD/RVSS ? | output +--------> +------> level shifter +--------> +------> isolation cell +--------> +------> | retention cell | +--------------------+
如果当前区域的电源电压和外部不同,则信号传输时需要电平转换。这可以通过在信号线中间插入被称为Level Shifter的cell来实现。
如果当前区域或者外部区域中的一个电源被关闭了,则相应的信号线上的被驱动端(sink)就会信号不稳定。这可以通过插入被称为Isolation Cell的cell来实现。
如果当前区域的电源被关闭了,但有些数据又需要在之后重新上电时恢复之前的值,这就需要用到被称之为Retention Cell的逻辑单元(cell)来实现。
Level Shifter很显然可以放在当前区域内部,也可以放在外部。
在IC Compiler中,是通过insert_level_shifter
这个命令来进行操作的。
为了用于描述插入的策略(strategy),下面两个命令应运而生:
Isolation Cell的主要作用是:
从逻辑上看,很显然,Isolation Cell需要一个控制信号(-isolation_signal)来决定工作模式。
这个稳定的信号值(-clamp_value)无非是三种情况:0、1、或者latch(锁存器)的值,显然这对应三种不同的Isolation Cell类型。
由于Isolation Cell需要在相关电源断电的情况下正常工作,它显然需要一个独立的电源供应。这在IC Compiler中被称为 Isolation Power。
用来描述Isolation Cell的插入策略可以用命令:
Isolation Cell主要用于一个电源区域的边界上。Retention Cell则主要用于该区域内部,它可以在该区域断电的情况下保存住特定的值,并在需要时恢复。从功能上看,Retention Cell是个稍微复杂点的寄存器(Register)。从电源供应上看,它显然也需要一个独立的电源供应。这个电源供应在IC Compiler中被称为(Retention Power)。
用来描述Retention Cell的插入策略的命令:
Multi-Voltage类型的芯片设计中,既然电源的开和关是很常见的,自然就需要一类特殊的cell单元来控制电源的开和关。这种类型的cell某种程度上更像是一种特殊的IO Cell,其设计和使用理念也很相像。
最直接的想法就是做成chip中的chip——在芯片内部放置一个小的"IO Ring"。
别外一种想法就是把power switch cell像普通cell一样放置在row上。
TODO
create_supply_set primary_sset create_power_domain PD set_domain_supply_net PD -primary_power_net primary_sset.power \ -primary_ground_net primary_sset.ground \ set_isolation iso_cstr -domain PD \ -isolation_power_net primary_sset.power \ -isolation_ground_net primary_sset.ground \ -clamp_value 0 | 1 | latch \ -applies_to outputs | inputs | both \ -source \ -sink \ -diff_supply_only true | false \ -elements port | pin \ -no_isolation \ # -isolation_supply_set set_isolation_control iso_cstr -domain PD \ -isolation_signal pin | port | net \ -isolation_sense low | high \ -location self | parent | fanout \ set_retention ret_cstr -retention_power_net primary_sset.power \ -retention_ground_net primary_sset.ground create_supply_net VDD -domain PD create_supply_net VSS -domain PD create_supply_set primary_sset -update \ -function {power VDD} \ -function {ground VSS}