agentee

Schaltplan und Layout

Schnittstellen

Was eine Verbindung erfüllen muss, von USB 3 bis zu einer 50-Ohm-RF-Leitung: Impedanz, Skew, Länge, Vias, Stümpfe, Referenzebenen und Rückkehrvias.

Eine Schnittstelle sagt, was eine Verbindung erfüllen muss, und die Prüfung misst das Kupfer dagegen: Impedanz, Skew, Länge, Vias, Via-Stümpfe, die Referenzebene unter jeder Leiterbahn, die Rückkehr-Vias, die Bus-Timing und die S-Parameter und das Auge der Simulationen, die sie modellieren.

[[interfaces]]
name = "usb-ss"
preset = "usb3-gen2"           # usb3-gen1, usb3-gen2, usb2-hs, lvds, rf-50, cmos
nets = ["SS_TX*", "SS_RX*"]    # globs; differential presets pair them up, through series parts
# differential = true
# impedance = "90ohm"          # the member classes' targets must sit inside this
# impedance_tolerance = "7%"
# max_skew = "5mil"            # within each pair, a length or a time ("1ps")
# max_length = "3in"           # end to end, through series parts
# max_vias = 2                 # per trace
# max_stub = "15mil"           # the via barrel past the last layer the trace uses
# max_unreferenced = "0.5mm"   # total run with no plane of `reference` under it
# reference = ["GND"]
# return_via = "200mil"        # a reference via this close to every signal via

[[interfaces]]
name = "ad-rx"
preset = "cmos"
nets = ["AD_P1_D*", "AD_RX_FRAME", "AD_DATA_CLK"]
clock = "AD_DATA_CLK"          # a pair's clock is named by either leg
max_bus_skew = "30ps"          # spread of arrival across the data lines
clock_window = ["-50ps", "150ps"]   # data minus clock arrival, from the setup and hold budget

[[interfaces.measure]]         # read from a finished sim; missing or stale results are errors
sim = "sdr-usb"                # an FDTD run
pair = ["TX1_FX+", "TX1_FX-", "TX1_J+", "TX1_J-"]   # IN+, IN-, OUT+, OUT-; or through = [IN, OUT]
up_to = "5GHz"                 # Nyquist, the band the limits apply over
max_loss = 1.5                 # dB, worst Sdd21 (or S21) in the band
min_return_loss = 10.0         # dB, worst Sdd11
max_mode_conversion = -30.0    # dB, worst Scd21

[[interfaces.measure]]
sim = "sdr-usb-eye"            # a channel sim
min_eye_height = "70mV"
min_eye_width = "0.47UI"       # or ps

[[interfaces.measure]]
sim = "i2c-bus"                # a logic sim: no limits, it passes when the sim passes

Eine Messung an einer Logiksimulation schlägt fehl, solange die Simulation einen Fehler hat (eine Assertion, eine Kontention, eine Timingverletzung oder einen gestoppten Lauf), und benennt die Anzahl und den ersten; sie ist veraltet, wenn die Spezifikation oder das Schaltplan-Netlist der Simulation geändert wurde, wie die Simulation selbst meldet, nicht wenn sich das Kupfer geändert hat, da eine Logiksimulation das Layout nie sieht.

PresetImpedanzSkewViasStubsonstiges
usb3-gen1, usb3-gen290 Ohm +/-7% diff5 mil215 mil3500 / 3000 mil lang, GND-Rückkehr-Via innerhalb von 200 mil, 0,5 mm nicht referenziert
usb2-hs90 Ohm +/-10% diff50 mil412000 mil lang, 1 mm nicht referenziert
lvds100 Ohm +/-10% diff1 mm nicht referenziert
rf-5050 Ohm +/-10%00,5 mm nicht referenziert
cmos2 mm ohne Bezugsebene

Die USB-Werte stammen aus den High-Speed Interface Layout Guidelines von TI (SPRAAR7J, Anhang A), die Gen-2-Länge aus congatec AN37. Alles, was ein Preset setzt, kann die Schnittstelle überschreiben.

Verzögerungen sind die Leiterbahnverzögerung aus der effektiven Permittivität jeder Schicht plus der Via-Barrel, den das Signal durchquert. Eine Ebene zählt als Referenz, wenn das erste Kupfer, das man beim Weggehen von der Leiterbahn über Ausschnittschichten hinweg findet, eine Kupferfläche eines reference-Netzes ist, die die volle Breite der Leiterbahn abdeckt; der Antipad um die eigenen Vias des Netzes zählt nicht. Jedes Simulationsergebnis speichert einen Hash des Kupfers, das es gesehen hat (nur der region der Simulation, plus der Lagenaufbau); ein Ergebnis, dessen Kupfer sich seitdem geändert hat, ist veraltet, und eine Messung daran schlägt fehl.

agentee tune NAME (MCP tune) korrigiert diese: Für jedes Paar über seinem Skew-Limit und jedes Mitglied einer Match-Gruppe, das unter seinem Ziel liegt, meandert es die kurze Seite, auf ihren längsten geraden Segmenten, irgendwo entlang einer Serienkette, mit Buckeln, die den Abstand zu jedem anderen Netz und die Plattenkantenregel einhalten, und schreibt die neuen Punkte in die Leiterbahnen. --nets begrenzt es, --amplitude begrenzt die Buckelhöhe und --pitch fixiert den Buckelabstand (Standard drei Leiterbahnbreiten, enger, wenn das alles ist, was passt). Auf einem Bein eines Paares buckelt es zuerst die Strecken, wo die Beine bereits auseinanderlaufen (Breakouts und Biegungen, wo die Abweichung herkommt), und lässt das Bein nie neben seinem Partner außerhalb des Klassenabstands laufen; eine gekoppelte Strecke nimmt nur Buckel, die hoch genug sind, um das Paar zu überbrücken. Schnittstellen zählen auch, in Zeit und Länge: Ein Paar über seinem max_skew in ps wird auf der kurzen Seite um diese Verzögerung verlängert; für max_bus_skew und clock_window wird der Takt verlängert, bis die späteste Datenleitung in ihr Fenster fällt und jede Datenleitung, die unter der Busstreuung oder der frühen Kante des Fensters liegt, wird auf die späteste verlängert (innerhalb des Fensters), beide Beine eines Paares zusammen. Verzögerungen werden in Millimetern umgerechnet, mit den eigenen ps pro mm jedes Netzes. Wenn ein Bein eines Paares nicht alles aufnehmen kann, wird das andere Bein auf das begrenzt, was es bekommen hat. Ein Netz, das über seinem Gruppentarget liegt, wird gemeldet, nicht verkürzt. agentee calc serpentine --from x,y --to x,y --add 2.5mm (MCP serpentine) gibt die Punkte eines solchen Meanders auf einem Segment zurück, das du wählst. Netzlängen und -verzögerungen stehen in agentee show pcb:NAME.

Die Layout-Seite des Viewers hat einen 3d-Tab (agentee view --3d öffnet ihn): die Platine in ihrer Lagenaufbau-Dicke, mit Masken- und Bestückungsdruckfarben und Oberfläche, Kupfer unter der Maske, nackte Pads, verzinnte und nackte Bohrungsmauern und das 3D-Modell jedes Bauteils. Der parts-Umschalter blendet die Modelle aus. Ziehen zum Drehen, Shift-Ziehen zum Verschieben, Scrollen zum Zoomen, Doppelklicken zum Zurücksetzen. Der Viewer zeichnet mit OpenGL (three-d); agentee render pcb:NAME --show 3d (oder 3d-top, 3d-bottom) zeichnet die gleiche Szene in Software, --hide parts lässt die Modelle weg und --region richtet die Kamera auf diesen Bereich.

docs/format.md · Markdown für Agenten