ucs_collect_sta_qor
递归收集 STA QoR,按 corner 与 setup/hold 汇总 Path Group WNS/TNS/NVP,并生成 Excel 工作簿
1. Quick Start
# 一个 run root ./ucs_collect_sta_qor \ --input_dir /proj/chip/sta/run_001 \ --output_file run_001_sta_qor.xlsx # 多个 root 用逗号分隔,合并到一个 workbook ./ucs_collect_sta_qor \ --input_dir /proj/chip/sta/run_A,/proj/chip/sta/run_B \ --slack_less_than -0.10 \ --output_file compare_sta_qor.xlsx
推荐范围:input root 应覆盖所需 corner,但不要直接使用过大的公共目录。程序递归扫描全部子目录,范围越精确,发现报告越快、结果归属越清晰。
2. Input 与报告发现
| 规则 | 行为 |
|---|---|
| Root | --input_dir 必填;多个 root 在一个字符串中用逗号分隔。 |
| Filename | 递归选择 basename 以 qor.rpt.gz 结尾的文件。 |
| Compression | 直接读取 gzip,不调用客户环境中的 gzip 命令。 |
| Corner identity | 从报告路径/文件名中的 Stp/Hld 命名识别 setup/hold 与 corner。 |
| Ordering | 收集后按 corner 与 check type 稳定排序。 |
如果扫描范围内没有匹配报告,程序以错误退出而不是生成空 workbook。这样自动流程可以把“没有输入”与“QoR 全部 clean”区分开。
3. QoR 解析与 Slack Threshold
工具识别报告中的 Timing Path Group 'NAME' (max_delay/setup) 和 (min_delay/hold) block,并读取对应 WNS、TNS、NVP。group 名以报告原文为准,不依赖固定列宽,因此报告显示时被截断的其他字段不会造成 group 之间错误合并。
| Metric | 定义 |
|---|---|
| WNS | 满足 threshold 条件的最差 group slack。 |
| TNS | 满足 violation 条件的负 slack 总和。 |
| NVP | 满足 violation 条件的 path/group violation 数。 |
--slack_less_than N 使用严格小于:只有 wns < N 才进入 threshold 结果。默认 0,因此默认收集负 slack violation;WNS 等于 0 不计入。
# 默认:只看负 slack --slack_less_than 0 # 只关注小于 -0.1 的严重项 --slack_less_than -0.1 # 包含一部分正 margin group --slack_less_than 0.05
4. Excel Workbook
| Worksheet | 内容 |
|---|---|
| Overall Summary | 按 corner/setup/hold 汇总总体 WNS、TNS、NVP,便于快速 review。 |
| Histograms | 展示收集值的分布,便于发现主体与离群项。 |
| Corner sheets | 每个 corner 的 Path Group 明细、check type 与 WNS/TNS/NVP。 |
CLI collector 不接收交互 comment,因此 workbook 中 comment 字段保持空。需要添加 Overall/Group comment、生成 subgroup 或浏览 timing path 时使用 ucs_sta_viewer。
5. Command-Line Reference
Usage: ucs_collect_sta_qor [OPTIONS] --input_dir <DIRS>
--input_dir <DIRS> Comma-separated roots [required]
--slack_less_than <NUMBER> Strict WNS threshold [default: 0]
--output_file <XLSX> [default: ucs_collect_sta_qor.xlsx]
--debug <0-4> [default: 0]
-h, --help
-V, --version
兼容 -debug N。实际 debug level 不会超过 license 中允许的 max_debug_level。
6. 使用案例
6.1 Nightly STA 汇总
./ucs_collect_sta_qor \ --input_dir "$STA_RUN_ROOT" \ --output_file "sta_qor_$(date +%Y%m%d).xlsx"
6.2 两套 run 对比
./ucs_collect_sta_qor \ --input_dir /proj/run_before/sta,/proj/run_after/sta \ --slack_less_than 0 \ --output_file before_after.xlsx
6.3 CI 中检查是否成功生成
if ./ucs_collect_sta_qor --input_dir "$RUN" --output_file qor.xlsx; then test -s qor.xlsx else echo "STA QoR collection failed" >&2 exit 1 fi
7. Troubleshooting
| 现象 | 原因与处理 |
|---|---|
| No matching QoR reports | 确认 root、读权限及文件名是否以 qor.rpt.gz 结尾。 |
| Corner 没有识别 | 确认使用当前流程约定的 Stp/Hld 报告命名;不要在 handoff 时随意重命名关键文件。 |
| 某 group 不在结果中 | 检查 --slack_less_than;比较是严格小于。 |
| 输出文件无法写入 | 检查父目录存在且可写、目标文件没有被 Excel 锁定。 |
| 需要 comment/subgroup | CLI collector 只做批量收集;使用 ucs_sta_viewer 的 Comment 与 Create Subgroup。 |
| License error | 确认 UCS license 有效;Linux 环境需要 OpenSSL。 |
验证:单/多 root、gzip discovery、setup/hold、严格 threshold、Overall/Histogram/corner worksheets 和 license/debug 均按 UCS-1.0.0 当前实现核对。