mikrocontroller.net

Forum: FPGA, VHDL & Co. Prüfung VHDL-Code


Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht 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
DG13  <= '1'  when QD41_42 = 66        -- Setzen bei Zählerstand 66
            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 !

Autor: Tron (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Zähler ist aber auch bei 3 bis 65 = "0". Bei der schwammig 
formulierten Aufgabe würde ich in dem fall ein "U" zuweisen

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht so:
Process(CLK)
Begin
  if rising_edge(CLK)then
    if QD41_42 = 65 then DG13 <= '1';
    elsif QD41_42 = 1 then DG13 <= '0';
    end if;
  end if;
End Process;

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Sym (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.