当一个芯片中的电源数目不止一个的时候,就需要小心谨慎地描述各电源之间的关系。这种设计类型被称为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}