Gast
#4963386
Hallo Zusammen, seit geraumer Zeit treibt mich ein Problem so langsam in den Wahnsinn :-) Vorab sei gesagt das ich zwar beruflich Software entwickele und vor einigen Jahren auch grundlegende Kenntnisse in der Elektrotechnik gelernt habe, ich jedoch kein Profi in Sachen FPGA+Verilog bin. Zur Zeit versuche ich mittels FPGA mit einem externen µC zu kommunizieren. Das ganze kann man sich so vorstellen das beide FPGA und µC zwei gemeinsame Datenleitungen, eine Resetleitung und ein Takt Signal besitzen. Hier ein kleines Schaubild: -----+ +---------------- | <==> | D0 FPGA | <==> | D1 | <=== | Reset | <=== | Takt (~3,5Mhz) -----+ +----------------- Der µC gibt hierbei den Takt vor. Der FPGA reagiert mittels "always @(posedge clk) begin" auf die Daten die an D0 bzw. D1 anliegen. Beide Systeme sind so ausgelegt das diese in nach einer Bestimmten Anzahl von Takten Daten über die Datenleitungen austauschen und diese dann mit einem Referenzwert abgleichen. Kommen beiden Systeme aus dem Takt, merkt der µC das anhand der Fehlerhaften Daten und löst einen Reset aus. Mein Problem hat zeigt sich nun wie folgt: Nach einer gewissen Zeit (~1 Sekunde) laufen beide Systeme nicht mehr synchron und der FPGA erhält ein Reset Signal. Verlängere ich die Takt-Leitung um ~15cm (sehr grob 1ns) dann läuft alles. (>10 Minuten). Dazu sollte man vielleicht wissend s das Takt-Signal nicht besonders "eckig" ist, sondern eher wie eine gestauchte Sinuskurve aussieht. Ich tippe darauf das zu dem Zeitpunkt wenn der FPGA die Steigende Flanke erkennt, die daten an D0/D1 noch nicht stabil anliegen. Wobei das nur geraten ist. Ich verwende aktuell das Entwickler Board von Lattice für MachXO3LF FPGA mit dem IC LCMXO3LF-6900C. Hat vielleicht jemand einen Tipp für mich wie ich das Problem vielleicht direkt in Verilog lösen kann? Programmiertechnisch oder über Optionen im Lattice Diamond Studio. Für andere Optionen bin ich natürlich auch offen. Ich vermute mal das ich schlichtweg irgend einen "dummen" Anfängerfehler gemacht habe.