SignalIntegrity icon indicating copy to clipboard operation
SignalIntegrity copied to clipboard

from layout to time domain

Open joamatab opened this issue 3 years ago • 1 comments

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

joamatab avatar Mar 07 '22 16:03 joamatab

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')]

PetePupalaikis avatar Sep 01 '22 03:09 PetePupalaikis