www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Anfänger: VHDL Synthese: Counter


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich experimentiere erst seit kurzem mit VHDL und habe eine Frage.
Wie wird das Coding unten auf Gatterebene realisiert?
Was mir unklar ist:
Wie wird in der Schaltung sichergestellt, dass Q erst beschrieben wird 
wenn der Adder (oder eine andere Operation) ein gültiges Ergebnis 
ausgibt?
process(clock)
begin
  if (clock'event and clock='1') then
    Q <= Q + X;
  end if;
end process;


Ciao,
Chris

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Schaltung selbst gar nicht.
Was passiert, ist dass das Synthese-Tool (bzw. genauer die 
Timing-Analyse nach dem Place and Route process) bestimmt, wie lange der 
Addierer braucht und dir genau diese Zeit dann als maximal mögliche 
Frequenz ausgibt mit der das Design laufen darf. Wird die Freqeuenz 
überschritten, passiert genau das, was du beschrieben hast: Q übernimmt 
das Ergebnis, bevor der Addierer fertig ist.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Jan,

ich glaube ich verstehe.
Das heißt ungefähr so? Q wäre dann also ein FF und clock hängt direkt am 
Clock-Eingang des FF?

      C
 ---| |
 |  Q--   X
 |  |     |
 |  -------
 |  |  +  |
 |  -------
 |    |
 -----|

Autor: berndl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jepp,

die rechte Seite der Gleichung beschreibt eine Logik, die den Ausgang 
der FFs mit deinem (hoffentlich aus FFs kommenden) Term addiert. Das 
wird dann mit der Clock wieder in die FFs geladen.

Und wenn du der Synthese noch sagst, welche Frequenz du mit dem Teil 
erreichen willst (Spezifikation der Clock), dann kriegst du in der 
Summary auch quasi ein PASS/FAIL

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten :-)

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch ein Beispiel damit ich es noch besser verstehe :-)

signal Q: std_logic_vector(7 downto 0);

process(clock)
begin
  if (clock'event and clock='1') then
    if (write_enabled = '1')
      Q <= Input
    end if;
  end if;
end process;

Würde in dieser Schaltung dann einfach die clock Leitung unterbrochen 
wenn write_enabled = '0' ist, sodass beim nächsten Takt nicht 
geschrieben wird?

Ciao
Chris

Autor: Irgendeiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Würde in dieser Schaltung dann einfach die clock Leitung unterbrochen
> wenn write_enabled = '0' ist, sodass beim nächsten Takt nicht
> geschrieben wird?

Nicht ganz.

Das Flip-Flop bekommt bzw. hat ein Clock-Enable-Eingang. Ist der 
Enable-Eingang aktive, speichert das Flip-Flop an der nächsten Flanke 
den Wert an seinem Eingang. Wenn nicht, dann nicht.

Hat das Flip-Flop kein Clock-Enable-Eingang, wird einer per Multiplexer 
realisiert. Der Multiplexer hat als Eingang den neuen Wert und den 
momentanen (alten) Flip-Flop-Wert. Der Enable-Eingang steuert den 
Multiplexer, dessen Ausgang auf den Flip-Flop-Eingang geht.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke!

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Chris schrieb:
> Noch ein Beispiel damit ich es noch besser verstehe :-)
> :
> Würde in dieser Schaltung dann einfach die clock Leitung unterbrochen
> wenn write_enabled = '0' ist, sodass beim nächsten Takt nicht
> geschrieben wird?
Ausprobieren macht schlau ;-)

Der RTL-Schaltplan sieht aus wie der Screenshot im Anhang.
Verwendet wird bei Xilinx ein D-FlipFlop mit Enable-Eingang.

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.