VCS UPF DEMO解析

目录

1.Getting Started

2. DEMO Locataion

3.DEMO Design

3.1 Micro-Architecture

3.2 Power Domain

3.3 UPF File

4. UPF Analysis

4.1 Create Power Domain

4.2 Create Supply Port

4.3 Create Supply Net

4.4 Connect Supply Net to Port

4.5 Set Primary Power Net

4.6 Insert Power Switch

4.7 Insert Isolation Cell

4.8 Create Retention Register

4.9 Add Power State

4.10 Create PST

4.11 Level Shifter

5. End

6.参考文档



1.Getting Started

        本文主要介绍VCS低功耗DEMO中,UPF文件包含命令的作用,以及对应虚拟出来的电源网络、开关、隔离、Level Shifter以及RR(Retention Register)等。

        除了UPF文件外的其它细节,包括运行方法、DEMO设计细节等均不在本文讨论的范围内,如果关于其他部分有需要交流的,可在评论区留言。

2. DEMO Locataion

        我使用的VCS版本是:vcs-2019.06-SP2,DEMO的路径如下所示。

$VCS_HOME/doc/examples/NLP/MVSIM_NATIVE_DEMO/

        DEMO的运行可以参考如下链接,在本文不再做详细描述。

VCS自带的UPF低功耗仿真demo介绍

3.DEMO Design

3.1 Micro-Architecture

        DEMO Design的微架构设计如下图所示,是一个 32\times 32 有符号乘法器。它采用基4-Booth算法产生部分和,紧接着用4:2的进位保留加法器 Wallce Tree累加部分和,最后使用超前进位加法器得到最后的乘法结果。

        其中InstDecode为指令译码模块,GPRs为通用寄存器模块,Multiplier为32\times 32有符号乘法器。InstDecode和GPRs数据双向流动,GPRs和Multiplier数据双向流动,InstDecode和Multiplier之间无数据通路。

图2.1 DEMO设计 微架构图

3.2 Power Domain

        基于上述的Design,DEMO将其划分为五个电源域:TOP、INST、GPRS、MULT以及GENPP,分别对应Desgin中的ChipTop、InstDecode、GPRs、Multiplier和GENPP模块。

图2.2 DEMO Power Domain​

 3.3 UPF File

        上述电源方案对应的UPF文件如下所示

    ## CREATE POWER DOMAIS
    ######################
    create_power_domain TOP
    create_power_domain MULT  -elements Multiplier
    create_power_domain INST  -elements InstDecode
    create_power_domain GPRS  -elements GPRs
    create_power_domain GENPP -elements Multiplier/GENPP
    
    
    ## TOPLEVEL CONNECTIONS
    #######################
    # VDD
    create_supply_port VDD
    create_supply_net  VDD   -domain TOP
    create_supply_net  VDD   -domain GENPP -reuse
    connect_supply_net VDD   -ports VDD
    
    
    # VSS
    create_supply_port VSS
    create_supply_net  VSS   -domain TOP
    create_supply_net  VSS   -domain INST -reuse
    create_supply_net  VSS   -domain GPRS -reuse
    create_supply_net  VSS   -domain MULT -reuse
    create_supply_net  VSS   -domain GENPP -reuse
    connect_supply_net VSS   -ports VSS
    
    
    # VDDI
    create_supply_port VDDI
    create_supply_net  VDDI   -domain TOP
    create_supply_net  VDDI   -domain INST -reuse
    connect_supply_net VDDI   -ports VDDI
    create_supply_net  VDDIS  -domain TOP
    create_supply_net  VDDIS  -domain INST -reuse
    
    
    # VDDG
    create_supply_port VDDG
    create_supply_net  VDDG   -domain TOP
    create_supply_net  VDDG   -domain GPRS -reuse
    connect_supply_net VDDG   -ports VDDG
    create_supply_net  VDDGS  -domain GPRS

    # VDDM
    create_supply_port VDDM
    create_supply_net  VDDM   -domain TOP
    create_supply_net  VDDM   -domain MULT -reuse
    connect_supply_net VDDM   -ports VDDM
    create_supply_net  VDDMS  -domain MULT
    
    
    ## PRIMARY POWER NETS
    #####################
    set_domain_supply_net TOP   -primary_power_net VDD   -primary_ground_net VSS
    set_domain_supply_net INST  -primary_power_net VDDIS -primary_ground_net VSS
    set_domain_supply_net GPRS  -primary_power_net VDDGS -primary_ground_net VSS
    set_domain_supply_net MULT  -primary_power_net VDDMS -primary_ground_net VSS
    set_domain_supply_net GENPP -primary_power_net VDD   -primary_ground_net VSS
    
    
    ## INST SETUP
    #############
    # SWITCH
    create_power_switch inst_sw \
      -domain TOP \
      -input_supply_port {in VDDI} \
      -output_supply_port {out VDDIS}\
      -control_port {inst_on inst_on}\
      -on_state {state2001 in  {!inst_on}}

# ISO
    set_isolation inst_iso_in \
      -domain INST \
      -isolation_power_net VDD -isolation_ground_net VSS \
      -clamp_value 1 \
      -applies_to inputs
    
    set_isolation_control inst_iso_in \
      -domain INST \
      -isolation_signal inst_iso_in \
      -isolation_sense high \
      -location parent
    
    set_isolation inst_iso_out \
      -domain INST \
      -isolation_power_net VDD -isolation_ground_net VSS \
      -clamp_value 1 \
      -applies_to outputs
    
    set_isolation_control inst_iso_out \
      -domain INST \
      -isolation_signal inst_iso_out \
      -isolation_sense low \
      -location parent
    
    set_isolation inst_iso_in_reset \
      -domain INST \
      -elements InstDecode/reset \
      -applies_to inputs \
      -no_isolation

    # RETAIN
    set_retention inst_ret -domain INST \
      -retention_power_net VDDI -retention_ground_net VSS
    
    set_retention_control inst_ret -domain INST \
      -save_signal {inst_save high} \
      -restore_signal {inst_nrestore low}

   ## GPRS SETUP
    #############
    # SWITCH
    create_power_switch gprs_sw \
      -domain GPRS \
      -input_supply_port {in VDDG} \
      -output_supply_port {out VDDGS} \
      -control_port {gprs_on gprs_on} \
      -on_state {state2002 in {!gprs_on}}
    
    
    # ISO
    set_isolation gprs_iso_in \
      -domain GPRS \
      -isolation_power_net VDD -isolation_ground_net VSS \
      -clamp_value 1 \
      -applies_to inputs
    
    set_isolation_control gprs_iso_in \
      -domain GPRS \
      -isolation_signal gprs_iso_in \
      -isolation_sense high \
      -location parent
    
    set_isolation gprs_iso_out \
      -domain GPRS \
      -isolation_power_net VDD -isolation_ground_net VSS \
      -clamp_value 1 \
      -applies_to outputs
    
    set_isolation_control gprs_iso_out \
      -domain GPRS \
      -isolation_signal gprs_iso_out \
      -isolation_sense low \
      -location parent
    
    set_isolation gprs_iso_in_reset \
      -domain GPRS \
      -applies_to inputs \
      -elements GPRs/reset \
      -no_isolation

    # RETAIN
    set_retention gprs_ret -domain GPRS \
      -retention_power_net VDDG -retention_ground_net VSS
    
    set_retention_control gprs_ret -domain GPRS \
      -save_signal {gprs_save high} \
      -restore_signal {gprs_nrestore low}

    ## MULT SETUP
    #############
    # SWITCH
    create_power_switch mult_sw \
      -domain MULT \
      -input_supply_port {in VDDM} \
      -output_supply_port {out VDDMS} \
      -control_port {mult_on mult_on} \
      -on_state {state2003 in {!mult_on}}
    
    # ISO
    set_isolation mult_iso_out \
      -domain MULT \
      -isolation_power_net VDD -isolation_ground_net VSS \
      -clamp_value 1 \
      -applies_to outputs
    
    set_isolation_control mult_iso_out \
      -domain MULT \
      -isolation_signal mult_iso_out \
      -isolation_sense high \
      -location parent

    ## GENPP SETUP
    ##############
    set_isolation mult_iso_in \
      -domain GENPP \
      -isolation_power_net VDD -isolation_ground_net VSS \
      -clamp_value 1 \
      -applies_to inputs \
    
    set_isolation_control mult_iso_in \
      -domain GENPP \
      -isolation_signal mult_iso_in \
      -isolation_sense high \
      -location self
    
    set_isolation mult_iso_in_isoen \
      -domain GENPP \
      -elements Multiplier/GENPP/iso_in \
      -applies_to inputs \
      -no_isolation

    # ADD PORT STATE INFO
    #####################
    add_port_state VDD   -state {HV  1.08}
    
    add_port_state VDDI  -state {HV  1.08}\
                         -state {LV  0.864}
    
    add_port_state inst_sw/out -state {HV  1.08}\
                               -state {LV  0.864}\
                               -state {OFF off}
    
    add_port_state VDDG  -state {HV  1.08}\
                         -state {LV  0.864}
    
    add_port_state gprs_sw/out -state {HV  1.08}\
                               -state {LV  0.864}\
                               -state {OFF off}
    
    add_port_state VDDM  -state {HV  1.08}
    
    add_port_state mult_sw/out -state {HV  1.08}\
                               -state {OFF off}
    
    
    ## CREATE PST
    #############
    create_pst chiptop_pst -supplies         {VDD VDDI VDDIS VDDG VDDGS VDDM VDDMS}
    add_pst_state s0  -pst chiptop_pst -state {HV  HV   HV    HV   HV    HV   HV}
    add_pst_state s01 -pst chiptop_pst -state {HV  HV   OFF   HV   HV    HV   HV}
    add_pst_state s02 -pst chiptop_pst -state {HV  HV   HV    HV   OFF   HV   HV}
    add_pst_state s03 -pst chiptop_pst -state {HV  HV   HV    HV   HV    HV   OFF}
    add_pst_state s1  -pst chiptop_pst -state {HV  LV   LV    LV   LV    HV   HV}
    add_pst_state s11 -pst chiptop_pst -state {HV  LV   OFF   LV   LV    HV   HV}
    add_pst_state s12 -pst chiptop_pst -state {HV  LV   LV    LV   OFF   HV   HV}
    add_pst_state s13 -pst chiptop_pst -state {HV  LV   LV    LV   LV    HV   OFF}
    

4. UPF Analysis

        下面对UPF涉及到的各个命令进行分析。

4.1 Create Power Domain

        首先是创建电源域,根据图2.1所示,设计包含五个电源域,分别对应五个模块。如下命令使用 create_power_domain 创建电源域并使用-elements 选项和实例化模块对应起来。 需要注意的是,-elements 后面对应的是RTL中的实例化名称,而非模块名称。

    create_power_domain TOP
    create_power_domain MULT  -elements Multiplier
    create_power_domain INST  -elements InstDecode
    create_power_domain GPRS  -elements GPRs
    create_power_domain GENPP -elements Multiplier/GENPP

        最后划分出来的电源域如图4.1所示,每个颜色代表不同的电源域。

图4.1 Power Domain

        其中,红色代表TOP电源域,对应模块顶层ChipTop;黄色代表INST电源域,对应模块InstDecode(实例化名称);绿色代表GPRS电源域,对应模块GPRs;橙色代表MULT电源域,对应模块Multiplier;蓝色对应GENPP电源域,对应Multiplier模块内实例化的GNPP模块。

        create_power_domain 创建电源域是以Module为范围的,Module范围内所有的实例化模块都属于同一个电源域。例如上述创建MULT电源域时,其中的实例化模块GENPP和ADDPP以及内部的实例化模块都属于MULT。但同时为GENPP创建了独立的电源域,所以Multiplier内部除了GENPP外,其他仍属于MULT电源域。

4.2 Create Supply Port

        使用命令 create_supply_port 为设计创建电源端口。在RTL层面上,这个端口是虚拟的,仅用于仿真。3.3中13、20、30、39、47行,分别创建了不同的电源端口VDD、VSS、VDDI、VDDG和VDDM。

create_supply_port VDD
create_supply_port VSS
create_supply_port VDDI
create_supply_port VDDG
create_supply_port VDDM

        上述命令创建的端口如图4.2红圈所示。

图4.2 Supply Port

4.3 Create Supply Net

        使用命令 create_supply_net 创建电源网络,以便后续给各个电源域供电。以创建VDD电源网络为例,3.3中 14、15行在TOP和GENPP电源域创建了相应的电源网络。-reuse 选项是指VDD Net Name的重用,可以理解成TOP和GENPP电源域的VDD-Net连接起来。

create_supply_net  VDD   -domain TOP
create_supply_net  VDD   -domain GENPP -reuse

        上述命令创建的VDD Supply Net如下图红框圈出来的灰色线所示。

图4.3 VDD Supply Net

        同样地,如下命令分别创建VSS-Net、VDDI-Net、VDDIS-Net、VDDG-Net、VDDGS-Net、VDDM-Net和VDDMS-Net。

#VSS 
create_supply_net  VSS   -domain TOP
create_supply_net  VSS   -domain INST -reuse
create_supply_net  VSS   -domain GPRS -reuse
create_supply_net  VSS   -domain MULT -reuse
create_supply_net  VSS   -domain GENPP -reuse

#VDDI
create_supply_net  VDDI   -domain TOP 
create_supply_net  VDDI   -domain INST -reuse
#VDDIS
create_supply_net  VDDIS  -domain TOP 
create_supply_net  VDDIS  -domain INST -reuse


#VDDG
create_supply_net  VDDG   -domain TOP 
create_supply_net  VDDG   -domain GPRS -reuse
#VDDGS
create_supply_net  VDDGS  -domain GPRS

#VDDM
create_supply_net  VDDM   -domain TOP 
create_supply_net  VDDM   -domain MULT -reuse
#VDDMS
create_supply_net  VDDMS  -domain MULT

        DEMO中所有Supply Net创建好后如下图4.4所示,灰色的线表示3.3中所有 create_supply_net 创建的Supply Net。

图4.4 Supply Net

 4.4 Connect Supply Net to Port

        创建好供电端口和网络之后,下一步是将它们连接起来。使用命令 connect_supply_net 完成这一动作。

connect_supply_net VDD    -ports VDD
connect_supply_net VSS    -ports VSS
connect_supply_net VDDI   -ports VDDI
connect_supply_net VDDG   -ports VDDG
connect_supply_net VDDM   -ports VDDM

        第1行代码表示,VDD-Net 连接至VDD-Supplu Port,其余命令完成相似的连接。上述命令连接好的情况如下图4.5所示。注意图4.5和图4.4的区别。

图4.5 Net to Port

4.5 Set Primary Power Net

        创建好基础的电源网络,并连接至电源端口后,指定各个电源域的主要供电Net。命令 set_domain_supply_net 完成这一动作。

## PRIMARY POWER NETS
#####################
set_domain_supply_net TOP   -primary_power_net VDD   -primary_ground_net VSS
set_domain_supply_net INST  -primary_power_net VDDIS -primary_ground_net VSS
set_domain_supply_net GPRS  -primary_power_net VDDGS -primary_ground_net VSS
set_domain_supply_net MULT  -primary_power_net VDDMS -primary_ground_net VSS
set_domain_supply_net GENPP -primary_power_net VDD   -primary_ground_net VSS

        上述命令完成的动作如图4.6所示。图中红色圆框圈出来的带+的圆表明电源域的供电口,带-的圆圈表明电源域的地。以GPRS电源域为例,其供电口连接的Net是VDDGS,地端是VSS。

图4.6 Primary Supply Net

4.6 Insert Power Switch

        紧接着是设置电源开关,以完成Power Gating的操作。命令 create_power_switch 完成该操作。需要注意的是,在RTL层级,该开关也是虚拟出来的。

create_power_switch inst_sw \
   -domain TOP \
   -input_supply_port {in VDDI} \
   -output_supply_port {out VDDIS} \
   -control_port {inst_on inst_on} \
   -on_state {state2001 in  {!inst_on}}

        对上述命令做如下解释:    

  • 其中inst_sw 为开关的名字,作用域为TOP;
  • 该开关的电源输入口命名为in, 连接的Supply Net为VDDI,电源输出口命名为out,连接的Supply Net为VDDIS;
  • 开关的控制端口命名为inst_on,连接的实际Port为顶层ChipTop的输入端口inst_on;
  • -on_state指定状态名为state2001,指定的输入电源port为in,{!inst_on}表明控制端口是低有效。

        如果控制信号来自于其他模块的端口信号,可参考如下写法。其中InstDecode为顶层ChipTop下的实例化模块名称,inst_on则是其中一个输出端口。

-control_port {inst_on InstDecode/inst_on} \

        上述命令构建的虚拟开关如下图4.7红框所示。其中控制端口inst_on是Chip_Top的顶层输入端口,当inst_on为低电平时,开关inst_sw打开,VDDI供电到VDDIS,最终给INST电源域供电,完成Power Gating的功能。

图4.7 VDDI Power Switch

同样地,如下命令创建的其余Power Swith如下图4.8 所示。

## GPRS SETUP
#############
# SWITCH
create_power_switch gprs_sw \
   -domain GPRS \
   -input_supply_port {in VDDG} \
   -output_supply_port {out VDDGS} \
   -control_port {gprs_on gprs_on} \
   -on_state {state2002 in {!gprs_on}}

## MULT SETUP
#############
# SWITCH
create_power_switch mult_sw \
   -domain MULT \
   -input_supply_port {in VDDM} \
   -output_supply_port {out VDDMS} \
   -control_port {mult_on mult_on} \
   -on_state {state2003 in {!mult_on}}
图4.8 Power Switch

4.7 Insert Isolation Cell

       Isolation Cell的作用是电源域掉电之后,能为其他模块输出稳定的值。 插入隔离单元需要通过 set_isolation 和 set_isolation_control 配合完成。

# INST SETUP
# ISO
set_isolation inst_iso_out \
   -domain INST \
   -isolation_power_net VDD -isolation_ground_net VSS \
   -clamp_value 1 \
   -applies_to outputs
    
set_isolation_control inst_iso_out \
   -domain INST \
   -isolation_signal inst_iso_out \
   -isolation_sense low \
   -location parent

        set_isolation:

  • Isolation Cell的名称为inst_iso_out,作用域为INST;
  • Cell的供电Net是 VDD,地端为VSS;
  • -clamp_value 1表示隔离打开时,恒定输出高电平1。同样地,0表示恒定输出低电平;
  • -applies_to outputs 表示对INST电源域的所有Output Port都加上Isolation Cell。

        set_isolation_control:

  • 控制修改的Isolation Cell名称为 inst_iso_out,必须与set_isolation设定的名称一致;
  • 作用域为INST;
  • -isolation_signal inst_iso_out 表示Cell的控制信号为顶层ChipTop的其中一个Port:inst_iso_out;
  • -isolation_sense low 表示控制信号低有效,即当Port inst_iso_out为低时,隔离打开。同样地,设置为high时,表示高有效。
  • -location parent 表示Isolation Cell的位置位于父节点,即上一级。在该DEMO中,Isolation Cell:inst_iso_out位于InstDecode的上一层,即ChipTop。

        如果控制信号来自于某一个模块的Port,而非顶层时,参考写法如下。

   -isolation_signal InstDecode/inst_iso_out 

        如果Isolation Cell的位置需要放到InstDecode中,而非上一层时,参考写法如下。

   -location self

        上述命令产生的Isolation Cell: inst_iso_out,如下图4.9红框所示。

图4.9 INST OUT Isolation Cell

         同样地,3.3中其余创建Isolation Cell的命令运行后,产生的效果如下图4.10所示。图中红框标出了各Isolation Cell的位置。

图4.10 Isolation Cell

       该DEMO中,将INST域所有端口都加上了Isolation Cell,除了复位端口。 因此,用如下命令取消了复位端口{reset}上的Isolation Cell:

set_isolation inst_iso_in_reset \
  -domain INST \
  -elements InstDecode/reset \
  -applies_to inputs \
  -no_isolation
  • -elements InstDecode/reset 表示需要操作的Isolation Cell 位于InstDecode的reset端口上
  • -no_isolation 表示将该端口上的isolation Cell取消掉

        以INST域为例,最终的添加结果是,除了{reset}端口外,其余所有输入输出端口都加上了Isolation Cell

4.8 Create Retention Register

      RR寄存器是一种特殊的寄存器,其作用是在关断电源后保留相应的寄存器数据,普通的寄存器掉电之后数据就不可用了。替换RR寄存器需要通过命令set_retention 和 set_retention_control来完成。

在INST域中,使用的命令如下所示:

set_retention inst_ret -domain INST \
  -retention_power_net VDDI -retention_ground_net VSS
    
set_retention_control inst_ret -domain INST \
  -save_signal {inst_save high} \
  -restore_signal {inst_nrestore low}
  • inst_ret:RR寄存器的Name
  • -domain INST:表示作用域为INST
  • -retention_power_net VDDI :表示RR寄存器的供电端Net 为VDDI (设置为关电的Power Net,表示需要保持VDDI电源域的数据)
  • -retention_ground_net VSS:地端为VSS
  • -save_signal {inst_save high} :RR寄存器save端由信号{inst_save}控制,高电平有效
  • -restore_signal {inst_nrestore low}:RR寄存器restore端由信号{inst_nrestore}控制,低电平有效

        同样地,如果设计中存在电源管理模块,RR寄存器的save和restore受控于电源管理模块,则在添加信号时,需要在前面加上实例化的模块名:

-save_signal {u_pwr_mng/inst_save high}
-restore_signal {u_pwr_mng/inst_restore low}

最后产生的效果如下图4.11所示:

图4.11 INST域RR寄存器

整个DEMO中只有INST和GPRS域使用了RR寄存器,最终产生的效果如下图4.12所示:

图4.12 RR寄存器替换

4.9 Add Power State

        DEMO的设计中,每个Power Port的供电情况不一样,使用命令add_port_state为每个电源端口指定可能出现的电压情况,以供仿真分析。

add_port_state VDD   -state {HV  1.08}
    
add_port_state VDDI  -state {HV  1.08}\
                     -state {LV  0.864}
    
add_port_state inst_sw/out -state {HV  1.08}\
                           -state {LV  0.864}\
                           -state {OFF off}
    
add_port_state VDDG  -state {HV  1.08}\
                     -state {LV  0.864}
    
add_port_state gprs_sw/out -state {HV  1.08}\
                           -state {LV  0.864}\
                           -state {OFF off}
    
add_port_state VDDM  -state {HV  1.08}
    
add_port_state mult_sw/out -state {HV  1.08}\
                           -state {OFF off}
  • add_port_state VDD -state{HV 1.08} :设置VDD的供压为1.08V,并将该状态命名为HV(High Voltage)
  • add_port_state VDDI -state {HV 1.08} -state{LV 0.864}:设置VDDI高压供电为1.08V,低压供电为0.864V
  • add_port_state inst_sw/out -state{HV 1.08} -state{LV 0.864} -state{OFF off}:设置INST域电源开关{inst_sw}输出端的电压情况,一共为三种高压(HV 1.08V)、低压(LV 0.864V)和关断(OFF off)状态。前两种情况是由于开关的电源输入端来源于VDDI(VDDI有HV和LV两种情况),最后一种情况是由于开关处于断开状态时,该端口输出电压就相当于关断状态。

4.10 Create PST

         电路实际的工作过程中,电源的开关以及高低压供电状态比较多,需要工程师将所有的电源情况都列出来,以方便工具在仿真过程中对各种情况进行分析。PST全程Power State Tabe,即电源状态表,工具通过这个表去分析不同电源情况下,电路的工作状态。

## CREATE PST
#############
create_pst chiptop_pst -supplies         {VDD VDDI VDDIS VDDG VDDGS VDDM VDDMS}
add_pst_state s0  -pst chiptop_pst -state {HV  HV   HV    HV   HV    HV   HV}
add_pst_state s01 -pst chiptop_pst -state {HV  HV   OFF   HV   HV    HV   HV}
add_pst_state s02 -pst chiptop_pst -state {HV  HV   HV    HV   OFF   HV   HV}
add_pst_state s03 -pst chiptop_pst -state {HV  HV   HV    HV   HV    HV   OFF}
add_pst_state s1  -pst chiptop_pst -state {HV  LV   LV    LV   LV    HV   HV}
add_pst_state s11 -pst chiptop_pst -state {HV  LV   OFF   LV   LV    HV   HV}
add_pst_state s12 -pst chiptop_pst -state {HV  LV   LV    LV   OFF   HV   HV}
add_pst_state s13 -pst chiptop_pst -state {HV  LV   LV    LV   LV    HV   OFF}

  • chiptop_pst:PST的Name,可自行命名;
  • -supplises {VDD VDDI VDDIS VDDG VDDM VDDMS}:列出所有的电源Net;
  • s0、s01、...、s13 :电源状态Name,可自行命名;
  • -pst chiptop_pst:指定为chiptop_pst 的表中添加电源状态;
  • -state { A B C D E F G}:指定各电源的状态,必须和-supplises指定的电源端口顺序一致。

4.11 Level Shifter

        Level Shifter主要用于解决信号在高低压电源域间传输时,由于电压不匹配导致高低电平判断出错的问题。这一小节应该放在前面介绍,但由于该DEMO的UPF中实际上没有添加Level Shifter的命令,所以放在这进行补充。另一个原因在于,我认为该DEMO是需要添加Level Shifer的,因为GPRS和Mul模块间存在数据通路,同时PST的s1、s11、s12和s13状态中,GPRS域的供压为VDDG为LV,而Mul域的供压VDDM为HV,两者的电压域并不一致。 这也是我疑惑的一个点。 一个我认为可能比较合理的解释是:HV:1.08V和LV:0.864V的VIH、VOH、VIL、VOL其实相差不大,所以不会出现高低电平无法判断的问题。

        绕的有点远了,在UPF中建模Level Shifter的命令是:set_level_shifter。 参考如下:

set_level_shifter inst_lv_hv \
  -domain GPRS \
  -applies_to outputs \
  -threshold 0.1 \
  -rule low_to_high \
  -location parent 
  • inst_lv_hv:Level Shifter Name;
  • -domain:作用域为INST
  • -applies_to outputs :作用在INST域的所有输出端口,如果是输入可以写成:inputs
  • -rule low_to_high:表示该level shifter用于低压到高压的转换,反过来,可写成:high_to_low
  • -locataion parent:Level Shifter位于INST的父域,即顶层。
  • -threshold 0.1:这个的官方描述如下图4.13所示。我不太理解,这个的意思是不是指在电压只要超过0.1的地方就设置一个Level Shiftter?如果有知道的朋友,可以留言告诉我,万分感谢。
图4.13 set_level_shifter -threshold

插入Level Shiftter后产生的效果如下图4.14红框处所示

图4.14 Level Shifter

        同样地,上述命令是将所有输出端口都加上了Level Shifter,实际上可能不需要,使用set_level_shifter命令的-no_shift选项将其去除,和4.7小结isolation cell的去除一样。 这里不再展开描述。

图4.15 -no_shifter

5. End

        最后产生的整体效果如下图4.16所示,因为DEMO中是没有Level Shifter的,所以图中没有展示相关的器件。

​​​​​图4.16 Power Domain​​​

        后续可以展开的工作有几个地方:

  1. 4.11提出来的两个问题,希望有朋友能给我解惑;
  2. UPF在前仿的作用相当于建模,在实际仿真过程中不会生成相关的Power Port、Power Switch、Isolation Cell、Retention Register以及Level Shifter。可以在综合过程中,导入UPF文件,使得产生的网表包含这些器件。但该DEMO并没有提供综合相关的环境,希望如果有朋友完成了这件事可以分享一下这个过程。

        最后,如果对文章中的内容有疑问可以在留言中告诉我,欢迎交流。

        码字不易,转载注明出处,谢绝复制转成“原创”,虽然是公开交流,但也不希望被抄袭。

6.Reference

  • 《IEEE_1801_2009_UPF_2.0》
  • 《IEEE_1801-2013_UPF_2.1》
  • 《IEEE_1801_2015_UPF_3.0》
  • 《VCS Native Low Power(NLP) User Guide》

  • 36
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值