from layout to time domain
How can we define the signal integrity XML from python code?
it you have any examples of a python scripted flow i would love to add a gdsfactory plugin, so that we can enable a schematic driven flow that can be scripted or GUI based
https://github.com/gdsfactory/gdsfactory/issues/219
@flaport @tvt173
There are many methods of doing this. Projects can be opened and edited in a "headless" mode. More importantly, the GUI generates a rather simple netlist that is passed to the solver. There are about 1300 unit tests that test all kinds of this capability and those would be the best places to look for for examples.
I also have a textbook that goes along with this that describes the math, software, algorithms, etc. See: https://www.cambridge.org/core/books/sparameters-for-signal-integrity/2FD44B994CD054E4B844B358E8903A09#fndtn-information
For example:
def testSParametersPostCausal(self):
fd=si.fd.EvenlySpacedFrequencyList(20e9,400)
sspnp=si.p.SystemSParametersNumericParser(fd)
sspnp.AddLines(['device D1 2 file cable.s2p',
'device D2 2 file filter.s2p',
'port 1 D1 1',
'port 2 D2 2',
'connect D1 2 D2 1',
'post enforce reciprocity',
'post enforce passivity',
'post enforce causality',
'post limit none none',])
sp=sspnp.SParameters()
or:
app=siapp.signalintegrityappheadless()
app.OpenProjectFile('XSRChannelSimulation.si')
duration=1000e-9
relay=app.Device('K1')
relay['pos']['Value']=1
serdes=app.Device('VG1')
serdes['a']['Value']=1.
serdes['dur']['Value']=duration
serdes=app.Device('VG2')
serdes['a']['Value']=0.
serdes['dur']['Value']=duration
serdes=app.Device('VG3')
serdes['a']['Value']=0.
serdes['dur']['Value']=duration
serdes=app.Device('VG4')
serdes['a']['Value']=0.
serdes['dur']['Value']=duration
print('simulating distribution')
(sourceNames,outputWaveformLabels,transferMatrices,outputWaveformList)=app.Simulate()
xtalk1Wf=outputWaveformList[outputWaveformLabels.index('VO1')]