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
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
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.
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.
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.
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-synchronous-up-counterwith-reset.html 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.
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.