Source code for elasticai.creator_plugins.combinatorial.combinatorial

from collections.abc import Iterator

from elasticai.creator.ir2vhdl import Implementation

from .vhdl_nodes.node_factory import InstanceFactoryForCombinatorial
from .wiring import (
    connect_data_signals,
)


[docs] def wrap_node(n): return InstanceFactoryForCombinatorial(n)
[docs] def build_declarations_for_combinatorial(impl: Implementation) -> Iterator[str]: nodes = tuple(wrap_node(n) for n in impl.nodes.values()) signal_defs = (line for n in nodes for line in n.define_signals()) yield from signal_defs
[docs] def build_instantiations_for_combinatorial(impl: Implementation) -> Iterator[str]: nodes = tuple(wrap_node(n) for n in impl.nodes.values()) instances = tuple(n for n in nodes if n.name not in ("input", "output")) instantiations = (line for n in instances for line in n.instantiate()) yield from instantiations
[docs] def build_data_signal_connections_for_combinatorial( impl: Implementation, ) -> Iterator[str]: connections = tuple((e.src, e.dst, e.src_dst_indices) for e in impl.edges.values()) data_signal_connections = connect_data_signals(connections) yield from data_signal_connections
[docs] def wrap_in_architecture(name, declarations, definitions): def _indent(line): return f" {line}" yield f"architecture rtl of {name} is" yield from map(_indent, declarations) yield "begin" yield from map( _indent, ( "d_in_input <= d_in;", "d_out_input <= d_in_input;", "d_out_output <= d_in_output;", "d_out <= d_out_output;", ), ) yield from map(_indent, definitions) yield "end architecture;"