ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

虚拟机中Cadence QRC集成与PEX后仿真环境搭建实战

虚拟机中Cadence QRC集成与PEX后仿真环境搭建实战 最近在整理一个混合信号项目的验证环境时我又把 Cadence 虚拟机里那套 QRC 寄生参数提取流程完整走了一遍。说实话这一步在很多教程里只有一两句话真正落地时会卡住不少刚接触后端的人环境变量怎么配、qrcTechfile 从哪来、为什么明明装了 QRC 但 Virtuoso 里找不到提取入口、后仿真网表里的电容为什么是零……这些坑我都踩过。这篇文章就按我实际搭环境的过程把从虚拟机准备到 QRC 集成再到跑通 PEX 后仿的完整链路写清楚。适合正在学习模拟/混合信号后端、手头有 PDK 但缺提取环境的学生以及想在个人工作站上独立跑通签核流程的工程师。1. 为什么非要选虚拟机来跑 Cadence 和 QRC1.1 什么场景下虚拟机方案才真的合适先说说我为什么坚持用虚拟机。很多人觉得芯片设计工具就应该直接装在物理机上性能最大化。但对于个人学习、短期项目、多工艺库隔离、以及需要频繁试错的环境来说虚拟机的优势远比那点性能损失更重要。最直接的一个原因是环境隔离。Cadence 工具链对系统库、Python 版本、glibc、图形库的依赖非常挑剔同一个 Linux 发行版上装两套不同版本的工艺 PDK搞不好就会互相污染库文件。用快照隔离开每个工艺用单独的虚拟机出问题能直接回滚不用重装系统这个收益在排查问题时会特别明显。另一个场景是许可证的绑定。很多大学和公司的 Cadence 许可证是绑定了浮动服务器地址的个人笔记本如果直接装物理机会留下大量环境痕迹换机器、换网络都麻烦。虚拟机可以整体打包拷贝迁移到另一台机器上恢复快照即可继续用只要主机名和 MAC 保持固定许可证环境几乎不用重新配置。还有一点是备份和克隆。我一般会在装好系统、装好 Cadence 基础工具、装好 QRC 之后的每个节点都打一个快照。某个环节装坏了回到上一个快照三分钟就能恢复比反复重装省太多时间了。1.2 虚拟化带来的性能损失到底有多大说到虚拟机大家第一反应是慢。实际用下来在 PEX 这种高负载计算场景里性能损失并没有想象中那么夸张。如果 CPU 支持 VT-x/AMD-V并且虚拟机配置里正确开启了硬件虚拟化QRC 提取阶段的 CPU 密集任务大概只比物理机慢 5%~15%。这个差距对工程验证来说完全可以接受。更明显的瓶颈反而是磁盘 I/O。QRC 在提取过程中会生成大量的中间文件包括电阻网络、电容表、耦合网表几十 GB 是常有的事。虚拟机如果用的是虚拟磁盘文件而这些文件又放在普通机械硬盘上I/O 会成为真瓶颈。所以我的建议是宿主机这边尽量用 NVMe SSD虚拟磁盘选择预分配模式能明显减少碎片化写入带来的性能衰减。图形界面方面Virtuoso 的版图和原理图编辑是 X Window 应用在虚拟机里跑只要安装了 VMware Tools 并启用 3D 加速日常操作流畅度是够的。如果觉得鼠标拖拽还是有延迟也可以改用 X11 转发或者 VNC但这个体验就见仁见智了我一般直接开 VMware 的图形界面用。1.3 搭建前必须定好的几个虚拟机参数先列一组我实测比较稳的配置供你参考。宿主物理机 32GB 内存VM 分配 20GBCPU 8 核里分给 VM 6 核磁盘分配 200GB 虚拟磁盘选立即分配所有空间网络用 NAT 模式方便虚拟机访问外网下载库文件或更新系统包license server 如果也是 NAT 网络内可访问没问题。内存20GB 保底。PEX 阶段大版图提取时QRC 内存占用经常会到 10GB 以上。CPU建议至少 4 核。QRC 支持多线程后面我会讲怎么开。虚拟磁盘预分配 200GB存系统、Cadence 安装目录、PDK 和工程文件。VMware Tools一定要装否则 Virtuoso 窗口大小调整、鼠标无缝切换、显卡加速都会有问题。这些参数不是拍脑袋定的是根据 PEX 时版图规模和中间文件大小倒推出来的。如果只做几十个器件的练习版图20GB 内存也够用但一旦跑真实版图内存和磁盘不足的情况会非常痛苦。2. 寄生参数提取在芯片设计流程里到底处在哪个位置2.1 从理想前仿到带寄生后仿数据流是怎么走的芯片设计里前仿真阶段用的网表是不含任何互连寄生的理想网表电路只包含晶体管和理想连线所以仿真结果往往过于乐观。版图设计完成后连线之间有了实际的电容、电阻、电感这些寄生会直接影响增益、带宽、噪声和时序。寄生参数提取就是把这些版图几何信息转换为电气模型再反标回网表做仿真。在 Cadence 的流程里这一步通常叫 PEXParasitic Extraction或者 RC Extraction。PDK 版图完成后Layout XL 里会跑一个物理验证流程先做 DRC/LVS 确认没有规则违例和连接错误然后才把 GDS 或者版图数据库交给提取工具输出包含寄生 R、C 的网表最终回到 ADE 做后仿真。后仿结果和前仿比对如果性能裕量足够说明版图设计质量好如果差异过大就要回到版图修改连线或者调整管子的尺寸。这个过程在整个模拟后端流程里是签核前的最后一环重要性不用多说。2.2 QRC 在 Cadence 生态里扮演的角色Cadence 的寄生提取工具既有老牌的 QRC也有新一代的 Quantus。QRC 的历史很长很多工艺节点的 PDK 都直接带好了 QRC 的 techfile所以兼容性非常稳定。Quantus 是后来的产品在多核并行、大规模数字模块提取上性能更强但对老 PDK 的适配反而不如 QRC 成熟。我选择的逻辑很简单如果 PDK 原厂资料里有明确指导用 QRC 的命令和文件那就优先 QRC因为工艺厂自己的验证和签核流程用的就是这套文件出问题的概率最小。Quantus 更适合数字后端大规模模块或者在 PDK 已经明确提供 Quantus 支持的时候用。对于模拟 IP、混合信号模块、全定制版图QRC 集成在 Virtuoso 里的流程最顺手。QRC 基本的能力包括标准 RC 提取对地电容和金属电阻、耦合电容提取两个相邻节点之间互容、器件寄生效应的提取源漏扩散区的分布 RC还能输出 SPEF、DSPF、SPF 等标准格式给时序和模拟工具。它读取的不只是 GDS也可以读取 Virtuoso 版图形式传过来的数据。2.3 RC 提取的几种模式以及怎么选QRC 的提取模式一般分为 Standard RC、Coupled RC、Detailed RC 几种。Standard RC 模式把每条连线对地电容和一个串联电阻包进去适合估大概负载。Coupled RC 模式会额外计算线与线之间的耦合电容对串扰分析和高频模拟电路更准确但网表和提取时间都会显著增加。还有一种常用的说法叫延迟模式和详细模式跟上面的分类是交叉的。延迟模式适合数字时序分析重点在于信号延迟详细模式则把网络里的每个电阻电容节点还原出来更适合模拟电路的后仿真。模拟项目里我基本都是用详细模式加 coupled 选项确保看到真实的寄生分布而不是一个近似值。选模式之前先想清楚你的目标如果是查看放大器带宽下降了多少用标准 RC 就够了如果是分析 ADC 采样网络里的电荷共享和串扰那必须开耦合电容如果还要做 EM/IR 分析那是另外一套工具和规则QRC 这边主要负责把寄生网表吐出来供后续流程使用。3. 从零准备一台能跑 Cadence 的虚拟机3.1 虚拟机软件、Linux 发行版和 Cadence 版本的搭配宿主机上的虚拟机软件我常用 VMware Workstation Pro因为它对 3D 加速、快照、克隆的支持最稳。Linux 发行版方面Cadence IC 618 官方支持 RHEL 7/CentOS 7 一类的老系统所以我建议虚拟机里装 CentOS 7 或者 RHEL 7 的兼容版本。Ubuntu 也能跑但缺的兼容库比较多每装一步都要处理 glibc 和 motif 库问题额外耗时间。版本搭配有一个基本逻辑Cadence 安装包会根据系统版本检测支持情况太新的发行版反而容易在运行时报错。比如 IC 618 在 RHEL 7 上正常在 Ubuntu 22.04 上就经常出现 libXm.so.4 找不到的问题。初学者建议直接照搬 CentOS 7 Cadence IC 618 QRC 19.xx 的组合这是被大量流程验证过的。3.2 安装 Linux 时容易被忽视的细节安装系统时有两个细节特别影响后面使用。第一是选择带图形界面的安装模式因为 Virtuoso 是完全依赖 X Window 的图形应用如果选了 Minimal 模式后面再补图形库会比较麻烦。第二是磁盘分区强烈建议把/opt或者/data单独分区用来放 Cadence、PDK 和工程文件。如果都塞在根目录后期 PEX 中间文件把磁盘写满会导致 QRC 崩溃且极难清理。另外装完系统后先做两件事。第一件事是固定主机名和网络地址Cadence 的许可证机制对主机名解析非常敏感IP 一变就容易出现 license 连接失败。第二件事是关掉防火墙的图形化限制尤其是 license daemon 使用的 5280 端口不能遮断本机访问。3.3 Cadence 主程序和 QRC 的安装顺序Cadence 整套工具的安装一般通过 InstallScape 完成。安装的时候不是一次把 IC 618、QRC、EXT、MMSIM 全部装到一个目录而是每个产品模块选独立的安装路径最后在环境变量里叠加。我习惯的目录结构是/opt/cadence/ ├── IC618/ # Virtuoso 等设计入口 ├── QRC_19.11/ # QRC 提取工具 ├── EXT_19.11/ # 物理验证相关扩展 └── MMSIM_19.11/ # 仿真器用 InstallScape 选择产品时可以看到每个组件的 install_dir 独立设置各自装到上面的目录。装完以后不要急着改环境变量先用 InstallScape 生成的 cds_root 目录下的tools/bin/virtuoso试启动一次确认基础环境没问题再接 QRC 的环境变量。有一点容易踩坑QRC 并不是一个完全独立的工具它依赖 EXT 里的部分库。所以如果发现 QRC 命令运行时提示缺库第一反应检查是不是 EXT 没有安装而不是急着去下载依赖库。4. 把 QRC 集成进 Cadence环境变量、qrcTechfile 与 Virtuoso 入口4.1 关键环境变量的配置逻辑Cadence 工具是通过环境变量来自动发现依赖库的QRC 集成第一步就是把这些变量配好。就算你只在 Virtuoso 里用鼠标点菜单底层依然要靠 QRC_HOME、PATH、LD_LIBRARY_PATH 来定位二进制和共享库。下面这组是我在.bashrc里用的注释也可以直接保留export CDS_ROOT/opt/cadence export CDS_INST_DIR$CDS_ROOT/IC618 export QRC_HOME$CDS_ROOT/QRC_19.11 export MMSIM_HOME$CDS_ROOT/MMSIM_19.11 export PATH$CDS_INST_DIR/tools/bin:$CDS_INST_DIR/tools/dfII/bin:$QRC_HOME/bin:$MMSIM_HOME/bin:$PATH export CDS_LIC_FILE5280localhost export LD_LIBRARY_PATH$QRC_HOME/lib:$QRC_HOME/tools/lib:$EXT_HOME/tools/lib:$CDS_INST_DIR/tools/lib:$LD_LIBRARY_PATH这里每个变量都有它自己的作用。PATH 保证 shell 可以直接调用 qrc、pvs 这类命令。LD_LIBRARY_PATH 决定 QRC 运行时能不能找到自己的动态库顺序也很关键要把 QRC 的 lib 放在最前面避免从系统目录加载到同名但版本不同的库。CDS_LIC_FILE 用于指向许可证端口。如果你用的是远程 license server就把localhost换成服务器的 IP 或主机名。记住一个规则装了新工具后如果 Virtuoso 菜单里能看到 QRC 入口但点击时报许可证错误问题往往在 CDS_LIC_FILE 而不是工具本身。4.2 环境变量版本冲突的处理经验在调试 QRC 的环境变量时我遇过最诡异的问题是明明 QRC 目录已经装好了运行 Virtuoso 后菜单里却没有 PEX 相关选项。用命令行跑qrc -version又能正常显示版本号。后来检查发现LD_LIBRARY_PATH 里 EXT 的库路径写在了 QRC 前面导致 QRC 加载了 EXT 的同名旧库模块加载失败被 Virtuoso 静默忽略了。处理这种问题的方法很直接用ldd $QRC_HOME/bin/qrc查看动态库解析结果看是不是所有 QRC 自带的库都指向了自己的目录。出现 Not found 时再逐一把缺失的库路径加进去。这个过程虽然繁琐但能排查掉 90% 的加载问题。4.3 qrcTechfile 到底从哪里来QRC 提取关键的文件叫 qrcTechfile它是工艺层的物理规则文件里面定义了金属层、过孔、介质层等每层对应的电阻、电容、厚度、介电常数等信息。没有这个文件QRC 不知道版图上的图形对应多大寄生提取结果自然没有意义。qrcTechfile 通常由 PDK 自带。你可以在 PDK 的安装目录下找一个名为 QRC、QRC_tech 或者 corner 相关的文件夹常见的文件名是qrcTechfile、qrcTechfile_typ、qrcTechfile_max等。不同工艺角对应不同文件选择时要看你后仿真想用哪个 corner。我在第一次使用时犯过错误随便选了一个 qrcTechfile提取出来的电阻值明显不对劲后来才发现应该用 PDK 给的qrcTechfile_typ做典型角分析。如果你的 PDK 没有提供 qrcTechfile那就必须先联系工艺厂或者查 PDK 文档确认它是否通过其他方式提供。大多数正规 PDK 都会带因为后仿签核是标配环节。如果反而是自己完全造一个 qrcTechfile那就不是 QRC 集成的问题了而是要重新走工艺文件开发流程工作量完全不是一个量级。4.4 在 Virtuoso 里指定 QRC 文件和映射关系环境变量配好、qrcTechfile 备好后打开 Virtuoso在版图编辑器Layout Editor里找到 QRC Setup 菜单。这里需要做两件事第一指定 qrcTechfile。一般是QRC Setup - Technology File浏览到 PDK 提供的 qrcTechfile 文件并加载加载成功后 CIWCommand Interpreter Window会打印类似 Techfile loaded 的信息。第二验证 LVS 映射关系。QRC 提取的物理寄生网表最终要映射回电路原理图的器件和节点上。完成后仿真需要的反标网表必须有器件级的映射文件通常由 PDK 提供比如map_conn、qrc_mapping这类文件。有些 PDK 会把映射信息直接写在 qrcTechfile 里有些则需要在 Virtuoso 的 QRC Setup 里额外指定。如果加载后提取结果显示所有器件都是理想元件、只有连线寄生那就说明映射关系没有生效。这种情况最常见于 PDK 提供的器件映射文件与实际使用的版图库名称不一致需要手动更新映射表中的库名和器件名。5. 在 Virtuoso 里跑完一条完整的 PEX 后仿链路5.1 从版图编辑器发起 QRC 提取QRC 在 Virtuoso 里的入口通常是在版图编辑器菜单栏。选中顶层版图后打开 QRC Setup 或 Extraction 菜单选择 Run PEX这时会弹出一个对话框。需要设置的几项包括PEX Type 选 RC、Netlist Directory 指定一个工作目录、Extracted View 名称填extracted或pex输出格式可以选 SPF 或 DSPF。这些选项里Netlist Directory 的作用很关键。QRC 会把中间文件、报告和最终网表都写在这个目录里。建议每次跑新提取都新建一个独立目录避免上一次的中间文件干扰结果。尤其是当工艺角切换时如果目录不隔离很可能提取结果比预期大因为旧文件被误读进去了。设置完成后点 OKQRC 会在后台运行。短则几秒长则几十分钟取决于版图规模和精度设置。可以通过 CIW 查看运行日志看到类似 Total capacitance xxx fF 之类的结果输出这个值能用来粗判断提取是否合理。5.2 在 ADE 环境中挂载提取后的视图提取完成后生成的网表或提取视图不会自动被仿真器采用。需要在 ADE L/XL 中设置让 Spectre 或 Ultrasim 识别后仿视图。一个标准做法是使用 Config View。在 ADE XL 中创建一个 config把测试平台的每个 cell 的 view 列表从schematic扩展为extracted schematic或pex schematic这样仿真器会优先使用带寄生的视图。模拟模块的后仿真模式下顶层通常是测试平台用 schematic 或 config被测模块则使用extracted视图。如果你的工程用的是老式 ADE L可以在 Environment 菜单里直接设置 view list。把pex或extracted加在schematic之前仿真器加载时就会优先找到提取视图。前提是提取视图名和 view list 里的名称完全一致这个大小写都不能错。5.3 验证提取结果有效性的三个信号跑完一遍后仿不能只看波形就说环境搭好了。我习惯检查三个信号。第一是看寄生电容总量是否在一个合理范围。比如一个简单的共源放大器输出节点的寄生电容通常在 fF 到几十 fF 量级。如果 QRC 报告输出的总电容是零可能是 qrcTechfile 没加载成功。第二是看后仿带宽是否相对前仿明显降低。寄生提取的目的就是暴露前仿看不到的退化现象。如果前仿和后仿的增益带宽几乎完全一致很可能是提取视图根本没被仿真器使用。第三是检查仿真日志里的网表文件路径确认网表确实来自extracted目录。有时候 ADE 会因为找不到提取视图而静默回退到 schematic日志里根本不会提示导致你以为自己跑了后仿实际还在巡航模式。6. 集成 QRC 过程中我踩过的坑和提速经验6.1 License 和主机名问题的排查思路QRC 集成后最容易遇到的第一个坑就是 license。报错形式多种多样但绝大多数情况下都和主机名解析有关。安装 CentOS 7 时系统默认主机名可能是localhost.localdomain而 Cadence license 生成时绑定的是另一个主机名两边对不上工具启动就会提示 license checkout 失败。解决方法是把主机名统一成许可证文件里的名字并且必须在/etc/hosts里加上主机名的静态解析记录。比如许可证里的 host 是eda-server那就在 hosts 里写下127.0.0.1 eda-server。别依赖 DNS虚拟机网络变化很快DNS 解析不稳定会让你排查到崩溃。另一个要注意的是虚拟机克隆后 MAC 地址会变化某些节点锁定类许可证可能因此失效。克隆后的虚拟机需要重新检查和更新许可证服务配置最保险的做法是固定虚拟网卡的 MAC 地址。6.2 动态库缺失与 glibc 版本不匹配在比较新或者比较精简的 Linux 发行版上装 QRC最常见的报错是error while loading shared libraries: libXm.so.4: cannot open shared object file。这个 libXm 是 Motif 图形库老版本 Cadence 工具依赖它来画界面但新系统自带的是 Open Motif 的更高版本名字和路径都不一样。处理方法有两条路。第一是用包管理器安装旧版兼容库CentOS 7 下可以装motif相关包Ubuntu 下可以装libmotif4。第二是直接在 Cadence 安装目录的tools/lib里放一份 libXm.so.4 的软链接但要注意软链接指向的库必须是 32 位和 64 位都匹配的版本。排查这类问题不要靠猜用ldd命令逐条看依赖库解析结果是最快的。动态库问题在安装新版本 QRC 时也很常见因为新版工具库依赖也可能变化所以每次升级版本后都要重新过一遍 ldd。6.3 提取结果异常电容为零、网表缺失、精度被过度降级我在第一次集成 QRC 时最容易犯的错误是 qrcTechfile 路径配错结果 QRC 能跑通但输出的寄生电容全是 0。这个问题的特点是工具不报错只有结果不对。原因是 QRC 在没有有效 techfile 时不会主动中断而是用默认空规则继续执行。还有一个常见问题是 LVS 网表导出缺失了电源和地连接。QRC 提取寄生时如果网表里没有 VDD/VSS 节点所有的衬底电容和电源相关寄生都会被忽略。解决方法是检查 LVS 的 runset 里是否正确提取了 global 电源地节点。精度方面QRC 提供了一些减少提取时间的选项比如忽略小于某个阈值的电阻、合并距离很近的节点。新手刚开始用时会为了追求速度把这些阈值调大结果后仿结果严重失真。我的经验是不能为了速度牺牲掉所有小寄生尤其是模拟电路里 1fF 的电容在高速节点上可能是致命的。6.4 多核并行和临时目录的提速技巧QRC 提取在较大版图上会非常耗时好的一点是它支持多线程并行。在 Run PEX 选项或命令行参数里可以指定并行数比如在 Virtuoso 的设置项中填入parallel4就能让 QRC 使用 4 个核来加速计算。配合虚拟机分配的 6 核实际提速效果明显。并行数不是越大越好。当超过某个临界点后因为中间文件写入和进程间通信的争用加速比会明显下降。我在自己的环境里测过6 核虚拟机上跑到 4 核时性价比最高8 核以上收益很小。临时目录也需要重点关注。QRC 在提取时会把中间网表写入$TMPDIR或当前工作目录这个目录的可用磁盘空间直接决定提取能不能成功。有一次我提取一个中型版图跑到一半提示磁盘空间不足清理了半天才发现是 QRC 的临时文件把根目录占满了。建议把工作目录和数据盘绑定在大分区上并且每次提取前先检查一下磁盘余量。另外提一个小技巧跑完一次 PEX 后把 QRC 生成的中间目录做个压缩归档。如果只是微调版图可以直接复用之前的中间结果省掉重新提取的时间。不过要小心归档时不能只复制网表目录里的层映射文件和 qrcTechfile 也要一起存否则下次读取会对不上。最后再分享一个我个人的习惯每次换 PDK 版本或者 QRC 版本后不要直接拿去跑大版图先建一个只有几个标准单元和一对互连线的测试版图完整跑一遍前仿、提取、后仿的闭环。确认电容值和电阻量级跟工艺文档吻合后再进入真实设计流程。这个习惯帮我避开了很多版本兼容问题也让我能把提取环境的异常和电路设计的问题快速区分开。
返回列表