#!/usr/bin/env python3
"""
wrapperGen.py

kekim@hmc.edu

script that generates top-level wrappers for verilog modules to synthesize
"""

import argparse
import glob
import os

#create argument parser
parser = argparse.ArgumentParser()

parser.add_argument("DESIGN")
parser.add_argument("HDLPATH");

args=parser.parse_args()

fin_path = glob.glob(f"{os.getenv('WALLY')}/src/**/{args.DESIGN}.sv",recursive=True)[0]

fin = open(fin_path, "r", encoding='utf-8')

lines = fin.readlines()

# keeps track of what line number the module header begins
lineModuleStart = 0

# keeps track of what line number the module header ends
lineModuleEnd = 0

# keeps track of module name
moduleName = ""

# string that will keep track of the running module header
buf = "import cvw::*;\n`include \"config.vh\"\n`include \"parameter-defs.vh\"\n"

# are we writing into the buffer
writeBuf=False

index=0

# string copy logic
for l in lines:
    if l.lstrip().find("module") == 0:
        lineModuleStart = index
        moduleName = l.split()[1]
        writeBuf = True
        buf += f"module {moduleName}wrapper (\n"
        continue
    if (writeBuf):
        buf += l
    if l.lstrip().find (");") == 0:
        lineModuleEnd = index
        break
    index+=1

# post-processing buffer: add DUT and endmodule lines
buf += f"\t{moduleName} #(P) dut(.*);\nendmodule"

# path to wrapper
wrapperPath = f"{args.HDLPATH}/{moduleName}wrapper.sv"

fout = open(wrapperPath, "w")

fout.write(buf)

fin.close()
fout.close()

#print(buf)