#!/usr/bin/python

import sys
import subprocess
import os
import os.path
import re
from subprocess import Popen, PIPE, STDOUT

my_dir = ""

if len(sys.argv) < 9:
    print ("Usage: spice.py <tech_file> <tech_size> <Vdd> <P/N> <temp> <activity [hz]> <component_type> <size> <nmos_size>")
    sys.exit();
    
my_dir = os.path.dirname(os.path.realpath(__file__));
    
tech_file = sys.argv[1]
tech_file = os.path.abspath(tech_file)
tech_size = sys.argv[2]
Vdd = sys.argv[3]
pn = sys.argv[4]
temp = sys.argv[5]
activity = sys.argv[6]
type = sys.argv[7]
size = sys.argv[8]

do_nmos_size = False
if len(sys.argv) > 9:
    do_nmos_size = True
    nmos_size = sys.argv[9]

if (activity == "h"):
    na = 0
elif (activity == "z"):
    na = 1
else:
    print("Invalid activity type\n");
    sys.exit()
    
base_dir = os.path.join(my_dir)
temp_dir = os.path.join(base_dir, "temp")


if not os.path.exists(temp_dir):
    os.mkdir(temp_dir)

file_name = type + "_" + str(size) 

if na:
    file_path = os.path.join(temp_dir, file_name + "_na.sp")
else:
    file_path = os.path.join(temp_dir, file_name + ".sp")

f = open(file_path, 'w')

f.write ("Auto Spice\n")
f.write (".include \"" + tech_file + "\"\n")

f.write (".param tech = " + str(tech_size) + "e-9\n")
f.write(".param tempr = " + temp + "\n")
f.write(".param simt = 5n\n")


f.write(".param Vol=" + Vdd + "\n")
f.write(".param pnratio=" + pn + "\n")

if do_nmos_size:
    f.write(".param nmos_size=" + nmos_size + "\n")

subckt_path = os.path.join(base_dir, "subckt")
f.write(".include " + subckt_path + "/nmos_pmos.sp\n")
f.write(".include " + subckt_path + "/mux2.sp\n")
f.write(".include " + subckt_path + "/mux2trans.sp\n")
f.write(".include " + subckt_path + "/mux3.sp\n")
f.write(".include " + subckt_path + "/mux4.sp\n")
f.write(".include " + subckt_path + "/mux5.sp\n")
f.write(".include " + subckt_path + "/inv.sp\n")
f.write(".include " + subckt_path + "/dff.sp\n")
f.write(".include " + subckt_path + "/level_restorer.sp\n")

if na:
    read_file_path = os.path.join(base_dir, type, size + "_na.spz")
else:
    read_file_path = os.path.join(base_dir, type, size + ".spz")



fr = open(read_file_path)
f.write(fr.read())
fr.close()
f.close()

cmd = "hspice " + file_path
# print cmd 

p = Popen(cmd, shell=True, stdout=PIPE, stderr=STDOUT, cwd=temp_dir)
stdout, stderr = p.communicate()

if re.search("error", stdout):
    print "Error" 

else:
    m = re.search("^\s*power=\s*(\S*).*$", stdout, re.MULTILINE)
    if (m):
        print m.group(1)


# f = open("~/spice_modeling/" + sys.argv[1] + ".spx")





# hspice ~/spice_modeling/$1 2>&1 | grep -P "^\s+e=|\s+tech_size="
