diff options
Diffstat (limited to 'OSCAD/kicadtoNgspice/KicadtoNgspice.py')
-rwxr-xr-x | OSCAD/kicadtoNgspice/KicadtoNgspice.py | 2695 |
1 files changed, 0 insertions, 2695 deletions
diff --git a/OSCAD/kicadtoNgspice/KicadtoNgspice.py b/OSCAD/kicadtoNgspice/KicadtoNgspice.py deleted file mode 100755 index 962e587..0000000 --- a/OSCAD/kicadtoNgspice/KicadtoNgspice.py +++ /dev/null @@ -1,2695 +0,0 @@ -import sys -import os.path -from PyQt4 import QtGui,QtCore -from PyQt4.QtGui import * -from random import choice - -class NewWindow(QtGui.QWidget): - def __init__(self): - QWidget.__init__(self) - self.horizontalLayout = QtGui.QVBoxLayout(self) - self.scrollArea = QtGui.QScrollArea(self) - self.scrollArea.setWidgetResizable(True) - self.scrollAreaWidgetContents = QtGui.QWidget() - self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 100, 100)) - self.horizontalLayout_2 = QtGui.QHBoxLayout(self.scrollAreaWidgetContents) - self.grid = QtGui.QGridLayout() - self.horizontalLayout_2.addLayout(self.grid) - self.scrollArea.setWidget(self.scrollAreaWidgetContents) - self.SubmitButton = QtGui.QPushButton("Submit and Exit") - self.ClearButton= QtGui.QPushButton("Clear Button") - self.BackButton= QtGui.QPushButton("Back Button") - self.horizontalLayout.addWidget(self.scrollArea) - self.horizontalLayout.addWidget(self.BackButton) - self.horizontalLayout.addWidget(self.ClearButton) - self.horizontalLayout.addWidget(self.SubmitButton) - self.SubmitButton.clicked.connect(self.Submit) - self.ClearButton.clicked.connect(self.ClearModelParamValue) - self.BackButton.clicked.connect(self.BackAgain) - self.setGeometry(0,0,700, 400) - self.center() - - def ClearModelParamValue(self): - for line in guimodellisttrack: - #print "line",line - start=line[5] - end=line[6] - count=start - for item in range(end-start+1): - nextentry_var[count].setText("") - count=count+1 - - def BackAgain(self): - firstwindow=1 - w.show() - nw.close() - - def Submit(self): - try: - AddModelParametr() #Adding Model Parameter - for item in modelparamvalue: - schematicInfo.append(item[2]) #Adding Comment line - schematicInfo.append(item[1]) #Adding Model line - print "Successfully Closed" - #print "SchematicInfo" - #print SchematicInfo - self.close() - except: - QMessageBox.about(self,"Exception","Please Add before Submit") - create_ngspice_netlist() - - def center(self): - qr=self.frameGeometry() - cp = QtGui.QDesktopWidget().availableGeometry().center() - qr.moveCenter(cp) - self.move(qr.topLeft()) - -class Window(QtGui.QWidget): - def __init__(self): - super(Window,self).__init__() - def createrootwindow(self,sourcelist,sourcelisttrack): - self.backClicked=0 - global nextrow - self.nextrow=0 - self.horizontalLayout = QtGui.QVBoxLayout(self) - self.scrollArea = QtGui.QScrollArea(self) - self.scrollArea.setWidgetResizable(True) - self.scrollAreaWidgetContents = QtGui.QWidget() - self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 100, 100)) - self.horizontalLayout_2 = QtGui.QHBoxLayout(self.scrollAreaWidgetContents) - self.grid = QtGui.QGridLayout() - self.horizontalLayout_2.addLayout(self.grid) - self.scrollArea.setWidget(self.scrollAreaWidgetContents) - self.Nextbutton = QtGui.QPushButton("Next Button") - self.Clearbutton= QtGui.QPushButton("Clear Button") - self.horizontalLayout.addWidget(self.scrollArea) - self.horizontalLayout.addWidget(self.Nextbutton) - self.horizontalLayout.addWidget(self.Clearbutton) - self.setGeometry(0,0,700, 400) - self.show() - self.Nextbutton.clicked.connect(self.NextPage) - self.Clearbutton.clicked.connect(self.ClearSourceValue) - self.center() - global count - global start - global end - count=1 - global row - row=0 - global entry_var - entry_var={} - if sourcelist: - for line in sourcelist: - #print "Voltage source line index: ",line[0] - #print "SourceList line Test: ",line - track_id=line[0] - print "track_id is ",track_id - - if line[2]=='ac': - label=QLabel(line[3]) - self.grid.addWidget(label,row,1) - row=row+1 - start=count - label=QLabel(line[4]) - self.grid.addWidget(label,row,0) - entry_var[count]=QLineEdit() - self.grid.addWidget(entry_var[count],row,1) - value=present_already(line[1],line[2]) - if value == 0: - entry_var[count].setText("") - else: - entry_var[count].setText(store_ans) - row=row+1 - end=count - count=count+1 - sourcelisttrack.append([track_id,'ac',start,end]) - elif line[2]=='dc': - label=QLabel(line[3]) - self.grid.addWidget(label,row,1) - row=row+1 - start=count - label=QLabel(line[4]) - self.grid.addWidget(label,row,0) - entry_var[count]=QLineEdit() - self.grid.addWidget(entry_var[count],row,1) - value=present_already(line[1],line[2]) - if value == 0: - entry_var[count].setText("") - else: - entry_var[count].setText(store_ans) - row=row+1 - end=count - count=count+1 - sourcelisttrack.append([track_id,'dc',start,end]) - elif line[2]=='sine': - label=QLabel(line[3]) - self.grid.addWidget(label,row,1) - row=row+1 - start=count - value=present_already(line[1],line[2]) - indi=0 - for it in range(4,9): - label=QLabel(line[it]) - self.grid.addWidget(label,row,0) - entry_var[count]=QLineEdit() - self.grid.addWidget(entry_var[count],row,1) - if value !=0: - store_ans_list=store_ans.split() - ans_list_size=len(store_ans_list) - if value==0 or indi >= ans_list_size : - entry_var[count].setText("") - else: - entry_var[count].setText(str(store_ans_list[indi])) - indi=indi+1 - row=row+1 - count=count+1 - - - end=count-1 - sourcelisttrack.append([track_id,'sine',start,end]) - elif line[2]=='pulse': - label=QLabel(line[3]) - self.grid.addWidget(label,row,1) - row=row+1 - start=count - value=present_already(line[1],line[2]) - indi=0; - for it in range(4,11): - label=QLabel(line[it]) - self.grid.addWidget(label,row,0) - entry_var[count]=QLineEdit() - self.grid.addWidget(entry_var[count],row,1) - if value!=0: - store_ans_list=store_ans.split() - ans_list_size=len(store_ans_list) - if value==0 or indi >= ans_list_size: - entry_var[count].setText("") - else: - entry_var[count].setText(str(store_ans_list[indi])) - indi=indi+1 - row=row+1 - count=count+1 - end=count-1 - sourcelisttrack.append([track_id,'pulse',start,end]) - elif line[2]=='pwl': - label=QLabel(line[3]) - self.grid.addWidget(label,row,1) - row=row+1 - start=count - label=QLabel(line[4]) - self.grid.addWidget(label,row,0) - entry_var[count]=QLineEdit() - self.grid.addWidget(entry_var[count],row,1) - value=present_already(line[1],line[2]) - if value==0: - entry_var[count].setText(""); - else: - entry_var[count].setText(str(store_ans)) - row=row+1 - end=count - count=count+1 - sourcelisttrack.append([track_id,'pwl',start,end]) - elif line[2]=='exp': - label=QLabel(line[3]) - self.grid.addWidget(label,row,1) - row=row+1 - start=count - indi=0 - value=present_already(line[1],line[2]) - for it in range(4,10): - label=QLabel(line[it]) - self.grid.addWidget(label,row,0) - entry_var[count]=QLineEdit() - self.grid.addWidget(entry_var[count],row,1) - if value != 0: - store_ans_list=store_ans.split() - ans_list_size=len(store_ans_list) - if value == 0 or indi >= ans_list_size: - entry_var[count].setText("") - else: - entry_var[count].setText(str(store_ans_list[indi])) - indi=indi+1 - - row=row+1 - count=count+1 - end=count-1 - sourcelisttrack.append([track_id,'exp',start,end]) - count=count+1 - #print "startcount ",start - #print "endcount ",end - else: - print "No source is present in your circuit" - - - - return sourcelist,sourcelisttrack - - def closeEvent(self,event): - print "window closed" - - def NextPage(self): - #print "next page" - AddSourceValue() - w.close() - nw.show() - firstwindow=0 - self.backClicked+=1 - global schematicInfo - global outputOption - global guimodelvalue - global guimodellisttrack - global guimodellist - if self.backClicked==1: - guimodelvalue=[] - outputOption=[] #check whether it affects the working - guimodellisttrack=[] - guimodellist=['adc8','dac8','gain','summer','multiplier','divider','limit','integrator','differentiator','limit8','controlledlimiter', -'analogswitch','zener','d_buffer','d_inverter','d_and','d_nand','d_or','d_nor','d_xor','d_xnor','d_tristate','d_pullup', -'d_pulldown','d_srlatch','d_jklatch','d_dlatch','d_tlatch','d_srff','d_jkff','d_dff','ic','transfo'] - ##Calling function which take information for entry and label - if self.backClicked==1: - schematicInfo,outputOption,guimodelvalue=convertICintoBasicBlocks(schematicInfo,outputOption,guimodelvalue) - - #print "Info is",schematicInfo - #print "outoption is",outputOption - #print "guivalue is",guimodelvalue - - global nextcount - nextcount=0 - global nextentry_var - if self.backClicked ==1: - nextentry_var={} - - ##Checking if any model is present - if guimodelvalue: - ## Calling Next frame generation function - for line in guimodelvalue: - print "line is ",line - if line[2] in guimodellist: - #print "ConvertICBlock index :",line[0] - if self.backClicked==1: - nextcount=self.nextframegeneration(line,nextentry_var,nextcount) - else: - print "Please look whether model is added in guimodellist inside code" - else: - print "There is no model in your circuit" - QMessageBox.about(self,"Model information","There is no model in your circuit") - - #AddModelParametr() - # tkMessageBox.showinfo("Model List Info","There is no model in your circuit, please click on Submit & Exit Button" ) - - def nextframegeneration(self,line,nextentry_var,nextcount): - print "Model Line in netlist is : ",line[1] - div=line[1].split() - #flag=present_already_model(div[0],line[2]) - flag=0 - #print "store ans here",stored_ans - store_ans_list=[] - if flag!=0: - store_ans_list=stored_ans.split() - print "list ",store_ans_list - indi=0 - label=QLabel(line[5]) - nw.grid.addWidget(label,self.nextrow,1) - start=nextcount - self.nextrow=self.nextrow+1 - if line[2]=='ic': - for item in range(len(line)-7): - label=QLabel(line[7+item]) - nw.grid.addWidget(label,self.nextrow,0) - nextentry_var[nextcount]=QLineEdit() - nw.grid.addWidget(nextentry_var[nextcount],self.nextrow,1) - nextcount=nextcount+1 - self.nextrow=self.nextrow+1 - end=nextcount-1 - guimodellisttrack.append([line[0],line[1],line[2],line[3],line[4],start,end,line[6]]) - else: - for item in range(len(line)-6): - label=QLabel(line[6+item]) - nw.grid.addWidget(label,self.nextrow,0) - nextentry_var[nextcount]=QLineEdit() - nw.grid.addWidget(nextentry_var[nextcount],self.nextrow,1) - if indi < len(store_ans_list) and flag ==1: - nextentry_var[nextcount].setText(store_ans_list[indi]) - indi=indi+1 - nextcount=nextcount+1 - self.nextrow=self.nextrow+1 - end=nextcount-1 - guimodellisttrack.append([line[0],line[1],line[2],line[3],line[4],start,end]) - - return nextcount - - def ClearSourceValue(self): - #print "Clear Source Value" - for line in sourcelisttrack: - start=line[2] - end=line[3] - count=start - for item in range(int(end-start+1)): - entry_var[count].setText("") - count=count+1 - def center(self): - qr=self.frameGeometry() - cp = QtGui.QDesktopWidget().availableGeometry().center() - qr.moveCenter(cp) - self.move(qr.topLeft()) - -'''def present_already_model(val,model_name): - global stored_ans - print "model name is ", model_name - if os.path.exists(last_input_file): - last_file=open(last_input_file) - else: - last_file=open(last_input_file,'w+') - stored_val=last_file.read().strip().split('\n') - print "model test val ",val - flag=0 - for line in stored_val: - word=line.split() - if len(word)==0: - continue - if word[0]=='.model': - print "word is ",word," len is ",len(word) - if word[1]==val: - if ((word[2].startswith(model_name))): - stored_ans="" - for tmp in range(2,len(word)-1): - try: - ind=word[tmp].index('=')+1 - stored_ans=stored_ans+word[tmp][ind:]+" " - except: - print "Exception" - store_ans.strip() - print "model ans ",stored_ans - flag=1 - break - - last_file.close() - return flag -''' - -def present_already(vol,inpscr): - words=vol.split() - volsrc=words[0] - global store_ans - if os.path.exists(last_input_file): - last_file=open(last_input_file) - else: - last_file=open(last_input_file,'w+') - stored_val=last_file.read().strip().split('\n') - flag=0 - for line in stored_val: - word=line.split() - if len(word)==0: - continue; - - if word[0] == volsrc : - if ((inpscr == 'ac' and inpscr == word[3]) or (inpscr == 'dc' and inpscr==word[3]) ): - if len(word)>4: - store_ans=word[4] - flag=1 - break - if ((inpscr == 'pwl' and word[3].startswith(inpscr)) or (inpscr=='exp' and word[3].startswith(inpscr)) or (inpscr=='pulse' and word[3].startswith(inpscr)) or (inpscr=='sine' and word[3].startswith(inpscr)) ): - store_ans="" - i=word[3].index('(')+1 - j=word[len(word)-1].index(')') - store_ans=word[3][i:]+" " - for num in range(4,len(word)-1): - store_ans=store_ans+word[num]+" " - store_ans=store_ans+word[len(word)-1][:j] - print store_ans - flag=1 - break - last_file.close() - return flag; - -def AddModelParametr(): - #print "models here" - #print "Adding Model Parameter" - #print "GuiModelValue",guimodelvalue - global guimodellisttrack - global modelparamvalue - global addmodelline - modelparamvalue=[] - addmodelline=[] - - for line in guimodellisttrack: - #print "model",line - if line[2]=='transfo': - try: - #print "here in transfo" - start=line[5] - end=line[6] - num_turns=str(nextentry_var[start].text()) - if num_turns=="": num_turns="310" - h_array= "H_array = [ " - b_array = "B_array = [ " - h1=str(nextentry_var[start+1].text()) - b1=str(nextentry_var[start+2].text()) - if len(h1)!=0 and len(b1)!=0: - h_array=h_array+h1+" " - b_array=b_array+b1+" " - bh_array = h_array+" ] " + b_array+" ]" - else: - bh_array = "H_array = [-1000 -500 -375 -250 -188 -125 -63 0 63 125 188 250 375 500 1000] B_array = [-3.13e-3 -2.63e-3 -2.33e-3 -1.93e-3 -1.5e-3 -6.25e-4 -2.5e-4 0 2.5e-4 6.25e-4 1.5e-3 1.93e-3 2.33e-3 2.63e-3 3.13e-3]" - area=str(nextentry_var[start+3].text()) - length=str(nextentry_var[start+4].text()) - if area=="": area="1" - if length=="":length="0.01" - num_turns2=str(nextentry_var[start+5].text()) - if num_turns2=="": - num_turns2="620" - addmodelline=".model "+line[3]+"_primary lcouple (num_turns= "+num_turns+")" - modelparamvalue.append([line[0],addmodelline,line[4]]) - addmodelline=".model "+line[3]+"_iron_core core ("+bh_array+" area = "+area+" length ="+length +")" - modelparamvalue.append([line[0],addmodelline,line[4]]) - addmodelline=".model "+line[3]+"_secondary lcouple (num_turns ="+num_turns2+ ")" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in transfo model ",line[1] - elif line[2]=='adc8': - try: - start=line[5] - end=line[6] - in_low=str(nextentry_var[start].text()) - in_high=str(nextentry_var[end].text()) - if in_low=="": in_low="0.8" - if in_high=="": in_high="2.0" - addmodelline=".model "+ line[3]+" adc_bridge(in_low="+in_low+" in_high="+in_high+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in adc8 model ",line[1] - - elif line[2]=='dac8': - try: - start=line[5] - end=line[6] - out_low=str(nextentry_var[start].text()) - out_high=str(nextentry_var[start+1].text()) - out_undef=str(nextentry_var[end].text()) - if out_low=="": out_low="0.2" - if out_high=="": out_high="5.0" - if out_undef=="": out_undef="5.0" - addmodelline=".model "+ line[3]+" dac_bridge(out_low="+out_low+" out_high="+out_high+" out_undef="+out_undef+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in dac8 model ",line[1] - - elif line[2]=='gain': - try: - start=line[5] - end=line[6] - in_offset=str(nextentry_var[start].text()) - gain=str(nextentry_var[start+1].text()) - out_offset=str(nextentry_var[end].text()) - if in_offset=="": in_offset="0.0" - if gain=="": gain="1.0" - if out_offset=="": out_offset="0.0" - addmodelline=".model "+ line[3]+" gain(in_offset="+in_offset+" out_offset="+out_offset+" gain="+gain+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in gain model ",line[1] - - elif line[2]=='summer': - try: - start=line[5] - end=line[6] - in1_offset=str(nextentry_var[start].text()) - in2_offset=str(nextentry_var[start+1].text()) - in1_gain=str(nextentry_var[start+2].text()) - in2_gain=str(nextentry_var[start+3].text()) - out_gain=str(nextentry_var[start+4].text()) - out_offset=str(nextentry_var[end].text()) - if in1_offset=="": in1_offset="0.0" - if in2_offset=="": in2_offset="0.0" - if in1_gain=="": in1_gain="1.0" - if in2_gain=="": in2_gain="1.0" - if out_gain=="": out_gain="1.0" - if out_offset=="": out_offset="0.0" - addmodelline=".model "+ line[3]+" summer(in_offset=["+in1_offset+" "+in2_offset+"] in_gain=["+in1_gain+" "+in2_gain+"] out_offset="+out_offset+" out_gain="+out_gain+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in summer model ",line[1] - - elif line[2]=='multiplier': - try: - start=line[5] - end=line[6] - in1_offset=str(nextentry_var[start].text()) - in2_offset=str(nextentry_var[start+1].text()) - in1_gain=str(nextentry_var[start+2].text()) - in2_gain=str(nextentry_var[start+3].text()) - out_gain=str(nextentry_var[start+4].text()) - out_offset=str(nextentry_var[end].text()) - if in1_offset=="": in1_offset="0.0" - if in2_offset=="": in2_offset="0.0" - if in1_gain=="": in1_gain="1.0" - if in2_gain=="": in2_gain="1.0" - if out_gain=="": out_gain="1.0" - if out_offset=="": out_offset="0.0" - addmodelline=".model "+ line[3]+" mult(in_offset=["+in1_offset+" "+in2_offset+"] in_gain=["+in1_gain+" "+in2_gain+"] out_offset="+out_offset+" out_gain="+out_gain+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in multiplier model ",line[1] - - elif line[2]=='divider': - try: - start=line[5] - end=line[6] - num_offset=str(nextentry_var[start].text()) - den_offset=str(nextentry_var[start+1].text()) - num_gain=str(nextentry_var[start+2].text()) - den_gain=str(nextentry_var[start+3].text()) - out_gain=str(nextentry_var[start+4].text()) - out_offset=str(nextentry_var[start+5].text()) - den_lower_limit=str(nextentry_var[end].text()) - if num_offset=="": num_offset="0.0" - if den_offset=="": den_offset="0.0" - if num_gain=="": num_gain="1.0" - if den_gain=="": den_gain="1.0" - if out_gain=="": out_gain="1.0" - if out_offset=="": out_offset="0.0" - if den_lower_limit=="": den_lower_limit="1.0e-10" - addmodelline=".model "+ line[3]+" divide(num_offset="+num_offset+" den_offset="+den_offset+" num_gain="+num_gain+" den_gain="+den_gain+" out_offset="+out_offset+" out_gain="+out_gain+" den_lower_limit="+den_lower_limit+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in divider model ",line[1] - - elif line[2]=='limit': - try: - start=line[5] - end=line[6] - lowerLimit=str(nextentry_var[start].text()) - upperLimit=str(nextentry_var[start+1].text()) - in_offset=str(nextentry_var[start+2].text()) - gain=str(nextentry_var[end].text()) - if lowerLimit=="": lowerLimit="0.0" - if upperLimit=="": upperLimit="5.0" - if in_offset=="": in_offset="0.0" - if gain=="": gain="1.0" - addmodelline=".model "+ line[3]+" limit(out_lower_limit="+lowerLimit+" out_upper_limit="+upperLimit+" in_offset="+in_offset+" gain="+gain+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in limit model ",line[1] - - elif line[2]=='integrator': - try: - start=line[5] - end=line[6] - out_lower_limit=str(nextentry_var[start].text()) - out_upper_limit=str(nextentry_var[start+1].text()) - in_offset=str(nextentry_var[start+2].text()) - gain=str(nextentry_var[start+3].text()) - out_ic=str(nextentry_var[end].text()) - if out_lower_limit=="": out_lower_limit="0.0" - if out_upper_limit=="": out_upper_limit="5.0" - if in_offset=="": in_offset="0.0" - if gain=="": gain="1.0" - if out_ic=="": out_ic="0.0" - addmodelline=".model "+ line[3]+" int(out_lower_limit="+out_lower_limit+" out_upper_limit="+out_upper_limit+" in_offset="+in_offset+" gain="+gain+" out_ic="+out_ic+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in integrator model ",line[1] - - elif line[2]=='differentiator': - try: - start=line[5] - end=line[6] - out_lower_limit=str(nextentry_var[start].text()) - out_upper_limit=str(nextentry_var[start+1].text()) - out_offset=str(nextentry_var[start+2].text()) - gain=str(nextentry_var[end].text()) - if out_lower_limit=="": out_lower_limit="0.0" - if out_upper_limit=="": out_upper_limit="5.0" - if out_offset=="": out_offset="0.0" - if gain=="": gain="1.0" - addmodelline=".model "+ line[3]+" d_dt(out_lower_limit="+out_lower_limit+" out_upper_limit="+out_upper_limit+" out_offset="+out_offset+" gain="+gain+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in differentiator model ",line[1] - - elif line[2]=='limit8': - try: - start=line[5] - end=line[6] - lowerLimit=str(nextentry_var[start].text()) - upperLimit=str(nextentry_var[start+1].text()) - in_offset=str(nextentry_var[start+2].text()) - gain=str(nextentry_var[end].text()) - if lowerLimit=="": lowerLimit="0.0" - if upperLimit=="": upperLimit="5.0" - if in_offset=="": in_offset="0.0" - if gain=="": gain="1.0" - addmodelline=".model "+ line[3]+" limit(out_lower_limit="+lowerLimit+" out_upper_limit="+upperLimit+" in_offset="+in_offset+" gain="+gain+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in limit8 model ",line[1] - - elif line[2]=='controlledlimiter': - try: - start=line[5] - end=line[6] - in_offset=str(nextentry_var[start].text()) - gain=str(nextentry_var[end].text()) - if in_offset=="": in_offset="0.0" - if gain=="": gain="1.0" - addmodelline=".model "+ line[3]+" climit(in_offset="+in_offset+" gain="+gain+")" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in controlledlimiter model ",line[1] - - elif line[2]=='analogswitch': - try: - start=line[5] - end=line[6] - cntl_on=str(nextentry_var[start].text()) - cntl_off=str(nextentry_var[start+1].text()) - r_on=str(nextentry_var[start+2].text()) - r_off=str(nextentry_var[end].text()) - if cntl_on=="": cntl_on="5.0" - if cntl_off=="": cntl_off="0.0" - if r_on=="": r_on="10.0" - if r_off=="": r_off="1e6" - addmodelline=".model "+ line[3]+" aswitch(cntl_on="+cntl_on+" cntl_off="+cntl_off+" r_on="+r_on+" r_off="+r_off+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in analogswitch model ",line[1] - - elif line[2]=='zener': - try: - start=line[5] - end=line[6] - v_breakdown=str(nextentry_var[start].text()) - i_breakdown=str(nextentry_var[start+1].text()) - i_sat=str(nextentry_var[start+2].text()) - n_forward=str(nextentry_var[end].text()) - if v_breakdown=="": v_breakdown="5.6" - if i_breakdown=="": i_breakdown="1.0e-2" - if i_sat=="": i_sat="1.0e-12" - if n_forward=="": n_forward="1.0" - addmodelline=".model "+ line[3]+" zener(v_breakdown="+v_breakdown+" i_breakdown="+i_breakdown+" i_sat="+i_sat+" n_forward="+n_forward+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in zener model ",line[1] - - elif line[2]=='d_buffer': - try: - start=line[5] - end=line[6] - rise_delay=str(nextentry_var[start].text()) - fall_delay=str(nextentry_var[start+1].text()) - input_load=str(nextentry_var[end].text()) - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - if input_load=="": input_load="1e-12" - addmodelline=".model "+ line[3]+" d_buffer(rise_delay="+rise_delay+" fall_delay="+fall_delay+" input_load="+input_load+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_buffer model ",line[1] - - elif line[2]=='d_inverter': - try: - start=line[5] - end=line[6] - rise_delay=str(nextentry_var[start].text()) - fall_delay=str(nextentry_var[start+1].text()) - input_load=str(nextentry_var[end].text()) - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - if input_load=="": input_load="1e-12" - addmodelline=".model "+ line[3]+" d_inverter(rise_delay="+rise_delay+" fall_delay="+fall_delay+" input_load="+input_load+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_inverter model ",line[1] - - elif line[2]=='d_and': - try: - start=line[5] - end=line[6] - rise_delay=str(nextentry_var[start].text()) - fall_delay=str(nextentry_var[start+1].text()) - input_load=str(nextentry_var[end].text()) - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - if input_load=="": input_load="1e-12" - addmodelline=".model "+ line[3]+" d_and(rise_delay="+rise_delay+" fall_delay="+fall_delay+" input_load="+input_load+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_and model ",line[1] - - elif line[2]=='d_nand': - try: - start=line[5] - end=line[6] - rise_delay=str(nextentry_var[start].text()) - fall_delay=str(nextentry_var[start+1].text()) - input_load=str(nextentry_var[end].text()) - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - if input_load=="": input_load="1e-12" - addmodelline=".model "+ line[3]+" d_nand(rise_delay="+rise_delay+" fall_delay="+fall_delay+" input_load="+input_load+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_nand model ",line[1] - - elif line[2]=='d_or': - try: - start=line[5] - end=line[6] - rise_delay=str(nextentry_var[start].text()) - fall_delay=str(nextentry_var[start+1].text()) - input_load=str(nextentry_var[end].text()) - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - if input_load=="": input_load="1e-12" - addmodelline=".model "+ line[3]+" d_or(rise_delay="+rise_delay+" fall_delay="+fall_delay+" input_load="+input_load+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_or model ",line[1] - - elif line[2]=='d_nor': - try: - start=line[5] - end=line[6] - rise_delay=str(nextentry_var[start].text()) - fall_delay=str(nextentry_var[start+1].text()) - input_load=str(nextentry_var[end].text()) - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - if input_load=="": input_load="1e-12" - addmodelline=".model "+ line[3]+" d_nor(rise_delay="+rise_delay+" fall_delay="+fall_delay+" input_load="+input_load+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_nor model ",line[1] - - elif line[2]=='d_xor': - try: - start=line[5] - end=line[6] - rise_delay=str(nextentry_var[start].text()) - fall_delay=str(nextentry_var[start+1].text()) - input_load=str(nextentry_var[end].text()) - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - if input_load=="": input_load="1e-12" - addmodelline=".model "+ line[3]+" d_xor(rise_delay="+rise_delay+" fall_delay="+fall_delay+" input_load="+input_load+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_xor model ",line[1] - - elif line[2]=='d_xnor': - try: - start=line[5] - end=line[6] - rise_delay=str(nextentry_var[start].text()) - fall_delay=str(nextentry_var[start+1].text()) - input_load=str(nextentry_var[end].text()) - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - if input_load=="": input_load="1e-12" - addmodelline=".model "+ line[3]+" d_xnor(rise_delay="+rise_delay+" fall_delay="+fall_delay+" input_load="+input_load+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_xnor model ",line[1] - - elif line[2]=='d_tristate': - try: - start=line[5] - end=line[6] - delay=str(nextentry_var[start].text()) - input_load=str(nextentry_var[start+1].text()) - enable_load=str(nextentry_var[end].text()) - if delay=="": delay="1e-12" - if input_load=="": input_load="1e-12" - if enable_load=="": enable_load="1e-12" - addmodelline=".model "+ line[3]+" d_tristate(delay="+delay+" enable_load="+enable_load+" input_load="+input_load+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_tristate model ",line[1] - - elif line[2]=='d_pullup': - try: - start=line[5] - end=line[6] - load=str(nextentry_var[start].text()) - if load=="": load="1e-12" - addmodelline=".model "+ line[3]+" d_pullup(load="+load+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_pullup model ",line[1] - - elif line[2]=='d_pulldown': - try: - start=line[5] - end=line[6] - load=str(nextentry_var[start].text()) - if load=="": load="1e-12" - addmodelline=".model "+ line[3]+" d_pulldown(load="+load+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_pulldown model ",line[1] - - elif line[2]=='d_srlatch': - try: - start=line[5] - end=line[6] - sr_delay=str(nextentry_var[start].text()) - enable_delay=str(nextentry_var[start+1].text()) - set_delay=str(nextentry_var[start+2].text()) - reset_delay=str(nextentry_var[start+3].text()) - ic=str(nextentry_var[start+4].text()) - sr_load=str(nextentry_var[start+5].text()) - enable_load=str(nextentry_var[start+6].text()) - set_load=str(nextentry_var[start+7].text()) - reset_load=str(nextentry_var[start+8].text()) - rise_delay=str(nextentry_var[start+9].text()) - fall_delay=str(nextentry_var[end].text()) - if sr_delay=="": sr_delay="1e-12" - if enable_delay=="": enable_delay="1e-12" - if set_delay=="": set_delay="1e-12" - if reset_delay=="": reset_delay="1e-12" - if ic=="": ic="0" - if sr_load=="": sr_load="1e-12" - if enable_load=="": enable_load="1e-12" - if set_load=="": set_load="1e-12" - if reset_load=="": reset_load="1e-12" - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - addmodelline=".model "+ line[3]+" d_srlatch(rise_delay="+rise_delay+" fall_delay="+fall_delay+" ic="+ic+"\n+sr_load="+sr_load+" enable_load="+enable_load+" set_load="+set_load+" reset_load="+reset_load+"\n+sr_delay="+sr_delay+" enable_delay="+enable_delay+" set_delay="+set_delay+" reset_delay="+reset_delay+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_srlatch model ",line[1] - - elif line[2]=='d_jklatch': - try: - start=line[5] - end=line[6] - jk_delay=str(nextentry_var[start].text()) - enable_delay=str(nextentry_var[start+1].text()) - set_delay=str(nextentry_var[start+2].text()) - reset_delay=str(nextentry_var[start+3].text()) - ic=str(nextentry_var[start+4].text()) - jk_load=str(nextentry_var[start+5].text()) - enable_load=str(nextentry_var[start+6].text()) - set_load=str(nextentry_var[start+7].text()) - reset_load=str(nextentry_var[start+8].text()) - rise_delay=str(nextentry_var[start+9].text()) - fall_delay=str(nextentry_var[end].text()) - if jk_delay=="": jk_delay="1e-12" - if enable_delay=="": enable_delay="1e-12" - if set_delay=="": set_delay="1e-12" - if reset_delay=="": reset_delay="1e-12" - if ic=="": ic="0" - if jk_load=="": jk_load="1e-12" - if enable_load=="": enable_load="1e-12" - if set_load=="": set_load="1e-12" - if reset_load=="": reset_load="1e-12" - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - addmodelline=".model "+ line[3]+" d_jklatch(rise_delay="+rise_delay+" fall_delay="+fall_delay+" ic="+ic+"\n+jk_load="+jk_load+" enable_load="+enable_load+" set_load="+set_load+" reset_load="+reset_load+"\n+jk_delay="+jk_delay+" enable_delay="+enable_delay+" set_delay="+set_delay+" reset_delay="+reset_delay+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_jklatch model ",line[1] - - elif line[2]=='d_dlatch': - try: - start=line[5] - end=line[6] - data_delay=str(nextentry_var[start].text()) - enable_delay=str(nextentry_var[start+1].text()) - set_delay=str(nextentry_var[start+2].text()) - reset_delay=str(nextentry_var[start+3].text()) - ic=str(nextentry_var[start+4].text()) - data_load=str(nextentry_var[start+5].text()) - enable_load=str(nextentry_var[start+6].text()) - set_load=str(nextentry_var[start+7].text()) - reset_load=str(nextentry_var[start+8].text()) - rise_delay=str(nextentry_var[start+9].text()) - fall_delay=str(nextentry_var[end].text()) - if data_delay=="": data_delay="1e-12" - if enable_delay=="": enable_delay="1e-12" - if set_delay=="": set_delay="1e-12" - if reset_delay=="": reset_delay="1e-12" - if ic=="": ic="0" - if data_load=="": data_load="1e-12" - if enable_load=="": enable_load="1e-12" - if set_load=="": set_load="1e-12" - if reset_load=="": reset_load="1e-12" - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - addmodelline=".model "+ line[3]+" d_dlatch(rise_delay="+rise_delay+" fall_delay="+fall_delay+" ic="+ic+"\n+data_load="+data_load+" enable_load="+enable_load+" set_load="+set_load+" reset_load="+reset_load+"\n+data_delay="+data_delay+" enable_delay="+enable_delay+" set_delay="+set_delay+" reset_delay="+reset_delay+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_dlatch model ",line[1] - - elif line[2]=='d_tlatch': - try: - start=line[5] - end=line[6] - t_delay=str(nextentry_var[start].text()) - enable_delay=str(nextentry_var[start+1].text()) - set_delay=str(nextentry_var[start+2].text()) - reset_delay=str(nextentry_var[start+3].text()) - ic=str(nextentry_var[start+4].text()) - t_load=str(nextentry_var[start+5].text()) - enable_load=str(nextentry_var[start+6].text()) - set_load=str(nextentry_var[start+7].text()) - reset_load=str(nextentry_var[start+8].text()) - rise_delay=str(nextentry_var[start+9].text()) - fall_delay=str(nextentry_var[end].text()) - if t_delay=="": t_delay="1e-12" - if enable_delay=="": enable_delay="1e-12" - if set_delay=="": set_delay="1e-12" - if reset_delay=="": reset_delay="1e-12" - if ic=="": ic="0" - if t_load=="": t_load="1e-12" - if enable_load=="": enable_load="1e-12" - if set_load=="": set_load="1e-12" - if reset_load=="": reset_load="1e-12" - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - addmodelline=".model "+ line[3]+" d_tlatch(rise_delay="+rise_delay+" fall_delay="+fall_delay+" ic="+ic+"\n+t_load="+t_load+" enable_load="+enable_load+" set_load="+set_load+" reset_load="+reset_load+"\n+t_delay="+t_delay+" enable_delay="+enable_delay+" set_delay="+set_delay+" reset_delay="+reset_delay+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_tlatch model ",line[1] - - elif line[2]=='d_srff': - try: - start=line[5] - end=line[6] - clk_delay=str(nextentry_var[start].text()) - set_delay=str(nextentry_var[start].text()) - reset_delay=str(nextentry_var[start].text()) - ic=str(nextentry_var[start].text()) - sr_load=str(nextentry_var[start].text()) - clk_load=str(nextentry_var[start].text()) - set_load=str(nextentry_var[start].text()) - reset_load=str(nextentry_var[start].text()) - rise_delay=str(nextentry_var[start].text()) - fall_delay=str(nextentry_var[start].text()) - if clk_delay=="": clk_delay="1e-12" - if set_delay=="": set_delay="1e-12" - if reset_delay=="": reset_delay="1e-12" - if ic=="": ic="0" - if sr_load=="": sr_load="1e-12" - if clk_load=="": clk_load="1e-12" - if set_load=="": set_load="1e-12" - if reset_load=="": reset_load="1e-12" - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - addmodelline=".model "+ line[3]+" d_srff(rise_delay="+rise_delay+" fall_delay="+fall_delay+" ic="+ic+"\n+sr_load="+sr_load+" clk_load="+clk_load+" set_load="+set_load+" reset_load="+reset_load+"\n+clk_delay="+clk_delay+" set_delay="+set_delay+" reset_delay="+reset_delay+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_srff model ",line[1] - - elif line[2]=='d_jkff': - try: - start=line[5] - end=line[6] - clk_delay=str(nextentry_var[start].text()) - set_delay=str(nextentry_var[start].text()) - reset_delay=str(nextentry_var[start].text()) - ic=str(nextentry_var[start].text()) - jk_load=str(nextentry_var[start].text()) - clk_load=str(nextentry_var[start].text()) - set_load=str(nextentry_var[start].text()) - reset_load=str(nextentry_var[start].text()) - rise_delay=str(nextentry_var[start].text()) - fall_delay=str(nextentry_var[start].text()) - if clk_delay=="": clk_delay="1e-12" - if set_delay=="": set_delay="1e-12" - if reset_delay=="": reset_delay="1e-12" - if ic=="": ic="0" - if jk_load=="": sr_load="1e-12" - if clk_load=="": clk_load="1e-12" - if set_load=="": set_load="1e-12" - if reset_load=="": reset_load="1e-12" - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - addmodelline=".model "+ line[3]+" d_jkff(rise_delay="+rise_delay+" fall_delay="+fall_delay+" ic="+ic+"\n+jk_load="+jk_load+" clk_load="+clk_load+" set_load="+set_load+" reset_load="+reset_load+"\n+clk_delay="+enable_delay+" set_delay="+set_delay+" reset_delay="+reset_delay+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_jkff model ",line[1] - - elif line[2]=='d_dff': - try: - start=line[5] - end=line[6] - clk_delay=str(nextentry_var[start].text()) - set_delay=str(nextentry_var[start+1].text()) - reset_delay=str(nextentry_var[start+2].text()) - ic=str(nextentry_var[start+3].text()) - data_load=str(nextentry_var[start+4].text()) - clk_load=str(nextentry_var[start+5].text()) - set_load=str(nextentry_var[start+6].text()) - reset_load=str(nextentry_var[start+7].text()) - rise_delay=str(nextentry_var[start+8].text()) - fall_delay=str(nextentry_var[end].text()) - if clk_delay=="": clk_delay="1e-12" - if set_delay=="": set_delay="1e-12" - if reset_delay=="": reset_delay="1e-12" - if ic=="": ic="0" - if data_load=="": data_load="1e-12" - if clk_load=="": clk_load="1e-12" - if set_load=="": set_load="1e-12" - if reset_load=="": reset_load="1e-12" - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - addmodelline=".model "+ line[3]+" d_dff(rise_delay="+rise_delay+" fall_delay="+fall_delay+" ic="+ic+"\n+data_load="+data_load+" clk_load="+clk_load+" set_load="+set_load+" reset_load="+reset_load+"\n+clk_delay="+clk_delay+" set_delay="+set_delay+" reset_delay="+reset_delay+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_dff model ",line[1] - - elif line[2]=='d_tff': - try: - start=line[5] - end=line[6] - clk_delay=str(nextentry_var[start].text()) - set_delay=str(nextentry_var[start+1].text()) - reset_delay=str(nextentry_var[start+2].text()) - ic=str(nextentry_var[start+3].text()) - t_load=str(nextentry_var[start+4].text()) - clk_load=str(nextentry_var[start+5].text()) - set_load=str(nextentry_var[start+6].text()) - reset_load=str(nextentry_var[start+7].text()) - rise_delay=str(nextentry_var[start+8].text()) - fall_delay=str(nextentry_var[end].text()) - if t_delay=="": t_delay="1e-12" - if enable_delay=="": enable_delay="1e-12" - if set_delay=="": set_delay="1e-12" - if reset_delay=="": reset_delay="1e-12" - if ic=="": ic="0" - if t_load=="": t_load="1e-12" - if enable_load=="": enable_load="1e-12" - if set_load=="": set_load="1e-12" - if reset_load=="": reset_load="1e-12" - if rise_delay=="": rise_delay="1e-12" - if fall_delay=="": fall_delay="1e-12" - addmodelline=".model "+ line[3]+" d_tff(rise_delay="+rise_delay+" fall_delay="+fall_delay+" ic="+ic+"\n+t_load="+t_load+" clk_load="+clk_load+" set_load="+set_load+" reset_load="+reset_load+"\n+clk_delay="+clk_delay+" set_delay="+set_delay+" reset_delay="+reset_delay+" )" - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in d_tff model ",line[1] - - elif line[2]=='ic': - try: - start=line[5] - end=line[6] - ic=str(nextentry_var[start].text()) - if ic=="": ic="0" - addmodelline=".ic v("+line[7]+")="+ic - modelparamvalue.append([line[0],addmodelline,line[4]]) - except: - print "Caught an exception in ic initial condition ",line[1] - - else: - print "No model found" - QMessageBox.about(self,"Model Information","Please check whether used model is available inside code") - #tkMessageBox.showinfo("Model Info","Please check whether used model is available inside code") - - print "Model List has been added",modelparamvalue - - -def AddSourceValue(): - #print "Add Source Value" - - global sourcelistvalue - sourcelistvalue=[] - global start - global end - start=0 - end=0 - #print "Track Source List :",sourcelisttrack - #print "Initial Source List Value :",sourcelistvalue - for compline in sourcelisttrack: - print "compline ",compline - index=compline[0] - addline=schematicInfo[index] - #print "addline ",addline,"for index ",index - if compline[1]=='sine': - try: - start=compline[2] - end=compline[3] - vo_val=str(entry_var[start].text()) if len(str(entry_var[start].text()))>0 else '0' - va_val=str(entry_var[start+1].text()) if len(str(entry_var[start+1].text()))>0 else '0' - freq_val=str(entry_var[start+2].text()) if len(str(entry_var[start+2].text()))>0 else '0' - td_val=str(entry_var[start+3].text()) if len(str(entry_var[start+3].text()))>0 else '0' - theta_val=str(entry_var[end].text()) if len(str(entry_var[end].text()))>0 else '0' - addline=addline.partition('(')[0] + "("+vo_val+" "+va_val+" "+freq_val+" "+td_val+" "+theta_val+")" - #print "Line Added ",addline - sourcelistvalue.append([index,addline]) - except: - print "Caught an exception in sine voltage source ",addline - - elif compline[1]=='pulse': - try: - print "yessss" - start=compline[2] - end=compline[3] - v1_val=str(entry_var[start].text()) if len(str(entry_var[start].text()))>0 else '0' - v2_val=str(entry_var[start+1].text()) if len(str(entry_var[start+1].text()))>0 else '0' - td_val=str(entry_var[start+2].text()) if len(str(entry_var[start+2].text()))>0 else '0' - tr_val=str(entry_var[start+3].text()) if len(str(entry_var[start+3].text()))>0 else '0' - tf_val=str(entry_var[start+4].text()) if len(str(entry_var[start+4].text()))>0 else '0' - pw_val=str(entry_var[start+5].text()) if len(str(entry_var[start+5].text()))>0 else '0' - tp_val=str(entry_var[end].text()) if len(str(entry_var[end].text()))>0 else '0' - - addline=addline.partition('(')[0] + "("+v1_val+" "+v2_val+" "+td_val+" "+tr_val+" "+tf_val+" "+pw_val+" "+tp_val+")" - #print "Line Added ",addline - sourcelistvalue.append([index,addline]) - except: - print "Caught an exception in pulse voltage source ",addline - - elif compline[1]=='pwl': - try: - start=compline[2] - t_v_val=str(entry_var[start].text()) if len(str(entry_var[start].text()))>0 else '0 0' - addline=addline.partition('(')[0] + "("+t_v_val+")" - #print "Line Added ",addline - sourcelistvalue.append([index,addline]) - except: - print "Caught an exception in pwl voltage source ",addline - - elif compline[1]=='ac': - try: - start=compline[2] - va_val=str(entry_var[start].text()) if len(str(entry_var[start].text()))>0 else '0' - addline=' '.join(addline.split()) - addline=addline.partition('ac')[0] +" "+'ac'+" "+ va_val - #print "Line Added ",addline - sourcelistvalue.append([index,addline]) - except: - print "Caught an exception in ac voltage source ",addline - - elif compline[1]=='dc': - try: - start=compline[2] - v1_val=str(entry_var[start].text()) if len(str(entry_var[start].text()))>0 else '0' - addline=' '.join(addline.split()) - addline=addline.partition('dc')[0] + " " +'dc'+ " "+v1_val - #print "Line Added ",addline - sourcelistvalue.append([index,addline]) - except: - print "Caught an exception in dc voltage source",addline - - elif compline[1]=='exp': - try: - start=compline[2] - end=compline[3] - v1_val=str(entry_var[start].text()) if len(str(entry_var[start].text()))>0 else '0' - v2_val=str(entry_var[start+1].text()) if len(str(entry_var[start+1].text()))>0 else '0' - td1_val=str(entry_var[start+2].text()) if len(str(entry_var[start+2].text()))>0 else '0' - tau1_val=str(entry_var[start+3].text()) if len(str(entry_var[start+3].text()))>0 else '0' - td2_val=str(entry_var[start+4].text()) if len(str(entry_var[start+4].text()))>0 else '0' - tau2_val=str(entry_var[end].text()) if len(str(entry_var[end].text()))>0 else '0' - - addline=addline.partition('(')[0] + "("+v1_val+" "+v2_val+" "+td1_val+" "+tau1_val+" "+td2_val+" "+tau2_val+")" - #print "Line Added ",addline - sourcelistvalue.append([index,addline]) - except: - print "Caught an exception in exp voltage source ",addline - #print "Final Source List Value :",sourcelistvalue - ##Adding into schematicInfo - for item in sourcelistvalue: - del schematicInfo[item[0]] - schematicInfo.insert(item[0],item[1]) - -def create_ngspice_netlist(): - #print "sche in create_ng ",schematicInfo - last_file=open(last_input_file,"w"); - global spec_info - for info in schematicInfo: - spec_info=info.split() - if spec_info[0][0]=='v' or spec_info[0]=='.model': - last_file.writelines(info) - last_file.writelines('\n') - - #Add newline in the schematic information - for i in range(len(schematicInfo),0,-1): - schematicInfo.insert(i,'\n') - outfile=filename+".out" - cktfile=filename+".ckt" - out=open(outfile,"w") - ckt=open(cktfile,"w") - - out.writelines(infoline) - out.writelines('\n') - ckt.writelines(infoline) - ckt.writelines('\n') - - for modelName in modelList: - if os.path.exists(modelName+".lib"): - out.writelines('.include '+modelName+'.lib\n') - ckt.writelines('.include '+modelName+'.lib\n') - - for subcktName in subcktList: - out.writelines('.include '+subcktName+'.sub\n') - ckt.writelines('.include '+subcktName+'.sub\n') - if finalNetlist: - sections=[simulatorOption, initialCondOption, schematicInfo, analysisOption] - else: - sections=[simulatorOption, initialCondOption, schematicInfo] - for section in sections: - if len(section) == 0: - continue - else: - out.writelines('\n') - out.writelines(section) - ckt.writelines('\n') - ckt.writelines(section) - if finalNetlist: - out.writelines('\n* Control Statements \n') - out.writelines('.control\n') - out.writelines('run\n') - out.writelines(outputOption) - outputOption1=[] - for option in outputOption: - if (("plot" in option) or ("print" in option)): - outputOption1.append("."+option) - else: - outputOption1.append(option) - ckt.writelines(outputOption1) - out.writelines('print allv > plot_data_v.txt\n') - out.writelines('print alli > plot_data_i.txt\n') - out.writelines('.endc\n') - out.writelines('.end\n') - ckt.writelines('.end\n') - last_file.close() - out.close() - ckt.close() - - print "The ngspice netlist has been written in "+filename+".out" - print "The scilab netlist has been written in "+filename+".ckt" - - -def convertICintoBasicBlocks(schematicInfo,outputOption,guimodelvalue): - #Insert Special source parameters - k=1 - #print "schematicInfo is ",schematicInfo - #print "guimodelvalue is ",guimodelvalue - for compline in schematicInfo: - words=compline.split() - compName=words[0] - # Find the IC from schematic - if compName[0]=='u': - # Find the component from the circuit - index=schematicInfo.index(compline) - compType=words[len(words)-1]; - schematicInfo.remove(compline) - - if (compType=="7404" or compType=="74hc04" or compType=="74hct04" or compType=="74ls04" or compType=="74ls14"): - i=1; - # Add first three Not gates - while words[i]!="0": - # Add analog to digital converter for input A - schematicInfo.append("a"+str(k)+" ["+words[i]+"] ["+words[i]+"_in] "+" "+compName+"adc") - k=k+1 - # Add Not gate - schematicInfo.append("a"+str(k)+" "+words[i]+"_in "+words[i+1]+"_out "+compName) - k=k+1 - # Add digital to analog converter for output B - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"_out] ["+words[i+1]+"] "+" "+compName+"dac") - k=k+1 - i=i+2 - i=i+1 - # Add last three Not gates - while i<len(words)-2: - # Add analog to digital converter for input A - schematicInfo.append("a"+str(k)+" ["+words[i]+"] ["+words[i]+"_in] "+" "+compName+"adc") - k=k+1 - # Add Not gate - schematicInfo.append("a"+str(k)+" "+words[i]+"_in "+words[i+1]+"_out "+compName) - k=k+1 - # Add digital to analog converter for output B - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"_out] ["+words[i+1]+"] "+" "+compName+"dac") - k=k+1 - i=i+2 - # Insert comment in-place of components - schematicInfo.insert(index,"* "+compType) - # Add model for inverter gate - schematicInfo.append(".model "+ compName+" d_inverter") - # Add model for analog-to-digital bridge - schematicInfo.append(".model "+ compName+"adc adc_bridge(in_low=0.8 in_high=2.0)") - # Add model for digital-to-analog bridge - schematicInfo.append(".model "+ compName+"dac dac_bridge(out_low=0.25 out_high=5.0 out_undef=1.8 t_rise=0.5e-9 t_fall=0.5e-9)") - elif (compType=="7400" or compType=="74hc00" or compType=="74hct00" or compType=="74ls00" or compType=="74ls37"): - i=1; - # Add first two Nand gates - while words[i]!="0": - # Add analog to digital converter for input A - schematicInfo.append("a"+str(k)+" ["+words[i]+"] ["+words[i]+"_in] "+" "+compName+"adc") - k=k+1 - # Add analog to digital converter for input B - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"] ["+words[i+1]+"_in] "+" "+compName+"adc") - k=k+1 - # Add two-input Nand gate - schematicInfo.append("a"+str(k)+" ["+words[i]+"_in "+words[i+1]+"_in] "+words[i+2]+"_out "+compName) - k=k+1 - # Add digital to analog converter for output C - schematicInfo.append("a"+str(k)+" ["+words[i+2]+"_out] ["+words[i+2]+"] "+" "+compName+"dac") - k=k+1 - i=i+3 - i=i+1 - # Add Last two Nand gates - while i<len(words)-2: - # Add analog to digital converter for input A - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"] ["+words[i+1]+"_in] "+" "+compName+"adc") - k=k+1 - # Add analog to digital converter for input B - schematicInfo.append("a"+str(k)+" ["+words[i+2]+"] ["+words[i+2]+"_in] "+" "+compName+"adc") - k=k+1 - # Add two-input Nand gate - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"_in "+words[i+2]+"_in] "+words[i]+"_out "+compName) - k=k+1 - # Add digital to analog converter for output C - schematicInfo.append("a"+str(k)+" ["+words[i]+"_out] ["+words[i]+"] "+" "+compName+"dac") - k=k+1 - i=i+3 - # Insert comment in-place of components - schematicInfo.insert(index,"* "+compType) - # Add model for nand gate - schematicInfo.append(".model "+ compName+" d_nand") - # Add model for analog-to-digital bridge - schematicInfo.append(".model "+ compName+"adc adc_bridge(in_low=0.8 in_high=2.0)") - # Add model for digital-to-analog bridge - schematicInfo.append(".model "+ compName+"dac dac_bridge(out_low=0.25 out_high=5.0 out_undef=1.8 t_rise=0.5e-9 t_fall=0.5e-9)") - elif (compType=="7408" or compType=="74hc08" or compType=="74hct08" or compType=="74ls08"): - i=1; - # Add first two And gates - while words[i]!="0": - # Add analog to digital converter for input A - schematicInfo.append("a"+str(k)+" ["+words[i]+"] ["+words[i]+"_in] "+" "+compName+"adc") - k=k+1 - # Add analog to digital converter for input B - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"] ["+words[i+1]+"_in] "+" "+compName+"adc") - k=k+1 - # Add two-input And gate - schematicInfo.append("a"+str(k)+" ["+words[i]+"_in "+words[i+1]+"_in] "+words[i+2]+"_out "+compName) - k=k+1 - # Add digital to analog converter for output C - schematicInfo.append("a"+str(k)+" ["+words[i+2]+"_out] ["+words[i+2]+"] "+" "+compName+"dac") - k=k+1 - i=i+3 - i=i+1 - # Add Last two And gates - while i<len(words)-2: - # Add analog to digital converter for input A - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"] ["+words[i+1]+"_in] "+" "+compName+"adc") - k=k+1 - # Add analog to digital converter for input B - schematicInfo.append("a"+str(k)+" ["+words[i+2]+"] ["+words[i+2]+"_in] "+" "+compName+"adc") - k=k+1 - # Add two-input And gate - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"_in "+words[i+2]+"_in] "+words[i]+"_out "+compName) - k=k+1 - # Add digital to analog converter for output C - schematicInfo.append("a"+str(k)+" ["+words[i]+"_out] ["+words[i]+"] "+" "+compName+"dac") - k=k+1 - i=i+3 - # Insert comment in-place of components - schematicInfo.insert(index,"* "+compType) - # Add model for And gate - schematicInfo.append(".model "+ compName+" d_and") - # Add model for analog-to-digital bridge - schematicInfo.append(".model "+ compName+"adc adc_bridge(in_low=0.8 in_high=2.0)") - # Add model for digital-to-analog bridge - schematicInfo.append(".model "+ compName+"dac dac_bridge(out_low=0.25 out_high=5.0 out_undef=1.8 t_rise=0.5e-9 t_fall=0.5e-9)") - elif (compType=="7432" or compType=="74hc32" or compType=="74hct32" or compType=="74ls32"): - i=1; - # Add first two Or gates - while words[i]!="0": - # Add analog to digital converter for input A - schematicInfo.append("a"+str(k)+" ["+words[i]+"] ["+words[i]+"_in] "+" "+compName+"adc") - k=k+1 - # Add analog to digital converter for input B - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"] ["+words[i+1]+"_in] "+" "+compName+"adc") - k=k+1 - # Add two-input Or gate - schematicInfo.append("a"+str(k)+" ["+words[i]+"_in "+words[i+1]+"_in] "+words[i+2]+"_out "+compName) - k=k+1 - # Add digital to analog converter for output C - schematicInfo.append("a"+str(k)+" ["+words[i+2]+"_out] ["+words[i+2]+"] "+" "+compName+"dac") - k=k+1 - i=i+3 - i=i+1 - # Add Last two Or gates - while i<len(words)-2: - # Add analog to digital converter for input A - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"] ["+words[i+1]+"_in] "+" "+compName+"adc") - k=k+1 - # Add analog to digital converter for input B - schematicInfo.append("a"+str(k)+" ["+words[i+2]+"] ["+words[i+2]+"_in] "+" "+compName+"adc") - k=k+1 - # Add two-input Or gate - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"_in "+words[i+2]+"_in] "+words[i]+"_out "+compName) - k=k+1 - # Add digital to analog converter for output C - schematicInfo.append("a"+str(k)+" ["+words[i]+"_out] ["+words[i]+"] "+" "+compName+"dac") - k=k+1 - i=i+3 - # Insert comment in-place of components - schematicInfo.insert(index,"* "+compType) - # Add model for Or gate - schematicInfo.append(".model "+ compName+" d_or") - # Add model for analog-to-digital bridge - schematicInfo.append(".model "+ compName+"adc adc_bridge(in_low=0.8 in_high=2.0)") - # Add model for digital-to-analog bridge - schematicInfo.append(".model "+ compName+"dac dac_bridge(out_low=0.25 out_high=5.0 out_undef=1.8 t_rise=0.5e-9 t_fall=0.5e-9)") - elif (compType=="7486" or compType=="74hc86" or compType=="74hct86" or compType=="74ls86"): - i=1; - # Add first two Xor gates - while words[i]!="0": - # Add analog to digital converter for input A - schematicInfo.append("a"+str(k)+" ["+words[i]+"] ["+words[i]+"_in] "+" "+compName+"adc") - k=k+1 - # Add analog to digital converter for input B - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"] ["+words[i+1]+"_in] "+" "+compName+"adc") - k=k+1 - # Add two-input Xor gate - schematicInfo.append("a"+str(k)+" ["+words[i]+"_in "+words[i+1]+"_in] "+words[i+2]+"_out "+compName) - k=k+1 - # Add digital to analog converter for output C - schematicInfo.append("a"+str(k)+" ["+words[i+2]+"_out] ["+words[i+2]+"] "+" "+compName+"dac") - k=k+1 - i=i+3 - i=i+1 - # Add Last two Xor gates - while i<len(words)-2: - # Add analog to digital converter for input A - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"] ["+words[i+1]+"_in] "+" "+compName+"adc") - k=k+1 - # Add analog to digital converter for input B - schematicInfo.append("a"+str(k)+" ["+words[i+2]+"] ["+words[i+2]+"_in] "+" "+compName+"adc") - k=k+1 - # Add two-input Xor gate - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"_in "+words[i+2]+"_in] "+words[i]+"_out "+compName) - k=k+1 - # Add digital to analog converter for output C - schematicInfo.append("a"+str(k)+" ["+words[i]+"_out] ["+words[i]+"] "+" "+compName+"dac") - k=k+1 - i=i+3 - # Insert comment in-place of components - schematicInfo.insert(index,"* "+compType) - # Add model for Xor gate - schematicInfo.append(".model "+ compName+" d_xor") - # Add model for analog-to-digital bridge - schematicInfo.append(".model "+ compName+"adc adc_bridge(in_low=0.8 in_high=2.0)") - # Add model for digital-to-analog bridge - schematicInfo.append(".model "+ compName+"dac dac_bridge(out_low=0.25 out_high=5.0 out_undef=1.8 t_rise=0.5e-9 t_fall=0.5e-9)") - elif (compType=="7402" or compType=="74hc02" or compType=="74hct02" or compType=="74ls02" or compType=="74ls28"): - i=1; - # Add first two Nor gates - while words[i]!="0": - # Add analog to digital converter for input A - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"] ["+words[i+1]+"_in] "+" "+compName+"adc") - k=k+1 - # Add analog to digital converter for input B - schematicInfo.append("a"+str(k)+" ["+words[i+2]+"] ["+words[i+2]+"_in] "+" "+compName+"adc") - k=k+1 - # Add two-input Nor gate - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"_in "+words[i+2]+"_in] "+words[i]+"_out "+compName) - k=k+1 - # Add digital to analog converter for output C - schematicInfo.append("a"+str(k)+" ["+words[i]+"_out] ["+words[i]+"] "+" "+compName+"dac") - k=k+1 - i=i+3 - i=i+1 - while i<len(words)-2: - # Add analog to digital converter for input A - schematicInfo.append("a"+str(k)+" ["+words[i]+"] ["+words[i]+"_in] "+" "+compName+"adc") - k=k+1 - # Add analog to digital converter for input B - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"] ["+words[i+1]+"_in] "+" "+compName+"adc") - k=k+1 - # Add two-input Nor gate - schematicInfo.append("a"+str(k)+" ["+words[i]+"_in "+words[i+1]+"_in] "+words[i+2]+"_out "+compName) - k=k+1 - # Add digital to analog converter for output C - schematicInfo.append("a"+str(k)+" ["+words[i+2]+"_out] ["+words[i+2]+"] "+" "+compName+"dac") - k=k+1 - i=i+3 - # Insert comment in-place of components - schematicInfo.insert(index,"* "+compType) - # Add model for Nor gate - schematicInfo.append(".model "+ compName+" d_nor") - # Add model for analog-to-digital bridge - schematicInfo.append(".model "+ compName+"adc adc_bridge(in_low=0.8 in_high=2.0)") - # Add model for digital-to-analog bridge - schematicInfo.append(".model "+ compName+"dac dac_bridge(out_low=0.25 out_high=5.0 out_undef=1.8 t_rise=0.5e-9 t_fall=0.5e-9)") - elif (compType=="7474" or compType=="74hc74" or compType=="74ls74"): - # Add analog to digital converter for inputs - schematicInfo.append("a"+str(k)+" ["+words[2]+" "+words[3]+" "+words[4]+" "+words[1]+"] ["+words[2]+"_in "+words[3]+"_in "+words[4]+"_in "+words[1]+"_in] "+compName+"adc") - k=k+1 - # Add D Flip-flop - schematicInfo.append("a"+str(k)+" "+words[2]+"_in "+words[3]+"_in ~"+words[4]+"_in ~"+words[1]+"_in "+words[5]+"_out "+words[6]+"_out "+compName) - k=k+1 - # Add digital to analog converter for outputs - schematicInfo.append("a"+str(k)+" ["+words[5]+"_out "+words[6]+"_out] ["+words[5]+" "+words[6]+"] "+" "+compName+"dac") - k=k+1 - if len(words)>11: - # Add analog to digital converter for inputs - schematicInfo.append("a"+str(k)+" ["+words[12]+" "+words[11]+" "+words[10]+" "+words[13]+"] ["+words[12]+"_in "+words[11]+"_in "+words[10]+"_in "+words[13]+"_in] "+compName+"adc") - k=k+1 - # Add D Flip-flop - schematicInfo.append("a"+str(k)+" "+words[12]+"_in "+words[11]+"_in ~"+words[10]+"_in ~"+words[13]+"_in "+words[9]+"_out "+words[8]+"_out "+compName) - k=k+1 - # Add digital to analog converter for outputs - schematicInfo.append("a"+str(k)+" ["+words[9]+"_out "+words[8]+"_out] ["+words[9]+" "+words[8]+"] "+" "+compName+"dac") - k=k+1 - # Insert comment in-place of components - schematicInfo.insert(index,"* "+compType) - # Add model for D Flip-Flop - schematicInfo.append(".model "+ compName+" d_dff") - # Add model for analog-to-digital bridge - schematicInfo.append(".model "+ compName+"adc adc_bridge(in_low=0.8 in_high=2.0)") - # Add model for digital-to-analog bridge - schematicInfo.append(".model "+ compName+"dac dac_bridge(out_low=0.25 out_high=5.0 out_undef=1.8 t_rise=0.5e-9 t_fall=0.5e-9)") - elif (compType=="7475" or compType=="74hc75" or compType=="74ls75"): - # Add analog to digital converter for inputs - schematicInfo.append("a"+str(k)+" ["+words[2]+" "+words[3]+" "+words[4]+" "+words[1]+"] ["+words[2]+"_in "+words[3]+"_in "+words[4]+"_in "+words[1]+"_in] "+compName+"adc") - k=k+1 - # Add T Flip-flop - schematicInfo.append("a"+str(k)+" "+words[2]+"_in "+words[3]+"_in ~"+words[4]+"_in ~"+words[1]+"_in "+words[5]+"_out "+words[6]+"_out "+compName) - k=k+1 - # Add digital to analog converter for outputs - schematicInfo.append("a"+str(k)+" ["+words[5]+"_out "+words[6]+"_out] ["+words[5]+" "+words[6]+"] "+" "+compName+"dac") - k=k+1 - # Insert comment in-place of components - schematicInfo.insert(index,"* "+compType) - # Add model for T Flip-Flop - schematicInfo.append(".model "+ compName+" d_tff") - # Add model for analog-to-digital bridge - schematicInfo.append(".model "+ compName+"adc adc_bridge(in_low=0.8 in_high=2.0)") - # Add model for digital-to-analog bridge - schematicInfo.append(".model "+ compName+"dac dac_bridge(out_low=0.25 out_high=5.0 out_undef=1.8 t_rise=0.5e-9 t_fall=0.5e-9)") - elif (compType=="74107" or compType=="74hc107" or compType=="74ls107"): - if len(words)>11: - # Add analog to digital converter for inputs - schematicInfo.append("a"+str(k)+" ["+words[1]+" "+words[4]+" "+words[12]+" "+words[13]+"] ["+words[1]+"_in "+words[4]+"_in "+words[12]+"_in "+words[13]+"_in] "+compName+"adc") - k=k+1 - # Add J-K Flip-flop - schematicInfo.append("a"+str(k)+" "+words[1]+"_in "+words[4]+"_in ~"+words[12]+"_in ~"+words[13]+"_in ~"+words[13]+"_in "+words[3]+"_out "+words[2]+"_out "+compName) - k=k+1 - # Add digital to analog converter for outputs - schematicInfo.append("a"+str(k)+" ["+words[3]+"_out "+words[2]+"_out] ["+words[3]+" "+words[2]+"] "+" "+compName+"dac") - k=k+1 - - # Add analog to digital converter for inputs - schematicInfo.append("a"+str(k)+" ["+words[8]+" "+words[11]+" "+words[9]+" "+words[10]+"] ["+words[8]+"_in "+words[11]+"_in "+words[9]+"_in "+words[10]+"_in] "+compName+"adc") - k=k+1 - # Add J-K Flip-flop - schematicInfo.append("a"+str(k)+" "+words[8]+"_in "+words[11]+"_in ~"+words[9]+"_in ~"+words[10]+"_in ~"+words[10]+"_in "+words[5]+"_out "+words[6]+"_out "+compName) - k=k+1 - # Add digital to analog converter for outputs - schematicInfo.append("a"+str(k)+" ["+words[5]+"_out "+words[6]+"_out] ["+words[5]+" "+words[6]+"] "+" "+compName+"dac") - k=k+1 - else: - # Add analog to digital converter for inputs - schematicInfo.append("a"+str(k)+" ["+words[1]+" "+words[4]+" "+words[12]+" "+words[13]+"] ["+words[1]+"_in "+words[4]+"_in "+words[12]+"_in "+words[13]+"_in] "+compName+"adc") - k=k+1 - # Add J-K Flip-flop - schematicInfo.append("a"+str(k)+" "+words[1]+"_in "+words[4]+"_in ~"+words[12]+"_in ~"+words[13]+"_in ~"+words[13]+"_in "+words[3]+"_out "+words[2]+"_out "+compName) - k=k+1 - # Add digital to analog converter for outputs - schematicInfo.append("a"+str(k)+" ["+words[3]+"_out "+words[2]+"_out] ["+words[3]+" "+words[2]+"] "+" "+compName+"dac") - k=k+1 - # Insert comment in-place of components - schematicInfo.insert(index,"* "+compType) - # Add model for JK Flip-Flop - schematicInfo.append(".model "+ compName+" d_jkff") - # Add model for analog-to-digital bridge - schematicInfo.append(".model "+ compName+"adc adc_bridge(in_low=0.8 in_high=2.0)") - # Add model for digital-to-analog bridge - schematicInfo.append(".model "+ compName+"dac dac_bridge(out_low=0.25 out_high=5.0 out_undef=1.8 t_rise=0.5e-9 t_fall=0.5e-9)") - elif (compType=="74109" or compType=="74hc109" or compType=="74ls109"): - # Add analog to digital converter for inputs - schematicInfo.append("a"+str(k)+" ["+words[2]+" "+words[3]+" "+words[4]+" "+words[5]+" "+words[1]+"] ["+words[2]+"_in "+words[3]+"_in "+words[4]+"_in "+words[5]+"_in "+words[1]+"_in] "+compName+"adc") - k=k+1 - # Add J-K Flip-flop - schematicInfo.append("a"+str(k)+" "+words[2]+"_in ~"+words[3]+"_in "+words[4]+"_in ~"+words[5]+"_in ~"+words[1]+"_in "+words[6]+"_out "+words[7]+"_out "+compName) - k=k+1 - # Add digital to analog converter for outputs - schematicInfo.append("a"+str(k)+" ["+words[6]+"_out "+words[7]+"_out] ["+words[6]+" "+words[7]+"] "+" "+compName+"dac") - k=k+1 - if len(words)>12: - # Add analog to digital converter for inputs - schematicInfo.append("a"+str(k)+" ["+words[14]+" "+words[13]+" "+words[12]+" "+words[11]+" "+words[15]+"] ["+words[14]+"_in "+words[13]+"_in "+words[12]+"_in "+words[11]+"_in "+words[15]+"_in] "+compName+"adc") - k=k+1 - # Add J-K Flip-flop - schematicInfo.append("a"+str(k)+" "+words[14]+"_in ~"+words[13]+"_in "+words[12]+"_in ~"+words[11]+"_in ~"+words[15]+"_in "+words[10]+"_out "+words[9]+"_out "+compName) - k=k+1 - # Add digital to analog converter for outputs - schematicInfo.append("a"+str(k)+" ["+words[10]+"_out "+words[9]+"_out] ["+words[10]+" "+words[9]+"] "+" "+compName+"dac") - k=k+1 - # Insert comment in-place of components - schematicInfo.insert(index,"* "+compType) - # Add model for JK Flip-Flop - schematicInfo.append(".model "+ compName+" d_jkff") - # Add model for analog-to-digital bridge - schematicInfo.append(".model "+ compName+"adc adc_bridge(in_low=0.8 in_high=2.0)") - # Add model for digital-to-analog bridge - schematicInfo.append(".model "+ compName+"dac dac_bridge(out_low=0.25 out_high=5.0 out_undef=1.8 t_rise=0.5e-9 t_fall=0.5e-9)") - elif (compType=="7471" or compType=="74hc71" or compType=="74ls71"): - # Add analog to digital converter for inputs - schematicInfo.append("a"+str(k)+" ["+words[2]+" "+words[3]+" "+words[4]+" "+words[5]+" "+words[1]+"] ["+words[2]+"_in "+words[3]+"_in "+words[4]+"_in "+words[5]+"_in "+words[1]+"_in] "+compName+"adc") - k=k+1 - # Add S-R Flip-flop - schematicInfo.append("a"+str(k)+" "+words[2]+"_in ~"+words[3]+"_in "+words[4]+"_in ~"+words[5]+"_in ~"+words[1]+"_in "+words[6]+"_out "+words[7]+"_out "+compName) - k=k+1 - # Add digital to analog converter for outputs - schematicInfo.append("a"+str(k)+" ["+words[6]+"_out "+words[7]+"_out] ["+words[6]+" "+words[7]+"] "+" "+compName+"dac") - k=k+1 - # Insert comment in-place of components - schematicInfo.insert(index,"* "+compType) - # Add model for SR Flip-Flop - schematicInfo.append(".model "+ compName+" d_srff") - # Add model for analog-to-digital bridge741 - schematicInfo.append(".model "+ compName+"adc adc_bridge(in_low=0.8 in_high=2.0)") - # Add model for digital-to-analog bridge - schematicInfo.append(".model "+ compName+"dac dac_bridge(out_low=0.25 out_high=5.0 out_undef=1.8 t_rise=0.5e-9 t_fall=0.5e-9)") - elif (compType=="74112" or compType=="74hc112" or compType=="74ls112"): - if len(words)>12: - schematicInfo.append("a"+str(k)+" "+words[3]+" "+words[2]+" ~"+words[1]+" ~"+words[4]+" ~"+words[15]+" "+words[5]+" "+words[6]+" "+compName) - k=k+1 - schematicInfo.append("a"+str(k)+" "+words[11]+" "+words[12]+" ~"+words[13]+" ~"+words[10]+" ~"+words[14]+" "+words[9]+" "+words[7]+" "+compName) - k=k+1 - else: - schematicInfo.append("a"+str(k)+" "+words[3]+" "+words[2]+" ~"+words[1]+" ~"+words[4]+" ~"+words[8]+" "+words[5]+" "+words[6]+" "+compName) - k=k+1 - schematicInfo.insert(index,"* "+compType) - schematicInfo.append(".model "+ compName+" d_jkff") - elif compType=="dac": - schematicInfo.append("a"+str(k)+" ["+words[1]+"] ["+words[2]+"] "+compName) - k=k+1 - schematicInfo.insert(index,"* Digital to Analog converter "+compType) - schematicInfo.append(".model "+ compName+" dac_bridge") - elif compType=="adc": - schematicInfo.append("a"+str(k)+" ["+words[1]+"] ["+words[2]+"] "+compName) - k=k+1 - schematicInfo.insert(index,"* Analog to Digital converter "+compType) - schematicInfo.append(".model "+ compName+" adc_bridge") - elif compType=="adc8": - for i in range(0,len(words)/2-1): - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"] ["+words[i+len(words)/2]+"] "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding Analog to Digital Converter" - Comment='* Analog to Digital converter '+compType - Title='Add parameters for analog to digital converter '+compName - in_low=' Enter input low level voltage (default=0.8): ' - in_high=' Enter input high level voltage (default=2.0): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,in_low,in_high]) - elif compType=="dac8": - for i in range(0,len(words)/2-1): - schematicInfo.append("a"+str(k)+" ["+words[i+1]+"] ["+words[i+len(words)/2]+"] "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding Digital to Analog converter" - Comment='* Digital to Analog converter '+compType - Title='Add parameters for digital to analog converter '+compName - out_low=' Enter output low level voltage (default=0.2): ' - out_high=' Enter output high level voltage (default=5.0): ' - out_undef=' Enter output for undefined voltage level (default=2.2): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,out_low,out_high,out_undef]) - elif compType=="gain": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding Gain" - Comment='* Gain '+compType - Title='Add parameters for Gain '+compName - in_offset=' Enter offset for input (default=0.0): ' - gain=' Enter gain (default=1.0): ' - out_offset=' Enter offset for output (default=0.0): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,in_offset,gain,out_offset]) - elif compType=="summer": - schematicInfo.append("a"+str(k)+" ["+words[1]+" "+words[2]+"] "+words[3]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding summer" - Comment='* Summer '+compType - Title='Add parameters for Summer '+compName - in1_offset=' Enter offset for input 1 (default=0.0): ' - in2_offset=' Enter offset for input 2 (default=0.0): ' - in1_gain=' Enter gain for input 1 (default=1.0): ' - in2_gain=' Enter gain for input 2 (default=1.0): ' - out_gain=' Enter gain for output (default=1.0): ' - out_offset=' Enter offset for output (default=0.0): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,in1_offset,in2_offset,in1_gain,in2_gain,out_gain,out_offset]) - elif compType=="multiplier": - schematicInfo.append("a"+str(k)+" ["+words[1]+" "+words[2]+"] "+words[3]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding Multiplier" - Comment='* Multiplier '+compType - Title='Add parameters for Multiplier '+compName - in1_offset=' Enter offset for input 1 (default=0.0): ' - in2_offset=' Enter offset for input 2 (default=0.0): ' - in1_gain=' Enter gain for input 1 (default=1.0): ' - in2_gain=' Enter gain for input 2 (default=1.0): ' - out_gain=' Enter gain for output (default=1.0): ' - out_offset=' Enter offset for output (default=0.0): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,in1_offset,in2_offset,in1_gain,in2_gain,out_gain,out_offset]) - elif compType=="divider": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+words[3]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding Divider" - Comment='Divider '+compType - Title='Add parameters for Divider '+compName - num_offset=' Enter offset for numerator (default=0.0): ' - den_offset=' Enter offset for denominator (default=0.0): ' - num_gain=' Enter gain for numerator (default=1.0): ' - den_gain=' Enter gain for denominator (default=1.0): ' - out_gain=' Enter gain for output (default=1.0): ' - out_offset=' Enter offset for output (default=0.0): ' - den_lower_limit=' Enter lower limit for denominator value (default=1.0e-10): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,num_offset,den_offset,num_gain,den_gain,out_gain,out_offset,den_lower_limit]) - elif compType=="limit": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding limiter" - Comment='* Limiter '+compType - Title='Add parameters for Limiter '+compName - lowerLimit=' Enter out lower limit (default=0.0): ' - upperLimit=' Enter out upper limit (default=5.0): ' - in_offset=' Enter offset for input (default=0.0): ' - gain=' Enter gain (default=1.0): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,lowerLimit,upperLimit,in_offset,gain]) - elif compType=="integrator": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding integrator" - Comment='* Integrator '+compType - Title='Add parameters for Integrator '+compName - out_lower_limit=' Enter out lower limit (default=0.0): ' - out_upper_limit=' Enter out upper limit (default=5.0): ' - in_offset=' Enter offset for input (default=0.0): ' - gain=' Enter gain (default=1.0): ' - out_ic=' Enter initial condition on output (default=0.0): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,out_lower_limit,out_upper_limit,in_offset,gain,out_ic]) - elif compType=="differentiator": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding Differentiator" - Comment='* Differentiator '+compType - Title='Add parameters for Differentiator '+compName - out_lower_limit=' Enter out lower limit (default=0.0): ' - out_upper_limit=' Enter out upper limit (default=5.0): ' - out_offset=' Enter offset for output (default=0.0): ' - gain=' Enter gain (default=1.0): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,out_lower_limit,out_upper_limit,out_offset,gain]) - elif compType=="limit8": - for i in range(0,len(words)/2-1): - schematicInfo.append("a"+str(k)+" "+words[i+1]+" "+words[i+len(words)/2]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding limiter" - Comment='* Limiter '+compType - Title='Add parameters for Limiter '+compName - lowerLimit=' Enter out lower limit (default=0.0): ' - upperLimit=' Enter out upper limit (default=5.0): ' - in_offset=' Enter offset for input (default=0.0): ' - gain=' Enter gain (default=1.0): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,lowerLimit,upperLimit,in_offset,gain]) - elif compType=="controlledlimiter": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+words[3]+" "+words[4]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding controlledlimiter" - Comment='* Controlled Limiter '+compType - Title='Add parameters for Controlled Limiter '+compName - in_offset=' Enter offset for input (default=0.0): ' - gain=' Enter gain (default=1.0): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,in_offset,gain]) - elif compType=="analogswitch": - schematicInfo.append("a"+str(k)+" "+words[1]+" ("+words[2]+" "+words[3]+") "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding analogswitch" - Comment='* Analog Switch '+compType - Title='Add parameters for Analog Switch '+compName - cntl_on=' Enter control ON voltage (default=5.0): ' - cntl_off=' Enter control OFF voltage (default=0.0): ' - r_on=' Enter ON resistance value (default=10.0): ' - r_off=' Enter OFF resistance value (default=1e6): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,cntl_on,cntl_off,r_on,r_off]) - elif compType=="zener": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding Zener" - Comment='* Zener Diode '+compType - Title='Add parameters for Zener Diode '+compName - v_breakdown=' Enter Breakdown voltage (default=5.6): ' - i_breakdown=' Enter Breakdown current (default=2.0e-2): ' - i_sat=' Enter saturation current (default=1.0e-12): ' - n_forward=' Enter forward emission coefficient (default=0.0): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,v_breakdown,i_breakdown,i_sat,n_forward]) - elif compType=="d_buffer": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding Buffer" - Comment='* Buffer '+compType - Title='Add parameters for Buffer '+compName - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - input_load=' Enter input load capacitance (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,rise_delay,fall_delay,input_load]) - elif compType=="d_inverter": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding Inverter" - Comment='* Inverter '+compType - Title='Add parameters for Inverter '+compName - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - input_load=' Enter input load capacitance (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,rise_delay,fall_delay,input_load]) - elif compType=="d_and": - schematicInfo.append("a"+str(k)+" ["+words[1]+" "+words[2]+"] "+words[3]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding AND" - Comment='* And '+compType - Title= 'Add parameters for And '+compName - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - input_load=' Enter input load capacitance (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,rise_delay,fall_delay,input_load]) - elif compType=="d_nand": - schematicInfo.append("a"+str(k)+" ["+words[1]+" "+words[2]+"] "+words[3]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding NAND" - Comment='* Nand '+compType - Title='Add parameters for Nand '+compName - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - input_load=' Enter input load capacitance (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,rise_delay,fall_delay,input_load]) - elif compType=="d_or": - schematicInfo.append("a"+str(k)+" ["+words[1]+" "+words[2]+"] "+words[3]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding OR" - Comment='* OR '+compType - Title='Add parameters for OR '+compName - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - input_load=' Enter input load capacitance (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,rise_delay,fall_delay,input_load]) - elif compType=="d_nor": - schematicInfo.append("a"+str(k)+" ["+words[1]+" "+words[2]+"] "+words[3]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding NOR" - Comment='* NOR '+compType - Title ='Add parameters for NOR '+compName - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - input_load=' Enter input load capacitance (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,rise_delay,fall_delay,input_load]) - elif compType=="d_xor": - schematicInfo.append("a"+str(k)+" ["+words[1]+" "+words[2]+"] "+words[3]+" "+compName) - k=k+1 - print "-----------------------------------------------------------\n" - print "Adding XOR" - Comment='* XOR '+compType - Title='Add parameters for XOR '+compName - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - input_load=' Enter input load capacitance (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,rise_delay,fall_delay,input_load]) - elif compType=="d_xnor": - schematicInfo.append("a"+str(k)+" ["+words[1]+" "+words[2]+"] "+words[3]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding XNOR" - Comment='* XNOR '+compType - Title='Add parameters for XNOR '+compName - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - input_load=' Enter input load capacitance (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,rise_delay,fall_delay,input_load]) - elif compType=="d_tristate": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+words[3]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding Tristate" - Comment='* Tristate '+compType - Title='Add parameters for Tristate '+compName - delay=' Enter delay (default=1e-12): ' - input_load=' Enter input load capacitance (default=1e-12): ' - enable_load=' Enter enable load capacitance (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,delay,input_load,enable_load]) - elif compType=="d_pullup": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding pullup" - Comment='* Pullup '+compType - Title='Add parameters for Pullup '+compName - load=' Enter load capacitance (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,load]) - elif compType=="d_pulldown": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding pulldown" - Comment='* Pulldown '+compType - Title='Add parameters for Pulldown '+compName - load=' Enter load capacitance (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,load]) - elif compType=="d_srlatch": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+words[3]+" "+words[4]+" "+words[5]+" "+words[6]+" "+words[7]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding SR Latch" - Comment='* SR Latch '+compType - Title='Add parameters for SR Latch '+compName - sr_delay=' Enter input to set-reset delay (default=1e-12): ' - enable_delay=' Enter enable delay (default=1e-12): ' - set_delay=' Enter set delay (default=1e-12): ' - reset_delay=' Enter reset delay (default=1e-12): ' - ic=' Enter initial condition on output (default=0): ' - sr_load=' Enter input to set-reset load (default=1e-12): ' - enable_load=' Enter enable load (default=1e-12): ' - set_load=' Enter set load (default=1e-12): ' - reset_load=' Enter reset load (default=1e-12): ' - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,sr_delay,enable_delay,set_delay,reset_delay,ic,sr_load,enable_load,set_load,reset_load,rise_delay,fall_delay]) - elif compType=="d_jklatch": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+words[3]+" "+words[4]+" "+words[5]+" "+words[6]+" "+words[7]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding JK Latch" - Comment='* JK Latch '+compType - Title= 'Add parameters for JK Latch '+compName - jk_delay=' Enter input to j-k delay (default=1e-12): ' - enable_delay=' Enter enable delay (default=1e-12): ' - set_delay=' Enter set delay (default=1e-12): ' - reset_delay=' Enter reset delay (default=1e-12): ' - ic=' Enter initial condition on output (default=0): ' - jk_load=' Enter input to j-k load (default=1e-12): ' - enable_load=' Enter enable load (default=1e-12): ' - set_load=' Enter set load (default=1e-12): ' - reset_load=' Enter reset load (default=1e-12): ' - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,jk_delay,enable_delay,set_delay,reset_delay,ic,enable_load,set_load,reset_load,rise_delay,fall_delay]) - elif compType=="d_dlatch": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+words[3]+" "+words[4]+" "+words[5]+" "+words[6]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding D Latch" - Comment='* D Latch '+compType - Title= 'Add parameters for D Latch '+compName - data_delay=' Enter input to data delay (default=1e-12): ' - enable_delay=' Enter enable delay (default=1e-12): ' - set_delay=' Enter set delay (default=1e-12): ' - reset_delay=' Enter reset delay (default=1e-12): ' - ic=' Enter initial condition on output (default=0): ' - data_load=' Enter input to data load (default=1e-12): ' - enable_load=' Enter enable load (default=1e-12): ' - set_load=' Enter set load (default=1e-12): ' - reset_load=' Enter reset load (default=1e-12): ' - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,data_delay,enable_delay,set_delay,reset_delay,ic,data_load,enable_load,set_load,reset_load,rise_delay,fall_delay]) - elif compType=="d_tlatch": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+words[3]+" "+words[4]+" "+words[5]+" "+words[6]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding T Latch" - Comment='* T Latch '+compType - Title= 'Add parameters for T Latch '+compName - t_delay=' Enter input to t delay (default=1e-12): ' - enable_delay=' Enter enable delay (default=1e-12): ' - set_delay=' Enter set delay (default=1e-12): ' - reset_delay=' Enter reset delay (default=1e-12): ' - ic=' Enter initial condition on output (default=0): ' - t_load=' Enter input to t load (default=1e-12): ' - enable_load=' Enter enable load (default=1e-12): ' - set_load=' Enter set load (default=1e-12): ' - reset_load=' Enter reset load (default=1e-12): ' - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,t_delay,enable_delay,set_delay,reset_delay,ic,t_load,enable_load,set_load,reset_load,rise_delay,fall_delay]) - elif compType=="d_srff": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+words[3]+" "+words[4]+" "+words[5]+" "+words[6]+" "+words[7]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding SR Flip-Flop" - Comment='* SR Flip-Flop '+compType - Title='Add parameters for SR Flip-Flop '+compName - clk_delay=' Enter clk delay (default=1e-12): ' - set_delay=' Enter set delay (default=1e-12): ' - reset_delay=' Enter reset delay (default=1e-12): ' - ic=' Enter initial condition on output (default=0): ' - sr_load=' Enter input to set-reset load (default=1e-12): ' - clk_load=' Enter clk load (default=1e-12): ' - set_load=' Enter set load (default=1e-12): ' - reset_load=' Enter reset load (default=1e-12): ' - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,clk_delay,set_delay,reset_delay,ic,sr_load,clk_load,set_load,reset_load,rise_delay,fall_delay]) - elif compType=="d_jkff": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+words[3]+" "+words[4]+" "+words[5]+" "+words[6]+" "+words[7]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding JK Flip-Flop" - Comment='* JK Flip-Flop '+compType - Title= 'Add parameters for JK Flip-Flop '+compName - clk_delay=' Enter clk delay (default=1e-12): ' - set_delay=' Enter set delay (default=1e-12): ' - reset_delay=' Enter reset delay (default=1e-12): ' - ic=' Enter initial condition on output (default=0): ' - jk_load=' Enter input to j-k load (default=1e-12): ' - clk_load=' Enter clk load (default=1e-12): ' - set_load=' Enter set load (default=1e-12): ' - reset_load=' Enter reset load (default=1e-12): ' - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,clk_delay,set_delay,reset_delay,ic,jk_load,clk_load,set_load,reset_load,reset_load,rise_delay,fall_delay]) - elif compType=="d_dff": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+words[3]+" "+words[4]+" "+words[5]+" "+words[6]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding D Flip-Flop" - Comment='* D Flip-Flop '+compType - Title= 'Add parameters for D Flip-Flop '+compName - clk_delay=' Enter clk delay (default=1e-12): ' - set_delay=' Enter set delay (default=1e-12): ' - reset_delay=' Enter reset delay (default=1e-12): ' - ic=' Enter initial condition on output (default=0): ' - data_load=' Enter input to data load (default=1e-12): ' - clk_load=' Enter clk load (default=1e-12): ' - set_load=' Enter set load (default=1e-12): ' - reset_load=' Enter reset load (default=1e-12): ' - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,clk_delay,set_delay,reset_delay,ic,data_load,clk_load,set_load,reset_load,rise_delay,fall_delay]) - elif compType=="d_tff": - schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+words[3]+" "+words[4]+" "+words[5]+" "+words[6]+" "+compName) - k=k+1 - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - print "-----------------------------------------------------------\n" - print "Adding T Flip-Flop" - Comment='* T Flip-Flop '+compType - Title='Add parameters for T Flip-Flip '+compName - clk_delay=' Enter clk delay (default=1e-12): ' - set_delay=' Enter set delay (default=1e-12): ' - reset_delay=' Enter reset delay (default=1e-12): ' - ic=' Enter initial condition on output (default=0): ' - t_load=' Enter input to t load (default=1e-12): ' - clk_load=' Enter clk load (default=1e-12): ' - set_load=' Enter set load (default=1e-12): ' - reset_load=' Enter reset load (default=1e-12): ' - rise_delay=' Enter rise delay (default=1e-12): ' - fall_delay=' Enter fall delay (default=1e-12): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,clk_delay,set_delay,reset_delay,ic,t_load,clk_load,set_load,reset_load,rise_delay,fall_delay]) - elif compType=="vplot1": - outputOption.append("plot v("+words[1]+")\n") - schematicInfo.insert(index,"* Plotting option "+compType) - elif compType=="vplot8_1": - outputOption.append("plot ") - for i in range(1,len(words)-1): - outputOption.append("v("+words[i]+") ") - outputOption.append("\n") - schematicInfo.insert(index,"* Plotting option "+compType) - elif compType=="vdbplot8_1": - outputOption.append("plot ") - for i in range(1,len(words)-1): - outputOption.append("db(v("+words[i]+")) ") - outputOption.append("\n") - schematicInfo.insert(index,"* Plotting option "+compType) - elif compType=="vphase_plot8_1": - outputOption.append("plot ") - for i in range(1,len(words)-1): - outputOption.append("ph(v("+words[i]+")) ") - outputOption.append("\n") - schematicInfo.insert(index,"* Plotting option "+compType) - elif compType=="vprint1": - outputOption.append("print v("+words[1]+")\n") - schematicInfo.insert(index,"* Printing option "+compType) - elif compType=="calc": - outputOption.append("plot "+words[2]+"\n") - schematicInfo.insert(index,"* Plotting option "+compType) - elif compType=="vprint8_1": - outputOption.append("print ") - for i in range(1,len(words)-1): - outputOption.append("v("+words[i]+") ") - outputOption.append("\n") - schematicInfo.insert(index,"* Printing option "+compType) - elif compType=="vplot": - outputOption.append("plot v("+words[1]+")-v("+words[2]+")\n") - schematicInfo.insert(index,"* Plotting option "+compType) - elif compType=="vplot8": - outputOption.append("plot ") - for i in range(0,len(words)/2-1): - if words[i+1]=="0": - outputOption.append("-v("+words[i+len(words)/2]+") ") - elif words[i+len(words)/2]=="0": - outputOption.append("v("+words[i+1]+") ") - else: - outputOption.append("v("+words[i+1]+")-v("+words[i+len(words)/2]+") ") - outputOption.append("\n") - elif compType=="vprint": - outputOption.append("print v("+words[1]+")-v("+words[2]+")\n") - schematicInfo.insert(index,"* Printting option "+compType) - elif compType=="iplot": - schematicInfo.insert(index,"V_"+words[0]+" "+words[1]+" "+words[2]+" 0") - outputOption.append("plot i(V_"+words[0]+")\n") - elif compType=="powerplot": - outputOption.append("print ((v("+words[1]+")-v("+words[2]+"))^2)/("+words[3]+")\n") - schematicInfo.insert(index,"* Printting option "+compType) - elif compType=="ic": - Comment='*Adding initial Condition '+compType - Title=' Add initial condition ' +compName - print "-----------------------------------------------------------" - print "Adding initial condition" - ic=' Enter initial condition on output (default=0): ' - print "-----------------------------------------------------------" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,words[1],ic]) - elif compType=="opamp1": - f = open(OSCAD_HOME) - data = f.read() - schematicInfo.insert(index,data) - elif compType=="transfo": - schematicInfo.append("a"+str(k)+" ("+words[1]+" "+words[2]+") (2mmf "+words[2]+") "+compName+"_primary") - k=k+1 - schematicInfo.insert(index,"* "+compline) - print "------------------------------------------------------------" - Comment="*Adding transformer "+compType - Title="Add parameters for primary and secondary "+compName - num_turns="Enter the number of turns in primary (default=310):" - schematicInfo.append("a"+str(k)+" (2mmf 3mmf) "+compName+"_iron_core") - k=k+1 - h1="Enter H value for B-H table seperated by spcae (default=blank)" - b1="Enter corresponding B value seperated by space (default=blank)" - area="Enter the cross-sectional area of the core: (default = 1)" - length ="Enter the core length: (default = 0.01)" - schematicInfo.append("a"+str(k)+" ("+words[4]+" "+words[3]+") (3mmf "+words[3]+") "+compName+"_secondary") - k=k+1 - num_turns2="Enter the number of turns in secondary (default=620):" - guimodelvalue.append([index,compline,compType,compName,Comment,Title,num_turns,h1,b1,area,length,num_turns2]) - else: - schematicInfo.insert(index,compline) - # Update option information - return schematicInfo,outputOption,guimodelvalue - -def previous_file_open(filename): - """Read Pspice netList""" - # Open file if it exists - if os.path.exists(filename): - try: - f = open(filename) - global last_info - last_info=f.read() - f.close() - return 1; - except : - print("Error in opening file") - return 0; - else: - print filename + " does not exist" - return 0; - - - - - -def readNetlist(filename): - """Read Pspice netList""" - # Open file if it exists - if os.path.exists(filename): - try: - f = open(filename) - except : - print("Error in opening file") - sys.exit() - else: - print filename + " does not exist" - sys.exit() - # Read the data from file - data=f.read() - # Close the file - f.close() - return data.splitlines() - -def readParamInfo(data): - """Read Parameter information and store it into dictionary""" - print "data " - print data - param={} - for eachline in lines: - print eachline - eachline=eachline.strip() - if len(eachline)>1: - words=eachline.split(); - option=words[0].lower() - if option=='.param': - for i in range(1, len(words), 1): - paramList=words[i].split('=') - param[paramList[0]]=paramList[1] - return param - -def preprocessNetlist(lines,param): - """Preprocess netlist (replace parameters)""" - netlist=[] - for eachline in lines: - # Remove leading and trailing blanks spaces from line - eachline=eachline.strip() - # Remove special character $ - eachline=eachline.replace('$','') - # Replace parameter with values - for subParam in eachline.split(): - if '}' in subParam: - key=subParam.split()[0] - key=key.strip('{') - key=key.strip('}') - if key in param: - eachline=eachline.replace('{'+key+'}',param[key]) - else: - print "Parameter " + key +" does not exists" - value=raw_input('Enter parameter value: ') - eachline=eachline.replace('{'+key+'}',value) - # Convert netlist into lower case letter - eachline=eachline.lower() - # Construct netlist - if len(eachline)>1: - if eachline[0]=='+': - netlist.append(netlist.pop()+eachline.replace('+',' ')) - else: - netlist.append(eachline) - # Copy information line - infoline=netlist[0] - netlist.remove(netlist[0]) - return netlist,infoline - -def separateNetlistInfo(netlist): - optionInfo=[] - schematicInfo=[] - - for eachline in netlist: - if eachline[0]=='*': - continue - elif eachline[0]=='.': - optionInfo.append(eachline) - else: - schematicInfo.append(eachline) - return optionInfo,schematicInfo - -def addAnalysis(optionInfo): - """Open file if it exists""" - filename="analysis" - if os.path.exists(filename): - try: - f = open(filename) - except : - print("Error in opening file") - sys.exit() - else: - print filename + " does not exist" - sys.exit() - -# Read the data from file - data=f.read() - -# Close the file - f.close() - - analysisData=data.splitlines() - for eachline in analysisData: - eachline=eachline.strip() - if len(eachline)>1: - if eachline[0]=='.': - optionInfo.append(eachline) - else: - pass - return optionInfo - - - - -def findCurrent(schematicInfo,outputOption): - #Find current through component by placing voltage source series with the component - i=0 - for eachline in outputOption: - words=eachline.split() - option=words[0] - # Add voltage sources in series with component to find current - if option=="print" or option=="plot": - words.remove(option) - updatedline=eachline - for outputVar in words: - # Find component name if output variable is current - if outputVar[0]=='i': - outputVar=outputVar.strip('i') - outputVar=outputVar.strip('(') - compName=outputVar.strip(')') - # If component is voltage source, skip - if compName[0]=='v': - continue - # Find the component from the circuit - for compline in schematicInfo: - compInfo=compline.split() - if compInfo[0]==compName: - # Construct dummy node - dummyNode='dummy_'+str(i) - i+=1 - # Break the one node component and place zero value voltage source in between. - index=schematicInfo.index(compline) - schematicInfo.remove(compline) - compline=compline.replace(compInfo[2],dummyNode) - schematicInfo.insert(index,compline) - schematicInfo.append('v'+compName+' '+dummyNode+' '+compInfo[2]+' 0') - # Update option information - updatedline=updatedline.replace('i('+compName+')','i(v'+compName+')') - index=outputOption.index(eachline) - outputOption.remove(eachline) - outputOption.insert(index,updatedline) - return schematicInfo, outputOption - -def insertSpecialSourceParam(schematicInfo,sourcelist): - #Inser Special source parameter - schematicInfo1=[] - - for compline in schematicInfo: - words=compline.split() - compName=words[0] - # Ask for parameters of source - if compName[0]=='v' or compName=='i': - # Find the index component from circuit - index=schematicInfo.index(compline) - #schematicInfo.remove(compline) - if words[3]=="pulse": - Title="Add parameters for pulse source "+compName - v1=' Enter initial value(Volts/Amps): ' - v2=' Enter pulsed value(Volts/Amps): ' - td=' Enter delay time (seconds): ' - tr=' Enter rise time (seconds): ' - tf=' Enter fall time (seconds): ' - pw=' Enter pulse width (seconds): ' - tp=' Enter period (seconds): ' - sourcelist.append([index,compline,words[3],Title,v1,v2,td,tr,tf,pw,tp]) - - elif words[3]=="sine": - Title="Add parameters for sine source "+compName - vo=' Enter offset value (Volts/Amps): ' - va=' Enter amplitude (Volts/Amps): ' - freq=' Enter frequency (Hz): ' - td=' Enter delay time (seconds): ' - theta=' Enter damping factor (1/seconds): ' - sourcelist.append([index,compline,words[3],Title,vo,va,freq,td,theta]) - - elif words[3]=="pwl": - Title="Add parameters for pwl source"+compName - t_v=' Enter in pwl format without bracket i.e t1 v1 t2 v2.... ' - sourcelist.append([index,compline,words[3],Title,t_v]) - - elif words[3]=="ac": - Title="Add parameters for ac source "+compName - v_a=' Enter amplitude (Volts/Amps): ' - sourcelist.append([index,compline,words[3],Title,v_a]) - - elif words[3]=="exp": - Title="Add parameters for exponential source "+compName - v1=' Enter initial value(Volts/Amps): ' - v2=' Enter pulsed value(Volts/Amps): ' - td1=' Enter rise delay time (seconds): ' - tau1=' Enter rise time constant (seconds): ' - td2=' Enter fall time (seconds): ' - tau2=' Enter fall time constant (seconds): ' - sourcelist.append([index,compline,words[3],Title,v1,v2,td1,tau1,td2,tau2]) - - elif words[3]=="dc": - Title="Add parameters for DC source "+compName - v1=' Enter value(Volts/Amps): ' - v2=' Enter zero frequency: ' - sourcelist.append([index,compline,words[3],Title,v1,v2]) - #schematicInfo.insert(index,compline) - - elif compName[0]=='h' or compName[0]=='f': - # Find the index component from the circuit - index=schematicInfo.index(compline) - schematicInfo.remove(compline) - schematicInfo.insert(index,"* "+compName) - schematicInfo1.append("V"+compName+" "+words[3]+" "+words[4]+" 0") - schematicInfo1.append(compName+" "+words[1]+" "+words[2]+" "+"V"+compName+" "+words[5]) - schematicInfo=schematicInfo+schematicInfo1 - #print sourcelist - #print schematicInfo - return schematicInfo,sourcelist - - - -def main(): -# Accept input file name from user if not provided - global lines - global firstwindow #for checking whether first window in closed - global filename - global infoline,backClicked,last_input_file - global modelList,analysisOption - global subcktList,finalNetlist,simulatorOption,initialCondOption - firstwindow=1 - if len(sys.argv) < 2: - filename=raw_input('Enter file name: ') - else: - filename=sys.argv[1] - if len(sys.argv) < 3: - finalNetlist=int(raw_input('Do you want to create final file: ')) - else: - finalNetlist=int(sys.argv[2]) - - print "==================================" - print "Kicad to Ngspice netlist converter " - print "==================================" - print "converting "+filename - last_input_file=filename[:len(filename)-4] - last_input_file=last_input_file+"_last_input.txt" - print "input_file ",last_input_file - global schematicInfo - - # Read the netlist - lines=readNetlist(filename) - - # Construct parameter information - param=readParamInfo(lines) - - # Replace parameter with values - netlist, infoline=preprocessNetlist(lines,param) - - - # Separate option and schematic information - optionInfo, schematicInfo=separateNetlistInfo(netlist) - - if finalNetlist: - """Insert analysis from file""" - optionInfo=addAnalysis(optionInfo) - #print optionInfo - # Find the analysis option - analysisOption=[] - outputOption=[] - initialCondOption=[] - simulatorOption=[] - includeOption=[] - model=[] - - for eachline in optionInfo: - words=eachline.split() - option=words[0] - if (option=='.ac' or option=='.dc' or option=='.disto' or option=='.noise' or - option=='.op' or option=='.pz' or option=='.sens' or option=='.tf' or option=='.tran'): - analysisOption.append(eachline+'\n') - #print eachline - elif (option=='.save' or option=='.print' or option=='.plot' or option=='.four'): - eachline=eachline.strip('.') - outputOption.append(eachline+'\n') - elif (option=='.nodeset' or option=='.ic'): - initialCondOption.append(eachline+'\n') - elif option=='.option': - simulatorOption.append(eachline+'\n') - elif (option=='.include' or option=='.lib'): - includeOption.append(eachline+'\n') - elif (option=='.model'): - model.append(eachline+'\n') - elif option=='.end': - continue; - # Find the various model library required - modelList=[] - subcktList=[] - - for eachline in schematicInfo: - words=eachline.split() - if eachline[0]=='d': - modelName=words[3] - if modelName in modelList: - continue - modelList.append(modelName) - elif eachline[0]=='q': - modelName=words[4] - index=schematicInfo.index(eachline) - schematicInfo.remove(eachline) - schematicInfo.insert(index,words[0]+" "+words[3]+" "+words[2]+" "+words[1]+" "+words[4]) - if modelName in modelList: - continue - modelList.append(modelName) - elif eachline[0]=='m': - modelName=words[4] - index=schematicInfo.index(eachline) - schematicInfo.remove(eachline) - width=raw_input(' Enter width of mosfet '+words[0]+'(default=100u):') - length=raw_input(' Enter length of mosfet '+words[0]+'(default=100u):') - multiplicative_factor=raw_input(' Enter multiplicative factor of mosfet '+words[0]+'(default=1):') - if width=="": width="100u" - if multiplicative_factor=="": multiplicative_factor="100u" - if length=="": length="100u" - schematicInfo.insert(index,words[0]+" "+words[1]+" "+words[2]+" "+words[3]+" "+words[3]+" "+words[4]+" "+'M='+multiplicative_factor+" "+'L='+length+" "+'W='+width) - if modelName in modelList: - continue - modelList.append(modelName) - elif eachline[0]=='j': - modelName=words[4] - index=schematicInfo.index(eachline) - schematicInfo.remove(eachline) - schematicInfo.insert(index,words[0]+" "+words[1]+" "+words[2]+" "+words[3]+" "+words[4]) - if modelName in modelList: - continue - modelList.append(modelName) - elif eachline[0]=='x': - subcktName=words[len(words)-1] - if subcktName in subcktList: - continue - subcktList.append(subcktName) - - # Find current through components - schematicInfo,outputOption=findCurrent(schematicInfo,outputOption) - - #List for storing source and its value - global sourcelisttrack - sourcelist=[] - sourcelisttrack=[] - - # Add parameter to sources - schematicInfo,sourcelist=insertSpecialSourceParam(schematicInfo,sourcelist) - - sourcelist,sourcelisttrack=w.createrootwindow(sourcelist,sourcelisttrack) - - - - #print "Output Option",outputOption - #print "Sch Info",schematicInfo - #print "Src List",sourcelist - #print "Src Track",sourcelisttrack - - - -if __name__=='__main__': - app=QtGui.QApplication(sys.argv) - global w - global nw - w=Window() - nw=NewWindow() - nw.close() - main() - sys.exit(app.exec_()) |