agentee

Esquemático y layout

Interfaces

Lo que debe cumplir un enlace, desde USB 3 hasta una línea RF de 50 ohmios: impedancia, skew, longitud, vías, stubs, planos de referencia y vías de retorno.

Una interfaz dice lo que un enlace debe cumplir, y la verificación mide el cobre contra ella: impedancia, skew, longitud, vías, estribos de vía, el plano de referencia bajo cada pista, las vías de retorno, el temporizado del bus y los parámetros S y el ojo de las simulaciones que la modelan.

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

Una medida en una simulación lógica falla mientras la simulación tenga cualquier fallo (una aserción, una contención, una violación de temporizado o una ejecución detenida), indicando el recuento y el primero; está desactualizada cuando la especificación o la lista de redes del esquemático de la simulación cambió, como la propia simulación informa, no cuando el cobre cambió, ya que una simulación lógica nunca ve el diseño de PCB.

preajusteimpedanciaskewvíasestribootros
usb3-gen1, usb3-gen290 ohm +/-7% dif5 mil215 mil3500 / 3000 mil de largo, vía de retorno GND dentro de 200 mil, 0,5 mm sin referencia
usb2-hs90 ohm +/-10% dif50 mil412000 mil de largo, 1 mm sin referencia
lvds100 ohm +/-10% dif1 mm sin referencia
rf-5050 ohm +/-10%00,5 mm sin referencia
cmos2 mm sin referencia

Los valores de USB son las Directrices de Diseño de Interfaz de Alta Velocidad de TI (SPRAAR7J, Apéndice A), y la longitud de Gen 2 es congatec AN37. Lo que un preset establece, la interfaz puede anularlo.

Los retrasos son el retraso de la pista desde la permitividad efectiva de cada capa más el barril de la vía que la señal cruza. Un plano cuenta como referencia donde el primer cobre encontrado al alejarse de la pista, pasando por las capas recortadas, es una zona de una red reference que cubre todo el ancho de la pista; el antipad alrededor de las propias vías de la red no cuenta. Cada resultado de simulación registra un hash del cobre que vio (solo la region de la simulación, más el apilamiento); un resultado cuyo cobre ha cambiado desde entonces está desactualizado, y una medida sobre él falla.

agentee tune NAME (MCP tune) corrige esto: para cada par que supera su límite de skew y cada miembro de un grupo de coincidencia que está por debajo de su objetivo, serpentea el lado corto, en sus segmentos rectos más largos, en cualquier lugar a lo largo de una cadena en serie, con bultos que mantienen el despejo de todas las demás redes y la regla del borde de la placa, y escribe los nuevos puntos en las pistas. --nets lo limita, --amplitude limita la altura del bulto y --pitch fija el paso del bulto (predeterminado tres anchos de pista, más estrecho donde eso es todo lo que cabe). En una pierna de un par, bulta los tramos donde las piernas ya se separan primero (salidas y curvas, donde viene la discrepancia) y nunca deja que la pierna corra junto a su compañera fuera de la separación de la clase; un tramo acoplado solo toma bultos lo suficientemente altos para despejar el par. Las interfaces también cuentan, en tiempo así como en longitud: un par que supera su max_skew en ps se alarga el lado corto por ese retraso; para max_bus_skew y clock_window, el reloj se alarga hasta que la línea de datos más tardía cae dentro de su ventana y cada línea de datos por debajo de la dispersión del bus o del borde temprano de la ventana se alarga hasta la más tardía (dentro de la ventana), ambas piernas de un par juntas. Los retrasos se convierten en milímetros a los ps por mm propios de cada red. Cuando una pierna de un par no puede tomarlo todo, la otra se mantiene en lo que obtuvo. Una red que supera su objetivo de grupo se informa, no se acorta. agentee calc serpentine --from x,y --to x,y --add 2.5mm (MCP serpentine) devuelve los puntos de un serpenteo de este tipo en un segmento que eliges. Las longitudes y retrasos de las redes están en agentee show pcb:NAME.

La página de diseño del visor tiene una pestaña 3d (agentee view --3d se abre en ella): la placa con su espesor de apilamiento, colores de máscara y serigrafía y acabado, cobre bajo la máscara, pads desnudos, paredes de taladro bañadas y desnudas, y el modelo 3D de cada componente. El conmutador parts oculta los modelos. Arrastra para orbitar, shift-arrastre para desplazar, rueda para hacer zoom, doble clic para restablecer. El visor dibuja con OpenGL (three-d); agentee render pcb:NAME --show 3d (o 3d-top, 3d-bottom) dibuja la misma escena en software, --hide parts omite los modelos y --region apunta la cámara a esa área.

docs/format.md · Markdown para agentes