agentee

Esquema e layout

Interfaces

O que uma ligação tem de cumprir, do USB 3 a uma linha RF de 50 ohms: impedância, skew, comprimento, vias, stubs, planos de referência e vias de retorno.

Uma interface define o que um link deve cumprir, e a verificação mede o cobre em relação a ela: impedância, skew, comprimento, vias, stubs de via, o plano de referência sob cada pista, as vias de retorno, o timing do barramento, e os parâmetros S e o olho das simulações que a modelam.

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

Uma medida numa simulação lógica falha enquanto a simulação tiver qualquer falha (uma asserção, uma contenção, uma violação de timing ou uma execução parada), indicando o número e a primeira; fica desatualizada quando a especificação da simulação ou a lista de redes do esquema mudaram, conforme a própria simulação reporta, e não quando o cobre mudou, uma vez que uma simulação lógica nunca vê o layout.

pré-definidoimpedânciaskewviasstuboutro
usb3-gen1, usb3-gen290 ohm +/-7% diff5 mil215 mil3500 / 3000 mil de comprimento, via de retorno GND dentro de 200 mil, 0,5 mm sem referência
usb2-hs90 ohm +/-10% diff50 mil412000 mil de comprimento, 1 mm sem referência
lvds100 ohm +/-10% diff1 mm sem referência
rf-5050 ohm +/-10%00,5 mm sem referência
cmos2 mm sem referência

Os valores USB são das Diretrizes de Layout de Interface de Alta Velocidade da TI (SPRAAR7J, Anexo A), e o comprimento Gen 2 é do congatec AN37. Tudo o que um predefinição define, a interface pode sobrepor.

Os atrasos são o atraso da pista a partir da permitividade efetiva de cada camada mais o barril da via que o sinal cruza. Um plano conta como referência quando o primeiro cobre encontrado ao afastar-se da pista, além das camadas recortadas, é uma área de uma rede reference que cobre a largura total da pista; o antipad em torno das próprias vias da rede não conta. Cada resultado de simulação regista um hash do cobre que viu (apenas a region da simulação, mais o stackup); um resultado cujo cobre mudou desde então fica desatualizado, e uma medida nele falha.

agentee tune NAME (MCP tune) corrige isto: para cada par que excede o seu limite de skew e cada membro de grupo de correspondência que está abaixo do seu alvo, faz meander no lado mais curto, nos seus segmentos retos mais longos, em qualquer ponto de uma cadeia em série, com saliências que mantêm a folga de todas as outras redes e a regra da borda da placa, e escreve os novos pontos nas pistas. --nets limita-o, --amplitude limita a altura da saliência e --pitch fixa o passo da saliência (predefinição três larguras de pista, mais apertado onde isso é tudo o que cabe). Num braço de um par, faz saliências nos trechos onde os braços já se separam primeiro (breakouts e curvas, onde a incompatibilidade vem) e nunca deixa o braço a correr ao lado do seu parceiro fora do intervalo da classe; um trecho acoplado só recebe saliências altas o suficiente para limpar o par. As interfaces contam também, em tempo e em comprimento: um par que excede o seu max_skew em ps tem o lado mais curto alongado por esse atraso; para max_bus_skew e clock_window, o relógio é alongado até a linha de dados mais tardia cair dentro da sua janela e cada linha de dados abaixo da dispersão do barramento ou da borda inicial da janela é alongada até à mais tardia (dentro da janela), ambos os braços de um par juntos. Os atrasos convertem-se em milímetros ao ps por mm próprio de cada rede. Quando um braço de um par não pode absorver tudo, o outro braço é mantido no que conseguiu. Uma rede que excede o alvo do seu grupo é reportada, não encurtada. agentee calc serpentine --from x,y --to x,y --add 2.5mm (MCP serpentine) devolve os pontos de um meander deste tipo num segmento que escolher. Os comprimentos e atrasos das redes estão em agentee show pcb:NAME.

A página de layout do visualizador tem uma separação 3d (agentee view --3d abre nela): a placa com a espessura do stackup, as cores da máscara e da serigrafia e o acabamento, o cobre sob a máscara, os pads nus, as paredes de furação com e sem banho, e o modelo 3D de cada componente. O alternador parts esconde os modelos. Arrastar para orbitar, shift-arrastar para deslocar, rolar para ampliar, duplo clique para repor. O visualizador desenha com OpenGL (three-d); agentee render pcb:NAME --show 3d (ou 3d-top, 3d-bottom) desenha a mesma cena por software, --hide parts deixa os modelos de fora e --region aponta a câmara para essa área.

docs/format.md · Markdown para agentes