Skip to content

RustSTA inputs

Netlist

STA-REQ-0001 The netlist is structural Verilog (IEEE 1364-2005, the structural subset of VERILOG-REQ-0302) or a frozen workspace netlist (FrozenNetlist, CORE-REQ-0130): one or more modules, the top module named by --top or unique otherwise. Module instances whose type is a module of the netlist are flattened; instance names are joined with / into hierarchical names. Instances of library cells become timing cells. assign of one net to another (or a constant) joins the nets. Constants 1'b0/1'b1 are nets without transitions (constants.md).

STA-REQ-0002 Every net has at most one non-three-state driver: a top-level input or inout port, a cell output pin, or a constant. Multiple drivers on a net are a T error unless all cell drivers on the net are three-state outputs (three_state, STA-REQ-0017). A net without a driver is reported and its loads receive no arrival (no_data_arrival).

STA-REQ-0003 A cell instance must use a cell of the libraries, and each connected pin's direction must match the library pin direction; unknown cells, unknown pins and direction mismatches are T errors. Unconnected cell inputs are reported with one aggregated T warning; unconnected outputs are allowed.

Cell libraries and corners

STA-REQ-0010 Cell timing comes from Liberty libraries [@liberty2017] (LIBERTY-REQ): pin direction, function, three_state expression, and capacitance (rise_capacitance/fall_capacitance when given, else capacitance), timing groups with related_pin, timing_sense, timing_type and when, and the tables cell_rise, cell_fall, rise_transition, fall_transition, rise_constraint, fall_constraint. Library units (time_unit, capacitive_load_unit) are converted to nanoseconds and picofarads.

STA-REQ-0012 timing_sense is positive_unate, negative_unate or non_unate; when absent it is derived from the output function (unate in the related pin if the function is monotone in it), else non_unate. Constant inputs refine a non_unate sense when the residual function becomes monotone (STA-REQ-0153). Edge arcs (rising_edge, falling_edge) launch both output transitions.

STA-REQ-0017 Supported timing_type values and arc classification, since version 0.4 (tristate_bus) [@liberty2017; @bhasker2009static, ch. 3]. It replaces STA-REQ-0013 (kept in legacy.md), which counted min_pulse_width and minimum_period as unanalyzed arcs: - combinational data arcs: combinational (also when timing_type is absent), combinational_rise, combinational_fall; - sequential launch arcs: rising_edge, falling_edge; - three-state arcs on outputs with three_state: three_state_enable, three_state_enable_rise, three_state_enable_fall, three_state_disable, three_state_disable_rise, three_state_disable_fall (propagated from the enable pin to the three-state output, STA-REQ-0223); - timing checks: setup_rising, setup_falling, hold_rising, hold_falling, recovery_rising, recovery_falling, removal_rising, removal_falling; - asynchronous preset/clear arcs: clear and preset are retained in the library view and are not propagated as combinational data arcs (asynchronous controls are checked by recovery_* and removal_*, STA-REQ-0224); - pulse checks: min_pulse_width and minimum_period groups are the pulse checks of their pin (STA-REQ-0800, STA-REQ-0801), not unanalyzed arcs; - unanalyzed arc kinds (non_seq_setup_*, non_seq_hold_*, skew_*, nochange_*, max_clock_tree_path, min_clock_tree_path) are counted per instantiated cell in completeness.unanalyzed_arcs and reported as one aggregated T warning per kind rather than per-library-cell notes.

STA-REQ-0014 Lookup table axes and index overrides (tristate_bus) [@liberty2017]. Delay, transition and constraint tables have 1, 2 or 3 axes typed by their template variable role (input_net_transition, total_output_net_capacitance, related_pin_transition, constrained_pin_transition, related_out_total_output_net_capacitance, output_net_length), with per-table index_1, index_2 and index_3 vectors overriding the template's default index vectors when present.

STA-REQ-0015 Per-corner library resolution and multi-corner analysis (two_corners) [@bhasker2009static, ch. 2; @liberty2017]. Each operating corner of a revision resolves its cells from that corner's library list. A duplicate cell name within the same corner is a T error (never silent first-definition-wins). The analysis evaluates every corner of the revision (or the corners named by --corner), sharing the netlist graph and compiled constraints across corners while keeping compiled lookup tables, net loads, slews, arrivals, required times and slacks independent per corner.

STA-REQ-0016 Slew thresholds and slew_derate_from_library (thresholds) [@liberty2017; @bhasker2009static, ch. 3]. Each library header supplies input_threshold_pct_rise, input_threshold_pct_fall, output_threshold_pct_rise, output_threshold_pct_fall, slew_lower_threshold_pct_rise, slew_lower_threshold_pct_fall, slew_upper_threshold_pct_rise, slew_upper_threshold_pct_fall and slew_derate_from_library (default 1.0). They are recorded in each cell's metadata. Valid libraries combined in one corner may differ; a malformed threshold interval or nonpositive slew derate is a T0013 error. The first library defines the top-level port convention. Cell delay, transition and constraint tables retain their original library units. A net converts slew between the driver's and receiver's intervals and derates; its arrival reference changes between their output/input thresholds. The extracted solver retains the source waveform convention for slew, then converts the resulting abstract transition to the receiving library. Delay uses the receiver input threshold on that waveform. No PDK file is rewritten to normalize these conventions.

Constraints

STA-REQ-0020 Constraints are read from an SDC file [@sdc2016] (SDC-REQ). Supported commands include create_clock, set_input_delay, set_output_delay, set_load, set_input_transition, set_driving_cell, set_clock_uncertainty, set_clock_latency, set_clock_transition, set_case_analysis, set_logic_zero, set_logic_one, set_disable_timing, set_false_path, set_multicycle_path, set_max_delay, set_min_delay, set_clock_groups, set_max_time_borrow, set_wire_load_model, set_wire_load_mode, group_path, set_units, global early/late set_timing_derate, and design-rule commands, together with the object queries get_ports, get_pins, get_cells, get_nets, get_clocks, all_inputs, all_outputs, all_clocks, all_registers and current_design. Unsupported commands are reported with diagnostic codes so that no constraint is silently ignored.

STA-REQ-0021 Clock sources are top-level ports or pins. A clock's rising edge occurs at the first waveform value (default 0) and its falling edge at the second (default half the period), repeated every period.

STA-REQ-0022 Constraint options that the analysis accepts but does not model are reported by the analysis, never dropped silently: an input or output delay with -level_sensitive is timed as an edge-triggered delay with warning T0041; set_load -subtract_pin_load is applied as a plain load with warning T0042; and set_operating_conditions with -min, -max, -min_library, -max_library or -analysis_type bc_wc|on_chip_variation gets warning T0043, each corner being analysed with its own libraries.

Global set_timing_derate -early / -late factors scale cell and net delay, including driving-cell and propagated-clock delays. They do not scale transition times or setup/hold/recovery/removal constraints. The factors are positive finite values; command order replaces each selected factor. Unsupported object, edge, clock/data-only, check, dynamic and incremental scopes fail explicitly. The SCOPE record includes nonidentity factors in global_timing_derate order [early, late].