Schema en layout
Interfaces
Wat een link moet voldoen, van USB 3 tot een 50 ohm RF lijn: impedantie, skew, lengte, vias, stubs, referentievlakken en return vias.
Een interface geeft aan wat een link moet voldoen, en de controle meet het koper daartegen: impedantie, skew, lengte, vias, viastubs, het referentievlak onder elk spoor, de return vias, de bustiming, en de S-parameters en het oog van de simulaties die het modelleren.
[[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 passesEen maat op een logic sim faalt zolang de sim een failure heeft (een assertion, contention, een timing overtreding of een gestopte run), met de telling en de eerste; het is verouderd als de spec of het schema netlist van de sim veranderd is, zoals de sim zelf rapporteert, niet als het koper veranderd is, omdat een logic sim het layout nooit ziet.
| preset | impedantie | skew | vias | stub | overig |
|---|---|---|---|---|---|
usb3-gen1, usb3-gen2 | 90 ohm +/-7% diff | 5 mil | 2 | 15 mil | 3500 / 3000 mil lang, GND return via binnen 200 mil, 0,5 mm onreferenced |
usb2-hs | 90 ohm +/-10% diff | 50 mil | 4 | 12000 mil lang, 1 mm onreferenced | |
lvds | 100 ohm +/-10% diff | 1 mm onreferenced | |||
rf-50 | 50 ohm +/-10% | 0 | 0,5 mm onreferenced | ||
cmos | 2 mm ongereserveerd |
De USB getallen zijn de High-Speed Interface Layout Guidelines van TI (SPRAAR7J, Appendix A), de Gen 2 lengte is congatec AN37. Wat een preset instelt, kan de interface overschrijven.
Vertragingen zijn de spoorvertraging van de effectieve permittiviteit van elke laag plus de via barrel die het signaal kruist. Een vlak telt als referentie waar het eerste koper dat je tegenkomt bij het lopen weg van het spoor, na cut-out lagen, een zone is van een reference net dat de volledige breedte van het spoor bedekt; de antipad rond de eigen vias van het net telt niet. Elk sim resultaat registreert een hash van het koper dat het zag (alleen de region van de sim, plus de stackup); een resultaat waarvan het koper sindsdien veranderd is, is verouderd, en een maat daarop faalt.
agentee tune NAME (MCP tune) lost dit op: voor elk paar boven zijn skew limiet en elk match group lid onder zijn doel meandert het de korte kant, op de langste rechte segmenten, ergens langs een series keten, met bumps die de clearance van elk ander net en de board edge regel behouden, en schrijft de nieuwe punten in de sporen. --nets beperkt het, --amplitude begrenst de bump hoogte en --pitch fixeert de bump pitch (standaard drie spoorbreedtes, strakker waar dat alles is wat past). Op één been van een paar bump het de strekken waar de benen al uit elkaar lopen (breakouts en bochten, waar de mismatch vandaan komt) en laat het het been nooit naast zijn partner lopen buiten de class gap; een gekoppelde strek krijgt alleen bumps hoog genoeg om het paar te passeren. Interfaces tellen ook, in tijd als in lengte: een paar boven zijn max_skew in ps krijgt de korte kant verlengd met die vertraging; voor max_bus_skew en clock_window wordt de klok verlengd totdat de laatste data lijn binnen zijn venster valt en elke data lijn onder de bus spreiding of de vroege rand van het venster wordt verlengd naar de laatste (binnen het venster), beide benen van een paar samen. Vertragingen worden omgerekend naar millimeters op de eigen ps per mm van elk net. Als één been van een paar het niet allemaal kan opnemen, wordt het andere been gehouden op wat het kreeg. Een net boven zijn group doel wordt gerapporteerd, niet verkort. agentee calc serpentine --from x,y --to x,y --add 2.5mm (MCP serpentine) geeft de punten van zo'n meander op een segment dat je kiest. Net lengtes en vertragingen staan in agentee show pcb:NAME.
De layout pagina van de viewer heeft een 3d tab (agentee view --3d opent daarop): de printplaat in zijn stackup dikte, mask en zeefdruk kleuren en finish, koper onder het mask, kale pads, geplateerde en kale boorwanden, en het 3D model van elk onderdeel. De parts toggle verbergt de modellen. Sleep om te draaien, shift-sleep om te pannen, scroll om te zoomen, dubbelklik om te resetten. De viewer tekent met OpenGL (three-d); agentee render pcb:NAME --show 3d (of 3d-top, 3d-bottom) tekent dezelfde scène in software, --hide parts laat de modellen weg en --region richt de camera op dat gebied.