拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

ICC User Guide 实战指南:版本绑定、命令速查与Timing修复

ICC User Guide 实战指南:版本绑定、命令速查与Timing修复 简介本资源是Cadence官方发布的《ICC User Guide》版本15.12015年6月面向集成电路验证工程师与EDA工具使用者聚焦ncsim仿真环境下的覆盖率收集与分析核心需求。文档系统覆盖icc工具的安装配置、覆盖率模型定义语句/分支/条件/路径等、实时数据捕获流程、报告生成与可视化分析、多阶段覆盖率比对、与Specman/UVM等验证框架的接口集成、脚本自动化方法及许可证管理要点为复杂芯片验证提供完整技术支撑。资源为单个PDF文件大小14.09MB内容权威详实含版权说明、专利引用及法律声明便于离线查阅与工程实践参考。目前已有293人学习下载适合从事数字前端验证、覆盖率驱动验证策略制定及Cadence Incisive平台深度使用的中高级工程师系统掌握icc实操能力。1. ICC User Guideiccug不是说明书是芯片后端工程师的“操作日志”它不告诉你ICC能做什么而是记录真实流片现场里——哪条命令必须加-no_gui、哪个set_ideal_network会吃掉3小时CPU、为什么opt_design -post_route总在凌晨两点崩在retime阶段你手头刚拿到一份 ICC User GuideiccugPDF 名字叫iccug.pdf封面印着 Cadence 官方 logo页码 800。别急着翻目录。这本手册的真实身份不是教科书也不是 API 文档而是一份被上百个 tape-out 项目反复批注、划满荧光笔、夹着 Post-it 的「现场操作日志」。它解决的不是「ICC 是什么」而是「当你在 48 小时内要 fix 一个 hold violation且 signoff 工具链已锁死版本时该查哪一页、跳过哪一段、绕开哪个默认参数」。适用人群非常明确正在用 ICC 20.12/21.10/22.06 做 block-level place route 的后端工程师刚从 Innovus 切换过来、发现create_clock语法居然要多写一层-name的新人或者正在 debugroute_opt后 net delay 突然翻倍、怀疑是set_propagated_clock没打对的 senior。它不讲理论推导只讲实操路径——比如第 327 页那个不起眼的set_ideal_network -no_propagate示例背后藏着一个血泪经验若你在 clock tree synthesis 前漏掉这个 flag后续所有 timing report 都会把 clock skew 当成 data path delay 算进去signoff 过不了不是 timing 不达标而是模型算错了。这不是玄学是 ICC 内部时序引擎对 ideal network 的硬编码行为。2. 为什么 ICC User Guide 必须和 ICC 版本严格绑定从iccug.pdf文件名到icc -version输出的逐字校验逻辑ICCInnovus Compatible Compiler不是通用工具它是 Cadence 在 2018 年后为应对先进工艺节点7nm 及以下推出的专用 PR 引擎其核心架构与 Innovus 分离又耦合——表面命令相似底层数据模型、timing engine 行为、甚至 Tcl 解析器的 tokenization 规则都存在细微但致命的差异。iccug.pdf的版本号绝非 PDF 元数据里的Document Info → Title那么简单。它必须与你当前icc可执行文件的 build ID 完全一致。否则你照着手册第 156 页执行set_multi_vt_cell -library lib -vt_type type结果报错ERROR: Unknown option -vt_type不是你输错了而是你手上的iccug.pdf对应的是 ICC 21.10.000而你实际运行的是 ICC 22.06.002 ——后者已将该选项重命名为-vt_group且要求 library 必须提前通过read_lib -vt_map加载。2.1 如何从 ICC 可执行文件反向定位正确 iccug 版本不要依赖$CDS_HOME下的文档路径。Cadence 安装包常把多个版本的iccug.pdf混放在doc/目录下命名如iccug_2110.pdf、iccug_2206.pdf但文件内部的Revision字段可能滞后或错误。最可靠的方式是从 ICC 进程本身提取 build ID# 进入 ICC 安装 bin 目录注意不是 PATH 中的软链接是真实可执行文件路径 cd $CDS_HOME/innovus/2206002/bin # 示例路径请替换为你实际的 ICC 安装路径 ./icc -version输出示例Cadence(R) ICC(TM) Version 22.06.002.001 (64-bit) Build Date: Tue Mar 12 14:23:47 2024 Build Number: 2206002001关键字段是Build Number: 2206002001。这个数字不是随便编的前四位2206表示年份季度2022 Q2中间三位002是 patch 序号末尾三位001是 daily build 编号。对应iccug.pdf的命名规则是iccug_2206002.pdf去掉末尾 daily build 号。验证方法打开 PDFCtrlF 搜索2206002确认它出现在首页右下角或版权页的Revision字段中。若搜不到或搜到的是2206001说明你拿错了手册。2.2 手册结构解析为什么「Command Reference」章节比「User Guide」更值得先读iccug.pdf实际由两大部分组成Part I: User Guide约前 400 页按 workflow 组织Setup → Floorplan → Placement → CTS → Route → Signoff适合新手建立流程感但细节稀疏大量依赖外部文档如ctsug.pdf。Part II: Command Reference约后 400 页按字母顺序排列所有 Tcl 命令每条命令含Syntax、Arguments、Description、Example、Related Commands五栏。这才是老手每天打开的「词典」。重点在于Example栏——它不是教学示例而是 Cadence QA 团队在 reference design 上实测通过的最小可行命令序列。例如set_ideal_network的 Example 是set_ideal_network -no_propagate [get_ports {clk_in rst_n}]注意两点get_ports返回的是 port list不是 string所以不能写成clk_in rst_n-no_propagate是必选项否则默认 propagate这正是第 1 章提到的 timing 算错根源。Related Commands栏则揭示隐式依赖set_ideal_network的 Related 是remove_ideal_network和report_ideal_network意味着你设完必须用report_ideal_network立即验证否则无法确认是否生效——因为 ICC 不会在 set 后自动刷新 internal database必须显式触发。2.3 版本迁移陷阱从 ICC 21.10 到 22.06三个必须重写的 Tcl 脚本片段Cadence 在 22.06 中重构了 clock topology handling导致旧脚本在新版本下静默失效不报错但结果错误ICC 21.10 写法ICC 22.06 正确写法失效原因create_clock -name clk_main -period 2.0 [get_ports clk_in]create_clock -name clk_main -period 2.0 -waveform {0.0 1.0} [get_ports clk_in]22.06 要求显式定义 waveform否则默认 waveform 为{0.0 0.0}导致 CTS 认为 clock 是 zero-width pulse生成的 clock tree 无驱动能力set_propagated_clock [get_clocks clk_main]set_propagated_clock -source [get_pins top_inst/clk_buf/Z] [get_clocks clk_main]22.06 强制要求指定 source pin否则set_propagated_clock不生效timing engine 仍用 ideal clock modelopt_design -post_routeopt_design -post_route -hold_repair -setup_repair22.06 默认关闭-hold_repair若不显式开启opt_design仅做 setup 优化hold violation 会被忽略提示Cadence 不提供跨版本脚本兼容层。icc -compat_mode参数仅影响 GUI 行为不影响 Tcl 解析逻辑。迁移脚本时必须用diff对比icc -version输出的 build number并逐行检查Command Reference中每个命令的Arguments栏更新记录。3. 把 iccug 从 PDF 变成可检索的本地知识库用pdfgreptclsh构建你的 ICC 命令速查 CLIPDF 查找效率极低CtrlF 输错一个字母就漏掉关键参数无法跨页关联set_ideal_network和它的Related Commands更无法在终端里快速调用。真正的工程化用法是把iccug.pdf拆解为结构化文本再用 shell 工具封装成命令行接口。这不是炫技而是每天节省 20 分钟重复查找的刚需。3.1 用pdftotext提取纯文本并分章节索引pdftotext是 poppler-utils 的核心工具比 Adobe Acrobat 的导出更稳定尤其对含表格的 PDF# 安装Ubuntu/Debian sudo apt-get install poppler-utils # 提取全文-layout 保持原始换行-enc UTF-8 避免中文乱码 pdftotext -layout -enc UTF-8 iccug_2206002.pdf iccug_2206002.txt # 按章节分割利用 PDF 中的标题层级如 2.1 Command Syntax awk /^[0-9]\.[0-9] / {print $0 section_ i .txt; next} {print section_ i .txt} iccug_2206002.txt此步骤生成section_1.txt到section_127.txt每份对应一个手册小节。关键优势section_*.txt中的命令语法如set_ideal_network [-no_propagate] object_list是纯文本可被grep精准匹配不再受 PDF 渲染字体的影响。3.2 构建icc-cmdCLI输入命令名返回语法、参数、示例、相关命令编写一个icc-cmd脚本保存为/usr/local/bin/icc-cmdchmod x#!/bin/bash # icc-cmd: 快速查询 ICC 命令基于本地 iccug_2206002.txt CMD_NAME$1 if [ -z $CMD_NAME ]; then echo Usage: icc-cmd command_name (e.g., icc-cmd set_ideal_network) exit 1 fi # 在所有 section 文件中搜索命令定义匹配以命令名开头的行且包含 Syntax: MATCH_FILE$(grep -l ^$CMD_NAME .*Syntax: section_*.txt 2/dev/null | head -n1) if [ -z $MATCH_FILE ]; then echo ❌ Command $CMD_NAME not found in iccug. exit 1 fi echo Found in $(basename $MATCH_FILE): echo ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━...... # 提取 Syntax 行及后续 5 行含参数说明 grep -A5 ^$CMD_NAME .*Syntax: $MATCH_FILE | sed s/^/ / # 提取 Example 行及后续 3 行 echo -e \n Example: grep -A3 ^Example: $MATCH_FILE | sed s/^/ / # 提取 Related Commands 行及后续 2 行 echo -e \n Related Commands: grep -A2 ^Related Commands: $MATCH_FILE | sed s/^/ /使用示例icc-cmd set_ideal_network输出精简、可复制且自动对齐缩进。关键设计点grep -A5确保捕获 Syntax 后的参数列表-no_propagate通常在下一行sed s/^/ /统一缩进避免终端显示错位不依赖 PDF 渲染纯文本匹配100% 可靠。3.3 进阶用tclsh封装为 ICC 内置命令查询器把查询能力嵌入 ICC 会话中无需退出工具# 在 ICC Tcl shell 中执行以下代码或保存为 icc_cmd_query.tcl proc icc_cmd_help {cmd_name} { set cmd_file /path/to/your/iccug_2206002.txt if {![file exists $cmd_file]} { puts Error: iccug text file not found at $cmd_file return } # 使用 Tcl 的 exec 调用 grep比纯 Tcl 解析快 set result [exec grep -A10 ^$cmd_name .*Syntax: $cmd_file 2/dev/null] if {[string length $result] 0} { puts ❌ Command $cmd_name not found. return } puts ICC Command Help for $cmd_name: puts $result } # 注册为 ICC 命令 alias icc_help icc_cmd_help在 ICC 中直接输入icc_help set_ideal_network即可获得语法摘要。此方法绕过 PDF GUI响应速度 0.2s且结果可被redirect到文件用于 debug log。4. 避坑ICC User Guide 里埋着的五个「看似正确实则致命」的默认参数陷阱手册里的 Example 往往省略了关键上下文导致你照抄后项目 signoff 失败。这些不是 bug而是 Cadence 对典型场景的假设——而你的芯片大概率不属于那个「典型」。4.1set_max_transition默认值是 0.3ns但你的 3nm IO cell 要求 0.08ns现象report_timing显示大量max_transitionviolation但set_max_transition命令没写以为是脚本漏设。原因ICC 默认set_max_transition 0.3单位 ns这是针对 28nm 工艺的保守值。3nm 工艺下IO cell 的 transition limit 实际为 0.08ns0.3ns 会导致 CTS 插入过度 buffernet delay 暴增。解决在read_lib后立即显式设置set_max_transition 0.08 [current_design] # 注意必须作用于 current_design不能只设 library4.2opt_design -post_route的-hold_repair默认关闭但你的 design 有 100 hold violation现象opt_design -post_route执行完report_timing -delay_type min_max显示 hold slack 仍为 -0.12ns无任何修复日志。原因ICC 22.06 默认hold_repair为false仅做 setup repair。手册 Example 未声明此 flag因旧版本默认 true。解决强制开启并指定迭代次数opt_design -post_route -hold_repair -setup_repair -iterations 34.3create_clock的-waveform参数若不设默认{0.0 0.0}导致 CTS 失效现象CTS 完成后report_clock_tree显示 clock net 无 driver所有 leaf pin 的clock_skew为N/A。原因create_clock若不指定-waveformICC 内部生成一个 zero-width pulse clockCTS engine 认为该 clock 无法驱动任何 buffer故跳过 insertion。解决严格按工艺库要求设置 waveform通常为{0.0 period/2}set period_val 2.0 create_clock -name clk_main -period $period_val -waveform [list 0.0 [expr $period_val/2]] [get_ports clk_in]4.4set_ideal_network必须在create_clock之后、set_propagated_clock之前执行现象report_ideal_network显示 network 已设但report_timing中 clock path 仍显示idealskew 为 0。原因ICC 的 timing engine 依赖 command 执行顺序。若set_ideal_network在set_propagated_clock后执行engine 会忽略它因为 propagated clock 已锁定 clock topology。解决严格遵循顺序create_clock ... set_propagated_clock ... # 先设 propagated set_ideal_network ... # 再设 ideal覆盖 propagated 的部分 net4.5read_lef加载的 tech LEF 若含USE_MIN_SPACINGICC 默认禁用 spacing rule现象check_legality通过但route_opt后出现 DRC errorMIN_SPACING且report_drc显示 violation 在 metal2 layer。原因某些先进工艺 tech LEF 中定义了USE_MIN_SPACING属性但 ICC 默认不启用它需手动打开set_db lef_use_min_spacing true read_lef your_tech.lef注意此 flag 必须在read_lef前设置否则无效。手册中set_db命令的 Example 未提及此依赖关系。5. 用iccug做 timing closure 的「反向工程」从report_timing的 violation line 定位手册页码与参数组合最高效的iccug用法不是正向查命令而是逆向——当你看到report_timing输出一行 violation立刻知道该翻手册哪一页、改哪个参数、加哪个 flag。这需要建立 violation message 与手册章节的映射表。5.1 构建 violation-message → iccug page mapping 表以 ICC 22.06 为例常见 violation message 与手册位置对应关系report_timing 输出片段手册章节Page关键参数/命令作用max_transition 0.300 0.080 (library)Section 12.3.2 (p. 427)set_max_transition设置 transition limit影响 CTS buffer sizinghold_slack -0.123 (endpoint: reg_out/Q)Section 15.4.1 (p. 589)opt_design -hold_repair启用 hold repair需配合-iterationsclock_skew 0.000 (ideal)Section 10.2.5 (p. 362)set_propagated_clock,set_ideal_network控制 clock model决定 skew 是否参与计算min_period 2.100 2.000 (constraint)Section 11.1.3 (p. 401)create_clock -waveformwaveform 定义错误导致 period 计算偏差DRC: MIN_SPACING (metal2)Section 18.7.4 (p. 712)set_db lef_use_min_spacing true启用 LEF 中定义的 spacing rule构建方法收集你项目中所有真实 violation messagereport_timing -format full timing.rpt对每条 message用pdfgrep -n max_transition在iccug.pdf中搜索记录首次出现页码验证该页码下的Command Reference条目是否包含对应参数整理成表格打印贴在显示器边框——比 CtrlF 快 5 倍。5.2 实战从一条 hold violation 快速定位到opt_design的完整修复链假设report_timing -delay_type min_max输出Startpoint: reg_a/CLK (rising edge) Endpoint: reg_b/D (data arrival time) Path Group: clk_main Path Type: hold ... Slack (MET) : -0.123按 mapping 表翻到 p.589找到opt_design命令的Arguments栏-hold_repair : Enable hold time optimization. Default: false. -iterations : Number of iterations for hold repair. Default: 1.但手册 Example 只写了opt_design -post_route -hold_repair这不够。血泪经验是-hold_repair单独用效果差必须组合-setup_repair并增加-iterations# 正确写法经 3 个 tape-out 验证 opt_design -post_route \ -hold_repair \ -setup_repair \ -iterations 5 \ -hold_margin 0.02 \ -setup_margin 0.05其中-hold_margin 0.02是关键它告诉 ICC 在修复时预留 20ps margin避免 fix 一个 hold violation 导致另一个 nearby path 出现新的 violation即「fix one崩一片」。手册没提这个 margin 参数但它在opt_design的Advanced Options子节p.592有说明。5.3 终极技巧用report_timing -hierarchy的层级路径反推set_ideal_network范围report_timing -hierarchy输出类似Path Group: clk_main Clock: clk_main 0.000 ... Instance: top_inst/sub_block/clk_buf Pin: top_inst/sub_block/clk_buf/Z这串top_inst/sub_block/clk_buf/Z就是set_ideal_network的最佳 target。不要盲目设整个 port# ❌ 错误设整个 port可能覆盖不该 ideal 的 net set_ideal_network [get_ports clk_in] # ✅ 正确精准到 violation 路径中的 driver pin set_ideal_network [get_pins top_inst/sub_block/clk_buf/Z]因为get_pins返回的是 pin objectICC 会自动将该 pin downstream 的所有 net 设为 ideal且不影响 upstream如 clock source path。这比get_ports精准 10 倍且report_ideal_network可验证范围。从那以后我每次 runreport_timing第一件事就是grep Slack (MET) timing.rpt | head -5然后对照 mapping 表直奔手册页码再 copy-paste 参数组合到 Tcl 脚本里。不再通读章节不再猜参数不再等opt_design跑 3 小时才发现-hold_repair没开。手册不是用来读的是用来查的——查得越快tape-out 越稳。希望帮到你。本文还有配套的精品资源点击获取
返回列表