hallo allerseits, auf ein Register in VHDL, werden von Aussen mit C-programm aber unregälmässig Daten geschrieben "00011100011", die will ich lesen und darauf reagieren... das geht jetzt ohne Problem! aber ich will diese Daten nach bestimmte Zeit mit vhdl löschen, dh der Inhalt der Register auf Null wieder setzen, ich habe ein Process geschrieben: slv_reg_reset : process ( Bus2IP_Clk ) is begin if Bus2IP_Clk'event and Bus2IP_Clk = '1' then for i in 0 to (C_DWIDTH-1) loop if slv_reg0(i) = '1' then slv_reg0 <= (others => '0') after 200 ms ; end if; end loop; end if; end process slv_reg_reset; ich glaube aber dass After nur für die Simulation gültig ist, dh ich soll andere weg gehen ? deswegen brauche ich eure Hilfe oder ein bsp wie ich das machen kann, kann mir ein Zähler dabei helfen? hat jemanden ein bsp? danke für irgend ein Hinweis und Hilfe Eddy
@ Eddy Hoffmann (Firma student) (eddy_2007) >auf ein Register in VHDL, werden von Aussen mit C-programm aber >unregälmässig Daten geschrieben "00011100011", Das heisst die Logi ist in einem FPGA/CPLD welcher an einem Mikrocontroller hängt?! >aber ich will diese Daten nach bestimmte Zeit mit vhdl löschen, >dh der Inhalt der Register auf Null wieder setzen, > slv_reg0 <= (others => '0') after 200 ms ; >ich glaube aber dass After nur für die Simulation gültig ist, Genau. >kann mir ein Zähler dabei helfen? Ja. >hat jemanden ein bsp? Nein. Wenn der Schreibzugriff erfolgt, einen Zähler laden, den dann runterzählen lassen Wenn er Null erreicht hat, das Register löschen. MfG Falk
Ich weiß ja nicht was das werden soll, aber am besten ist es wohl beim Beschreiben des Register einen Timer zu starten und wenn der abgelaufen ist, das Register zu löschen. Oder Du löscht das Register sofort nachdem Du auf den Wert reagiert hast.
Kleiner fettnapf: was soll passieren, wenn gleichzeitig die zeit abgelaufen ist und von aussen geschrieben wird? hier musst du eine priorisierung vorgeben (Entweder löschen oder Schreiben zulassen)
@Klaus Falser wrote: > einen Timer zu starten und wenn der abgelaufen > ist, das Register zu löschen. > Oder Du löscht das Register sofort nachdem Du auf den Wert reagiert > hast. Fehlerteufel wrote: > Kleiner fettnapf: was soll passieren, wenn gleichzeitig die zeit > abgelaufen ist und von aussen geschrieben wird? hier musst du eine > priorisierung vorgeben (Entweder löschen oder Schreiben zulassen) danke euch sehr, genau da habe ich das problem, wenn geleichzeitig geschrieben und gelöscht werden soll ??? ich will aber auch das der Registerinhalt erst nach zb 100 ms gelöscht wird? hat jemanden ein time bsp? @ danke Falk für dein Tip,
Wie soll man Dir ein Beispiel geben, wenn Du nicht einmal genau weißt was Du willst. Aus welchem Grund soll das Register nach 100 ms gelöscht werden? Passiert dabei etwas irgendeine Aktion, oder was ist der Grund? Wenn das Beschreiben des Registers irgendeine Aktion auslöst, dann ist es wahrscheinlich am besten, das Register dann zu löschen wenn die Aktion ausgeführt wurde. Dann kann das C Programm das Register wieder auslesen, und wenn 0 zurückgelesen wird, dann weiß man : OK, erledigt. Oder was hast Du eigentlich vor?
Klaus Falser wrote: > Aus welchem Grund soll das Register nach 100 ms gelöscht werden? > Passiert dabei etwas irgendeine Aktion, oder was ist der Grund? > Oder was hast Du eigentlich vor? mit dem FPGA soll ein Keypad gesteuert werden. die Daten kommen an FPGA-Board via Ethernet deswegen ist um bestimmte Taste zu drücken mal parallel/gleichzeitig mal in Reihe nach.. der Tastendruck hat aber die Eigenschaft dass die Signale zwischen 50ms und 100 ms für bestimmt Fällen sogar 300 mikrosekunden die Komponenten die ich geschrieben haben lesen von register die ganze Zeit denn man kann nicht ahnen wann der Register berieben kann. man kann ein Tastendruck unabhängig von der Zeit ==> wenn der Inhalt der Register !=0 ist dann werden Signale zum Keypad geschickt diese Signale sollen zb 100 ms dauern für ein Tasten Druck. danach soll der Register Inhalt wieder auf 0 gesetzt werden. ====> dass geleichzeitig der Register zu überschreiben und löschen ist, ist hier ausgeschlossen da man nicht so schnell Tasten drücken darf mit C kann man das gut manipulieren! mein Baord arbeitet mit 3,6Mhz kann auch schneller aber das ist was ich brauche.. ich habe mir ein Counter gedacht der einfach 1/(3,6Mhz)=T ===> T=0,27 us dh x= (100ms * T)/0,27us = ca 370 T dh ich brauche ein Zähler der wartet 370 T und dann der Registerinhalt auf 000000.. setzen ? ist das so richtig oder gibt ein anderen Weg ? danke alle
Ganz klar ist die Sache immer noch nicht, außerdem verwechselt Du dauern Millisekunden mit Microsekunden. Bei 3.6 MHz sind 100 ms wohl eher 360.000 Takte. Weiters kannst Du das Zurücksetzen des Registers nicht in einem getrennten Prozess machen, weil man auf ein Signal nicht von 2 getrennten Prozessen aus schreiben darf. Du mußt also die Entity ändern, in der das Register beschrieben wird. Dort startest Du einen Zähler, und nach x Taktzyklen wird alles wieder auf '0' gesetzt.
Klaus Falser wrote: > Ganz klar ist die Sache immer noch nicht, außerdem verwechselt Du dauern > Millisekunden mit Microsekunden. > Bei 3.6 MHz sind 100 ms wohl eher 360.000 Takte. > Weiters kannst Du das Zurücksetzen des Registers nicht in einem > getrennten Prozess machen, weil man auf ein Signal nicht von 2 > getrennten Prozessen aus schreiben darf. > Du mußt also die Entity ändern, in der das Register beschrieben wird. > Dort startest Du einen Zähler, und nach x Taktzyklen wird alles wieder > auf '0' gesetzt. das stimmt, vielen Dank Klaus!!!
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.