Skip to content

gds_software.statemachine.compile

Compiler: StateMachineModel -> GDSSpec / SystemIR.

Semantic Types

Public Functions

Compile a StateMachineModel into a GDSSpec.

Source code in packages/gds-software/gds_software/statemachine/compile.py
def compile_sm(model: StateMachineModel) -> GDSSpec:
    """Compile a StateMachineModel into a GDSSpec."""
    spec = GDSSpec(name=model.name, description=model.description)

    # 1. Register types
    spec.collect(EventType, StateType)

    # 2. Register spaces
    spec.collect(EventSpace, StateSpace)

    # 3. Register entities (one per state)
    for state in model.states:
        spec.register_entity(_build_state_entity(state))

    # 4. Register blocks
    for event in model.events:
        spec.register_block(_build_event_block(event))

    for t in model.transitions:
        spec.register_block(_build_transition_block(t, model))

    for state in model.states:
        spec.register_block(_build_state_mechanism(state, model))

    # 5. Register spec wirings
    all_block_names = [b.name for b in spec.blocks.values()]
    wires: list[Wire] = []

    for t in model.transitions:
        wires.append(
            Wire(
                source=t.event,
                target=_transition_block_name(t.name),
                space="SM EventSpace",
            )
        )
        wires.append(
            Wire(
                source=_transition_block_name(t.name),
                target=_state_mech_name(t.target),
                space="SM StateSpace",
            )
        )

    spec.register_wiring(
        SpecWiring(
            name=f"{model.name} Wiring",
            block_names=all_block_names,
            wires=wires,
            description=f"Auto-generated wiring for state machine {model.name!r}",
        )
    )

    return spec

Compile a StateMachineModel directly to SystemIR.

Source code in packages/gds-software/gds_software/statemachine/compile.py
def compile_sm_to_system(model: StateMachineModel) -> SystemIR:
    """Compile a StateMachineModel directly to SystemIR."""
    root = _build_composition_tree(model)
    return compile_system(model.name, root)