Hallo zusammen, in einem ungetaktetem CPLD (Coolrunner) möchte ich ein externes HW Fehlersignal (Err_HW) speichern, so dass dieses Fehlersignal intern (Err_int) weiterverarbeitet werden kann. Der Status von Err_int soll beibehalten werden, auch wenn der HW Fehler wieder zurück geht. Ein Reset soll den gespeicherten Wert wieder verwerfen. Welches VHDL Konstrukt ist hierfür das Richtige? Err_HW: 0 Fehler; 1 kein Fehler Err_int: 0 Fehler; 1 kein Fehler RST: Reset bei steigender Flanke Err_HW -> "Speicher" -> Err_int ^ RST --^ Vielen Dank für eure Hilfe, Ben
D-FlipFlop mit zusätzlichen R und S Eingängen. D an 1 C an Reset R über Inverter an Err_HW S an 0
Ben schrieb: > RST: Reset bei steigender Flanke Ein flankengesteuerter Reset? Das ist mal eine seltsame Forderung. Denn damit ist dann eigentlich der Reset ein Takteingang und gegenüber Err_HW nachrangig. Wie auch immmer... > Welches VHDL Konstrukt ist hierfür das Richtige?
1 | signal err_int : std_logic; |
2 | :
|
3 | :
|
4 | process (err_hw, rst) begin |
5 | if (err_hw='1') then |
6 | err_int<='1'; |
7 | elsif rising_edge(rst) then |
8 | err_int<='0'; |
9 | end if; |
10 | end process; |
Durch diese extrem asynchrone Geschichte hast du natürlich irgendwelchen seltsamen Effekten Tür und Tor geöffnet. Siehe dort: http://www.lothar-miller.de/s9y/categories/35-Einsynchronisieren Du musst also mindestens noch das err_int einsynchronisieren. Was du eigentlich willst ist sowas: http://www.lothar-miller.de/s9y/archives/19-Kurzer-Spike-in-Puls-umgewandelt.html
:
Bearbeitet durch Moderator
Danke für eure Antworten soweit. 1) Welche bessere Lösung gäbe es, wenn ich kein flankengesteuertes Reset verwenden würde? 2) Im betroffenen CPLD gibt es keinen Takt, sondern nur rein kombinatorische Logik. Damit fällt dann diese Lösung doch weg, oder? Diese kannte ich schon von deiner Seite und habe ich in einem FPGA erfolgreich eingesetzt. http://www.lothar-miller.de/s9y/archives/19-Kurzer-Spike-in-Puls-umgewandelt.html Gruß, Ben
Ben schrieb: > 2) Im betroffenen CPLD gibt es keinen Takt Dann nimm die Lösung, wie ich sie hingeschrieben habe. Aber wie gesagt: die Sache mit der Asynchronität solltest du dir genau, sehr genau ansehen...
Ja, Danke für das Codebeispiel. Ich wüsste dennoch gerne was eine bessere Lösung wäre. -> Standard Latch (pegelgesteuerter Reset)?
Ben schrieb: > Ich wüsste dennoch gerne was eine bessere Lösung wäre. In deinem Fall gibt es keine "bessere" Lösungen, sondern bestenfalls "andere"... Und es gibt eben keine andere, die diese Forderung erfüllen könnte: >>> RST: Reset bei steigender Flanke
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.