first commit
This commit is contained in:
55
gen.py
Normal file
55
gen.py
Normal 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()
|
Reference in New Issue
Block a user