Hvordan undgår man jitterbug?

tirs apr 01, 2014 (Anders Enggaard)

Når man skal sample noget, hvad enten det er et digitalt eller analogt signal, har man brug for en stabil clock. Da mange systemer reagerer på flanken og stige/falde tider typisk er nogenlunde konstante, fokuserer man især på ”vandret støj”, dvs. i tidsaksen. Der er mange definitioner og målemetoder, og der er, specielt i telecom verdenen, en masse metoder for at håndtere dette. Disse kan være nok så indviklede; men i det mindste er de relevante data og metoder ofte tilgængelige. Denne artikel skal derfor mere handle om, hvad man gør, når man bliver mødt med et, ofte meget upræcist, krav til sin clock.
Der er mange begreber knyttet til denne form for støj. De tre mest almindelige er:

  • Jitter: Da mange systemer er bygget til at følge langsom drift, er det primært de hurtige variationer, som er problematiske, og det er dette jitter dækker. Desværre findes der mange underbegreber (tilfældig, deterministisk) og mål (peak-peak, RMS). For et konsistent mål bør man begrænse båndbredden og angive denne; men dette gøres langt fra altid.
  • Wander: Dette begreb dækker over de langsommere variationer. Disse kan have betydning for dimension af buffere og lignende, men er typisk uinteressant for mange konstruktioner, og man støder da også primært på det i telecom verdenen.
  • Fase støj: Da frekvensindholdet i støjen ofte kan have indflydelse på, hvor skadelig den er, og hvordan den bliver dæmpet/forstærket, bruger man dette mål, der angiver effekt indholdet som funktion af frekvens (typisk ved nogle udvalgte frekvenser).

Uden at komme nærmere ind på alle detaljerne er det værd at notere sig, at man, hvis man har et mål for fasestøj, vil man typisk kunne approximere et mål for jitter. I nogle situationer er man så heldig, at man både har et krav til jitter og data for sin clock. Man skal være opmærksom på, om de er målt på samme måde, men ellers er det relativt simpelt at konstatere, om man møder kravet. Værre er det, når man bliver mødt med et krav som: ”Komponenten er følsom for jitter og bør ikke drives fra en PLL eller en distribueret clock, men forsynes fra et lokalt krystal”. Sådanne krav forekommer oftest for komponenter, der selv har clock PLL’er, især ADC’er og kommunikations clock til FPGA’er men undertiden også for processorer og andet. Dette er problematisk af flere årsager:

  • Et krystal giver ikke nødvendigvis et perfekt signal: De høje impedanser kan, alt afhængig af driver, lay-out m.m. gøre, at støj fra omgivelserne giver anledning til jitter. Er designet ikke meget prisfølsomt, er det ofte sikrere at placere en integreret oscillator.
  • Har man mange sådanne krav (nogle FPGA’er kræver f.eks. separate reference clocks til grupper af kommunikations kanaler) stiger kompleksiteten og dermed pris/størrelse og kan give anledning til en masse usynkrone overgange, som skal håndteres. De mange uafhængige frekvenser kan også give anledning til en masse varierende differensfrekvenser, som kan være gift for et følsomt analogt system. Her vil en distribueret løsning være langt at foretrække.
  • Selv om mange PLL’er kan generere/forstærke jitter, gælder det ikke for alle. Der findes faktisk løsninger, hvor man dæmper jitter med en PLL og et sådant krav bør naturligvis angives med et rigtigt mål i stedet for krav til en tvivlsom løsning.

Hvad gør man så, hvis man gerne vil generere og distribuere en clock?:

  • Start om muligt med et godt udgangspunkt, f.eks. en integreret krystal oscillator, evt. temperatur kompenseret/reguleret.
  • Mange tror, at buffere ikke kan generere jitter, men man ”sampler” jo også støj, som er på signalet, hver gang det går igennem en buffer. Bidraget er ikke kæmpe stort, specielt hvis man har styr på sin signalintegritet, men specielt i store systemer kan der opstå problemer. Det kan være en fordel at anvende differentielle signaler p.g.a. common mode undertrykkelse og mere symmetriske flanker. Har man brug for meget lav jitter, og vil man vide, hvor man står, er det typisk kun dedikerede clock buffere, hvor man kan finde data. Disse er typisk differentielle (CML, PECL, LVDS) og har høj båndbredde (Micrel, IDT, Cypress og Maxim er gode bud). De har typisk også lavt skew, hvis man har brug for det.
  • Hvis man bruger en stabil reference clock til at føde en PLL og en anden clock til at styre frekvensen, kan man få en renere version af den sidste. Afhængig af PLL kan der oven i købet være tale om forskellige frekvenser. Den slags kredse bliver ofte solgt som jitter cleaners, og nogle er meget effektive. Det kan være lidt svært at finde den rigtige type, da de ofte er dedikerede til specielle applikationer eller kræver megen opsætning. Men Silicon Labs laver f.eks. nogle rimelig generelle typer, hvoraf nogle også er one-time-programmable.

Her er et par cases:

  • Til et videnskabeligt måleinstrument, hvor der stilles meget høje krav til frekvensnøjagtighed og derfor ikke ønskes ”fremmede” frekvenser, neddeles en 2.4 GHz bærebølge via tællere til en pilot tone og en system clock. Førstnævnte distribueres analogt via power-splitters på sit eget print, sidstnævnte via differentielle buffere på motherboard til de forskellige daughterboards. FPGA’er genererer internt de nødvendige clocks som hele multipla af system clock. Til kommunikation er der brug for en til to reference clocks per FPGA med meget skrappe krav til jitter og en frekvens, som ikke helt kan være system clock’en. Der anvendes en frekvens som er 3/2 gange større end system clock’en v.h.a. en PLL lokalt. FPGA producenten har ingen præcise krav til jitter i datablad, men på en blog har de opgivet detaljerede krav til fasestøj og en PLL, der opfylder disse bliver brugt.
  • Til et eksperimentielt interplanetarisk kommunikationsystem er brug for en meget stabil og tidstro clock, både til at sende og sample det modtagne signal. En GPS styret master clock med en USO option, der garanterer en 10 MHz clock med meget god korttidsstabilitet, bruges som udgangspunkt. En speciel PLL, der tillader multiple syntetiserede clocks, bruges til at lave to clocks: Den ene bruges til en hurtig ADC (ca. 2.5 G/s sample rate), den anden til en FPGA der bl.a. bruger denne clock til at sende med.
  • En kunde til et geologisk instrument har kæmpet med at finde præcise og hurtige ADC’er og er opmærksom på, at de ikke bare kan bruge FPGA’en til at generere en clock. De har fundet et FPGA kort, som også har en ekstern jitter cleaner PLL og vil høre, om den kan hookes op til den nyligt valgte ADC. Det viser sig, at den valgte ADC i modsætning til tidligere ikke er af sigma-delta typen (som pga. PLL til oversampling m.m. altid er følsomme), men er af SAR typen. Disse bruger ikke direkte timing af clock til sampling, clock skal bare være langsom nok til at comparatoren falder til ro. I det konkrete tilfælde er system clock’en intern og kan slet ikke påvirkes – den clock, som man kan forbinde, er alene til kommunikation. Der er stadig et konverteringsben, som i et vist omfang styrer samplehastigheden, men da jitter formentlig er mange størrelsesordener mindre end sampleperioden, er det formentlig ikke nødvendigt at rense clock’en fra FPGA’en yderligere.

Som afsluttende bemærkning bør nævnes, at de komponenter, som har den slags vage men strikse krav til clock, som oftest også kræver, at forsyninger laves med lineære regulatorer, eller at der indsættes spoler i forsyningsvejen. Disse krav er lige så meningsløse; men det er en anden historie…

Hvad mener du?