import os import re import subprocess from . import rtlil __all__ = ["YosysError", "convert", "convert_fragment"] class YosysError(Exception): pass def _yosys_version(): try: version = subprocess.check_output([os.getenv("YOSYS", "yosys"), "-V"], encoding="utf-8") except FileNotFoundError as e: if os.getenv("YOSYS"): raise YosysError("Could not find Yosys in {} as specified via the YOSYS environment " "variable".format(os.getenv("YOSYS"))) from e else: raise YosysError("Could not find Yosys in PATH. Place `yosys` in PATH or specify " "path explicitly via the YOSYS environment variable") from e m = re.match(r"^Yosys ([\d.]+)\+(\d+)", version) tag, offset = m[1], m[2] return tuple(map(int, tag.split("."))), offset def _convert_il_text(il_text, strip_src): version, offset = _yosys_version() if version < (0, 8): raise YosysError("Yosys %d.%d is not suppored", *version) attr_map = [] if strip_src: attr_map.append("-remove src") script = """ # Convert nMigen's RTLIL to readable Verilog. read_ilang <