UCSSetup Smart Fix
Rust · UCS-1.0.0
UniversalChip Studio

Multi-corner setup ECO, carefully resolved.

Analyze PrimeTime reports, predict improvements across every corner, apply physical-aware checks, and emit one guarded ECO.

使用条件

运行 ucs_setup_smart_fix 前,需要先准备各 corner 的 timing report、cell delay JSON 和 cell metadata JSON。

输入准备方式Smart Fix 配置
Corner cell delayucs_lib_parser 直接解析每个 corner 的 .lib / .lib.gz,生成包含 timing arc 和 delay table 的 per-corner JSON。corners[].cell_data_files
Cell metadataucs_dump_lib_cell_attribute.tcl 必须在已加载目标库的 PrimeTime 会话中执行,导出 cell attribute JSON。lib_json
Timing reports为每个 corner 准备 PrimeTime setup timing report 列表。corners[].report_list_file

ucs_lib_parser 负责直接解析 Liberty delay;ucs_dump_lib_cell_attribute 负责从 PrimeTime 环境取得 cell 属性。两者不是两个独立 Smart Fix 流程,而是同一次 Smart Fix 运行所需的数据准备条件。

Quick start

The executable is self-contained. Supply configuration, timing reports, cell timing JSON, and a valid UCS license.

Select the matching buildUse RHEL7 for glibc 2.17-class systems and RHEL8 for RHEL 8.
Place the licensePut .ucs_license.conf beside the executable, in .COMMON/, or in a parent directory.
Run from your work directoryThe log is created there; ECO and reports go below output_dir.
chmod +x ucs_setup_smart_fix_RHEL8
./ucs_setup_smart_fix_RHEL8 --config smart_fix.json

Configuration

Each corner uses a report-list file and one or more cell timing JSON files. Report lists accept globs and .gz files.

{
  "corners": [{
    "name": "ss_0p72v_125c",
    "report_list_file": "reports/ss.list",
    "cell_data_files": ["lib/ss_cells.json"],
    "target_slack": 0.0,
    "slack_window": [-200.0, 20.0]
  }],
  "lib_json": "lib/cell_metadata.json",
  "method": "size_up,swap_vt",
  "strategy": "worst_slack",
  "ps_threshold": 1.0,
  "output_dir": "./ucs_output",
  "filters": {
    "dont_touch_file": "filters/dont_touch.list",
    "max_size_pin_count": 9,
    "area_ratio": 1.5
  },
  "physical_blocks": [{
    "name": "cpu",
    "timing_prefix": "top/u_cpu/",
    "def_file": "physical/cpu.def.gz",
    "lef_file": "physical/lef.list"
  }]
}

Report list

# One path or glob per line
rpts/pt_route_ss/*.rpt.gz
/runs/project_a/rpts/setup_top.rpt

A positive target_slack automatically expands the upper slack-window bound so margin paths are retained.

Command line

CLI values override JSON.

OptionPurpose
-c, --configRequired configuration JSON.
--output-dir / --output-ecoOverride output root and ECO filename.
--lib-jsonCell metadata for candidate grouping.
--methodsize_up, swap_vt, or both.
--strategyworst_slack, bottleneck, max_delay, or path_count.
--corner-targetRepeatable CORNER:PS target override.
--ps-thresholdMinimum improvement in at least one corner.
--include-ioInclude I/O paths; default is register-to-register.
--def-file / --lef-fileLegacy single-block physical inputs.
--dont-touchInstance wildcard blacklist.
--size-only-inst / --swap-only-instRestrict matching instances by change axis.
--size-only-ref / --swap-only-refRestrict matching candidate references.
--max-size-pin-count / --area-ratioMetadata-based candidate limits.
--debugLevel 0–4, capped by the license.
./ucs_setup_smart_fix_RHEL8 \
  --config smart_fix.json \
  --corner-target ss_0p72v_125c:5.0 \
  --strategy bottleneck \
  --method size_up,swap_vt --debug 1

Decision rules

A change is committed only after every configured corner agrees it is safe.

Rank instancesUse WNS, bottleneck slack debt, arc delay, or path count.
Filter candidatesApply method, instance, reference, pin-count, and area rules.
Calibrate each cornerScale the library prediction to measured arc delay at actual transition and load.
Require no regressionOne corner must exceed ps_threshold and no present corner may regress.
Choose cautiouslyPrefer the smallest accepted fix that closes the worst gap.

Physical-aware sizing

With DEF and LEF, increased width is checked against the next solid obstacle in the placement row.

Top timing names map into subblock DEF files through physical_blocks[].timing_prefix. Placed fillers, well taps, endcaps, and covers count as removable whitespace; fixed cells remain obstacles.

Without matching DEF data, the module stays timing-fixable and is not physically checked. Missing physical data never blocks a timing fix.

Output files

Each invocation creates a timestamped directory.

ucs_output/ └── ucs_setup_smart_fix_YYYYMMDD_HHMMSS/ ├── eco/eco_multicorner.tcl ├── reports/summary.rpt ├── reports/unfixed_<corner>.rpt └── debug/

The ECO uses guarded commands:

catch { size_cell [get_cells {top/u_cpu/U123}] BUFFD4_LVT }

The execution log is created in the current working directory as ucs_setup_smart_fix_YYYYMMDD_HHMMSS.log.

License & runtime

PlatformLinux x86_64; use the matching RHEL7/RHEL8 build.
DependenciesNo Python or NumPy. System openssl validates the UCS license.
License searchExecutable directory, .COMMON/, then parent directories.
NetworkNo network service or listening port.

Troubleshooting

MessageCheck
license check failedLicense file, expiry, user authorization, and openssl.
missing Point columnUse PrimeTime -capacitance -transition_time -nets -input_pins.
no timing reportsReport-list paths and globs; relative entries resolve from the execution directory.
no fixes generatedSlack window, targets, candidate data, filters, timing tables, and threshold.

UniversalChip Studio Support

Technical: tech@universalchipstudio.com
Business: support@universalchipstudio.com