import math import os import argparse from jinja2 import Environment, FileSystemLoader, TemplateError # === Argument-Parser === def parse_args(): parser = argparse.ArgumentParser( description="Generiert ein VHDL-Modul für einen AXI Handshaking Scheduler mit einer wählbaren Anzahl an Ports (nur 2^n bis max. 64 erlaubt)." ) parser.add_argument( "--ports", "-p", type=int, required=True, help="Anzahl der Ports (z. B. 2, 4, 8, 16, 32, 64)" ) return parser.parse_args() # === Validierung === def is_power_of_two(n): return n > 0 and (n & (n - 1)) == 0 def validate_ports(n): if not is_power_of_two(n) or n > 64: raise ValueError("❌ Fehler: --ports muss eine Zweierpotenz ≤ 64 sein (z. B. 2, 4, 8, 16, 32, 64).") # === Main === def main(): args = parse_args() num_ports = args.ports validate_ports(num_ports) TEMPLATE_DIR = "./template" TEMPLATE_FILE = "AXI_HS_MUX_n.vhd.j2" OUTPUT_DIR = "./build" env = Environment( loader=FileSystemLoader(TEMPLATE_DIR), trim_blocks=True, lstrip_blocks=True ) template = env.get_template(TEMPLATE_FILE) rendered = template.render(num_ports=num_ports) os.makedirs(OUTPUT_DIR, exist_ok=True) outfile = os.path.join(OUTPUT_DIR, f"AXI_HS_MUX_{num_ports}.vhdl") with open(outfile, "w") as f: f.write(rendered) print(f"✔️ Generiert: {outfile}") if __name__ == "__main__": main()