Sorry Chris, ich kann mir das auch nicht ganz verkneifen. Der Engländer
sagt dazu "garbage in garbage out". Also sorge lieber dafür, dass die
Signalintegrität auf der Leitung gewahrt ist, als dich um eine
Symptombekämpfung innerhalb des FPGAs zu kümmern.
Having said this, kann ich dir ja verraten, dass ich neulich ein
ähnliches Problem hatte. Das Oszilloskop zeigte keine Auffälligkeiten
des Taktsignals aber durch eine Testschaltung im FPGA konnte ich
nachweisen, dass im FPGA Taktflanken vorkamen, die "außen" nicht zu
sehen waren. Wegen einer Reflexion an einer Stichleitung gab es bei
jeder steigende Flanke de facto zwei Flanken, und bei der fallenden
Flanke nochmals eine steigende. Allerdings konnte ich an der externen
Beschaltung nichts ändern und musste daher wohl oder übel auch über eine
Symptombekämpfung im FPGA nachdenken.
Meine Lösung sieht so aus, dass ich das externe Taktsignal mit einem
deutlich schnelleren internen Takt abtaste und daraus ein neues
Taktsignal ableite. Also z.B. erst wenn zwei aufeinander folgende
Samples 1 sind wird der "neue Takt" auf 1 gesetzt, und erst bei zwei
aufeinander folgenden Nullen wieder auf 0. Das führt zwar zu einem
asymmetrischen Takt mit variablem Puls-Pause-Verhältnis, aber wenn dich
das nicht stört, dann ist das ein gangbarer Ansatz. Denk bitte dran,
andere Signale, die einen zeitlichen Bezug zu dem Originaltakt haben,
ebenfalls zu verzögern, damit sich die Verzögerung zumindest teilweise
kompensiert.
Viel Erfolg!
Harald