Simuleren
Oogdiagrammen, PDN en S-parameters
Stuur een bitstroom door een kanaal en lees het oog, controleer de impedantie van een voedingsspoor tegen een doel, en voer TDR, mixed-mode en kruisprating-analyse uit.
Drie simulaties lezen de S-parameters van een FDTD-run voor iets specifiekers dan een plot: een channelsimulatie stuurt een bitstroom door een link en tekent het oog, een PDN-simulatie maakt de poorten van een rail om naar zijn impedantie tegen een doel, en agentee sparam analyseert elk resultaat in het tijdsdomein. Elke heeft eerst een FDTD-run van de printplaat nodig; zie RF-simulatie voor hoe je die instelt en goedkoop houdt.
Kanaal en oog
name = "usb-eye"
kind = "channel"
board = "usb-link"
pair = ["J1+", "J1-", "J2+", "J2-"]
bit_rate = "5Gbps"
rise = "40ps"
swing = "0.8V"
prbs = 7
ctle = { dc_gain = -6.0, zero = "1GHz", poles = ["5GHz", "10GHz"] }
dfe_taps = 2board noemt de simulatie waarvan de S-parameters de link dragen. through = [FROM, TO] is een single-ended pad; pair = [IN+, IN-, OUT+, OUT-] een differentieel pad, gelezen uit Sdd21. Het pulsvantwoord komt uit het pad, vermenigvuldigd met de CTLE als die er is, met een Gaussische rand, en het oog is een PRBS daarop opgelegd met 64 fasen per unit interval, met ideale decision feedback op de eerste dfe_taps post cursors.
agentee sim usb-eye
agentee show sim:usb-eyeDe metingen zijn de ooghoogte op de beste fase, de oogbreedte, de piekvervorming in het slechtste geval, het verlies op Nyquist en het aantal cursors. Een rand sneller dan de S-parameters reiken, wordt vertraagd naar wat de data ondersteunt, met een notitie.
Echte drivers uit IBIS
tx = { file = "models/sn74lvc1g04.ibs", model = "LVC1G04_OUT_33", component = "LVC1G04_DBV", pin = "4" }
rx = { file = "models/sn74lvc1g04.ibs", model = "LVC1G04_IN_33", component = "LVC1G04_DBV", pin = "2" }De driver wordt een Thevenin-bron uit zijn pulldown- en pulluptabellen, zijn die-capaciteit en zijn package; zijn ramp bepaalt de rand en zijn spanningsbereik de swing, tenzij rise of swing zijn opgegeven. De ontvanger belast het verre eind met zijn package- en die-capaciteit, en het oog wordt gelezen op zijn die. IBIS werkt voor nu op single-ended paden.
Voedingsverdelingsnetwerk
name = "vcc-pdn"
kind = "pdn"
board = "rail"
sinks = ["U1_VCC"]
target = { voltage = "5V", ripple = 1.0, transient = "50mA" }
[[decaps]]
port = "C3"
ref = "C3"
file = "models/grm155r61a105ke15.s2p"
mount = "series"
[[decaps]]
port = "C4"
c = "1uF"
esl = "0.4nH"
esr = "15mohm"
[[vrm]]
port = "VRM"
r = "2mohm"
l = "20nH"
[frequency]
start = "100kHz"
stop = "1GHz"
points = 200De FDTD-simulatie van de printplaat zet een poort op elke voedingspin, elke decap-pad en de regelaar. Elke poort moet worden gedreven en moet een sink, een decap of de VRM zijn. Geef die poorten een lage impedance, 0,5 tot 1 ohm, omdat een rail ver onder 50 ohm zit en converteren van S11 bij 50 ohm precisie verliest.
Het doel is een impedantie of een spanning, rippelpercentage en transiënstroom. De viewer tekent |Z| per sink tegen het doel op een log-log grafiek, en de metingen geven de piekimpedantie tegen het doel en de grootste anti-resonanties, waar je een decap toevoegt of verandert. Decaps zijn gemeten S-parameterbestanden of een ideale C met ESL en ESR.
S-parameters analyseren
agentee sparam lna-rf --tdr IN --rise 50ps
agentee sparam link --pair 1,2,3,4
agentee sparam link --xtalk 1,3--tdr PORTis impedantie tegen tijd vanaf één poort: de data herstaald naar een uniform raster, geëxtrapoleerd naar DC, met een Gaussische rand geïntegreerd. Het waarschuwt als de rand sneller is dan de data ondersteunt. De viewer toont dezelfde TDR voor elke gedreven poort.--pair IN+,IN-,OUT+,OUT-geeft mixed-mode Sdd21, Sdd11, Scc21, Scd21 en Sdc21.--xtalk FROM,TOgeeft koppeling in dB en de crosstalk van een stap.
Elke run rapporteert passiviteit (de grootste singulaire waarde van S over het band) en reciprociteit (het grootste verschil tussen Sij en Sji) als elke poort gedreven is. Een passiviteit boven 1 betekent dat de run niet convergeerde of dat het mesh te grof is.
Een link vasthouden aan zijn getallen
Een interface in het layout kan afgeronde simulaties lezen en de controle laten falen als een link niet aan zijn getallen voldoet:
[[interfaces]]
name = "usb-ss"
preset = "usb3-gen1"
nets = ["SS_TX*", "SS_RX*"]
[[interfaces.measure]]
sim = "usb-link"
pair = ["TX1_FX+", "TX1_FX-", "TX1_J+", "TX1_J-"]
up_to = "2.5GHz"
max_loss = 1.5
min_return_loss = 10.0
max_mode_conversion = -30.0
[[interfaces.measure]]
sim = "usb-eye"
min_eye_height = "70mV"
min_eye_width = "0.47UI"Een ontbrekend of verouderd resultaat is ook een fout, dus een layoutwijziging die de simulaties niet hebben gezien, faalt de controle totdat ze opnieuw zijn uitgevoerd. Dat is het punt: de oog die je hebt goedgekeurd, is de oog van het kopervlak dat je gaat bestellen. De interface-referentie noemt elke limiet.