Prüfung VHDL-Code

OP #1996642
Lesenswert?
• ▲
▼
Ich habe hier in VDHL etwas programmiert, wo ihr mal bitte drüberschauen 
sollt. Aufgabenstellung ist folgende.. ein BinärZähler (D41_42) zählt 
bis zum Zählerstand 88 läuft und beginnt dann wieder von vorn.
Das Signal DG13 soll bei Zählerstand 2 '0' und ab Zählerstand 66 bis 2 
='1' sein. Hier die VHDL Code dazu
1
DG13  <= '1'  when QD41_42 = 66        -- Setzen bei Zählerstand 66
2
            else '0' when QD41_42 = 2; -- rücksetzen bei Zählerstand 2
Das sollte doch so sehr einfach gehen oder ? Die Bibliothek 
IEEE.STD_LOGIC_unsigned.ALL ist eingebunden, weil ich sie ohnehin 
brauche.
Vielen Dank und Happy New Year !
Moderator (Firma: Titel) Persönliche Seite #1996902
Lesenswert?
• ▲
▼
Ralph H. schrieb:
> Die Bibliothek IEEE.STD_LOGIC_unsigned.ALL ist eingebunden,
> weil ich sie ohnehin brauche.
Wofür brauchst du die denn ohnehin?

> DG13  <= '1'  when QD41_42 = 66        -- Setzen bei Zählerstand 66
>             else '0' when QD41_42 = 2; -- rücksetzen bei Zählerstand 2
Das ist ein Latch. Und damit grundsätzlich zu hinterfragen!
Denn was passiert, wenn da beim Zählerumschalten mal kurz ein Glitch 
auftritt, der entweder 66 oder 2 ist?

Aber du hast mit deinen Zahlenkombinationen vermutlich Glück, denn mit 
den Bitmustern
 2 = 0000 0010
66 = 0100 0010
88 = 0101 1000
kann dir eigentlich nichts (schlimmes) passieren.

Natürlich kann beim Zählerüberlauf von  3 = 0000 0011
nach                                    4 = 0000 0100
mal kurz die 2 auftauchen
oder auch beim Überlauf von  7 = 0000 0111
nach                         8 = 0000 1000
Aber weil damit dann nur die '0' nochmal gesetzt wird, kann dir hier 
zufälligerweise nicht viel passieren...

Nur wenn du jetzt meinst, die Idee ist toll und mal andere Werte 
verwendest, dann können dir solche kurzen Glitches schnell mal die Suppe 
versalzen.

Christian R. schrieb:
> Vielleicht so: ...
So würde ich das auch machen. Das ist auf jeden Fall sicher, denn 
irgendwelche Glitches werden sich bei der nächsten Taktflanke sicher 
beruhigt haben...
Gast #1997279
Lesenswert?
• ▲
▼
Wenn man asynchrone Logik baut, so sollte man in der Regel einen Grund 
dafür haben bzw. auch verstanden haben, was da wirklich herauskommt. 
Leider gibt es viele VHDL und Verilog Sourcecodes im Internet, wo 
unsaubere Dinge gemacht werden, die oftmals aufgrund impliziter Annahmen 
erst funktionieren.

Mit einem synchronen Design und genau einem Takt kann nicht wirklich 
etwas passieren, wenn man gewisse Regeln beachtet. Je mehr Features man 
verwendet, deso besser muss mich sich aber damit auskennen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren