Molto tempo fa, come esperimento mentale, ho "progettato" un FPGA per la cattura del tempo.
Aveva un oscillatore ad anello, convenzionale a parte il fatto che aveva 41 inverter. Il periodo era quindi molto molto inferiore al ritardo di qualsiasi gate. Il processo FPGA presentava ritardi di gate individuali inferiori a 10 secondi di pS in cui l'instradamento era locale e il fan-out basso, ma poteva gestire solo clock di sistema nell'ordine di 100 MHz, a causa di ritardi di multiplexing, routing e caricamento tra i blocchi.
Il processo di acquisizione del tempo utilizzava quindi 41 D-latch, ciascuno dei quali catturava la transizione di ingresso, ma ovviamente sincronizzato in diverse fasi del ciclo del contatore ad anello. Le uscite dei D-latch possono essere interpretate come un "codice termometro", interpolando la transizione di ingresso alla precisione del sottociclo, con una risoluzione nei 10s di pS. Altri 41 D-latch hanno catturato un orologio di riferimento.
Ci sono due difficoltà principali con una struttura del genere. Il primo è ottenere gli strumenti di sintesi per disporre il contatore dell'anello e le linee per i dispositivi di chiusura a D in modo ad alta velocità. Questa parte sarebbe probabilmente gestita meglio con il posizionamento manuale diretto. Potrebbe essere necessario un tipo specifico di piccolo FPGA ad alta velocità, forse uno senza moltiplicatori e core del processore! Il secondo è la gestione senza gara della sovrapposizione tra il codice del termometro e un contatore convenzionale con clock dalla frequenza di riferimento più bassa, ma può essere fatto, occupandosi dei problemi di metastabilità.
Non ho perseguito perché ho trovato un modo migliore per risolvere il problema, ma è stato divertente.