mikrocontroller.net

Forum: FPGA, VHDL & Co. VHDL erste Schritte beim Zähler


Autor: Fabian Z. (fabi_z)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo alle zusammen,

ich mache gerade meine ersten Gehversuche in VHDL und habe eine wirklich 
grundlegende Frage die ich nicht im Netz finde.

Wenn ich zum Beispiel eine „OR" Verknüpfung in VHDL realisieren möchte 
dann schreibe ich:

ENTITY test IS
  PORT (
    x : IN STD_LOGIC;
    y : IN STD_LOGIC;
    z : OUT STD_LOGIC
  );
END test;

ARCHITECTURE Behavioral OF test IS

BEGIN
  z <= x OR y;
END Behavioral

Wenn ich mir das RTL in Vivado anzeigen lasse, sehen ich mit 
Blockschaltbildern schön das OR Glied welches zwei Eingänge und einen 
Ausgang hat.

Soweit so gut. Das ist alles noch sehr logisch für mich. Nun möchte ich 
aber einen Zähler aufbauen. Mal ein willkürliches Beispiel: Sagen wir 
mal einen synchronen Zähler mit rückflankengesteuerten JK FlipFlops mit 
asynchronen Setz und Rücksetzeingängen.

Aus der Digitaltechnik habe ich gelernt das ich nun mittels der 
Wahrheitstabelle und KV-Diagramm meine minimale Beschaltung bestimme. 
Schreibe ich dann diese Gleichungen in Vivado??

Ich glaube nicht den überall sehe ich Zähler mit If else Anweisungen 
usw. .

Wie gehe ich an eine solche Problematik heran um einen synchronen Zähler 
aufzubauen?

Wie komme ich zu einem RTL Blockdiagram das auch zu einem Zähler passt 
den ich von der Theorie her kenne?

Ich danke euch für alle Tips, Tricks die Ihr so anwendet um an das Ziel 
zu kommen. Ich merke gerade das die Theorie der Digitaltechnik nicht 
mehr viel mit VHDL zu tun hat, oder vielleicht doch?

Beste Grüße

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fabian Z. schrieb:
> Mal ein willkürliches Beispiel: Sagen wir mal einen synchronen Zähler
> mit rückflankengesteuerten JK FlipFlops mit asynchronen Setz und
> Rücksetzeingängen.
Sieh dir mal an, welche Flipflops in FPGAs tatsächlich drin sind: simple 
D-Flipflops mit (synchronem) Set und Reset wirst du finden. Du musst 
deine Beschreibung so machen, dass der Synthesizer die verwenden kann. 
Etwas anderes hat er nicht...

: Bearbeitet durch Moderator
Autor: Viktor B. (coldlogic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Fabian,

Das Synthetisieren macht für dich das entsprechende Glied der Toolchain. 
Von dir erwartet dieses kein Blockschaltbild, sondern eine Beschreibung 
der angestrebten Funktion (deswegen heißt es auch Hardwarebeschreibung). 
Das heißt, dein KV-Diagramm und weitere Tipps und Tricks wie Gleichungen 
verkürzen sind schon in der Toolchain integriert. Die Herangehensweise 
ist also, einfach den Schaltplan (gerade) beiseite zu legen, der wird 
erst später nützlich sein. Und jetzt beschreibst du einfach, was der 
Zähler machen soll - der Anfangswert, der Resetwert, eventuelle 
Wertsprünge etc. Das geht meist

Fabian Z. schrieb:
> mit If else Anweisungen
> usw. .

 Erst wenn daraus ein Schaltplan generiert wird, kannst du den mit dem 
vergleichen, den du etwas früher beiseite gelegt hast.

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fabian Z. schrieb:
> Schreibe ich dann diese Gleichungen in Vivado??
Könntest du machen, aber besser und viel überschaubarer ist es, das 
Verhalten des Zählers zu beschreiben und die Umsetzung dem Synthesizer 
zu überlassen.
Und damit bist du wieder beim if...elsif/else... endif.

Autor: Vancouver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
VHDL dient dazu, um dir das Denken in Gattern un Flipflops abzunehmen. 
Du kannst Dein Problem abstrakter formulieren, und die Synthese macht 
die Umsetzung in Logikelemente.
Ein Zähler ist im einfachsten Fall nichts anderes als ein Register, das 
bei jeder aktiven Taktflanke um eins erhöht wird. Also schreibst Du es 
genauso hin in VHDL, in der Art y <= y+1. Welche Flipflops dabei 
verwendet werden und wie die Logiknetze optimiert werden, das ist dann 
Job der Synthese. Die Zeiten, wo Du etwas mit KV oder QMC  optimieren 
musst, sind vorbei.

Autor: bitwurschtler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fabian Z. schrieb:
> Ich glaube nicht den überall sehe ich Zähler mit If else Anweisungen
> usw. .

Du schaust nicht überall, auch in VHDL kann man Zähler aus Gatter und 
JK-FF beschreiben:

http://vhdlguru.blogspot.de/2010/03/4-bit-synchron...


 Nur macht das bei FPGA's wenig Sinn, da man dort Zähler effizienter aus 
LUT's carry chains etc. aufbauen kann. Wobei zu unterscheiden ist, ob 
Speed oder Platz-effizient.

Autor: Erich (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erich schrieb:
> https://www.thecodingforums.com/threads/counter-wi...
Das ist ja mal ein echt lausiges Beispiel (eigentlich eher drei lausig 
Schlechte), das bestenfalls gut ist zum Lernen, wie man es nicht machen 
sollte:
1. es wird völlig unötigerweise eine Variable verwendet

2. der integer Range ist zwar begrenzt, der Zähler wird aber mit Vollgas 
in die Grenze rauschen, wenn nicht zufällig vorher ein Reset kommt

und (jetzt kommt das absolute Highlight!!)...

3. cnt wird q ausserhalb des getakteten Prozessteils und damit 
kombinatorisch zugewiesen. Um das korrekt abzuhandeln fehlt aber cnt in 
der Sensitivliste(!!!*). Deshalb wird die Simulation nicht zur 
Realität passen.


(*) tut mir leid, dass ich da so viele Ausrufezeichen mache, aber das 
ist echt böse. Wenn man sich so einen Stil angewöhnt, dann wird man sich 
früher oder später schlimm die Finger einklemmen...

: Bearbeitet durch Moderator
Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar M. schrieb:
> Etwas anderes hat er nicht...

... bzw. man muss es sich selber bauen. Ein JK-FF kann - wie ein DFF 
auch - aus Grundelementen OR und AND zusammengebaut werden.
Wird halt eine asynchrone Schaltung die mit der Designstrategie in FPGAs 
nicht viel zu tun hat.

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jürgen S. schrieb:
> Wird halt eine asynchrone Schaltung
Und auch ein "synchroner" Zähler, der mit solchen selbstgebastelten 
Bauteilen aufgebaut wird, ist eigentlich ein asynchrones Design, weil 
diese zusammengestrickten Flipflops kein definiertes und 
reproduzierbares Timing haben...

Ein echtes synchrones Design verwendet die Taktverteilung und die 
D-Flipflops des FPGAs.

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.

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