agentee

Schéma et routage

Interfaces

Ce qu'un lien doit respecter, de USB 3 à une ligne RF de 50 ohms : impédance, déséquilibre, longueur, vias, stubs, plans de référence et vias de retour.

Une interface définit ce qu'une liaison doit respecter, et la vérification mesure le cuivre par rapport à cela : impédance, déséquilibre, longueur, vias, stubs de via, le plan de référence sous chaque piste, les vias de retour, le minutage du bus, et les paramètres S et l'œil des simulations qui la modélisent.

[[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

Une mesure sur une simulation logique échoue tant que la simulation a une défaillance (une assertion, une contention, une violation de minutage ou une exécution arrêtée), en indiquant le nombre et la première ; elle est obsolète si la spécification de la simulation ou la liste de nets du schéma a changé, comme la simulation elle-même le signale, et non si le cuivre a changé, car une simulation logique ne voit jamais le routage.

préréglageimpédancedéséquilibreviasstubautre
usb3-gen1, usb3-gen290 ohm +/-7% diff5 mil215 mil3500 / 3000 mil de long, via de retour GND dans les 200 mil, 0,5 mm non référencé
usb2-hs90 ohm +/-10% diff50 mil412000 mil de long, 1 mm non référencé
lvds100 ohm +/-10% diff1 mm non référencé
rf-5050 ohm +/-10%00,5 mm non référencé
cmos2 mm sans référence

Les valeurs USB proviennent des High-Speed Interface Layout Guidelines de TI (SPRAAR7J, Annexe A), la longueur Gen 2 de congatec AN37. Tout ce qu'un préréglage définit, l'interface peut l'écraser.

Les délais sont le retard de piste issu de la permittivité effective de chaque couche plus le barillet de via que le signal traverse. Un plan compte comme référence là où le premier cuivre trouvé en s'éloignant de la piste, au-delà des couches découpées, est une zone d'un net reference qui couvre toute la largeur de la piste ; l'antipad autour des vias du net lui-même ne compte pas. Chaque résultat de simulation enregistre un hachage du cuivre qu'il a vu (uniquement la region de la simulation, plus l'empilement) ; un résultat dont le cuivre a changé depuis est obsolète, et une mesure dessus échoue.

agentee tune NAME (MCP tune) corrige cela : pour chaque paire au-dessus de sa limite de déséquilibre et chaque membre de groupe de correspondance en deçà de sa cible, il serpente le côté court, sur ses segments droits les plus longs, n'importe où le long d'une chaîne en série, avec des bosses qui préservent l'écart de tout autre net et la règle du bord de carte, et écrit les nouveaux points dans les pistes. --nets le limite, --amplitude plafonne la hauteur des bosses et --pitch fixe le pas des bosses (par défaut trois largeurs de piste, plus serré là où c'est tout ce qui rentre). Sur une jambe d'une paire, il bossse d'abord les étendues où les jambes s'écartent déjà (sorties et coudes, là où le désaccord vient) et ne laisse jamais la jambe courir à côté de sa partenaire hors de l'écart de classe ; une étendue couplée ne prend que des bosses assez hautes pour dégager la paire. Les interfaces comptent aussi, en temps comme en longueur : une paire au-dessus de son max_skew en ps voit son côté court allongé de ce délai ; pour max_bus_skew et clock_window, l'horloge est allongée jusqu'à ce que la ligne de données la plus tardive tombe dans sa fenêtre et chaque ligne de données en deçà de l'étalement du bus ou du bord précoce de la fenêtre est allongée jusqu'à la plus tardive (dans la fenêtre), les deux jambes d'une paire ensemble. Les délais se convertissent en millimètres au ps par mm propre à chaque net. Quand une jambe d'une paire ne peut pas absorber tout, l'autre jambe est maintenue à ce qu'elle a reçu. Un net au-dessus de sa cible de groupe est signalé, pas raccourci. agentee calc serpentine --from x,y --to x,y --add 2.5mm (MCP serpentine) renvoie les points d'un tel serpentin sur un segment que vous choisissez. Les longueurs et délais de nets sont dans agentee show pcb:NAME.

La page de routage du visualiseur a un onglet 3d (agentee view --3d s'y ouvre) : la carte à son épaisseur d'empilement, couleurs du vernis et de la sérigraphie et finition, cuivre sous le vernis, pastilles nues, parois de perçage étamées et nues, et le modèle 3D de chaque composant. Le basculement parts masque les modèles. Glissez pour orbiter, glissez avec Maj pour déplacer, faites défiler pour zoomer, double-cliquez pour réinitialiser. Le visualiseur dessine avec OpenGL (three-d) ; agentee render pcb:NAME --show 3d (ou 3d-top, 3d-bottom) dessine la même scène en logiciel, --hide parts omet les modèles et --region vise la caméra sur cette zone.

docs/format.md · Markdown pour agents