www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Verilog newbie Flankenerkennung/Johnsoncounter


Autor: Ulrich Kowohl (jesuz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin gerade dabei Verilog zu lernen, allerdings habe ich das Problem
das ich bisher noch nicht wirklich sehr viel in Digitaltechnik gelernt
habe. Es geht bei mir um ein BA Studium und der Betrieb verlangt von
mir Verilog zu lernen, wobei ich in meiner Theorie Phase bisher noch
nicht sehr viel in Digitaltechnik also mit Logik Gattern zu tun hatte.


Meine frage ist nun, wie man eine Flankenerkennung programmiert bzw.
Wie diese aufgebaut ist und welche Funktionsweise sie hat.  Das gleiche
moechte ich gern interessehalber fuer den Johnson Bit Counter wissen.
Ich habe quasi das problem das ich ein Schieberegister habe welches ich
in einer STate Machine betreiben muss. Im Zustand Shift moechte ich
genau 10 mal shiften und danach in einen anderen Zustand wechseln. Ich
moechte aber keine Integer Variable nutzen die ich einfach bis 8
Inkrementiere bzw. von acht auf null dekrementiere, da ich denke das
dies einen haufen logik erfordert und ich der meinung bin es muss auch
einfacher gehen. Deshalb moechte ich gerne etwas ueber den Johnson
Zaehler wissen :)

Die flankenerkennung wuerde mich auch sehr stark interessieren, auch
wenn ich weiss das Verilog dies schon automatisch macht mit posedge
clk... ich waere euch sehr sehr dankbar :)

vlg

der Ulrich

Autor: Alban (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich gehe mal davon aus der Code soll synthesierbar sein und zur
Flankenerkennung geht es nicht darum die Flanke des Clocksignals zu
erkennen, sondern die irgendeines anderen Signals.

Ein Weg für die steigende Flanke ist dieser:

...

input signal;

reg   signal_reg;
wire  edge;

always @(posedge clk) begin
 signal_reg <= signal;
end

always edge = signal & ~signal_reg;


Das Signal edge signalisiert eine steigende Flanke des Eingangssignals
signal.

Autor: Frank Herbert (hunkete)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alban wrote:
> Ein Weg für die steigende Flanke ist dieser:
>
> ...
>
> input signal;
>
> reg   signal_reg;
> wire  edge;
>
> always @(posedge clk) begin
>  signal_reg <= signal;
> end
>
> always edge = signal & ~signal_reg;
>
>
> Das Signal edge signalisiert eine steigende Flanke des Eingangssignals
> signal.

Ich glaube, das funktioniert so nicht sicher.
Angenommen, signal steigt kurz vor einer postiven Taktflanke auf HIGH. 
Edge geht dann mit etwas Verzögerung erst nach der Taktflanke auf High 
und wird dann gleich wieder durch die Übernahme von signal in das 
Register signal_reg zurückgesetzt. Damit kann der HIGH-Pegel von edge 
nicht bei einer positiven Taktflanke berücksichtigt werden.
Wie man die Erkennung sicher durchführen kann, zeigt der Artikel 
http://www.mikrocontroller.net/articles/VHDL_Flank...

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.