agentee

Схема и топология платы

Интерфейсы

Требования к линии связи, от USB 3 до линии 50 Ом: импеданс, рассогласование, длина, переходные отверстия, отводы, опорные плоскости и возвратные переходные отверстия.

Интерфейс описывает, что должно выполняться для связи, а проверка измеряет медь относительно этого: импеданс, рассогласование, длина, переходные отверстия, уступы переходных отверстий, опорная плоскость под каждым проводником, возвратные переходные отверстия, временные характеристики шины, а также S-параметры и глазок симуляций, которые его моделируют.

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

Измерение на логической симуляции не проходит, пока в симуляции есть любой сбой (утверждение, конфликт, нарушение временных характеристик или остановленный запуск), указывая количество и первый; оно устаревает, если спецификация симуляции или схема цепи изменились, как сообщает сама симуляция, а не если изменилась медь, поскольку логическая симуляция никогда не видит топологию.

пресетимпедансрассогласованиепереходные отверстияуступпрочее
usb3-gen1, usb3-gen290 Ом +/-7% дифф5 мил215 мил3500 / 3000 мил длиной, возвратное переходное отверстие GND в пределах 200 мил, 0,5 мм без опоры
usb2-hs90 Ом +/-10% дифф50 мил412000 мил длиной, 1 мм без опоры
lvds100 Ом +/-10% дифф1 мм без опоры
rf-5050 Ом +/-10%00,5 мм без опоры
cmos2 мм без опорной плоскости

Значения для USB взяты из Руководства TI по топологии высокоскоростных интерфейсов (SPRAAR7J, Приложение A), длина для Gen 2 из congatec AN37. Любое значение, заданное пресетом, можно переопределить в интерфейсе.

Задержки равны задержке проводника от эффективной диэлектрической проницаемости каждого слоя плюс стержень переходного отверстия, который пересекает сигнал. Плоскость считается опорной, если первый найденный медный слой при движении от проводника, пропуская вырезанные слои, является зоной цепи reference, покрывающей всю ширину проводника; антиплощадка вокруг собственных переходных отверстий цепи не учитывается. Каждый результат симуляции записывает хеш меди, которую он видел (только region симуляции, плюс стек слоёв); результат, у которого медь изменилась с тех пор, устаревает, и измерение на нем не проходит.

agentee tune NAME (MCP tune) исправляет это: для каждой пары, превышающей лимит рассогласования, и каждого члена группы согласования, не достигающего целевого значения, он изгибает короткую сторону, на ее самых длинных прямых сегментах, в любом месте вдоль цепочки последовательных элементов, с изгибами, которые сохраняют зазор для всех других цепей и правило края платы, и записывает новые точки в проводники. --nets ограничивает его, --amplitude ограничивает высоту изгиба, а --pitch задает шаг изгиба (по умолчанию три ширины проводника, плотнее, если это все, что помещается). На одной ноге пары он изгибает участки, где ноги уже расходятся, в первую очередь (выходы и изгибы, откуда возникает рассогласование), и никогда не оставляет ногу, идущую рядом с партнером, за пределами зазора класса; связанный участок получает изгибы только той высоты, которая достаточна для очистки пары. Интерфейсы тоже учитываются, во времени, а не только в длине: пара, превышающая max_skew в пс, получает удлинение короткой стороны на эту задержку; для max_bus_skew и clock_window часы удлиняются, пока самая поздняя линия данных не попадет в свое окно, и каждая линия данных, не достигающая разброса шины или раннего края окна, удлиняется до самой поздней (в пределах окна), обе ноги пары вместе. Задержки переводятся в миллиметры по пс на мм для каждой цепи. Если одна нога пары не может принять все, другая удерживается на том, что получила. Цепь, превышающая целевое значение группы, сообщается, но не укорачивается. agentee calc serpentine --from x,y --to x,y --add 2.5mm (MCP serpentine) возвращает точки одного такого изгиба на выбранном вами сегменте. Длины и задержки цепей находятся в agentee show pcb:NAME.

Страница топологии в просмотрщике имеет вкладку 3d (agentee view --3d открывается на ней): плата в толщину стека слоёв, с цветами маски и шелкографии и покрытием, медь под маской, открытые площадки, гальванические и негальванические стенки сверла, а также 3D-модель каждой детали. Переключатель parts скрывает модели. Перетаскивание для вращения, shift-перетаскивание для панорамирования, прокрутка для масштабирования, двойной щелчок для сброса. Просмотрщик рисует с помощью OpenGL (three-d); agentee render pcb:NAME --show 3d (или 3d-top, 3d-bottom) рисует ту же сцену программно, --hide parts исключает модели, а --region направляет камеру на эту область.

docs/format.md · Markdown для агентов