在 IC 设计的网表生成过程中,OSSHNL (OpenAccess Schematic Hierarchical Netlister) 错误是最常见也最令人困扰的问题之一。本文基于 Cadence 官方支持网站的深入调研,详细解析三个高频错误代码的根本原因、触发场景和解决方案。

研究背景

在日常仿真工作中,经常会遇到各种 OSSHNL 错误阻止网表生成,导致仿真无法进行。通过对 Cadence 官方支持网站的系统调研,我们整理出三个最常见且影响最大的错误代码及其官方解决方案。

OSSHNL 概述

OSSHNL (OpenAccess Schematic Hierarchical Netlister) 是 Cadence 的层次化网表生成器,负责将 schematic 设计转换为仿真器可用的网表文件(如 CDL、Spectre netlist 等)。


OSSHNL-408: PCell 求值错误 🔴

错误级别

Critical Error - 完全阻止网表生成

完整错误信息

1
2
3
ERROR (OSSHNL-408): Failed to generate the netlist because of a PCell 
evaluation error on cellview 'lib/cell/view'. Set simDetectPCellFailure 
to "ignore" to prevent this error.

根本原因

这是 Cadence 在 IC 6.1.8 ISR8 / ICADVM 18.1 ISR8 中引入的重大行为变更:

旧版本行为

  • PCell 求值失败 → 生成警告
  • 网表继续生成(可能不正确)

新版本行为 (ISR8+):

  • PCell 求值失败 → 产生错误
  • 网表生成中止

技术层面原因

  • si 二进制程序(netlister)运行时缺少 SKILL 上下文文件
  • 特别是 dbRead.cxt 文件,它包含求值 schematic PCell 所需的 SKILL 函数
  • 当 PCell 包含复杂参数化逻辑时,没有这些上下文文件会导致求值失败

常见触发场景

  1. 在 IC 6.1.8 ISR8 或更高版本运行 auCdlsi netlisting
  2. Schematic 中使用了依赖特定 SKILL 函数的 PCell
  3. 从旧版本 Virtuoso 升级后,原有设计无法生成网表
  4. 使用了第三方 PDK 提供的复杂 PCell

解决方案

方案 1:临时绕过(快速修复)

在项目目录的 .simrc 文件中添加:

simDetectPCellFailure = "ignore"

效果

  • ✅ 允许网表继续生成
  • ⚠️ PCell 可能无法正确展开
  • ⚠️ 生成的网表可能包含错误

适用场景:紧急情况下临时使用,不推荐长期使用

方案 2:加载缺失的上下文(推荐)

.simrc 文件中添加:

loadContext(prependInstallPath("/etc/context/64bit/dbRead.cxt"))

效果

  • ✅ 根本解决问题
  • ✅ PCell 正确求值
  • ✅ 生成正确的网表

原理:预先加载 dbRead.cxt 上下文文件,提供 PCell 求值所需的 SKILL 函数。

方案 3:升级软件(永久修复)

升级到 IC 6.1.8 ISR10 或更高版本

改进

  • Cadence 在 ISR10 中修复了 CCR 2208154
  • 所有必需的上下文文件会自动加载
  • 无需手动配置

官方文档

  • Article ID: a1O3w000009beiCEAQ
  • 标题: IC618/ICADVM18.1 ISR8: auCdl netlisting failing with PCell Eval error

OSSHNL-940: 重复的 Cell 名称 ⚠️

错误级别

Warning - 不阻止网表生成,但可能产生错误结果

完整警告信息

1
2
WARNING (OSSHNL-940): Same Cell name 'CellName' is present in multiple 
libraries - LibA and LibB.

根本原因

网表生成器在 cds.lib 定义的库搜索路径中发现多个库包含同名的 cell。

潜在危险

  • Netlister 根据 cds.lib 中的库搜索顺序选择第一个匹配的 cell
  • 如果搜索顺序不正确,可能选中错误版本的 cell
  • 导致网表包含错误的电路逻辑
  • 仿真结果不可预测

常见触发场景

  1. 多版本 PDK 同时加载
    1
    2
    
    DEFINE tsmc28_v1.0 /path/to/v1.0
    DEFINE tsmc28_v1.1 /path/to/v1.1  # cell 名称重复
    
  2. 项目库重名
    1
    2
    
    DEFINE OLD_PROJECT /path/to/old
    DEFINE NEW_PROJECT /path/to/new  # 从 OLD 复制过来,cell 名称相同
    
  3. 供应商切换时保留旧库
    1
    2
    
    DEFINE VENDOR_A_LIB /path/to/vendor_a
    DEFINE VENDOR_B_LIB /path/to/vendor_b  # 相同功能,相同命名
    

解决方案

方案 1:清理 cds.lib(推荐)

编辑 cds.lib 文件:

1
2
3
4
5
6
# 移除不必要的库引用
# DEFINE old_lib /path/to/old_lib    # 注释掉或删除

# 或调整库的优先级顺序(正确的库放在前面)
DEFINE correct_lib /path/to/correct  # 优先使用
DEFINE backup_lib /path/to/backup    # 备用

检查顺序

  • 按从上到下的顺序搜索
  • 第一个匹配的库会被使用

方案 2:重命名 Cell

使用批量重命名工具:

; 使用 CCSRenamePrefixFast.il 工具
load("CCSRenamePrefixFast.il")

renameLibs = list("DUPLICATE_LIB")
scanLibs = list("DUPLICATE_LIB" "TOP_LIB")

; 添加唯一前缀
CCSRenamePrefixFast(renameLibs scanLibs "rename_map.txt")

映射文件 rename_map.txt:

1
2
# 给冲突的 cell 添加前缀
CELL_    LIB2_CELL_

方案 3:控制消息显示

设置环境变量(仅在某些 Virtuoso 版本可用):

1
setenv issueInfoMsgOnCellRename 0

[!WARNING] 这只是隐藏警告消息,不解决根本问题。网表仍可能使用错误的 cell。

最佳实践

  1. 命名规范
    • 为不同项目/库使用唯一的 cell 命名前缀
    • 例如:PROJ_A_INV, PROJ_B_INV
  2. 库管理
    • 定期审查 cds.lib,移除不再使用的库
    • 使用版本后缀:PDK_V1, PDK_V2
  3. 版本控制
    • cds.lib 纳入版本控制(Git)
    • 记录每次库引用的变更原因

官方文档


OSSHNL-117: 忽略视图(View) 🔴

错误级别

Error/Warning - 可能导致网表不完整或仿真失败

完整错误信息

1
2
ERROR/WARNING (OSSHNL-117): The design view 'lib/cell/view' of instance 
'I1' is being ignored because it is not in the switch list or stop view list.

根本原因

Virtuoso 网表生成器需要为每个层次的实例选择合适的视图(view)进行展开或停止:

Switch View List(切换视图列表):

  • 定义哪些视图用于层次展开(继续往下遍历)
  • 常见值:schematic, cmos_sch, av_extracted

Stop View List(停止视图列表):

  • 定义哪些视图作为叶子单元(停止遍历,直接网表化)
  • 常见值:spectre, veriloga

触发错误的条件: 实例有可用的视图,但所有视图都不在 Switch List 或 Stop List 中 → netlister 忽略该实例

后果

  • 连接断开
  • 网表不完整
  • 仿真失败或结果错误

常见触发场景

  1. Post-Layout 仿真
    1
    2
    
    使用 Calibre 提取的 av_extracted 视图
    但 ADE 环境的 Switch List 中没有配置
    
  2. PDK 切换
    1
    2
    3
    
    旧 PDK: spectre view
    新 PDK: cdl view
    ADE 环境未更新 view 列表
    
  3. Verilog-A 模型
    1
    2
    
    使用 veriloga view 的行为模型
    Stop List 中缺少 veriloga
    

解决方案

步骤 1:检查实例的可用视图

在 CIW 中运行:

; 检查某个 instance 有哪些视图
cv = dbOpenCellView("LIB" "CELL" "schematic")
inst = dbFindAnyInstByName(cv "I1")
masterCell = dbOpenCellViewByType(inst~>libName inst~>cellName nil)

; 查看 master cell 的所有可用视图
foreach(view masterCell~>views
  printf("Available view: %s\n" view~>name)
)

dbClose(masterCell)
dbClose(cv)

步骤 2:更新 ADE 环境设置

ADE LADE Explorer 中:

  1. 打开仿真环境:SetupEnvironment

  2. 更新 Switch View List
    1
    2
    3
    4
    
    当前可能是:spectre cmos_sch schematic symbol
       
    需要添加 post-layout view:
    av_extracted spectre cmos_sch schematic symbol
    
  3. 更新 Stop View List(如果使用 Verilog-A):
    1
    2
    3
    4
    
    当前可能是:spectre
       
    需要添加:
    veriloga spectre
    
  4. 点击 OK 保存

步骤 3:验证视图优先级

[!IMPORTANT] Switch View List 的顺序很重要! 从左到右,优先级递减。

正确顺序示例

1
av_extracted → spectre → cmos_sch → schematic → symbol

含义

  1. 优先使用 av_extracted(layout-extracted)
  2. 如果没有,使用 spectre
  3. 依次降级

实际案例

问题描述: 使用 post-layout netlist 进行仿真时,出现 OSSHNL-117 错误:

1
2
ERROR (OSSHNL-117): The design view 'ANALOG_LIB/OPA/av_extracted' 
of instance 'I_OPA' is being ignored...

排查过程

  1. 确认 OPA cell 确实有 av_extracted view
  2. 检查 ADE Environment 设置

发现问题

1
2
Switch View List: spectre schematic symbol
(没有 av_extracted)

解决方法

1
2
Setup → Environment → Switch View List
更新为:av_extracted spectre schematic symbol

结果:错误消失,仿真成功运行

官方文档

  • Article ID: a1O0V000006Al6NUAS
  • 标题: OSS HNL (Hierarchical Netlister) Troubleshooting Guide

快速参考表

错误代码 严重程度 根本原因 主要修复方法 影响范围
OSSHNL-408 🔴 Error PCell 求值失败 .simrc 加载 dbRead.cxt 或升级 ISR 阻止网表生成
OSSHNL-940 ⚠️ Warning 多库包含同名 cell 清理 cds.lib 或重命名 cell 可能使用错误版本
OSSHNL-117 🔴 Error View 不在 switch/stop list 在选ADE Environment 添加缺失view 实例被忽略

调试流程图

当网表生成失败时,按以下流程排查:

graph TD
    A[Netlist 生成失败] --> B{检查 CIW 错误代码}
    
    B -->|OSSHNL-408| C[PCell 求值错误]
    C --> C1{检查 Virtuoso 版本}
    C1 -->|IC618 ISR8+| C2[在 .simrc 加载 dbRead.cxt]
    C1 -->|旧版本| C3[考虑升级到 ISR10+]
    C2 --> F[重新生成 netlist]
    C3 --> F
    
    B -->|OSSHNL-940| D[重复 Cell 名称]
    D --> D1[打开 cds.lib]
    D1 --> D2{检查库搜索顺序}
    D2 -->|顺序错误| D3[调整库顺序]
    D2 -->|有冗余库| D4[移除不用的库]
    D3 --> F
    D4 --> F
    
    B -->|OSSHNL-117| E[View 被忽略]
    E --> E1[检查instance master的可用视图]
    E1 --> E2[ADE → Setup → Environment]
    E2 --> E3[添加缺失view到Switch/Stop List]
    E3 --> F
    
    F[重新生成 netlist] --> G{检查是否成功}
    G -->|成功| H[开始仿真]
    G -->|失败| I[检查其他错误]

相关错误代码

  • OSSHNL-325: Place master 被修改(与 OSSHNL-117 类似,master 不一致)
  • CDSGDM-117: GDM 层面的视图切换警告(与 OSSHNL-117 相关)
  • OSSHNL-408: 本文已详细介绍

后续建议

1. 建立标准化的 .simrc 配置

创建项目级 .simrc 模板:

; ========================
; Standard .simrc Template
; ========================

; Fix OSSHNL-408 (PCell evaluation error)
loadContext(prependInstallPath("/etc/context/64bit/dbRead.cxt"))

; Control PCell failure behavior
simDetectPCellFailure = "warn"  ; 或 "ignore"(根据团队需求)

; 其他仿真设置
; ...

2. 定期审查 cds.lib

建立 review checklist:

  • 移除不再使用的库引用
  • 确保库搜索顺序符合项目需求
  • 检查是否有重名 cell(OSSHNL-940)
  • 库路径是否正确

3. ADE 环境模板化

为不同仿真场景创建标准环境:

Pre-layout 仿真

1
2
Switch View List: spectre cmos_sch schematic symbol
Stop View List:   spectre veriloga

Post-layout 仿真

1
2
Switch View List: av_extracted calibre spectre schematic symbol
Stop View List:   spectre veriloga

4. 版本升级计划

如果频繁遇到 OSSHNL-408,考虑:

  • 评估升级到 IC 6.1.8 ISR10+ 的可行性
  • 跟踪 Cadence 的 ISR 发布说明
  • 了解每个 ISR 修复的 bug

总结

本文基于 Cadence 官方支持网站的深入调研,系统梳理了三个最常见的 OSSHNL 错误代码:

  • OSSHNL-408: IC 6.1.8 ISR8+ 的 PCell 求值机制变更导致,需加载 dbRead.cxt 或升级软件
  • OSSHNL-940: 多库同名 cell 警告,通过规范 cds.lib 管理避免
  • OSSHNL-117: View 配置不当导致实例被忽略,需正确配置 ADE Environment

关键要点

  • ✅ 使用官方推荐的解决方案,避免临时 workaround
  • ✅ 建立标准化的项目配置模板(.simrc, ADE Environment)
  • ✅ 定期维护 cds.lib,避免库引用混乱
  • ✅ 了解 Virtuoso 版本差异,合理规划升级

掌握这些错误的根本原因和系统解决方法,可以大大提高 IC 设计中网表生成和仿真的效率,减少不必要的调试时间。

参考资源

Cadence 官方文档

  1. Article a1O3w000009beiCEAQ - OSSHNL-408 PCell Error
  2. Article a1O0V000006Al6NUAS - OSS HNL Troubleshooting Guide
  3. Virtuoso ADE User Guide - Environment Variables

调研记录

本文档基于 2026年1月27日对 Cadence 官方支持网站的系统调研。所有解决方案均来自官方知识库文章和用户指南。