www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Grundsätzliches


Autor: Ratlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich liege mit einem Kollegen gerade im Diskurs darüber, die genau 
Berechnungen in VHDL ausgeführt werden.

Ich bin der Auffassung, dass das Ergebnis einer Berechnung innerhalb 
eines process Blocks dem sequentiellen Ausführen der Befehle entspricht, 
auch wenn durch die Synthetisierung Ergebnisse durchaus parallel 
berechnet werden. Bsp. zum besseren Verständnis:

process(clk)
begin
  if rising_edge(clk) then
    x := a + b;
    -- some other code --
    z := x + 10;
  end if;
end process;

Ich bin der Meinung, dass z am Ende a+b+10 enthält, mein Kollege, dass z 
am Ende den ursprünglichen Wert von x +10 enthält.

Was ist denn nun der Fall?
Was passiert, wenn die Berechnung innerhalb der if-Klausel länger dauert 
als ein Taktzylus? Macht es einen Unterschied, ob man Signale oder 
Variablen benutzt?

Vielen Dank für eure Hilfe

Autor: SeriousSam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wie du den Process beschrieben hast fehlen die 
Variablendeklarationen. Variablen nehmen im Process sofort den neuen 
Wert an und werden mit := zugewiesen. Anders sind Signale die mit <= 
zugewiesen werden und den neuen Wert am Ende des Process übernehmen. In 
deinem Code wird z also in der Tat a+b+10 enthalten. Dein Kollege hat 
Recht, wenn du := mit <= ersetzt.
Ob die Berechnung zu lange dauert sagt dir eine Timing-Analyse für den 
konkreten Baustein. Was dann passiert ist abhänging von eben diesem 
Baustein.

Autor: Ratlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke

Autor: Nephilim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also im Falle der Verwendung von Variablen hast du recht. Dann wird es 
so realisiert als wenn die Anweisungen direkt nacheinander ausgeführt 
werden.

Im Falle der Verwendung von Signalen hat dein Kollege recht. Da werden 
alle Anweisungen parallel bearbeitet und die letzte Anweisung kennt noch 
nicht das Ergebnis der Ersten.

Wenn die Berechnung innerhalb der If-Klausel länger dauert als dein 
Taktzyklus ist, dann bekommst du beim Place & Route einen Fehler, 
welcher dich darauf hinweisst, dass dein Timingconstraint nicht 
eingehalten werden kann.

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

Bewertung
0 lesenswert
nicht lesenswert
> Was ist denn nun der Fall?
Du hast recht, aber nur, weil du Variablen verwendet hast.
Das ist aber eine ganz andere Problematik...
Siehe dazu den Beitrag "Variable vs Signal"

> Was passiert, wenn die Berechnung innerhalb der if-Klausel länger dauert
> als ein Taktzylus?
Dann werden entweder deine Timing-Constraints verletzt (so du welche 
verwendet hast), oder dein Design läuft nicht (zuverlässig).

> Macht es einen Unterschied, ob man Signale oder Variablen benutzt?
Ja.
Als Anfänger solltest du nur Signale verwenden...
Natürlich wirst du deren Beschränkungen kennenlernen. Aber einfach 
durchgängig Variablen (oder sogar Shared Variablen) zu verwenden, bringt 
ganz andere Effekte mit sich.
Variablen sollten nur lokale Hilfswerte für Berechnungen aufnehmen. 
Sobald du eine Variable als Speicherglied verwendest (Zustandsmerker 
oder Zähler) mußt du diese Lösung und die Randeffekte sehr gut 
abschätzen und handhaben können. Am einfachsten passiert es, dass du 
eine Variable "aus Versehen" ungewollt zu einem Speicherglied 
umfunktionierst, wie es im Beitrag "latch probleme" 
passiert ist.

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.