ucs_drv_fix.tcl
Usage Guide — UCS DRV Fix ECO Generator
| Script | ucs_drv_fix.tcl |
| Version | UCS-1.2.0 |
| Modified | 2026-03-19 |
| Purpose | Analyze DRV violation lists and generate ECO Tcl grouped by violation type with configurable fix methods |
| Environment | PrimeTime (pt_shell) — analysis & ECO generation. Fusion Compiler / ICC2 — ECO execution only. |
| Support | tech@universalchipstudio.com |
Key Features
- Config-Driven Fix — Map each violation type (data_tran, clock_tran, max_cap, max_fanout) to its own ordered method sequence and per-method parameters via external config files.
- Multiple Fix Methods — size_up (drive strength increase within same VT), swap_vt (VT swap within same drive strength), insert_buffer (nature_on_route / smart_cluster / interface), clone_driver (cluster-based fanout splitting).
- Intelligent Clustering — K-means clustering with k-means++ initialization for buffer insertion and driver cloning. Auto-detects optimal cluster count via elbow method. Small clusters auto-merged.
- Leaf Driver Resolution — Uses
all_connected -leafto correctly identify leaf-level driver cells, even when the net passes through hierarchical boundaries. - ECO Annotation — Each ECO command is annotated with Net, Type, Limit/Slack, Source, and Driver (current ref), enabling quick review and diff comparison.
Quick Start
# In pt_shell with design loaded:
source /path/to/ucs_drv_fix.tcl
ucs_drv_fix \
-violations_config /proj/run/drv/violations.config \
-methods_config /proj/run/drv/fix_method.config \
-ref_lib /proj/run/drv/lib_cell_info.txt.tcl \
-eco /proj/run/drv/eco_output.tcl \
-debug 1
# Minimal — insert_buffer only (no -ref_lib needed)
ucs_drv_fix \
-violations_config max_cap.violations_config \
-methods_config max_cap_bufonly.methods_config \
-eco eco_output.tcl
Arguments
| Option | Type | Default | Description |
|---|---|---|---|
-violations_config | string | required | Path to a violation config file. Maps violation type names to violation list file paths. One type: filepath mapping per line. See Violations Config Format. |
-methods_config | string | required | Path to a methods config file. Defines the ordered method sequence and all per-method switches for each violation type. One type { ... } block per type. See Methods Config Format. |
-ref_lib | string | — | Path to cell library file (Tcl dict format defining ::cell_library_dict). Optional overall, but required when any violation type uses size_up, size_cell, or swap_vt. The script validates this at startup and exits with an error if a sizing method is configured without -ref_lib. See Ref Lib Format. |
-eco | string | — | ECO output file path. The actual filename is auto-timestamped: <base>.YYYYMMDD.HH.tcl (based on the provided path). If omitted, ECO commands are accumulated in memory and only reported via log messages — no file is written. |
-debug | 0–4 | 0 |
Debug verbosity level. The final effective level is license-controlled: effective = min(requested, licensed_max). If the requested level exceeds the licensed maximum, the script prints a notice and automatically downgrades.0 — Off (production mode, no debug output)1 — Flow-level: stage entry/exit, key I/O summary, basic command record2 — Decision-level: branch decisions, filtering rationale, sizing chain trace3 — Data-level: intermediate data dumps, structured dump files, fuller command trace4 — Deep-diagnosis: raw state snapshots, Dumper output, highest-granularity detail
|
-investigate | boolean | off | Add gui_add_annotation visualization commands to the ECO file for clustering investigation. Forces debug ≥ 1. Useful for visually inspecting cluster assignments in the GUI. |
-help | boolean | — | Display detailed help message and exit. Does not require a loaded design. |
Violations Config Format
One violation type per line. Each line maps a type name to its violation list file path. Lines starting with # are comments. Blank lines are ignored.
# violations.config — maps violation types to file paths data_tran: /proj/run/drv/data_tran.list clock_tran: /proj/run/drv/clock_tran.list max_cap: /proj/run/drv/max_cap.list max_fanout: /proj/run/drv/max_fanout.list
Violation List File Format
Each line defines one violation. Three formats are supported. Comments (#) and blank lines are ignored. Inline comments after data fields are stripped.
| Format | Example | Behavior |
|---|---|---|
<net_name> [limit] [slack] | top/u_data/net123 0.120 -0.035 | First token treated as net name (implicit net target). |
net <net_name> [limit] [slack] | net top/u_data/net123 0.120 -0.035 | Explicit net target. net prefix consumed. |
pin <pin_name> [limit] [slack] | pin top/u_ifc/cell_A/Z 0.050 -0.015 | Pin target. Auto-resolved to net via get_nets -of_objects [get_pins ...] before processing. |
data_tran and max_cap, it is processed only once (first occurrence wins). Pin-to-net resolution may produce the same net from different pins.
# max_cap.list — real example TCDX/tcdx_ctrl/TDATQCHAN0/FxPlace_HFSNET_50445 75.800000 -19.824252 pin TCDX/tcdx_ctrl/TREQQ/FxOptCts_ctmTdsLR_1_1567216/A2 75.800000 -10.605518 TCDX/tcdx_ctrl/TREQQ/SHIFTQ/tmp_net1578978 75.800000 -10.411594
Methods Config Format
One block per violation type. Each block contains key: value pairs controlling fix behavior. Lines starting with # are comments. Unknown keys trigger a warning.
# fix_method_fallback.config — Multi-type with fallback mode
# Try methods left to right, stop at first success
data_tran {
fix_method: size_cell,insert_buffer,clone_driver
fix_method_mode: fallback
fix_level: 2
size_level: 1
dont_touch_inst: /proj/cfg/dont_touch_inst.txt
dont_size_ref: *ISO*,*LS*
insert_buffer_list: BUFX4,BUFX8
insert_buffer_cluster: nature_on_route
insert_buffer_first_distance_ratio: 0.5
insert_buffer_repeater_distance_ratio: 0.9
insert_buffer_exclude_hardmacro: 1
enable_clone: 1
clone_threshold: 8
}
clock_tran {
fix_method: insert_buffer
fix_method_mode: fallback
insert_buffer_list: CKBUFX4,CKBUFX8
insert_buffer_cluster: nature_on_route
insert_buffer_first_distance_ratio: 0.3
insert_buffer_repeater_distance_ratio: 0.8
}
max_cap {
fix_method: size_cell,swap_vt,insert_buffer
fix_method_mode: fallback
fix_level: 2
dont_size_ref: *ISO*,*LS*,*TIE*
dont_swap_ref: *ISO*,*LS*,*TIE*
insert_buffer_list: BUFX4,BUFX8,BUFX12
insert_buffer_cluster: smart_cluster
cluster_max_groups: 0
cluster_min_fanout: 4
cluster_min_group_pins: 3
}
max_fanout {
fix_method: clone_driver,insert_buffer
fix_method_mode: fallback
enable_clone: 1
clone_threshold: 12
insert_buffer_list: BUFX8,BUFX12
insert_buffer_cluster: smart_cluster
}
# max_cap.methods_config — Pipeline mode with all methods
# All methods run sequentially regardless of success
max_cap {
fix_method: size_up,swap_vt,insert_buffer,clone_driver
fix_method_mode: pipeline
insert_buffer_list: BUFFD1BWP136P5M156H3P48CPDLVT
insert_buffer_cluster: nature_on_route
insert_buffer_first_distance_ratio: 0.4
insert_buffer_repeater_distance_ratio: 0.7
insert_buffer_exclude_hardmacro: 1
cluster_min_fanout: 4
clone_threshold: 4
fix_level: 2
}
Method Sequence & Modes
fix_method
Comma-separated ordered list of method names. Methods are tried in order. Supported values:
| Method | Action | ECO Command Generated | Requires |
|---|---|---|---|
size_up / size_cell | Upsize driver cell to higher drive strength within the same VT type. Uses resistance-based sorting (lower resistance = stronger). | size_cell <inst> <new_ref> | -ref_lib |
swap_vt | Swap driver cell to a faster VT variant within the same drive strength. Uses resistance-based sorting (lower resistance = faster VT). | size_cell <inst> <new_ref> ;# VT swap (level N) | -ref_lib |
insert_buffer | Insert buffer on the violated net. Three sub-modes: nature_on_route (FC native), smart_cluster (k-means clustering), interface (interface-aware). | add_buffer_on_route or ucs_cluster_insert_buffer | insert_buffer_list |
clone_driver | Clone the driver instance and split fanout across clusters. Each clone serves one cluster's sink pins. | ucs_cluster_clone_driver | fanout ≥ clone_threshold |
size_cell is treated identically to size_up. Both names are accepted. Method names are case-sensitive. Unknown method names are ignored with a warning.
fix_method_mode
| Mode | Behavior |
|---|---|
fallback default | Try methods left-to-right. Stop at first success. Remaining methods are skipped. The successful method is recorded in statistics. |
pipeline | Run all methods sequentially regardless of success. All successful methods are recorded. Useful for combined actions such as size_cell + insert_buffer. |
Cumulative Sizing Chain
When fix_level is specified and consecutive sizing methods (size_up, size_cell, swap_vt) appear in the method list, they share a cumulative sizing budget. The first method consumes as many steps as it can, and remaining budget passes to the next sizing method. Only one size_cell ECO command is emitted for the final result.
# Example: fix_level: 3, methods: size_cell,swap_vt,insert_buffer # Step 1: size_cell uses 2 steps (INVD2→INVD4, remaining budget = 1) # Step 2: swap_vt uses 1 step (INVD4_HVT→INVD4_LVT, remaining budget = 0) # Result: single ECO: size_cell inst INVD4_LVT # Step 3: insert_buffer runs independently (not a sizing method)
Config Key Reference
Common Keys
| Key | Type | Default | Description |
|---|---|---|---|
fix_method | string | — | Ordered comma-separated method list for this violation type. |
fix_method_mode | string | fallback | Method execution mode: fallback or pipeline. |
dont_touch_inst | file path | — | Path to a file listing wildcard instance patterns (one per line). Instances matching any pattern are skipped by size_up and swap_vt. Note: this is a file path, not an inline pattern string. |
Size_up / Size_cell Keys
| Key | Type | Default | Description |
|---|---|---|---|
fix_level | integer | — | Shared cumulative sizing budget across consecutive size_cell/size_up/swap_vt methods. When present, overrides size_level and swap_level. Methods consume from this shared budget sequentially. |
size_level | integer | 1 | Legacy per-method step count for size_cell/size_up. Used only when fix_level is not specified. |
dont_size_ref | string | — | Comma-separated wildcard ref patterns that must not be upsized. Example: *ISO*,*LS*,*TIE*. Inline patterns, not a file path. |
max_size_pin_count | integer | 9 | Cells with library pin_count exceeding this threshold are excluded from size_up/size_cell. swap_vt is still allowed. Prevents upsizing complex cells (e.g., AOI222 with 5+ pins). |
Swap_vt Keys
| Key | Type | Default | Description |
|---|---|---|---|
swap_level | integer | 1 | Legacy per-method step count for swap_vt. Used only when fix_level is not specified. |
dont_swap_ref | string | — | Comma-separated wildcard ref patterns that must not be VT-swapped. Inline patterns, not a file path. |
Insert_buffer Keys
| Key | Type | Default | Description |
|---|---|---|---|
insert_buffer_list | string | — | Comma-separated candidate buffer cell ref names. Current buffer selection is simple: first legal candidate from the list is used. |
insert_buffer_cluster | string | — | Buffer insertion sub-mode. Supported values: nature_on_route, smart_cluster, interface. See table below. |
insert_buffer_first_distance_ratio | float | — | First buffer insertion distance as a ratio of total net route length. Used by nature_on_route mode. Example: 0.4 = 40% from driver. |
insert_buffer_repeater_distance_ratio | float | — | Repeater spacing as a ratio of total net route length. Used by nature_on_route mode. Example: 0.7 = repeaters every 70% of remaining length. |
insert_buffer_exclude_hardmacro | 0/1 | 0 | When enabled, route-based insertion tries to avoid hard macros or hard blocks (if the tool supports the required attributes). |
insert_buffer_first_distance | float | — | Absolute first distance in microns. Required when insert_buffer_cluster: interface. |
insert_buffer_repeater_distance | float | — | Absolute repeater distance in microns. Required when insert_buffer_cluster: interface. |
Insert Buffer Sub-Modes
| Mode | ECO Command | Description |
|---|---|---|
nature_on_route | add_buffer_on_route [get_nets N] BUF -first_distance_length_ratio R1 -repeater_distance_length_ratio R2 -no_legalize | Uses FC/ICC2 native add_buffer_on_route command. Distance ratios control placement. -no_legalize is currently hardcoded. |
smart_cluster | ucs_cluster_insert_buffer -net N -lib_cell C -max_groups G -min_fanout F -min_group_pins P -execute | K-means clustering of sink pins by physical location. One buffer inserted per cluster at weighted centroid. |
interface | ucs_insert_interface_buffer ... -execute | Interface-aware buffer insertion using absolute distances. Resolves interface anchors from the violation target. |
Clone_driver Keys
| Key | Type | Default | Description |
|---|---|---|---|
enable_clone | 0/1 | 0 | Enable or disable clone_driver for this violation type. When 0, clone_driver is skipped even if listed in fix_method. |
clone_threshold | integer | 8 | Minimum number of input-direction fanout pins required before clone_driver succeeds. If fanout is below threshold, clone is skipped and the method returns failure. |
Cluster Control Keys
Used by both insert_buffer_cluster: smart_cluster and clone_driver.
| Key | Type | Default | Description |
|---|---|---|---|
cluster_max_groups | integer | 0 | Maximum number of sink clusters. 0 = auto-detect optimal K using the elbow method (WCSS analysis). Range: 2 to min(5, num_pins/2). |
cluster_min_fanout | integer | 4 | Minimum number of sink pins required before clustering is attempted. Nets with fewer sinks are not clustered. |
cluster_min_group_pins | integer | 3 | Minimum number of pins per cluster after merge. Clusters smaller than this are merged into the nearest neighbor cluster by centroid distance. |
Success / Failure Rules
| Method | Success Condition | Failure Conditions |
|---|---|---|
size_up / size_cell | A larger legal replacement ref is found in the library for the resolved leaf driver. | No larger cell in library; driver is input-port-driven; ref not found in cell_library_dict; blocked by dont_touch_inst, dont_size_ref, or max_size_pin_count; already at maximum drive strength in group. |
swap_vt | A faster-VT legal replacement ref is found in the library (same drive strength). | No faster VT variant in library; blocked by dont_touch_inst or dont_swap_ref; already at fastest VT in group. |
insert_buffer | The selected buffer mode can emit a valid ECO command for the target net. | Net not found in design; no buffer candidates in insert_buffer_list; empty net collection. |
clone_driver | Cloning is enabled (enable_clone: 1) AND the net's input fanout ≥ clone_threshold. | enable_clone: 0; fanout below threshold; clustering fails to produce ≥ 2 clusters. |
Output Files
| File | Location | Description |
|---|---|---|
<eco>.YYYYMMDD.HH.tcl | Path from -eco | ECO commands grouped by violation type. Each net section includes comment headers: Net, Type, Limit/Slack, Source, Driver (current ref). UCS clustered commands require ucs_drv_fix.tcl to be sourced before the ECO file. |
ucs_drv_fix_YYYYMMDD_HHMMSS.log | Current working directory | Full execution log with timestamped entries. Contains INFO/WARN/ERROR/DEBUG messages with stage, PID, user, and run ID. |
debug/run_<id>/<stage>/ | Current working directory | Debug dump files. Generated when -debug ≥ 3. Organized by stage: 00_init/, 10_parse/, 20_analyze/, 30_generate/. |
ECO File Structure
################################################################################ # UCS DRV Fix ECO Commands (ONE METHOD PER VIOLATION) ################################################################################ # Generated by: UCS DRV Fix UCS-1.2.0 # Date: Sat Apr 11 06:32:28 EDT 2026 # Host: atlsers0281.amd.com # Total ECO commands: 6 # Fixed violations: 3 ################################################################################ ################################################################################ # Violation Type: max_cap # Number of ECO commands: 6 ################################################################################ ################################################################################ # Net: TCDX/tcdx_ctrl/TDATQCHAN0/FxPlace_HFSNET_50445 # Type: max_cap, Limit: 75.8, Slack: -19.824252 # Source: net TCDX/tcdx_ctrl/TDATQCHAN0/FxPlace_HFSNET_50445 # Driver: TCDX/tcdx_ctrl/TDATQCHAN0/FxPlace_HFSINV_102_445802 (INVD2SPG1AMDBWP136P5M156H3P48CPDLVT) ################################################################################ size_cell TCDX/tcdx_ctrl/TDATQCHAN0/FxPlace_HFSINV_102_445802 INVD4SPG1AMDBWP136P5M156H3P48CPDLVT add_buffer_on_route [get_nets TCDX/tcdx_ctrl/TDATQCHAN0/FxPlace_HFSNET_50445] BUFFD1BWP136P5M156H3P48CPDLVT -first_distance_length_ratio 0.4 -repeater_distance_length_ratio 0.7 -no_legalize
ECO Execution in FC / ICC2
ECO files generated in PrimeTime are sourced in Fusion Compiler or ICC2 for implementation. The require_primetime check only runs inside the ucs_drv_fix proc, not when the script is sourced. So sourcing ucs_drv_fix.tcl in FC/ICC2 is safe — it only loads the proc definitions and ECO executor commands.
# In fc_shell or icc2_shell with design loaded: source /path/to/ucs_drv_fix.tcl ;# loads ucs_cluster_insert_buffer, ucs_cluster_clone_driver procs source eco_output.20260413.06.tcl ;# executes ECO commands legalize_placement ;# legalize inserted buffers and clones
ucs_drv_fix.tcl must be sourced before the ECO file because ucs_cluster_insert_buffer and ucs_cluster_clone_driver are UCS-defined procs (not FC built-in commands). Without sourcing the script first, these ECO commands will fail with "invalid command name".
ECO Executor Commands
These procs are defined as top-level Tcl commands (via define_proc_attributes) for use inside ECO files:
ucs_cluster_insert_buffer
ucs_cluster_insert_buffer \
-net {net_name} \
-lib_cell {BUFFD1BWP136P5M156H3P48CPDLVT} \
[-max_groups 0] \
[-min_fanout 4] \
[-min_group_pins 3] \
-execute
Clusters net sink pins using k-means, inserts one buffer per cluster at the weighted centroid location. -execute is required for actual execution; without it, the command is a no-op.
ucs_cluster_clone_driver
ucs_cluster_clone_driver \
-net {net_name} \
[-max_groups 0] \
[-min_fanout 4] \
[-min_group_pins 3] \
-execute
Clusters net sink pins, creates one clone of the driver per cluster. Each clone is connected to its cluster's sinks. The original driver keeps cluster_0. Clone instances are named <driver>_ECO_CLONE_<date>_<NN>.
Ref Lib File Format
A Tcl file that defines ::cell_library_dict as a dict. Each entry maps a cell ref name to its attributes. The file is sourced by the cellsizer during library loading.
set ::cell_library_dict {
BUFFD1BWP136P5M156H3P48CPDLVT {
area 0.029952
base_name "BUFFD"
size_base_name "BUFFDSPG1AMDBWP136P5M156H3P48CPD"
swap_base_name "BUFFDSPG1AMDBWP136P5M156H3P48CPD"
vt_type "LVT"
drive_strength 1
pin_count 2
resistance {
average 2.633
fall 2.682
rise 2.583
}
}
BUFFD2BWP136P5M156H3P48CPDLVT {
area 0.044928
base_name "BUFFD"
size_base_name "BUFFDSPG1AMDBWP136P5M156H3P48CPD"
swap_base_name "BUFFDSPG1AMDBWP136P5M156H3P48CPD"
vt_type "LVT"
drive_strength 2
pin_count 2
resistance {
average 1.316
fall 1.341
rise 1.291
}
}
}
Cell Attribute Fields
| Field | Purpose |
|---|---|
base_name | Cell family base name (without drive/VT suffix). |
size_base_name | size_up grouping key. Cells with the same size_base_name + vt_type are in one group, sorted by resistance descending. |
swap_base_name | swap_vt grouping key. Cells with the same swap_base_name + drive_strength are in one group, sorted by resistance descending. |
vt_type | Threshold voltage type: ULVT, SLVT, LVT, RVT, HVT. |
drive_strength | Numeric drive strength (1, 2, 4, 8, etc.). |
pin_count | Total pin count. Used by max_size_pin_count filter. |
resistance { average N fall N rise N } | Output resistance. average is the primary sort key for both size_up and swap_vt. Lower resistance = stronger driver / faster VT. |
Dependencies
The script sources 5 common library files at startup. Libraries are auto-located by searching upward from the script directory for a common/lib/tcl_lib/ directory.
| Library | Purpose |
|---|---|
ucs_tcl_common_utils.tcl | Logging, formatting, tool detection, progress display. |
ucs_tcl_dict_compat.tcl | Tcl 8.3 dict command compatibility shim. |
ucs_tcl_license_check.tcl | License validation, debug-level authorization (RSA+AES). |
ucs_tcl_snps_common.tcl | Cell sizing engine (cellsizer) and k-means clustering engine. |
ucs_tcl_snps_drv_fix_utils.tcl | Low-level fix method implementations, driver resolution, ECO generation. |
Debug & Diagnostics
| Option | Type | Default | Description |
|---|---|---|---|
-debug | integer (0-4) | 0 |
Debug verbosity level. Gated by license authorization:1 = Flow-level (stage entry/exit, driver identification, method results)2 = Decision-level (sizing chain trace, method selection rationale)3 = Data-level (effective config dump, violation list dump, ECO command trace)4 = Deep-diagnosis (raw state snapshots, clustering coordinates)
|
Log file: Automatically created as ucs_drv_fix_<YYYYMMDD_HHMMSS>.log in the current directory. Every log entry includes: timestamp, level, script name, run_id, PID, user, stage, and message.
[2026-04-11 06:32:28] [DEBUG] [ucs_drv_fix] [20260411_063227] [pid:1647017] [user:huiyinli] [20_analyze] Driver: TCDX/tcdx_ctrl/TDATQCHAN0/FxPlace_HFSINV_102_445802 (INVD2SPG1AMDBWP136P5M156H3P48CPDLVT) [2026-04-11 06:32:28] [DEBUG] [ucs_drv_fix] [20260411_063227] [pid:1647017] [user:huiyinli] [20_analyze] Shared fix_level: 2 [2026-04-11 06:32:28] [DEBUG] [ucs_drv_fix] [20260411_063227] [pid:1647017] [user:huiyinli] [20_analyze] size_up moved 1 step(s): INVD2SPG1AMDBWP136P5M156H3P48CPDLVT -> INVD4SPG1AMDBWP136P5M156H3P48CPDLVT
Workflow Diagram
pt_shell (design loaded)
|
v
+------------------+
| source script | <-- loads procs + common libs
+------------------+
|
v
+------------------+
| ucs_drv_fix | <-- CLI arguments
+------------------+
|
v
+------------------+
| License Check | <-- .ucs_license.conf (RSA+AES)
+------------------+
|
v
+------------------+
| Load Ref Lib | <-- cell_library_dict (if -ref_lib)
| Build Sort Lists | build_size_up_lists, build_swap_vt_lists
+------------------+
|
v
+------------------+
| Parse Configs | <-- violations.config + methods.config
+------------------+
|
v
+------------------+
| Load Violations | <-- per-type violation list files
+------------------+
|
v (per violation)
+------------------+
| Resolve Driver | <-- all_connected -leaf (handles hierarchy)
+------------------+
|
v
+------------------+ +------------------+ +------------------+
| size_up/swap_vt | | insert_buffer | | clone_driver |
| (sizing chain) | | (route/cluster) | | (k-means clone) |
+------------------+ +------------------+ +------------------+
| | |
+-------------------------+-------------------------+
|
v
+------------------+
| ECO File Save | <-- grouped by violation type
+------------------+
|
v
+------------------+
| Statistics & |
| Summary Report |
+------------------+
-------- Execution Phase (separate session) --------
fc_shell / icc2_shell (design loaded)
|
v
+------------------+
| source script | <-- loads ECO executor procs
+------------------+
|
v
+------------------+
| source ECO file | <-- size_cell, add_buffer_on_route,
+------------------+ ucs_cluster_insert_buffer,
| ucs_cluster_clone_driver
v
+------------------+
| legalize_placement|
+------------------+
Usage Examples
Conservative Data-Transition Repair
ucs_drv_fix \
-violations_config data_tran.violations_config \
-methods_config data_tran_conservative.methods_config \
-ref_lib lib_cell_info.txt.tcl \
-eco eco_data_tran.tcl
Config: fix_method: size_cell,swap_vt — try upsizing, then VT swap. No buffer insertion.
Buffer-First Repair (No Ref Lib Needed)
ucs_drv_fix \
-violations_config max_cap.violations_config \
-methods_config max_cap_bufonly.methods_config \
-eco eco_max_cap.tcl
Config: fix_method: insert_buffer + insert_buffer_cluster: nature_on_route — route-based buffer insertion only. No -ref_lib required.
Aggressive Fallback (All Methods)
ucs_drv_fix \
-violations_config all_violations.config \
-methods_config full_fallback.methods_config \
-ref_lib lib_cell_info.txt.tcl \
-eco eco_aggressive.tcl \
-debug 1
Config: fix_method: size_cell,swap_vt,insert_buffer,clone_driver + fix_method_mode: fallback — try all methods, stop at first success.
Combined Sizing + Buffering (Pipeline)
ucs_drv_fix \
-violations_config max_cap.violations_config \
-methods_config max_cap_pipeline.methods_config \
-ref_lib lib_cell_info.txt.tcl \
-eco eco_pipeline.tcl \
-debug 2
Config: fix_method: size_cell,insert_buffer + fix_method_mode: pipeline — both methods run for every violation, maximizing fix coverage.
Cluster-Oriented Fanout Fix
ucs_drv_fix \
-violations_config max_fanout.violations_config \
-methods_config max_fanout.methods_config \
-eco eco_fanout.tcl \
-investigate
Config: fix_method: clone_driver,insert_buffer + insert_buffer_cluster: smart_cluster + clone_threshold: 12. With -investigate, clustering assignments are visualized via gui_add_annotation.
Deep Debugging
ucs_drv_fix \
-violations_config violations.config \
-methods_config methods.config \
-ref_lib lib_cell_info.txt.tcl \
-eco eco_debug.tcl \
-debug 4
Full diagnostic output. Check ucs_drv_fix_*.log and debug/run_*/ for driver resolution, sizing chain trace, clustering coordinates, and raw state dumps.