def test(): """Test pulse and sin API""" step = devices.pulse(v1=0, v2=1, td=500e-9, tr=1e-12, pw=1, tf=1e-12, per=2) damped_sin = devices.sin(vo=0, va=1, td=500e-9, freq=15e3, theta=5e3, phi=90.) exp = devices.exp(v1=.5, v2=-.05, td1=0, tau1=20e-6, td2=400e-6, tau2=20e-6) mycircuit = circuit.Circuit(title="Butterworth Example circuit", filename=None) gnd = mycircuit.get_ground_node() mycircuit.add_resistor(part_id="R1", n1="n1", n2="n2", value=600) mycircuit.add_inductor(part_id="L1", n1="n2", n2="n3", value=15.24e-3) mycircuit.add_capacitor(part_id="C1", n1="n3", n2=gnd, value=119.37e-9) mycircuit.add_inductor(part_id="L2", n1="n3", n2="n4", value=61.86e-3) mycircuit.add_capacitor(part_id="C2", n1="n4", n2=gnd, value=155.12e-9) mycircuit.add_resistor(part_id="R2", n1="n4", n2=gnd, value=1.2e3) mycircuit.add_vsource("V1", n1="n1", n2='n5', dc_value=3.3333, ac_value=.33333, function=step) mycircuit.add_vsource("V2", n1="n5", n2='n6', dc_value=3.3333, ac_value=.33333, function=damped_sin) mycircuit.add_vsource("V3", n1="n6", n2=gnd, dc_value=3.3333, ac_value=.33333, function=exp) op_analysis = ahkab.new_op(outfile='time_functions') ac_analysis = ahkab.new_ac(start=1e3, stop=1e5, points=100, outfile='time_functions') tran_analysis = ahkab.new_tran(tstart=0, tstop=1.2e-3, tstep=1e-6, x0=None, outfile='time_functions') testbench = testing.APITest('time_functions', mycircuit, [op_analysis, ac_analysis, tran_analysis], skip_on_travis=True, er=1e-3, ea=1e-5) testbench.setUp() testbench.test() if cli: r = ahkab.run(mycircuit, an_list=[op_analysis, ac_analysis, tran_analysis]) fig = plt.figure() plt.title(mycircuit.title + " - TRAN Simulation") plt.plot(r['tran']['T'], r['tran']['VN1'], label="Input voltage") plt.hold(True) plt.plot(r['tran']['T'], r['tran']['VN4'], label="output voltage") plt.legend() plt.hold(False) plt.grid(True) #plt.ylim([0,1.2]) plt.ylabel('Step response') plt.xlabel('Time [s]') fig.savefig('tran_plot.png') fig = plt.figure() plt.subplot(211) plt.semilogx(r['ac']['w'], np.abs(r['ac']['Vn4']), 'o-') plt.ylabel('abs(V(n4)) [V]') plt.title(mycircuit.title + " - AC Simulation") plt.subplot(212) plt.grid(True) plt.semilogx(r['ac']['w'], np.angle(r['ac']['Vn4']), 'o-') plt.xlabel('Angular frequency [rad/s]') plt.ylabel('arg(V(n4)) [rad]') fig.savefig('ac_plot.png') else: testbench.tearDown()
def PDN_circuit(args): logging.basicConfig(filename='PDN.log',filemode='w', level=logging.INFO) #args = parser.parse_args() if len(args.currents) == 0: raise ValueError("input currents should not be empty") mycircuit = circuit.Circuit(title="PDN circuit") gnd = mycircuit.get_ground_node() v_nodes = [] c_nodes = [] inter_nodes = [] _NODE_COUNT = args.cores ROW_SIZE = args.rsize # declare Vdd nodes for i in range(_NODE_COUNT): v_nodes.append(mycircuit.create_node('nv'+str(i))) c_nodes.append(mycircuit.create_node('nc'+str(i))) inter_nodes.append(mycircuit.create_node('ni'+str(i))) # subcircuit for Metal layer parasitics (MLP) and cores # The values to the cores are obtained as command line inputs. for i in range(_NODE_COUNT): mycircuit.add_resistor("Rb"+str(i), n1=v_nodes[i] , n2=inter_nodes[i] , value = 40e-3) mycircuit.add_inductor("Lb"+str(i), n1=inter_nodes[i] , n2=c_nodes[i] , value = 0.5e-11) mycircuit.add_capacitor("Cb"+str(i), n1=c_nodes[i] , n2=gnd , value = 1.6e-6) mycircuit.add_isource("Ib"+str(i), n1=c_nodes[i] , n2=gnd , dc_value = args.currents[i]) # 0.1e-3) # connection between cores if (i+1)%ROW_SIZE != 0: if i%2 == 0: mycircuit.add_resistor("Rcc"+str(i), n1=c_nodes[i] ,n2=c_nodes[i+1] ,value = 50e-3) if (i+ROW_SIZE) < _NODE_COUNT: if (i/ROW_SIZE)%2 == 0: mycircuit.add_resistor("Rcc"+str(i+_NODE_COUNT), n1=c_nodes[i] ,n2=c_nodes[i+ROW_SIZE] ,value = 50e-3) mycircuit.add_vsource("V"+str(i), n1=v_nodes[i], n2=gnd, dc_value=args.voltages[i]) # OP analysis op_analysis = ahkab.new_op() r = ahkab.run(mycircuit, an_list=[op_analysis]) # print r['op'].results with open('vdd_out.log', 'w') as v_out: for i in range(_NODE_COUNT): gvdd = r['op'].results['vnv'+str(i)] cvdd = r['op'].results['vnc'+str(i)] if gvdd > 0: F_normal = float((gvdd-0.30)*(gvdd-0.30)/gvdd) F_dip = float((cvdd-0.30)*(cvdd-0.30)/cvdd) print ("Node %d : current: %f, Grid Vdd is %f, Core Vdd is %f, variation is %f percent" % (i, args.currents[i], gvdd , cvdd, 100*(gvdd-cvdd)/gvdd)) v_out.write(str(cvdd)+' ') return r
def setAhkabCircuit(self): # Index of various components iCapacitor = 1 iInductor = 1 iResistor = 1 iDCSource = 1 iISource = 1 iTransistor = 1 # Our ahkab circuit object # TODO: Meaningful circuit title self.circuit = circuit.Circuit(title="CIRCUIT SIMULATION") self.circuit.add_model('ekv', 'nmos', dict(TYPE ='n, VTO=.4, KP=10e-6')) gnd = self.circuit.get_ground_node() # Add each component to the ahkab circuit for i in range(0,self.ntriodes): currComponent = self.triodes[i].value.componentType if currComonent is Component.TRANSISTOR: pass # TODO Write This for i in range(0,self.nedges): if self.edges[i].start == 0: startNode = gnd else: startNode = 'n'+str(self.edges[i].start) if self.edges[i].finish == 0: finishNode = gnd else: finishNode = 'n'+str(self.edges[i].finish) componentValue = self.edges[i].value.getValue() if currComponent is Component.DCSOURCE: componentName = 'V'+str(iDCSource) iDCSource += 1 self.circuit.add_vsource(componentName, n1=startNode, n2=finishNode, dc_value=componentValue) elif currComponent is Component.ISOURCE: pass # TODO Write This else: if currComponent is Component.RESISTOR: addFunc = self.circuit.add_resistor componentName = 'R'+str(iResistor) iResistor += 1 elif currComponent is Component.CAPACITOR: addFunc = self.circuit.add_capacitor componentName = 'C'+str(iCapacitor) iCapacitor += 1 elif currComponent is Component.INDUCTOR: addFunc = self.circuit.add_inductor componentName = 'I'+str(iInductor) iInductor += 1 addFunc(componentName, n1=startNode, n2=finishNode, value=componentValue) return self.circuit
def test(): """Test CCCS API""" # The circuit is: #test for transresitances #va 1 2 type=vdc vdc=.1 vac=1 #r1 1 0 .5k #r2 2 0 .5k #h1 3 4 va 5000 #r3 3 0 1k #r4 4 5 1k #l1 5 0 10u #c1 5 0 10u #.op #.ac start=50k stop=5e5 nsteps=1000 #.symbolic #.plot ac |v(5)| mycircuit = circuit.Circuit(title="Test CCVS API", filename=None) gnd = mycircuit.get_ground_node() mycircuit.add_resistor(part_id="R1", n1="1", n2=gnd, value=500) mycircuit.add_resistor(part_id="R2", n1="2", n2=gnd, value=500) mycircuit.add_vsource("VA", n1="1", n2='2', dc_value=0.1, ac_value=1.) mycircuit.add_ccvs('H1', n1='3', n2='4', source_id='VA', value=5000) mycircuit.add_resistor(part_id="R3", n1="3", n2=gnd, value=1e3) mycircuit.add_resistor(part_id="R4", n1="4", n2="5", value=1e3) mycircuit.add_inductor(part_id="L1", n1="5", n2=gnd, value=10e-6) mycircuit.add_capacitor(part_id="C1", n1="5", n2=gnd, value=10e-6) print(mycircuit) op_analysis = ahkab.new_op(outfile='hvsource_api', verbose=6) symb_analysis = ahkab.new_symbolic(outfile='hvsource_api', verbose=6) ac_analysis = ahkab.new_ac(outfile='hvsource_api', start=7957.747, stop=79577.471, points=1000, verbose=6) testbench = testing.APITest('hvsource', mycircuit, [op_analysis, symb_analysis, ac_analysis], skip_on_travis=False, er=1e-3, ea=1e-5) testbench.setUp() testbench.test() if not cli: testbench.tearDown()
def setAhkabCircuit(): # Index of various components iCapacitor = 1 iInductor = 1 iResistor = 1 iDCSource = 1 # Our ahkab circuit object # TODO: Meaningful circuit title self.circuit = circuit.Circuit(title="CIRCUIT SIMULATION") # Add each component to the ahkab circuit for i in range(0, self.nedges): currComponent = self.edges[i].value.componentType startNodeName = 'n' + str(self.edges[i].start) finishNodeName = 'n' + str(self.edges[i].finish) componentValue = self.edges[i].value.getValue() if currComponent is Compoent.DCSOURCE: componentName = 'V' + str(iDCSource) iDCSource += 1 self.circuit.add_vsource(componentName, n1=startNodeName, n2=finishNodeName, dc_value=componentValue) else: if currComponent is Component.RESISTOR: addFunc = self.circuit.add_resistor componentName = 'R' + str(iResistor) iResistor += 1 elif currComponent is Component.CAPACITOR: addFunc = self.circuit.add_capacitor componentName = 'C' + str(iCapacitor) iCapacitor += 1 elif currComponent is Component.INDUCTOR: addFunc = self.circuit.add_inductor componentName = 'I' + str(iInductor) iInductor += 1 addFunc(componentName, n1=startNodeName, n2=finishNodeName, value=componentValue) return self.circuit
def test(): """Test CCCS API""" # The circuit is: # test for transconductors # va 1 2 type=vdc vdc=.1 # r1 1 0 .5k # r2 2 0 .5k # f1 3 4 va 5 # r3 3 0 1k # r4 4 0 1k # .op # .symbolic mycircuit = circuit.Circuit(title="Test CCCS API", filename=None) gnd = mycircuit.get_ground_node() mycircuit.add_resistor(part_id="R1", n1="1", n2=gnd, value=500) mycircuit.add_resistor(part_id="R2", n1="2", n2=gnd, value=500) mycircuit.add_cccs('F1', n1='3', n2='4', source_id='VA', value=5) mycircuit.add_resistor(part_id="R3", n1="3", n2=gnd, value=1e3) mycircuit.add_resistor(part_id="R4", n1="4", n2=gnd, value=1e3) mycircuit.add_vsource("VA", n1="1", n2='2', dc_value=0.1) print(mycircuit) op_analysis = ahkab.new_op(outfile='fisource_api', verbose=6) symb_analysis = ahkab.new_symbolic(outfile='fisource_api', verbose=6) testbench = testing.APITest('fisource', mycircuit, [op_analysis, symb_analysis], skip_on_travis=False, er=1e-3, ea=1e-5) testbench.setUp() testbench.test() if not cli: testbench.tearDown()
pi=np.pi file=input("Enter the name of the file + .txt :") cir=open(file,'r') #opening the netlist file out_put=open('out_put.txt','w') ac_circuit=circuit.Circuit("Ac Circuit") freq=int(input("Enter the frequency : ")) sympols=[] impedence=[] sn=[] en=[] for line in cir: words=line.split() if (words[0][0]=='V'): e_ip=words[0] n1=words[1] n2=words[2] ac_value=float(words[3]) phase=float(words[4])*(pi/180)
import numpy as np import ahkab from ahkab import ahkab, circuit, time_functions mycircuit = circuit.Circuit(title="Butterworth Example circuit", filename=None) gnd = mycircuit.get_ground_node() mycircuit.add_resistor("R1", n1="n1", n2="n2", value=600) mycircuit.add_inductor("L1", n1="n2", n2="n3", value=15.24e-3) mycircuit.add_capacitor("C1", n1="n3", n2=gnd, value=119.37e-9) mycircuit.add_inductor("L2", n1="n3", n2="n4", value=61.86e-3) mycircuit.add_capacitor("C2", n1="n4", n2=gnd, value=155.12e-9) mycircuit.add_resistor("R2", n1="n4", n2=gnd, value=1.2e3) voltage_step = time_functions.pulse(v1=0, v2=1, td=500e-9, tr=1e-12, pw=1, tf=1e-12, per=2) mycircuit.add_vsource("V1", n1="n1", n2=gnd, dc_value=5, ac_value=1, function=voltage_step) print mycircuit
imag = value * math.sin(angle) return complex(real, imag) def magnsqr(cmplx): return pow(cmplx.real, 2) + pow(cmplx.imag, 2) def con(cmplx): return complex(cmplx.real, -cmplx.imag) cho = 'y' while cho == 'y': mycircuit = circuit.Circuit(title="Circuits Project", filename=None) gnd = mycircuit.get_ground_node() fileName = "" fileName = input("\nPlease Enter File Name(Without .txt) : ") outputFile = "" outputFile = input("\nPlease Enter Output File Name(Without .txt) : ") outputFile = outputFile + ".txt" fileName = fileName + ".txt" file = open(fileName, "r") f = open(outputFile, "w")
import numpy as np import math import ahkab from ahkab import ahkab, circuit, time_functions mycircuit = circuit.Circuit(title="TWMZM equivalent circuit", filename=None) gnd = mycircuit.get_ground_node() n = 6 for i in range(1, n + 1): #Transmission line (Passive segment) mycircuit.add_resistor("Rl%s" % (i), n1="n%s" % (3 * i - 2), n2="n%s" % (3 * i), value=1.65) mycircuit.add_inductor("Ll%s" % (i), n1="n%s" % (3 * i), n2="n%s" % (3 * i + 1), value=1.27e-10) mycircuit.add_capacitor("Cl%s" % (i), n1="n%s" % (3 * i + 1), n2=gnd, value=2.24e-14) mycircuit.add_resistor("Gl%s" % (i), n1="n%s" % (3 * i + 1), n2=gnd, value=8e3) #Phase shifter (Active segment)
# -*- coding: UTF-8 -*- import re import numpy as np import math import matplotlib.pyplot as plt import pylab from ahkab import ahkab, circuit, time_functions file = open("example_3.txt", "r") mycircuit = circuit.Circuit(title="Example circuit", filename=None) gnd = mycircuit.get_ground_node() line_number = 0 Unit_dict = {'f': 1e-15, 'p': 1e-12, 'n': 1e-9, 'u': 1e-6, 'm': 1e-3, 'k': 1e+3, 'meg': 1e+6, 'g': 1e+9, 't': 1e+12} def unit_transform(value): value = value.lower() if value[-1] in 'fpnumkgt': return float(float(value[:-1]) * Unit_dict[value[-1]]) else: return float(value) def get_complex_magnitude(complex): magnitude = (np.real(complex) ** 2) + (np.imag(complex) ** 2) return magnitude def dc_simulation(MNA, RHS): i = MNA.shape[0]
import ahkab from ahkab import circuit, printing, time_functions import matplotlib.pyplot as plt import pylab as plt import numpy as np mycircuit = circuit.Circuit(title="Butterworth Example circuit") gnd = mycircuit.get_ground_node() mycircuit.add_resistor("R1", n1="n1", n2="n2", value=600) mycircuit.add_inductor("L1", n1="n2", n2="n3", value=15.24e-3) mycircuit.add_capacitor("C1", n1="n3", n2=gnd, value=119.37e-9) mycircuit.add_inductor("L2", n1="n3", n2="n4", value=61.86e-3) mycircuit.add_capacitor("C2", n1="n4", n2=gnd, value=155.12e-9) mycircuit.add_resistor("R2", n1="n4", n2=gnd, value=1.2e3) voltage_step = time_functions.pulse(v1=0, v2=1, td=500e-9, tr=1e-12, pw=1, tf=1e-12, per=2) mycircuit.add_vsource("V1", n1="n1", n2=gnd, dc_value=5, ac_value=1, function=voltage_step)
list_values_E = [] list_names_H = [] list_nodes_H = [] list_values_H = [] list_names_F = [] list_nodes_F = [] list_values_F = [] list_names_G = [] list_nodes_G = [] list_values_G = [] x = input("Enter Your File 📂 Name 😀:") circ = circuit.Circuit(title="Mostafa's circuit") File = open(x + '.txt') freq = sconverti(File.readline()) for i in File: row = File.readline() L = row.split() # Independent Current Source if L[0][0] == "I": list_names_I.append(L[0]) list_nodes_I.append((L[1], L[2])) #list_values_I.append(phase(L[4], L[3])) if L[1] == "0": circ.add_isource(L[0], circ.gnd, concat(L[2]), 0, phase(sconverti(L[3]), sconverti(L[4]))) continue
import numpy as np import sympy import pickle import sympy import pylab import ahkab from ahkab import printing, circuit, symbolic, new_ac import ahkabHelpers mycircuit = circuit.Circuit(title="Tow-Thomas biquad") gnd = mycircuit.get_ground_node() def buildsvf(svf): ar = svf.add_resistor ac = svf.add_capacitor ao = lambda name, p, n: svf.add_vcvs(name, "U"+name[1:]+"o", gnd, p, n, 1e6) ar("R1", "in", "U1n", 10e3) ar("R3", "U1n", "U1o", 10e3) ar("R2", "U3o", "U1n", 10e3) ar("R4", "U1o", "U2n", 10e3) ar("R5", "U2o", "U3n", 10e3) ar("R6", "U3n", "U3o", 10e3) ac("C1", "U1n", "U1o", 15e-9) ac("C2", "U2n", "U2o", 15e-9) ao("E1", gnd, "U1n") ao("E2", gnd, "U2n") ao("E3", gnd, "U3n") buildsvf(mycircuit) mycircuit.add_vsource("V1", n1="in", n2=gnd, dc_value=5, ac_value=1)
import numpy as np import ahkab from ahkab import circuit import sympy import pickle import ahkabHelpers mycircuit = circuit.Circuit(title="sepic", filename=None) # https://en.wikipedia.org/wiki/File:SEPIC_Schematic.gif #.MODEL 2N7000 NMOS (LEVEL=3 RS=0.205 NSUB=1.0E15 DELTA=0.1 KAPPA=0.0506 TPG=1 CGDO=3.1716E-9 RD=0.239 VTO=1.000 VMAX=1.0E7 ETA=0.0223089 NFS=6.6E10 TOX=1.0E-7 LD=1.698E-9 UO=862.425 XJ=6.4666E-7 THETA=1.0E-5 CGSO=9.09E-9 L=2.5E-6 W=0.8E-2) def buildsepic(circuit): gnd = circuit.get_ground_node() ar = circuit.add_resistor ac = circuit.add_capacitor al = circuit.add_inductor av = circuit.add_vsource # circuit.add_model("diode", "aDiodeModel", {"name": "aDiodeElement"}) # circuit.add_diode("D1", "da", "dc", "aDiodeModel") av("Vin", "in", gnd, 2.5, 1.0) ac("Cin", "in", gnd, 100e-3) al("L1", "in", "s1", 47e-6) ac("C1", "s1", "da", 10e-6) al("L2", "da", gnd, 47e-6) ac("C2", "dc", gnd, 100e-3) #circuit.add_inductor_coupling("K1", "L1", "L2", 0.99) buildsepic(mycircuit)
import numpy as np import ahkab from ahkab import ahkab, circuit, time_functions import pylab as plt mycircuit = circuit.Circuit(title= "LRC Time Dependent Circuit") gnd = mycircuit.get_ground_node() # Writing net list for the circuit mycircuit.add_resistor("R1", n1="n1", n2="n2", value=600) mycircuit.add_inductor("L1", n1="n2", n2="n3", value=15.24e-3) mycircuit.add_capacitor("C1", n1="n3", n2=gnd, value=119.37e-9) mycircuit.add_inductor("L2", n1="n3", n2="n4", value=61.86e-3) mycircuit.add_capacitor("C2", n1="n4", n2=gnd, value=155.12e-9) mycircuit.add_resistor("R2", n1="n4", n2=gnd, value=1.2e3) # Defining the voltage square wave function ( all times are in seconds) # v1 = square wave low value # v2 = square wave high value # td = delay time to the first ramp # tr = rise time from v1 to v2 # pw = pulse width # tf = fall time from v2 to v1 # per = periodicity interval voltage_step = time_functions.pulse(v1=0, v2=1, td=500e-9, tr=1e-12, pw=1, tf=1e-12, per=2) mycircuit.add_vsource("V1", n1="n1", n2=gnd, dc_value=5, ac_value=1, function=voltage_step) print(mycircuit) ac_analysis = ahkab.new_ac(start=1e3, stop=1e5, points=100)
import os os.environ["LANG"] = "en_US.UTF-8" from ahkab import circuit from ahkab import new_ac from ahkab import run import cmath as m def Rad(angle): return angle * 3.14159265358979 / 180 mycircuit = circuit.Circuit(title="AC circuit") print('\n') filename = input("Enter the file name of the circuit: ") w = float(input("Enter frequency: ")) cirfile = open(filename, "r") for line in cirfile: values = line.split() if line == '\n': continue if values[0][0] == 'V': acvalue = m.rect(float(values[3]), Rad(float(values[4]))) mycircuit.add_vsource(values[0], values[1], values[2], dc_value=0, ac_value=acvalue) #dc should not be zero? if values[0][0] == 'I': acvalue = m.rect(float(values[3]), Rad(float(values[4]))) mycircuit.add_isource(values[0],
import numpy as np import ahkab from ahkab import circuit, printing import sympy import pickle import ahkabHelpers mycircuit = circuit.Circuit(title="sallen-key 2pole lpf", filename=None) # https://upload.wikimedia.org/wikipedia/commons/5/5c/Sallen-Key_Lowpass_Example.svg def buildsk(svf): gnd = svf.get_ground_node() ar = svf.add_resistor ac = svf.add_capacitor al = svf.add_inductor av = svf.add_vsource ao = lambda name, p, n: svf.add_vcvs("E" + name[1:], name + "o", gnd, p, n, 1e6) ao("u1", "u1p", "u1o") ar("R1", "in", "nR2", 10e3) ar("R2", "nR2", "u1p", 10e3) ac("C1", "u1o", "nR2", 1e-9) ac("C2", "u1p", gnd, 1e-9) av("V1", "in", gnd, 2.5, 1.0) buildsk(mycircuit) print(mycircuit)