summaryrefslogtreecommitdiff
path: root/src/ngspice_ghdl.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/ngspice_ghdl.py')
-rwxr-xr-xsrc/ngspice_ghdl.py208
1 files changed, 208 insertions, 0 deletions
diff --git a/src/ngspice_ghdl.py b/src/ngspice_ghdl.py
new file mode 100755
index 0000000..9f88ce2
--- /dev/null
+++ b/src/ngspice_ghdl.py
@@ -0,0 +1,208 @@
+#!/usr/bin/env python
+
+
+"""#!/usr/bin/python"""
+
+#This file create the gui to install code model in the ngspice.
+
+import os
+import sys
+import shutil
+import subprocess
+from PyQt4 import QtGui
+from PyQt4 import QtCore
+from ConfigParser import SafeConfigParser
+
+
+class Mainwindow(QtGui.QWidget):
+ def __init__(self):
+ super(Mainwindow, self).__init__()
+ print "Initializing.........."
+ self.home = os.path.expanduser("~")
+ self.parser = SafeConfigParser()
+ self.parser.read(self.home+'/.FreeEDA/config.ini')
+ self.initUI()
+
+ def initUI(self):
+ self.uploadbtn = QtGui.QPushButton('Upload')
+ self.uploadbtn.clicked.connect(self.uploadModle)
+ self.exitbtn = QtGui.QPushButton('Exit')
+ self.exitbtn.clicked.connect(self.closeWindow)
+ self.browsebtn = QtGui.QPushButton('Browse')
+ self.browsebtn.clicked.connect(self.browseFile)
+ self.ledit = QtGui.QLineEdit(self)
+ self.tedit = QtGui.QTextEdit(self)
+
+
+
+ #Creating gridlayout
+ grid = QtGui.QGridLayout()
+ grid.setSpacing(5)
+ grid.addWidget(self.ledit, 1, 0)
+ grid.addWidget(self.browsebtn, 1, 1)
+ grid.addWidget(self.uploadbtn,2,0)
+ grid.addWidget(self.exitbtn,2,1)
+ grid.addWidget(self.tedit,3,0)
+
+ self.setLayout(grid)
+ self.setGeometry(300, 300, 600,600)
+ self.setWindowTitle("Ngspice Digital Model Creator")
+ #self.setWindowIcon(QtGui.QIcon('logo.png'))
+ self.tedit.setReadOnly(True)
+ self.show()
+
+
+
+ def closeWindow(self):
+ print "Close button clicked"
+ quit()
+
+ def browseFile(self):
+ print "Browse button clicked"
+ self.filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', '.')
+ print "Path file :", self.filename
+ self.ledit.setText(self.filename)
+
+ def createModelDirectory(self):
+ print "Create Model Directory Called"
+ self.digital_home=self.parser.get('NGSPICE','DIGITAL_MODEL')
+ print "Digital Home",self.digital_home
+ os.chdir(self.digital_home)
+ print "Current Working Directory Changed to",os.getcwd()
+ self.modelname = os.path.basename(str(self.filename)).split('.')[0]
+ print "Model name is :",self.modelname
+ # Looking if model directory is present or not
+ if os.path.isdir(self.modelname):
+ print "Model Already present"
+ ret = QtGui.QMessageBox.critical(self, "Critical",'''<b>The Model already exist.Do you want to overwrite it?</b><br/>
+ <b>If yes press ok else cancel it and change the name of you vhdl file</b>''', QtGui.QMessageBox.Ok, QtGui.QMessageBox.Cancel)
+ if ret == QtGui.QMessageBox.Ok:
+ print "Overwriting existing model"
+ cmd="rm -rf "+self.modelname
+ #process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+ subprocess.call(cmd, shell=True)
+ os.mkdir(self.modelname)
+ else:
+ print "Exiting application"
+ quit()
+
+
+
+ else:
+ print "Creating new model directory"
+ os.mkdir(self.modelname)
+
+ def addingModelInModpath(self):
+ print "Adding Model in Modpath file",self.modelname,self.digital_home
+ #Adding name of model in the modpath file
+ #Check if the string is already in the file
+ with open(self.digital_home+"/modpath.lst",'a+') as f:
+ flag = 0
+ for line in f:
+ if line.strip() == self.modelname:
+ print "Found model"
+ flag = 1
+ break
+ else:
+ pass
+
+ if flag == 0:
+ print "Adding model name into modpath.lst"
+ f.write(self.modelname+"\n")
+ else:
+ print "Model name is already into modpath.lst"
+
+
+ def createModelFiles(self):
+ print "Create Model Files Called"
+ os.chdir(self.cur_dir)
+ print "Current Working directory changed to ",self.cur_dir
+ cmd = "python ~/.FreeEDA/model_generation.py "+str(self.ledit.text())
+ stdouterr = os.popen4(cmd)[1].read()
+ self.tedit.append(stdouterr)
+ #Moving file to model directory
+ path=self.digital_home+"/"+self.modelname
+ shutil.move("cfunc.mod",path)
+ shutil.move("ifspec.ifs",path)
+
+ #Creating directory inside model directoy
+ os.mkdir(path+"/DUTghdl/")
+ shutil.move("connection_info.txt",path+"/DUTghdl/")
+ shutil.move("start_server.sh",path+"/DUTghdl/")
+ shutil.move(self.modelname+"_tb.vhdl",path+"/DUTghdl/")
+
+ shutil.copy(str(self.filename),path+"/DUTghdl/")
+ shutil.copy(self.home+"/.FreeEDA/ghdlserver/compile.sh",path+"/DUTghdl/")
+ shutil.copy(self.home+"/.FreeEDA/ghdlserver/uthash.h",path+"/DUTghdl/")
+ shutil.copy(self.home+"/.FreeEDA/ghdlserver/ghdlserver.c",path+"/DUTghdl/")
+ shutil.copy(self.home+"/.FreeEDA/ghdlserver/ghdlserver.h",path+"/DUTghdl/")
+ shutil.copy(self.home+"/.FreeEDA/ghdlserver/Utility_Package.vhdl",path+"/DUTghdl/")
+ shutil.copy(self.home+"/.FreeEDA/ghdlserver/Vhpi_Package.vhdl",path+"/DUTghdl/")
+
+ os.chdir(path+"/DUTghdl")
+ subprocess.call("bash "+path+"/DUTghdl/compile.sh", shell=True)
+ subprocess.call("chmod a+x start_server.sh",shell=True)
+ os.remove("compile.sh")
+ os.remove("ghdlserver.c")
+ #os.remove("ghdlserver.h")
+ #os.remove("Utility_Package.vhdl")
+ #os.remove("Vhpi_Package.vhdl")
+
+
+
+
+
+
+
+ def runMake(self):
+ print "run Make Called"
+ self.release_home=self.parser.get('NGSPICE','RELEASE')
+ os.chdir(self.release_home)
+ try:
+ cmd = "make"
+ self.tedit.append("Running Make")
+ subprocess.call(cmd,shell=True)
+ #stdouterr = os.popen4(cmd)[1].read()
+ #self.tedit.append(stdouterr)
+ except:
+ print "There is error in 'make' "
+ quit()
+
+ def runMakeInstall(self):
+ print "run Make Install Called"
+ try:
+ cmd = "make install"
+ self.tedit.append("Running Make Install")
+ subprocess.call(cmd,shell=True)
+ #stdouterr = os.popen4(cmd)[1].read()
+ #self.tedit.append(stdouterr)
+ except:
+ print "There is error during in 'make install' "
+ quit()
+
+ def uploadModle(self):
+ print "Upload button clicked"
+ self.file_extension = os.path.splitext(str(self.filename))[1]
+ print "File extension",self.file_extension
+ print "Parser Content:",self.parser.get('NGSPICE', 'NGSPICE_HOME')
+ self.cur_dir = os.getcwd()
+ print "My Current Working Directory",self.cur_dir
+ if self.file_extension == ".vhdl":
+ self.createModelDirectory()
+ self.addingModelInModpath()
+ self.createModelFiles()
+ self.runMake()
+ self.runMakeInstall()
+ else:
+ QtGui.QMessageBox.about(self,'Message','''<b>Important Message.</b><br/><br/>This accepts only <b>.vhdl</b> file ''')
+
+
+
+
+def main():
+ app = QtGui.QApplication(sys.argv)
+ w = Mainwindow()
+ sys.exit(app.exec_())
+
+if __name__=='__main__':
+ main()