Your cart is currently empty!
Timing op FPGA’s – een verhaal in de marge
In het verleden was het voor de timing van een FPGA-ontwerp voldoende om de set-up– en hold-tijden op te geven, de tijden dat data aanwezig moet zijn voor en na een kloktik. Secundaire invloeden zoals skew, jitter en slew rate waren te verwaarlozen. De snelheden van externe interfaces op een FPGA worden echter steeds hoger, waardoor er een steeds kleinere marge overblijft voor de timing. Het correct specificeren van de interfacetiming wordt daarmee van kritiek belang.
Naast het aantal logische elementen maakt ook de I/O-capaciteit van FPGA‘s een flinke groeispurt door. Aan de ene kant komt dat doordat applicaties direct om snelle communicatie vragen – denk maar aan 40 Gigabit en 100 Gigabit Ethernet, de nieuwe mobiele telefoonstandaard LTE en HD- en 3D-televisie. Aan de andere kant groeien de geheugenvereisten fors met zowel vraag als aanbod. Bovenstaande toepassingen vragen bijvoorbeeld continu nieuwe data en moeten ook vaak grote hoeveelheden gegevens in het geheugen opslaan. Een H.264-video-encoder (ook wel AVC of MPeg-4 part 10) moet bijvoorbeeld meerdere videobeelden opslaan om daarin naar beweging van delen van het beeld te zoeken. Bovendien worden er vaak meerdere bewerkingen ondergebracht in een enkele FPGA, die elk onafhankelijk van elkaar hetzelfde externe geheugen gebruiken.
Regelmatig worden specifieke I/O-functies al in de hardware van de FPGA meegebakken, zoals een Gigabit Ethernet-Mac, een PCI Express-eindpunt of een externe geheugencontroller. De gebruikte interfaces zijn ruwweg te verdelen in twee groepen. De eerste gebruikt seriële verbindingen waarbij de klokinformatie in de data wordt gecodeerd. Voorbeelden hiervan zijn PCI express (pc-insteekkaarten), Ethernet (internet), Sata (harddisks), SDI en Asi (beide digitale video). Deze protocollen vereisen over het algemeen het gebruik van een serieel-naar-parallel-omzetter in de FPGA en een manier om verschillende datakanalen met elkaar te synchroniseren. De timing is hier altijd impliciet correct. Bij de protocollen uit de andere groep is dat niet het geval. Die gebruiken een apart kloksignaal naast de datasignalen. Voorbeelden zijn DDR-, DDR2- en DDR3-SDRam (dynamisch computergeheugen), QDR-SRam, Hypertransport (onder meer AMD-processoren) en Quickpath (de nieuwe Intel-processoren).