Ich habe am FPGA (virtex2) einen Atmega angeschlossen, von dem eine Leitung(reset) zum FPGA geht. Diese setze ich beim power ab, kurzzeitig auf high und dann wieder low. Die Input-Leitung am FPGA ist LVTTL und hat im ucf file noch einen Pulldown Widerstand bekommen. Komischerweise wird mein FPGA trotzdem noch in unregelmäßigen Abständen resettet. Ich habe leider keinen Scope da, der mir einmalig auf das Signal triggert und das Bild behält (um herauszukriegen kann, was das für ein h-Pegel ist und wie das Signal aussieht0). Das Signal kommt auf jeden Fall vom Atmega, habe es überprüft, der wird 100% nicht neugestartet, also kann das Reset-Signal nicht durch Fkt-Aufruf zum Anfang des Programms ausgelöst. Vielleicht mache ich aber doch noch was falsch und das sieht jemand sofort. MC Code: #define CONTROL_REG DDRC #define CONTROL_PORT PORTC #define RESET PC3 ... CONTROL_REG |= (1<<RESET); .... CONTROL_PORT |= (1<<RESET); LONGDELAY; CONTROL_PORT &= ~(1<<RESET); ... ---------------------------------- FPGA: (ucf) NET "RESET" LOC = "U12"; NET "RESET" PULLDOWN; (vhd) rstinbuf_mc : bufg port map(i => RESET, o => RESET_INT); ----------------------------------------------------------------------- 2 Sachen noch. (a) Reset vom MC klappt nach dem Einschalten, (b) wenn ich die Leitung danach fest auf Masse lege, passieren diese ungewollten Resets nicht.
Ich würde ja mal versuchen das noch über einen Transistor (Inverter) zu schalten. Atmel an Basis, FPGA Reset an Kollektor
Kann es sein, dass du irgendwo sonst im Code noch auf den CONTROL_PORT schreibst und dabei versehentlich etwas an RESET änderst? Oder alternativ auch am entsprechenden DDR? Könnte es sein, dass du versehentlich Atmega-Peripherie auf dem betroffenen Port aktivierst?
Eventuell kommt das Signal auch nicht von Atmega, sondern eine unsaubere oder unterdimensionierte Spannungsversorgung des FPGAs löst dessen Reset aus. Würde ich zumidnest nicht ausschließen, aber um das zu überprüfen bräuchte man auch wieder ein Scope.
@ Frager: verstehe nicht was du damit meinst @ David: hilft bei meinem Problem wahrscheinlich auch nicht weiter @ mr.chip: Ja, die anderen Pins des Ports haben auch ihren Einsatz, jedoch wird RESET Pin dabei nicht angefasst. @ Matthias: Nein, wenn ich die Resetleitung fest auf GND Pin anklemme, wird auch kein RESET ausgelöst und das FPGA Board läuft fröhlich weiter. Ich werde heute testweise eine andere Leitung am MC nehmen und darauf RESET legen.
@ Gast (Gast) >@ mr.chip: Ja, die anderen Pins des Ports haben auch ihren Einsatz, >jedoch wird RESET Pin dabei nicht angefasst. Glaubst du das oder WEISST du das? Wenn es schliesslich mit einer auf Masse gelegten Leitung geht, dann scheint ja doch was faul zu sein. Nur ein kleiner Schreibzugriff auf den Port , und schwups! >@ Matthias: Nein, wenn ich die Resetleitung fest auf GND Pin anklemme, >wird auch kein RESET ausgelöst und das FPGA Board läuft fröhlich weiter. Eben! MFG Falk
>>Glaubst du das oder WEISST du das?
Ich weiß es, hab mir alle C Dateien genau angeguckt, Reset kommt dabei
nicht vor und anderen PINS auf dem PortC werden per Oder-Verknüpfung
geändert, dass RESET dabei so bleibt, wie nach dem Aufruf der
Reset-Funktion.
@ Gast (Gast) >Ich weiß es, hab mir alle C Dateien genau angeguckt, Reset kommt dabei Dann glaubst du immer noch. WISSEN tust du es erst, wenn du mit nem Oszi das Pin anschaust und WIRKLICH keine Spikes siehst. >nicht vor und anderen PINS auf dem PortC werden per Oder-Verknüpfung >geändert, dass RESET dabei so bleibt, wie nach dem Aufruf der >Reset-Funktion. Und du hast sicher keinen einzigen Befehl übersehen .. . ? MfG Falk
>> Und du hast sicher keinen einzigen Befehl übersehen .. . ? Ja 100%, ich habe es auch alles selbst programmiert. >> WISSEN tust du es erst, wenn du mit nem Oszi das Pin....... Ich meinte doch oben, dass kein Oszi da ist, der einmalig auf das Signal triggern kann. Und mich hinsetzen und die Leitung 4h beobachten (manchmal kommt sowas erst nach 4h), kann ich mir nicht leisten, da macht mein Chef nicht mit und meine Augen erst Recht nicht :) Ich glaube jetzt jedoch das Problem gefunden zu haben. >> #define RESET PC3 >> ... >> CONTROL_REG |= (1<<RESET); sollte eigentlich heißen: #define RESET DDC3 CONTROL_REG |= (1<<RESET); wobei im Endeffekt hinter jedem #DEFINE ob PC3, oder DDC3 immer eine 3 steht oder? >>Für den Compiler sind die Ausdrücke (1<<PC7), (1<<DDC7) und (1<<PINC7) >>identisch: (1<<7) (genauer: der Präprozessor ersetzt die Ausdrücke >>(1<<PC7),... zu (1<<7)) >
@ Gast (Gast) >> Und du hast sicher keinen einzigen Befehl übersehen .. . ? >Ja 100%, ich habe es auch alles selbst programmiert. Mag sein, aber sowas übersieht man schon mal. >Und mich hinsetzen und die Leitung 4h beobachten (manchmal kommt sowas >erst nach 4h), kann ich mir nicht leisten, da macht mein Chef nicht mit >und meine Augen erst Recht nicht :) Dann bau dir einen Low-Cost-Oszi. Nimm ein 74HC74 und leg dein Reset an den Takteingang. D auf VCC. mit CLR löschst du den Ausgang. Wenn nun ein böser Puls kommt, lädt das FlipFlop eine 1, die am Ausgang per LED angezeigt weren kann. Läuft alles automatisch. >wobei im Endeffekt hinter jedem #DEFINE ob PC3, oder DDC3 immer eine 3 >steht oder? Sicher. MfG Falk
>>wobei im Endeffekt hinter jedem #DEFINE ob PC3, oder DDC3 immer eine 3 >>steht oder? >Sicher @ Falk: (sicher = ja, das ist egal) || (sicher = sicher macht das ein Unterschied) ???? >> Dann bau dir einen Low-Cost-Oszi. Gibt aber keine Aussage über die Impulsbreite und den Spannungspegel.
@ Gast (Gast) >(sicher = ja, das ist egal) || (sicher = sicher macht das ein >Unterschied) Es ist sicher das gleiche. >> Dann bau dir einen Low-Cost-Oszi. >Gibt aber keine Aussage über die Impulsbreite und den Spannungspegel. Aber es gibt eine chance, einen Puls durch einen Programmierfehler zu finden. Der ist nämlich mind. 1 Takt breit. Glitches oder EMV wird man nicht zuverlässig finden, aber ggf. eine Ahnung entwickeln. MFG Falk
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.