Source code for elasticai.creator_plugins.combinatorial.language

from dataclasses import dataclass
from typing import Iterator


[docs] @dataclass class Port: inputs: dict[str, str] outputs: dict[str, str]
[docs] def signals(self) -> Iterator[str]: for s, type in self.inputs.items(): yield f"signal {s} : in {type}" for s, type in self.outputs.items(): yield f"signal {s} : out {type}"
[docs] class VHDLEntity: def __init__(self, name: str, port: Port, generics: dict[str, str]): self._name = name self._generics = generics self._port = port def _generate_generic(self): if len(self._generics) > 0: yield "generic (" generics = tuple(self._generics.items()) for generic, type in generics[:-1]: yield f"{generic} : {type};" generic, type = generics[-1] yield f"{generic} : {type}" yield ");" def _generate_port(self): yield "port (" signals = tuple(self._port.signals()) for signal in signals[:-1]: yield f"{signal};" yield signals[-1] yield ");" def _generate_library_clause(self): yield from ("library ieee;", "use ieee.std_logic_1164.all;")
[docs] def generate_entity(self) -> Iterator[str]: yield from self._generate_library_clause() yield f"entity {self._name} is" yield from self._generate_generic() yield from self._generate_port() yield "end entity;"