diff options
Diffstat (limited to 'nghdl/src/createKicadLibrary.py')
-rw-r--r-- | nghdl/src/createKicadLibrary.py | 236 |
1 files changed, 0 insertions, 236 deletions
diff --git a/nghdl/src/createKicadLibrary.py b/nghdl/src/createKicadLibrary.py deleted file mode 100644 index d2290660..00000000 --- a/nghdl/src/createKicadLibrary.py +++ /dev/null @@ -1,236 +0,0 @@ -from Appconfig import Appconfig -import re -import os -import xml.etree.cElementTree as ET -from PyQt4 import QtGui, QtCore - - -class AutoSchematic(QtGui.QWidget): - - def __init__(self, modelname): - QtGui.QWidget.__init__(self) - self.modelname = modelname.split('.')[0] - self.template = Appconfig.kicad_lib_template - self.xml_loc = Appconfig.xml_loc - self.lib_loc = Appconfig.lib_loc - self.kicad_nghdl_lib = 'eSim_kicad.lib' - self.parser = Appconfig.parser_nghdl - - def createKicadLibrary(self): - xmlFound = None - for root, dirs, files in os.walk(self.xml_loc): - if (str(self.modelname) + '.xml') in files: - xmlFound = root - print(xmlFound) - if (xmlFound == None): - self.getPortInformation() - self.createXML() - self.createLib() - elif (xmlFound == self.xml_loc + '/Nghdl'): - print 'Library already exists...' - ret = QtGui.QMessageBox.critical(self, "Critical",'''<b>The Libraries of this model already exist.Do you want to overwrite it?</b><br/> - <b>If yes press ok else cancel it and change the name of your vhdl file</b>''', QtGui.QMessageBox.Ok, QtGui.QMessageBox.Cancel) - if ret == QtGui.QMessageBox.Ok: - print "Overwriting existing libraries" - self.getPortInformation() - self.createXML() - self.removeOldLibrary() #Removes the exisitng library - self.createLib() - else: - print "Exiting Nghdl" - quit() - else: - print 'Pre existing library...' - ret = QtGui.QMessageBox.critical(self, "Error",'''<b>A standard library already exists in this name.</b><br/> - <b>Please change the name of your vhdl file and upload it again</b>''', QtGui.QMessageBox.Ok) - - # quit() - - def getPortInformation(self): - portInformation = PortInfo(self) - portInformation.getPortInfo() - self.portInfo = portInformation.bit_list - self.input_length = portInformation.input_len - - def createXML(self): - cwd = os.getcwd() - xmlDestination = os.path.join(self.xml_loc, 'Nghdl') - self.splitText = "" - for bit in self.portInfo[:-1]: - self.splitText += bit + "-V:" - self.splitText += self.portInfo[-1] + "-V" - - print "changing directory to ", (xmlDestination) - os.chdir(xmlDestination) - - root = ET.Element("model") - ET.SubElement(root, "name").text = self.modelname - ET.SubElement(root, "type").text = "Nghdl" - ET.SubElement(root, "node_number").text = str(len(self.portInfo)) - ET.SubElement(root, "title").text = "Add parameters for " + str(self.modelname) - ET.SubElement(root, "split").text = self.splitText - param = ET.SubElement(root, "param") - ET.SubElement(param, "rise_delay", default = "1.0e-9").text = "Enter Rise Delay (default=1.0e-9)" - ET.SubElement(param ,"fall_delay", default ="1.0e-9").text = "Enter Fall Delay (default=1.0e-9)" - ET.SubElement(param ,"input_load", default ="1.0e-12").text = "Enter Input Load (default=1.0e-12)" - ET.SubElement(param ,"instance_id", default ="1").text = "Enter Instance ID (Between 0-99)" - ET.SubElement(param ,"stop_time", default ="90e-9").text = "Enter the stop time to end the simulation (default=90e-9)" - tree = ET.ElementTree(root) - tree.write(str(self.modelname) + '.xml') - print "Leaving the directory ", (xmlDestination) - os.chdir(cwd) - - #Calculates the maximum between input and output ports - def findBlockSize(self): - ind = self.input_length - return max(self.char_sum(self.portInfo[:ind]), self.char_sum(self.portInfo[ind:])) - - def char_sum(self, ls): - return sum([int(x) for x in ls]) - - def removeOldLibrary(self): - cwd = os.getcwd() - os.chdir(self.lib_loc) - print "Changing directory to ", self.lib_loc - f = open(self.kicad_nghdl_lib) - lines = f.readlines() - f.close() - - output = [] - line_reading_flag = False - - for line in lines: - if line.startswith("DEF"): - if line.split()[1] == self.modelname: - line_reading_flag = True - if not line_reading_flag: - output.append(line) - if line.startswith("ENDDEF"): - line_reading_flag = False - - f = open(self.kicad_nghdl_lib, 'w') - for line in output: - f.write(line) - - os.chdir(cwd) - print "Leaving directory, ", self.lib_loc - - def createLib(self): - self.dist_port = 100 #distance between two ports - self.inc_size = 100 #Increment size of a block - cwd = os.getcwd() - os.chdir(self.lib_loc) - print "Changing directory to ", self.lib_loc - - lib_file = open(self.kicad_nghdl_lib,"a") - line1 = self.template["start_def"] - line1 = line1.split() - line1 = [w.replace('comp_name', self.modelname) for w in line1] - self.template["start_def"] = ' '.join(line1) - if os.stat(self.kicad_nghdl_lib).st_size == 0: - lib_file.write("EESchema-LIBRARY Version 2.3"+ "\n\n") - #lib_file.write("#encoding utf-8"+ "\n"+ "#"+ "\n" + "#test_compo" + "\n"+ "#"+ "\n") - lib_file.write(self.template["start_def"]+ "\n"+self.template["U_field"]+"\n") - - line3 = self.template["comp_name_field"] - line3 = line3.split() - line3 = [w.replace('comp_name', self.modelname) for w in line3] - self.template["comp_name_field"] = ' '.join(line3) - - lib_file.write(self.template["comp_name_field"]+ "\n") - - line4 = self.template["blank_field"] - line4_1 = line4[0] - line4_2 = line4[1] - line4_1 = line4_1.split() - line4_1 = [w.replace('blank_quotes','""') for w in line4_1] - line4_2 = line4_2.split() - line4_2 = [w.replace('blank_quotes','""') for w in line4_2] - line4[0] = ' '.join(line4_1) - line4[1] = ' '.join(line4_2) - self.template["blank_qoutes"] = line4 - - lib_file.write(line4[0]+"\n" + line4[1]+"\n"+ self.template["start_draw"]+ "\n") - - draw_pos = self.template["draw_pos"] - draw_pos = draw_pos.split() - draw_pos[4] = str(int(draw_pos[4])- self.findBlockSize() * self.inc_size) - self.template["draw_pos"] = ' '.join(draw_pos) - - lib_file.write(self.template["draw_pos"]+"\n") - - input_port = self.template["input_port"] - input_port = input_port.split() - output_port = self.template["output_port"] - output_port = output_port.split() - inputs = self.portInfo[0: self.input_length] - outputs = self.portInfo[self.input_length:] - - print "INPUTS AND OUTPUTS " - print inputs - print outputs - - inputs = self.char_sum(inputs) - outputs= self.char_sum(outputs) - - total = inputs+outputs - - port_list = [] - - for i in xrange(total): - if (i < inputs): - input_port[1] = "in"+str(i+1) - input_port[2] = str(i+1) - input_port[4] = str(int(input_port[4])-self.dist_port) - input_list = ' '.join(input_port) - port_list.append(input_list) - - else: - output_port[1] = "out"+str(i- inputs+1) - output_port[2] = str(i+1) - output_port[4] = str(int(output_port[4])-self.dist_port) - output_list = ' '.join(output_port) - port_list.append(output_list) - - for ports in port_list: - lib_file.write(ports+"\n") - lib_file.write(self.template["end_draw"]+"\n"+ self.template["end_def"] + "\n\n\n") - - os.chdir(cwd) - print 'Leaving directory, ', self.lib_loc - QtGui.QMessageBox.information(self, "Library added", '''Library details for this model is added to the <b>eSim-kicad.lib</b> in the home directory''', QtGui.QMessageBox.Ok) - - -class PortInfo: - def __init__(self, model): - self.modelname = model.modelname - self.model_loc = model.parser.get('NGSPICE', 'DIGITAL_MODEL') - self.bit_list = [] - self.input_len = 0 - - def getPortInfo(self): - info_loc = os.path.join(self.model_loc, self.modelname+'/DUTghdl/') - input_list = [] - output_list = [] - read_file=open(info_loc + 'connection_info.txt','r') - data=read_file.readlines() - read_file.close() - - for line in data: - if re.match(r'^\s*$', line): - pass - else: - in_items=re.findall("IN",line,re.MULTILINE|re.IGNORECASE) - out_items=re.findall("OUT",line,re.MULTILINE|re.IGNORECASE) - if in_items: - input_list.append(line.split()) - if out_items: - output_list.append(line.split()) - - for in_list in input_list: - self.bit_list.append(in_list[2]) - self.input_len = len(self.bit_list) - for out_list in output_list: - self.bit_list.append(out_list[2]) - - |