Forum: FPGA, VHDL & Co. 1 Bit Speicher in CPLD ohne Takt


von Ben (Gast)


Lesenswert?

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

von uwe (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Ben (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Ben (Gast)


Lesenswert?

Ja, Danke für das Codebeispiel.

Ich wüsste dennoch gerne was eine bessere Lösung wäre.
-> Standard Latch (pegelgesteuerter Reset)?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.