489315174的个人空间 https://blog.eetop.cn/carlliu [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Perc 超压风险检查与PrimeSim CCK应用

已有 1322 次阅读| 2024-5-18 15:21 |个人分类:日记|系统分类:芯片设计| perc, 超压

  前两天有朋友问怎么检查出有超压风险的器件。他们应用的场景是存在负压的情况。导致在电源与这个负压电源之间的器件有耐压不够的风险。下面是我搭个简单示意图,主要就是找出粉色的器件是否是5v器件,如果不是需要报出来。上面的pmos也是需要做检查如果在正压电源域下,衬底不是接正压电源同样需要报出来。

  如果在复杂的电路中快速检查出这些风险点,我推荐他使用perc来检查。以前有写过多篇检查低压器件接到高压信号的perc脚本。稍作修改即可满足这样的检查需求。

图片

很方便的检查出risk的mos,perc支持flatten和hierarchy的cdl,同样可以检查spice和layout 数据。

图片

Perc的参考code在文章最后面。

是否还有其他方式可以检查出来,这里介绍下PrimeSim CCK feature也可以提供类似的检查。

CCK primeSim 中用于做ERCESD 检查的feature。像一些floating gate node analysisHi-Z node analysisDC path analysisdevice parameter analysismisssing level shifter analysis,等等。我们可以使用built-in command API 来定制相关的检查。跟perc 有些相似。

这里举个简单的例子:检查moswidth/length的比是否小于8.

对应的网表如下:

图片

下面是cck的tcl script:

# callback function to check the device w/l ratio
proc wlratioCheck {inst} {
    global resultFile
    global wlratioMax
    set type [ cckGetInstType $inst ]
    if { $type==$::CCK_MOS } {
      set w [cckGetInstProp $inst "w"]
      set l [cckGetInstProp $inst "l"]
      if { $w/$l < $wlratioMax } {
        set instName [ cckGetInstFullName $inst ]
        puts $resultFile "device $instName W/L ratio is smaller than $wlratioMax"
      }
    }
    return $CCK_FALSE
}
# checking flow starts from reading in the netlist
set wlratioMax 8.0
netlist add20.sp
set fileName "cck.wl"
set resultFile [ open $fileName w ]
cckSearcInst -proc wlratioCheck
close $resultFile

结果:

The cck.wl  output file contains the following example result:

device m172 W/L ratio is smaller than 8.0

device m174 W/L ratio is smaller than 8.0

device m175 W/L ratio is smaller than 8.0

PERC的参考代码如下:

LVS POWER NAME  "?VDD?" 
LVS GROUND NAME "?VSS?"
VARIABLE HV_POWER "VDD25"
VARIABLE HV_NPOWER  "VDDN25"

LAYOUT CASE YES
SOURCE CASE YES
PERC NETLIST SOURCE
PERC REPORT "perc.rep"
MASK SVDB DIRECTORY "svdb" QUERY 

PERC LOAD perclib INIT init SELECT 
deviceInRiskVoltageCheck
//========= Include Files ===========

TVF FUNCTION perclib [/*

package require CalibreLVS_PERC

proc deviceInRiskVoltageCheck {} {
  set rules "Device has risk\n"
  perc::check_device  \
  -pinPathType { {s d} {HV_Domain} } -condition voltageRisk_cond \
  -comment "$rules"
}
proc init {} {
  array set ::mos {}
  set ::mos(IO5_mos)   [list  pch45 nch45]
  set ::mos(IO_mos)    [list  pch18 nch18 pch25 nch25]
  set ::mos(All) [concat $::mos(IO5_mos) $::mos(IO_mos)]
    perc::define_net_type "Power"    lvsPower
    perc::define_net_type "Ground"   lvsGround
    perc::define_net_type "AllPad"   lvsTopPorts
    
    if {[perc::expand_list [tvf::svrf_var HV_POWER] -type net] != ""} {
  puts ">>[perc::expand_list [tvf::svrf_var HV_POWER] -type net]"
      perc::define_net_type "HV_Domain" [perc::expand_list [tvf::svrf_var HV_POWER] -type net]
    }
    if {[perc::expand_list [tvf::svrf_var HV_NPOWER] -type net] != ""} {
  puts ">>[perc::expand_list [tvf::svrf_var HV_NPOWER] -type net]"
      perc::define_net_type "NHV_Domain" [perc::expand_list [tvf::svrf_var HV_NPOWER] -type net]
    }

  perc::create_net_path -subtype $::mos(All) -pin {s d}  -break {Power || Ground} -exclude {Power Ground}
  perc::create_net_path -type $::mos(All) -pin {s d}

}
proc voltageRisk_cond {instance} {
  set select 0
  set mosType [perc::type $instance]
  set mosName [perc::subtype $instance]
  if {[lsearch $::mos(IO_mos) $mosType] || [lsearch $::mos(IO_mos) $mosName]} {
    if {[perc::is_pin_of_path_type $instance {S D} {HV_Domain}] == 1 && \
    [perc::is_pin_of_path_type $instance {S D} {NHV_Domain}] == 1 } { 
      if {[perc::is_pin_of_path_type $instance {B} {HV_Domain}] ==1} {
        set select 0
      } else {
        set select 1
      }      
    }
  } else {    
    set select 0
  }
  return $select
}
*/]



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 8

    月排名
  • 0

    总排名
  • 4

    关注
  • 145

    粉丝
  • 67

    好友
  • 147

    获赞
  • 56

    评论
  • 1378

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-2-16 10:56 , Processed in 0.013582 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部