Source code for elasticai.creator.vhdl.hw_function_id

from collections.abc import Iterable, Iterator
from pathlib import Path

from elasticai.creator.hw_function_id import HwFunctionIdUpdater as _generalUpdater


def _replace_id_in_vhdl(code: Iterable[str], id: bytes) -> Iterator[str]:
    def split_hex(hex: str):
        for i in range(int(len(hex) / 2)):
            yield hex[i : i + 2]

    def _is_id(line: str):
        return line.strip().startswith("constant SKELETON_ID")

    def _build_skeleton_id_line(id: Iterable[str]) -> str:
        id_str = ", ".join(f'x"{b.upper()}"' for b in id)

        return f"  constant SKELETON_ID : skeleton_id_t := ({id_str});"

    digest_as_hex_array = tuple(split_hex(id.hex()))

    for line in code:
        if _is_id(line):
            yield _build_skeleton_id_line(digest_as_hex_array)
            yield "\n"
        else:
            yield line


[docs] class HwFunctionIdUpdater: def __init__( self, build_dir: Path, target_file: str | Path, ): self._updater = _generalUpdater(build_dir, target_file, _replace_id_in_vhdl)
[docs] def compute_id(self) -> None: self._updater.compute_id()
[docs] def write_id(self) -> None: self._updater.write_id()
@property def id(self) -> bytes: return self._updater.id