Release Notes — v2.0
HeteroSTA3D v2.0
Release date: 2026-05-16
Highlights
- First-class C interface for incremental flows. v1.x focused on file-based whole-design runs; v2 adds the netlist topology / cell-sizing / batch-read APIs needed to drive HeteroSTA3D from an external optimizer.
- Multi-corner parallelism. Pass
dc_name="all"toextract_rc_from_placement,update_delay,update_arrivalsto fan out across CPU threads or GPU per-thread default streams. - Netlist sharing across corners.
heterosta3d_set_netlistdblets all corners reuse a singleNetlistDB— corner 0 takes ownership of the original; corners 1..N-1 each get an internally-cloned copy automatically. Memory and load time scale ~1x instead of ~Nx. - Transparent 3D die routing via cell-name suffixes. Cells named
*_top/*_bottomroute to the matching die's liberty automatically. The 3D-pin mask is rebuilt internally; no extra plumbing required. - New
sizing_demo. An end-to-end incremental cell-sizing example that exercises the optimizer-style loop:batch_update_celltypes → extract_rc → update_delay → update_arrivals → report_wns_tns. - Conventions block in every public header. Index domains,
pin_rfencoding,num_cellssemantics,set_netlistdbownership, CPU/GPU memory rules — all documented at the top ofheterosta3d.hand mirrored in the API Reference.
New release APIs
Full reference in API Reference.
| API | Use |
|---|---|
heterosta3d_reset |
Clear timing+netlist+SDC for all corners; keep liberty libraries |
heterosta3d_set_netlistdb |
Install a NetlistDB shared across all delay corners |
heterosta3d_batch_update_celltypes |
Broadcast a per-cell cell-type list across all corners (cell sizing) |
heterosta3d_zero_slew |
Zero-initialize input port slews before reading SDC |
heterosta3d_batch_read_sdc |
Read multiple SDC files for one corner in one call |
heterosta3d_get_num_of_pins / _get_num_of_nets |
Netlist scalar queries |
heterosta3d_get_pin2net |
Pin-to-net mapping (host or device pointer) |
heterosta3d_get_net2pin_start / _get_net2pin_items |
Net-to-pin CSR (host or device pointer) |
heterosta3d_ignore_net |
Mark a net as ignored for placement RC extraction |
heterosta3d_query_pin_direction |
Pin direction (input/output/unknown) |
heterosta3d_internal_get_celltype_of_pin |
Read-back the cell type currently assigned to a pin's cell |
Bug fixes
- Multi-corner
set_netlistdbwas UB. Earlier behavior passed the same pointer to every corner, which caused a double-free on shutdown. Now corner 0 takes ownership and corners 1..N-1 each get an internally-cloned independentNetlistDB. batch_update_celltypessilent no-op whennum_cellswas wrong. The internal cell array includes the top-level module as cell 0, so the correct size is(leaf-cells + 1). The function's return value (uintptr_t cells_changed) now lets callers detect a size mismatch (returns 0) instead of failing silently.
Behavior changes vs v1.1
heterosta3d_get_num_of_pins/_of_netssignature change. v1.1 examples called these with adc_nameargument; the netlist is shared across corners so the parameter has been removed. Drop thedc_nameargument from any callsites.heterosta3d_lookup_pinsignature change. Same reason; the trailingdc_nameargument was dropped.heterosta3d_get_pin2netsignature change. The trailingconst char *dc_nameis replaced bybool use_cuda— match it to where you read the pointer (host vs. device).- 3D SPEF / RC extraction refinements. HBT (Hybrid Bonding Terminal) modeling and the prefix-sum kernel inside
extract_rc_from_placementwere rewritten; per-net RC values should match v1.1 within numerical tolerance.
APIs removed from the release surface
These were in v1.1 but are now dev-only and stripped from the release header and .so. Calling them against v2 will fail to link.
heterosta3d_get_net_arc_delayheterosta3d_dump_paths_max_to_file_with_place_info
If you have a legitimate use case for either, contact us so we can re-evaluate.
Upgrade checklist (v1.1 → v2.0)
- Replace
heterosta3d_get_num_of_pins(sta, dc_name)withheterosta3d_get_num_of_pins(sta)(same for_get_num_of_nets). - Update
heterosta3d_lookup_pin(sta, name, dc_name)toheterosta3d_lookup_pin(sta, name). - Update
heterosta3d_get_pin2net(sta, dc_name)toheterosta3d_get_pin2net(sta, use_cuda)— choosefalseif you read the array from host code,trueif from a CUDA kernel. - If you were creating one
NetlistDBper corner viaheterosta3d_read_netlist, consider building it once and usingheterosta3d_set_netlistdbto share — saves memory and respects the new ownership rules. - If your design uses many corners, replace per-corner loops with
dc_name="all"where applicable. - If you called
heterosta3d_get_net_arc_delayorheterosta3d_dump_paths_max_to_file_with_place_info, refactor to use the public reporting APIs (heterosta3d_report_wns_tns_max/min,heterosta3d_dump_paths_max_to_file, etc.) and let us know about your use case. - Re-run your timing reports and confirm WNS/TNS values are within tolerance.
- Update your license environment variables; v1.x licenses are not interchangeable with v2.x.