在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜全文
查看: 341|回复: 10

[求助] calibre perc求助

[复制链接]
发表于 2025-9-10 10:15:44 | 显示全部楼层 |阅读模式
购买主题 已有 1 人购买  本主题需向作者支付 30 信元资产 才能浏览
发表于 2025-9-10 10:36:25 | 显示全部楼层
???
回复 支持 反对

使用道具 举报

发表于 2025-9-10 10:37:25 | 显示全部楼层
???
回复 支持 反对

使用道具 举报

发表于 2025-9-10 10:37:48 | 显示全部楼层
???
回复 支持 反对

使用道具 举报

发表于 2025-9-10 11:34:27 | 显示全部楼层
这是什么反向操作?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-10 11:47:23 | 显示全部楼层
# ---- SVRF header ----
SOURCE PATH "src.net"
SOURCE PRIMARY "TOP"
SOURCE SYSTEM SPICE

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

# Load TVF: init then rule
PERC LOAD aerc INIT init_pad_through_R SELECT rule_gate_to_pad

# ---- TVF / Tcl ----
TVF FUNCTION aerc {} {
  package require CalibreLVS_PERC

  # Define PAD nets and resistor-only path
  proc init_pad_through_R {} {
    perc::define_net_type PAD {lvsTopPorts}
    perc::create_net_path -type {R} -pin {p n}
    # If you must enforce R >= 100 Ω, use:
    # perc::create_net_path -type {R} -property {r >= 100} -pin {p n}
  }

  # Select MOS whose gate path can reach PAD, then collect PAD names
  proc rule_gate_to_pad {} {
    perc::check_device -type {MN MP} \
      -pinPathType {{g} {PAD}} \
      -condition gate_to_pad_report \
      -comment "Gate→R→PAD: list PAD names"
  }

  proc gate_to_pad_report {dev} {
    set gnet [perc::get_nets [perc::get_pins $dev -name g]]
    set top_ports [perc::expand_list lvsTopPorts -type net]
    set heads [perc::name $gnet -fromTop -pathHead]
    set pads {}
    foreach h $heads { if {[lsearch -exact $top_ports $h] >= 0} { lappend pads $h } }
    if {[llength $pads] > 0} {
      puts [format "DEV=%s GATE->R->PAD: %s "[perc::name $dev] [join $pads ", "]]
      return 1
    }
    return 0
  }
}  花了半天整出来的代码,不知道有没有简单的方式,我刚入门,不太熟
回复 支持 反对

使用道具 举报

发表于 2025-9-10 12:25:21 | 显示全部楼层
# ---- SVRF header ----
SOURCE PATH "src.net"
SOURCE PRIMARY "TOP"
SOURCE SYSTEM SPICE

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

# 参数:是否要求 R >= 100Ω
# 0 = 不要求;1 = 要求
PERC PARAM USE_R_GE_100 0

# ---- TVF / Tcl ----
TVF FUNCTION aerc {} {
  package require CalibreLVS_PERC

  # 工具函数:取两个列表的交集(去重)
  proc lintersect {listA listB} {
    set seen {}
    set bset {}
    foreach x $listB { set bset($x) 1 }
    foreach x $listA {
      if {[info exists bset($x)] && ![info exists seen($x)]} {
        set seen($x) 1
        lappend out $x
      }
    }
    return [info exists out] ? $out : {}
  }

  # 全局缓存,只运行一次就好
  namespace eval ::aerc_cache {
    variable top_ports {}
  }

  # 1) 定义 PAD 类型 + 电阻路径
  proc init_pad_through_R {} {
    perc::define_net_type PAD {lvsTopPorts}

    # 根据参数决定是否加 R>=100Ω 条件
    if {[perc::get_param USE_R_GE_100]} {
      perc::create_net_path -type {R} -property {r >= 100} -pin {p n}
    } else {
      perc::create_net_path -type {R} -pin {p n}
    }

    # 缓存顶层端口名(只展开一次)
    set tp [perc::expand_list lvsTopPorts -type net]
    set tp_names {}
    foreach n $tp { lappend tp_names [perc::name $n -fromTop] }
    set ::aerc_cache::top_ports [lsort -unique $tp_names]
  }

  # 2) 规则:检查 MOS gate 是否能经 R-only 路径连到 PAD
  proc rule_gate_to_pad {} {
    perc::check_device -type {MN MP} \
      -pinPathType {{g} {PAD}} \
      -condition gate_to_pad_report \
      -comment "Gate→R→PAD: 列出 PAD 名称"
  }

  # 3) 回调:输出能到达的 PAD 名称
  proc gate_to_pad_report {dev} {
    # 获取 gate net 的路径头(顶层名)
    set gnet   [perc::get_nets [perc::get_pins $dev -name g]]
    set heads  [perc::name $gnet -fromTop -pathHead]

    # 与顶层端口求交集,即为 PAD
    set pads [lintersect $heads $::aerc_cache::top_ports]

    if {[llength $pads] > 0} {
      puts [format "DEV=%s GATE->R->PAD: %s" [perc::name $dev] [join $pads ", "]]
      return 1
    }
    return 0
  }

  # 执行初始化 + 规则
  init_pad_through_R
  rule_gate_to_pad
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-10 14:30:09 | 显示全部楼层


   
Quinn714 发表于 2025-9-10 11:34
这是什么反向操作?


因为要知道器件的各个端有没有到Pad的电气连接,并且需要知道Pad的名字,所以我想的是从器件开始搜索。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-10 15:51:22 | 显示全部楼层
然后还有个问题,perc::create_net_path -type {R} -property "r<200" 这个是不是穿透的是单个电阻,而不是路径上的总电阻啊,那是不是要分析总电阻时,不能使用这个?
回复 支持 反对

使用道具 举报

发表于 2025-9-10 15:54:30 | 显示全部楼层
???
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2025-9-19 04:19 , Processed in 0.019508 second(s), 5 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表