56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
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()
|