first commit

This commit is contained in:
2025-04-21 17:27:39 +02:00
commit 4d02a72b17
5 changed files with 1158 additions and 0 deletions

55
gen.py Normal file
View File

@@ -0,0 +1,55 @@
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()