Release Notes — v2.0-20260712

HeteroSTA3D v2.0-20260712

Released: July 13, 2026

Download: Official HeteroSTA and HeteroSTA3D release page

HeteroSTA3D archive SHA-256: e879e8b9e96c86f357d32a7c766e597693b16806a132bd3cd992f5707c029cbe

Highlights

  • Direct integration with 3D EDA tools. In-memory NetlistDB input removes file-only handoffs, while the new cell-sizing, topology-query, and batch-read APIs support incremental optimization flows.
  • All-corner operations. Pass dc_name="all" to heterosta3d_extract_rc_from_placement, heterosta3d_update_delay, or heterosta3d_update_arrivals to apply the operation to every existing delay corner.
  • In-memory netlist input. heterosta3d_set_netlistdb lets an application transfer a pre-built NetlistDB into HeteroSTA3D using documented ownership rules.
  • Transparent die selection through cell-name suffixes. Cells named *_top and *_bottom are matched to the corresponding die's Liberty data.
  • New sizing_demo. The release includes an incremental example using batch_update_celltypes → extract_rc → update_delay → update_arrivals → report_wns_tns.
  • Documented API conventions. Public headers and the API Reference now define index domains, cell-array layout, ownership, pointer lifetime, and CPU/GPU memory rules.

New release APIs

Full signatures and usage requirements are in the API Reference.

API Use
heterosta3d_reset Clear timing, netlist, and SDC state while preserving loaded Liberty data
heterosta3d_set_netlistdb Transfer a pre-built NetlistDB into HeteroSTA3D
heterosta3d_batch_update_celltypes Apply a per-cell type list to every delay corner
heterosta3d_zero_slew Zero-initialize input-port slews before reading constraints
heterosta3d_batch_read_sdc Read multiple SDC files for one delay corner
heterosta3d_ignore_net Exclude a net from placement-based RC extraction
heterosta3d_query_pin_direction Query whether a pin is input, output, or unknown
heterosta3d_internal_get_celltype_of_pin Read back the cell type assigned to a pin's cell

Renamed or changed APIs

  • heterosta3d_get_num_of_pins and heterosta3d_get_num_of_nets no longer take dc_name.
  • heterosta3d_get_pin2net now takes bool use_cuda instead of dc_name.
  • heterosta3d_net2pin_start is now heterosta3d_get_net2pin_start, and takes bool use_cuda instead of dc_name.
  • heterosta3d_net2pin_items is now heterosta3d_get_net2pin_items, and takes bool use_cuda instead of dc_name.
  • heterosta3d_create_liberty_set_batch now uses TimerEarlyOrLate with the constants EARLY and LATE, replacing early_late_t, EL_EARLY, and EL_LATE.

The topology-query results are borrowed pointers and must not be freed. Pass use_cuda=false when reading them from host code and use_cuda=true when consuming them on the GPU. Their lengths and lifetimes are documented in the API Reference.

Public enum values

  • Heterosta3DDie: TOP (0) and BOTTOM (1).
  • TimerEarlyOrLate: EARLY (0) and LATE (1). Use the declaration in the bundled public header.

HeteroSTA dependency compatibility

The two runtime libraries and their headers form one tested release unit. Use the libheterosta.so, libheterosta3d.so, heterosta.h, and heterosta3d.h from the same HeteroSTA3D archive. Do not replace only the bundled HeteroSTA library or header unless that exact combination is explicitly listed as compatible.

The v2.0 archive includes its matched HeteroSTA library and header.

The supported environment is Linux x86-64 with glibc 2.34 or newer, CUDA Toolkit/runtime 12.8, NVIDIA Linux driver 580.65.06 or newer, OpenSSL 3, and jansson. GPU mode additionally requires an NVIDIA GPU with compute capability 8.0, 8.6, 8.9, 9.0, or 12.0 (sm_80, sm_86, sm_89, sm_90, or sm_120).

License compatibility

Existing valid, unexpired v1.x HeteroSTA3D licenses can continue to be used with v2.0. A valid, unexpired HeteroSTA license and HeteroSTA3D license are both required at runtime.

Upgrade checklist (v1.1 → v2.0)

  1. Replace EL_EARLY / EL_LATE with EARLY / LATE when calling heterosta3d_create_liberty_set_batch.
  2. Replace heterosta3d_get_num_of_pins(sta, dc_name) with heterosta3d_get_num_of_pins(sta), and update get_num_of_nets the same way.
  3. Replace heterosta3d_get_pin2net(sta, dc_name) with heterosta3d_get_pin2net(sta, use_cuda).
  4. Rename heterosta3d_net2pin_start/items to heterosta3d_get_net2pin_start/items and pass use_cuda.
  5. If you already own a NetlistDB, use heterosta3d_set_netlistdb once and follow its ownership-transfer rules; do not free the transferred pointer.
  6. Use the HeteroSTA and HeteroSTA3D libraries and headers from the same v2.0 archive.
  7. Confirm both license environment variables contain unexpired licenses.
  8. Re-run timing reports and compare WNS/TNS against your v1.1 baseline.