Vor einiger Zeit habe ich als Gedankenexperiment ein Zeiterfassungs-FPGA 'entworfen'.
Es hatte einen Ringoszillator, der konventionell war, abgesehen von der Tatsache, dass er 41 Wechselrichter hatte. Die Periode war somit viel viel geringer als die Verzögerung eines Gates. Der FPGA-Prozess hatte einzelne Gate-Verzögerungen in den 10s von pS, wo das Routing lokal und das Fan-out niedrig war, konnte jedoch aufgrund von Multiplexing-, Routing- und Ladeverzögerungen zwischen Blöcken nur Systemtakte in der Größenordnung von 100s MHz verarbeiten.
Der Zeiterfassungsprozess verwendete dann 41 D-Latches, die jeweils den Eingangsübergang erfassten, aber natürlich in verschiedenen Phasen des Ringzählzyklus getaktet wurden. Die Ausgänge der D-Latches könnten als "Thermometercode" interpretiert werden, der den Eingangsübergang auf Subzyklusgenauigkeit mit einer Auflösung in den 10s von pS interpoliert. Weitere 41 D-Latches haben einen Referenztakt erfasst.
Bei einer solchen Struktur gibt es zwei Hauptschwierigkeiten. Das erste besteht darin, die Synthesewerkzeuge dazu zu bringen, den Ringzähler und die Leitungen mit hoher Geschwindigkeit zu den D-Latches auszulegen. Dieser Teil würde wahrscheinlich besser durch direkte manuelle Platzierung gehandhabt werden. Möglicherweise wird ein bestimmter Typ eines kleinen Hochgeschwindigkeits-FPGAs benötigt, möglicherweise einer ohne Multiplikatoren und Prozessorkerne! Die zweite ist die rennfreie Behandlung der Überlappung zwischen dem Thermometercode und einem herkömmlichen Zähler, der durch die Referenz mit niedrigerer Frequenz getaktet wird. Dies kann jedoch unter Berücksichtigung von Metastabilitätsproblemen durchgeführt werden.
Ich habe nicht weiterverfolgt Ich habe einen besseren Weg gefunden, um das Problem zu lösen, aber es hat Spaß gemacht.