Simulieren
Augendiagramme, PDN und S-Parameter
Ein Bitstrom durch einen Kanal schicken und das Eye ablesen, die Impedanz einer Versorgungsschiene gegen ein Ziel prüfen und TDR-, Mixed-Mode- und Störkopplungsanalyse ausführen.
Drei Simulationen lesen die S-Parameter eines FDTD-Laufs für etwas Spezifischeres als ein Diagramm: Eine Kanal-Simulation schiebt einen Bitstrom durch eine Verbindung und zeichnet das Auge, eine PDN-Simulation macht aus den Ports einer Schiene ihre Impedanz gegenüber einem Ziel, und agentee sparam analysiert jedes Ergebnis im Zeitbereich. Jede braucht zuerst einen FDTD-Lauf der Platine; siehe RF-Simulation, wie man einen einrichtet und günstig hält.
Kanal und Eye
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 benennt die Simulation, deren S-Parameter die Verbindung tragen. through = [FROM, TO] ist ein einseitiger Pfad; pair = [IN+, IN-, OUT+, OUT-] ein differenzieller, gelesen aus Sdd21. Die Impulsantwort kommt aus dem Pfad, multipliziert mit dem CTLE, falls vorhanden, mit einem Gauß-Rand, und das Auge ist ein PRBS, das mit 64 Phasen pro Intervall darauf überlagert ist, mit idealer Entscheidungs-Rückkopplung auf die ersten dfe_taps Post-Cursor.
agentee sim usb-eye
agentee show sim:usb-eyeDie Messwerte sind die Augenhöhe bei der besten Phase, die Augenbreite, die maximale Verzerrung im schlechtesten Fall, der Verlust bei Nyquist und die Cursor-Anzahl. Ein Rand, der schneller ist, als die S-Parameter reichen, wird auf das verlangsamt, was die Daten tragen, mit einem Hinweis.
Echte Treiber aus 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" }Der Treiber wird zu einer Thevenin-Quelle aus seinen Pull-down- und Pull-up-Tabellen, seiner Die-Kapazität und seinem Gehäuse; sein Rampenverlauf setzt den Rand und sein Spannungsbereich die Schwingung, außer rise oder swing sind angegeben. Der Empfänger belastet das ferne Ende mit seiner Gehäuse- und Die-Kapazität, und das Auge wird an seiner Die gelesen. IBIS funktioniert vorerst nur auf einseitigen Pfaden.
Stromverteilungsnetz
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 = 200Die FDTD-Simulation der Platine setzt einen Port auf jeden Strompin, jeden Entkopplungskondensator-Pad und den Regler. Jeder Port muss angetrieben werden und muss eine Senke, ein Entkopplungskondensator oder der VRM sein. Gib diesen Ports eine niedrige impedance, 0,5 bis 1 Ohm, da eine Schiene weit unter 50 Ohm liegt und die Umrechnung von S11 bei 50 Ohm Präzision verliert.
Das Ziel ist entweder eine Impedanz oder eine Spannung, Ripple-Prozentsatz und Transientstrom. Der Viewer zeichnet |Z| pro Senke gegen das Ziel in einem Log-Log-Diagramm, und die Messwerte liefern die Spitzenimpedanz gegen das Ziel und die größten Antiresonanzen, an denen man einen Decap hinzufügen oder ändern sollte. Decaps sind gemessene S-Parameterdateien oder ein ideales C mit ESL und ESR.
S-Parameter analysieren
agentee sparam lna-rf --tdr IN --rise 50ps
agentee sparam link --pair 1,2,3,4
agentee sparam link --xtalk 1,3--tdr PORTist die Impedanz über die Zeit von einem Port: die Daten auf ein gleichmäßiges Gitter neu abgetastet, auf DC extrapoliert, mit einem Gauß-Kantenprofil versehen und integriert. Es warnt, wenn die Kante schneller ist, als die Daten es unterstützen. Der Viewer zeigt dasselbe TDR für jeden angetriebenen Port.--pair IN+,IN-,OUT+,OUT-liefert gemischte Moden Sdd21, Sdd11, Scc21, Scd21 und Sdc21.--xtalk FROM,TOliefert die Kopplung in dB und das Übersprechen eines Sprungs.
Jeder Lauf meldet Passivität (den größten Singulärwert von S über das Band) und Reziprozität (den größten Unterschied zwischen Sij und Sji), wenn jeder Port angetrieben wurde. Eine Passivität über 1 bedeutet, dass der Lauf nicht konvergiert ist oder das Netz zu grob ist.
Einem Link seine Messwerte zuordnen
Ein Interface im Layout kann abgeschlossene Simulationen lesen und die Prüfung fehlgeschlagen melden, wenn eine Verbindung ihre Werte verfehlt:
[[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"Ein fehlendes oder veraltetes Ergebnis ist auch ein Fehler, sodass eine Layoutänderung, die die Simulationen nicht gesehen haben, die Prüfung fehlgeschlagen meldet, bis sie erneut ausgeführt werden. Das ist der Punkt: Das Auge, das du abgenickt hast, ist das Auge des Kupfers, das du gerade bestellst. Die Interface-Referenz listet jede Grenze.