Hallo liebes Forum, ich muss mich seit kurzem mit einer FPGA Firmware auseinandersetzen, habe aber eigentlich noch nichts auf diesem Gebiet gemach, komme eigentlich mehr aus de µC ecke. Nun zu meinem Problem ich habe einen FPGA (Xilinx Virtex), dieser wird in VHDl programmiert. Nun möchte ich wenn ein Signal(pa_on) eingeschaltet wird ein Timer auf einen wert x setzen, diese nennt sich timer1, wird das Signal pa_on nun wieder ausgeschaltet so soll auf die fallende Flanke getriggert werden und ein andere Timer(timer2) gestartet werden. Wie stelle ich das an? wäre für jeden hinweis dankbar.
Dominik schrieb: > Wie stelle ich das an? Du baust dir erst mal 2 Timer und dann nimmst du eine Flankeerkennung und triggerst die Timer damit... > wäre für jeden hinweis dankbar. http://www.lothar-miller.de/s9y/categories/18-Flankenerkennung > Nun möchte ich wenn ein Signal(pa_on) eingeschaltet wird ein Timer > auf einen wert x setzen, diese nennt sich timer1, Das kannst du gleich am Anfang machen, denn sonst passiert in deiner Beschreibung ja nichts mit dem Timer1... :-o > wird das Signal pa_on nun wieder ausgeschaltet so soll auf die fallende > Flanke getriggert werden und ein andere Timer(timer2) gestartet werden. Wie schnell und woher kommen die Flanken? Noch was zur Terminologie: > komme eigentlich mehr aus de µC ecke. Nun zu meinem Problem ich habe > einen FPGA (Xilinx Virtex), dieser wird in VHDl programmiert. Ein Feldprogrammierbares Gate Array wird nicht programmiert. Sondern es wird mit VHDL (das ist eine Hardware-Beschreibungssprache) eine Schaltung beschrieben, die dann von der Toolchain auf ein FPGA umgesetzt wird. lüsterklemme schrieb: > Aber vielleicht hilft das? > Beitrag "CLK'event oder rising_edge(clk)" Nein, das ist hier mit 99,999% Sicherheit der falsche Weg...
Dominik schrieb: > Wie stelle ich das an? wäre für > jeden hinweis dankbar. Zum Bleistift:
1 | signal pa_on_synced : std_logic := '0'; |
2 | signal pa_on_synced_old : std_logic := '0'; |
3 | |
4 | process(CLK) |
5 | begin
|
6 | if (rising_edge(CLK)) then |
7 | -- Signal "pa_on" zum Takt synchronisieren
|
8 | pa_on_synced <= pa_on; |
9 | if ((pa_on_synced = '1') and (pa_on_synced_old = '0')) then |
10 | -- Steigende Flanke
|
11 | elsif ((pa_on_synced = '0') and (pa_on_synced_old = '1')) then |
12 | -- Fallende Flanke
|
13 | end if; |
14 | -- Aktuellen Zustand für den nächsten Takt merken
|
15 | pa_on_synced_old <= pa_on_synced; |
16 | end if; |
17 | end process; |
Noch ein paar Tips: - Wenn irgend möglich nur einen einzigen Takt (CLK) benutzen - Der Takt muß natürlich schnell genug sein, um Dein Signal abzutasten - Falls "pa_on" prellt, mußt Du noch eine Entprellung vorsehen Lösung wie
1 | if (rising_edge(pa_on)) then |
sind nicht zielführend! Im FPGA sollte alles mit einem einzigen Takt laufen, damit sämtliche Vorgänge synchron zu einander sind. Im µC passiert das explizit durch die CPU (ein Befehl nach dem anderen), aber im FPGA muß darauf wirklich genau achten!
Hallo und vielen Dank schon mal für eure schnelle Hilfe. Noch als Zusatzinformation ich habe einen Systemtakt von 140Mhz, und das pa_on Signal ist kein hardwaresignal sondern es wird aus einem SPI Register gebildet. @Bronco deinen Lösungsweg kann ich nachvollziehen, ich werde es mal so versuchen in mein Projekt einzubinden. @Lothar auch danke für deine Berichtigung ;) Gruß Dominik
Eines noch: Nimm Dir die Problematik des Einsynchronisierens zu Herzen: http://www.lothar-miller.de/s9y/categories/35-Einsynchronisieren Ich bin anfangs granatenmäßig auf die Schnauze gefallen, weil FPGA-externe Signale (wie z.B. auch Deine SPI-Signale) nicht korrekt zu FPGA-Takt synchronisiert waren.
Bronco schrieb: > Im FPGA sollte alles mit einem einzigen Takt laufen, damit sämtliche > Vorgänge synchron zu einander sind. > Im µC passiert das explizit durch die CPU (ein Befehl nach dem anderen), > aber im FPGA muß darauf wirklich genau achten! Bronco, diesen Vergleich kann man nicht vergleichen...
Lothar Miller schrieb: > Ein Feldprogrammierbares Gate Array wird nicht programmiert. Genau. Daher auch der Name :)
Immer diese Erbsenzählerei! Irgendwann kommt noch mal einer auf die Idee und erfindet phosphorfreies Phosgen...
Bronco schrieb: > Immer diese Erbsenzählerei! Ach, wenn wir schon dabei sind. :) Marcus Harnisch schrieb: > Lothar Miller schrieb: >> Ein Feldprogrammierbares Gate Array wird nicht programmiert. > > Genau. Daher auch der Name :) Sehen wir es halt so, dass man in den Sprachen VHDL, Verilog, etc. keine Programme schreibt sondern Schemata. Der Programmiervorgang überträgt diese auf das FPGA, das im Betrieb diesen Vorgaben folgt.
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.