Hur fixar man klockkretsar upp till 160MHz?

Övriga diskussioner relaterade till komponenter. Exempelvis radiorör, A/D, kontaktdon eller sensorer.
Användarvisningsbild
zwitter
Inlägg: 111
Blev medlem: 25 november 2004, 18:03:34
Ort: Göteborg
Kontakt:

Hur fixar man klockkretsar upp till 160MHz?

Inlägg av zwitter »

Jag har en FPGA som jag vill driva i 160MHz, men var får man tag på en klockkrets för så höga klockfrekvenser?
Användarvisningsbild
Icecap
Inlägg: 26630
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Mig veteligen finns det inte kristaller upp i de frekvenser och då får man ta till lite trix: frekvensmultiplikation.

Om man t.ex. har en 20MHz frekvens kan man multiplicera med 8 och får då 160MHz. Det finns många sätt men rent omedelbart vill jag rekommendera dig att kolla PLL (Phase Lock Loop) som i grova drag är en oscillator som har justerbar frekvens. Man delar då ner utgångsfrekvensen med ett vald värde (i detta fall 8) och jämnför med referens-frekvensen (20MHz) och trimmar frekvensen löpande.

Man kan också göra på riktig radioamatör sättet och göra en frekvensdubbling i 3 steg (= 8x totalt), det kräver lite avstämda kretsar osv men fungerar minst lika bra.
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Säker på att din FPGA, om den är så snabb, inte har en inbyggd PLL/DLL? Har den det så kan du mata med t.ex. 40MHz och multiplicera 4x internt...
Användarvisningsbild
Icecap
Inlägg: 26630
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Field Programmable Gate Array = FPGA.

Grovt kan man säga att det är en sjujälka massa gates som man kan koppla ihop via programmering och utföra funktioner. Det finns processorkärnor, minnen osv som man kan "simulera" med den rätta programmering.
Användarvisningsbild
axelsonic
EF Sponsor
Inlägg: 709
Blev medlem: 8 juni 2003, 20:56:03
Ort: Stockholm

Inlägg av axelsonic »

Icecap: spanx. Jag googlade lite undertiden du skrev, insåg mitt misstag och tog bort inlägget, ungefär samtidigt som du tryckte på "skicka"-knappen

Det hela låter intressant, vet du om det finns någon smidig "FPGA 4 dummies"-sida ?
Användarvisningsbild
zwitter
Inlägg: 111
Blev medlem: 25 november 2004, 18:03:34
Ort: Göteborg
Kontakt:

Inlägg av zwitter »

Det hela gäller en CPLD (XC9536XL). I databladet står det "System frequency up to 178 MHz". Antar att det betyder att den kan klockas upp till 178MHz. Jag sökte på Google på "crystal oscillator 160 MHz". Det verkade finnas ganska många som gjorde sånna och om de kanske såldes i Sverige. Men jag ska kolla på PLL oxå. Något bra tips på PLL krets?

XC9536XL: http://www.farnell.com/datasheets/28287.pdf
Användarvisningsbild
babbage
Inlägg: 655
Blev medlem: 10 november 2004, 11:33:17
Ort: N-tälje

Inlägg av babbage »

Det finns en viktig sak att tänka på för CPLD/FPGA:er. "System frequency up to 178 MHz" är en marknadsföringssiffra. Det går att uppnå för vissa funktioner men det är kört om du vill utnyttja kretsens funktionalitet till 100%. En processor som är specad att klara t.ex. 20 eller 166 MHz kan du alltid klocka så fort (även om inte allt inuti processorn klockas med den hastigheten behöver du inte bry dig om det). För en CPLD/FPGA så "konfigurerar" man tillgängliga resurser i kretsen och beroende på det får man olika fördröjningar för de elektriska signalerna. Långa fördröjningar betyder lägre klockfrekvens. Hur fort man kan klocka den vet man oftast inte förrän man har designat klart. Om vill bygga system av flera kretsar och behöver bstämma klockfrekvens i förväg är det vanligt att man av erfarenhet vet ungefär hur snabbt viss funktionalitet kan klockas och så gör man en liten konservativ bedömning av klockfrekvensen.
Användarvisningsbild
zwitter
Inlägg: 111
Blev medlem: 25 november 2004, 18:03:34
Ort: Göteborg
Kontakt:

Inlägg av zwitter »

Det är då aldrig lätt att göra något elektroniskt :)

Men det jag i huvuddrag vill göra är att använda en A/D-omvandlare som klarar 80MSPS och föra över det till ett SRAM minne. Tänkte att FPGA/CPLD:n skulle vara spindeln i det nät för att föra över A/D-omvandlarens värde till rätt adress på SRAM:et. Hade oxå funderingar på att ersätta FPGA:n med räknare som skulle föra över värdet till rätt plats i minnet men det kändes svårare att synca. Såg att andra hade löst det med FPGA/CLPD fast för lägre hastigheter. Men jag kände att 80MSPS vorde en trevlig utmaning.

Någon som har något förslag på lösning?
Användarvisningsbild
babbage
Inlägg: 655
Blev medlem: 10 november 2004, 11:33:17
Ort: N-tälje

Inlägg av babbage »

Det du vill göra kan nog gå, behöver du köra på 160MHz eller kan det räcka med 80MHz?. Jag har inte läst det fullständiga databladet men magkänslan är att det kan bli besvärligt med 160MHz, men låt mig inte avskräcka dig att testa det kan nog gå. Om du bara fixar interfacet till AD-omvandlaren kan man ju sedan sänka datatakten genom ha en bredare internbuss. T.ex. om AD-omvandlaren är 8-bitar så kan du sedan lägga data parallellt i en 16-bitars buss.
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Kör på med en CPLD, fast lite större än '36 kanske du behöver. 80MHz räcker väl för 80MS/s, varför 160?

Jag har gjort nästan exakt samma sak, fast i 40MHz och med en gammal 5V 9572:a och asynkront SRAM från ett gammalt moderkort. Det fanns även en (väldigt) enkel trig-funktion och utläsning (via parallell-port).

Med en snabb speed grade av XC95**XL så borde väl 80MHz inte vara något problem, svårare att hitta lämpligt RAM kanske.

Annars finns det "färdiga" FIFO-minnen du kan använda, inga räknare behövs.

edit: en anledning att köra med högre klockfrekvens kan kanske vara att skapa korrekta skrivpulser till ett asynkront SRAM, jag fuskade och använde grindad klocka.

För högre hastigheter är det nog bättre med synkrona SRAM.
Användarvisningsbild
zwitter
Inlägg: 111
Blev medlem: 25 november 2004, 18:03:34
Ort: Göteborg
Kontakt:

Inlägg av zwitter »

Jo jag vill väl köra med en CPLD för att det verkar bra. Kände väl att om den kör på 80MHz så hinner den kanske inte ta emot parallellt från A/D:n och lägga ut till minne under 1/80M s.

FIFO är klart bra men jävligt dyrt om jag vill ha lite storlek på minnet. Då är det kanske enklare att lagra datan i CPLD:n istället. Sitter och planerar för ett 1Mb SRAM asynkront men bör kanske kolla på synkrona istället. Jag vill nämligen kunna använda detta till att sampla under mååånga klockpulser för att undersöka tex seriella överföringar i snabba hastigheter. 1Mb minne och 8-bit A/D ger ju då ~128000 mätvärden.

Anledningen till att köra en FPGA/CPLD en bit snabbare än A/D:n är ju att jag inte vill ligga på gränsen med den komponenten.

Fler tips uppskattas...
Användarvisningsbild
babbage
Inlägg: 655
Blev medlem: 10 november 2004, 11:33:17
Ort: N-tälje

Inlägg av babbage »

Den ska ju inte ta emot data och lägga ut det till minnet under 1/80 us. Det viktiga är ju att den kan hålla datatakten dvs ta emot 80Mbyte data per sekund och sedan skriva 80 Mbyte/s (eller 40Mword/s (om word = 16 bitar), eller 20M*32bitar/s osv).

Mellan att en unik byte läses från AD-omvandlaren till att den skrivs till minnet kan man ha en fördröjning internt i CPLD:n som beror på vad man gör med datat.
Användarvisningsbild
zwitter
Inlägg: 111
Blev medlem: 25 november 2004, 18:03:34
Ort: Göteborg
Kontakt:

Inlägg av zwitter »

Hm jo det är ju sant...
Användarvisningsbild
zwitter
Inlägg: 111
Blev medlem: 25 november 2004, 18:03:34
Ort: Göteborg
Kontakt:

Inlägg av zwitter »

Nu ska vi se om jag har fattat saker rätt.

För att klara A/D 80MSPS så behöver jag en FPGA/CPLD som klara minst 80MHz (såklart). Om jag sen använder ett synkront burst SRAM tex 32kx32 så behöver inte minnet vara jättesnabbt, minst 20MHz. Jag plockar in 4st 8-bitars värden från A/D och sen "klockar" jag ut dom till minnet. Rätt? Det verkade nämligen enklare att få tag på synkrona minnen med mer än 8 dataportar.
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Det blir en stor ganska CPLD om du ska lägga upp 32 bitar (32 vippor) och sen adressräknare osv.

Men det brukar vara byte enables på de SRAMen, så du kan skriva in en byte åt gången, och jag *tror* (men kolla upp det) att byte enable även styr när man läser ut, så du kan helt enkelt koppla ihop dessa 4*8bit (eller 2*8bit) dataledningar till en gemensam 8bitars buss.

Minnet, ADC och CPLD klockas alla med samma 80MHz klocka, och CPLDn styr adressen samt styrsignalerna till minnet (och eventuellt även buffrar/mellanlagrar datan från ADC, men det är inte nödvändigt).
Skriv svar