Schemat i projekt PCB
Interfejsy
Wymagania dla łącza, od USB 3 po linię RF 50 omów: impedancja, skew, długość, przelotki, stuby, płaszczyzny odniesienia i przelotki powrotne.
Interfejs określa, czego wymaga połączenie, a sprawdzenie mierzy miedź względem niego: impedancję, skew, długość, przelotki, stuby przelotek, płaszczyznę odniesienia pod każdą ścieżką, przelotki zwrotne, czasowanie magistrali oraz parametry S i oko symulacji, które go modelują.
[[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 passesPomiar w symulacji logicznej nie przechodzi, gdy symulacja ma jakikolwiek błąd (asercja, konflikt, naruszenie czasowania lub zatrzymany przebieg), podając liczbę i pierwszy; jest nieaktualny, gdy specyfikacja symulacji lub schemat netlistu się zmieniły, jak sama symulacja raportuje, a nie gdy zmieniła się miedź, ponieważ symulacja logiczna nigdy nie widzi projektu PCB.
| preset | impedancja | skew | przelotki | stub | inne |
|---|---|---|---|---|---|
usb3-gen1, usb3-gen2 | 90 ohm +/-7% diff | 5 mil | 2 | 15 mil | 3500 / 3000 mil długości, przelotka zwrotna GND w promieniu 200 mil, 0,5 mm bez referencji |
usb2-hs | 90 ohm +/-10% diff | 50 mil | 4 | 12000 mil długości, 1 mm bez referencji | |
lvds | 100 ohm +/-10% diff | 1 mm bez referencji | |||
rf-50 | 50 ohm +/-10% | 0 | 0,5 mm bez referencji | ||
cmos | 2 mm bez płaszczyzny odniesienia |
Wartości USB pochodzą z wytycznych TI High-Speed Interface Layout Guidelines (SPRAAR7J, Załącznik A), długość Gen 2 z congatec AN37. Wszystko, co ustawia preset, interfejs może nadpisać.
Opóźnienia to opóźnienie ścieżki z efektywnej przenikalności dielektrycznej każdej warstwy plus beczka przelotki, którą sygnał przechodzi. Płaszczyzna liczy się jako referencja, gdy pierwsza miedź znaleziona, idąc od ścieżki, za warstwami wyciętymi, jest strefą sieci reference, która pokrywa pełną szerokość ścieżki; antypad wokół własnych przelotek sieci nie liczy się. Każdy wynik symulacji zapisuje hash miedzi, którą zobaczył (tylko region symulacji, plus stackup); wynik, którego miedź się zmieniła, jest nieaktualny, a pomiar na nim nie przechodzi.
agentee tune NAME (MCP tune) naprawia to: dla każdej pary przekraczającej limit przesunięcia fazowego i każdego członka grupy dopasowania krótszego niż docelowy, meandruje krótszą stronę, na jej najdłuższych odcinkach prostych, w dowolnym miejscu w łańcuchu szeregowym, z wypustkami zachowującymi odstępy wszystkich innych sieci i zasadę krawędzi płytki, i zapisuje nowe punkty do ścieżek. --nets ogranicza zakres, --amplitude ustawia maksymalną wysokość wypustki, a --pitch ustala skok wypustki (domyślnie trzy szerokości ścieżki, ciaśniej, jeśli to wszystko, co się mieści). Na jednej nodze pary wypustki stawia się najpierw na odcinkach, gdzie nogi już się rozchodzą (wyjścia i zakręty, skąd bierze się niezgodność) i nigdy nie zostawia nogi biegnącej obok partnera z odstępem innym niż klasa; odcinek sprzężony przyjmuje tylko wypustki wystarczająco wysokie, by zachować odstęp pary. Interfejsy też się liczą, w czasie i długości: para przekraczająca max_skew w ps ma krótszą stronę wydłużoną o ten opóźnienie; dla max_bus_skew i clock_window zegar jest wydłużany, aż najpóźniejsza linia danych wpadnie w jego okno, a każda linia danych krótsza niż rozrzut magistrali lub wczesna krawędź okna jest wydłużana do najpóźniejszej (wewnątrz okna), obie nogi pary razem. Opóźnienia zamieniają się na milimetry według własnego ps/mm danej sieci. Gdy jedna noga pary nie może przyjąć całości, druga jest trzymna do tego, co otrzymała. Sieć przekraczająca docelowy cel grupy jest raportowana, nie skracana. agentee calc serpentine --from x,y --to x,y --add 2.5mm (MCP serpentine) zwraca punkty jednego takiego meandra na wybranym odcinku. Długości i opóźnienia sieci są w agentee show pcb:NAME.
Strona projektu PCB w podglądzie ma zakładkę 3d (agentee view --3d otwiera ją): płytka w grubości stackup, kolorach maski i opisów oraz wykończeniu, miedź pod maską, gołe pady, powlekane i gołe ścianki otworów oraz model 3D każdego elementu. Przełącznik parts ukrywa modele. Przeciągnij, aby obracać, shift-przeciągnij, aby przesuwać, przewiń, aby skalować, dwuklik, aby zresetować. Podgląd rysuje przez OpenGL (three-d); agentee render pcb:NAME --show 3d (lub 3d-top, 3d-bottom) rysuje tę samą scenę w oprogramowaniu, --hide parts pomija modele, a --region celuje kamerę w ten obszar.