mikrocontroller.net

Forum: FPGA, VHDL & Co. Testbenchfrage


Autor: Ralph H. (guru)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab hier in der Testbench ne komische Meldung und die Testbench 
macht nicht was sie soll. Könnt ihr mir das Verhalten mal aufklären ?
Letztlich ist es ein simpler Zähler, dessen korrektes Zählen ich prüfen 
will.
Ich hab mal beide Dateien abgespeckt und beigefügt, die das Verhalten 
erzeugen. Ansich müsste ja der Ausganz Q ständig wechseln..zumindest in 
der Testbench tut er das nicht :-( Warum ??

Hier die Fehlermeldung:
"Instance /zaehlertestbench/uut/ : Warning: There is an 
'U'|'X'|'W'|'Z'|'-' in an arithmetic operand, the result will be 
'X'(es)"

Vielen Dank Euch !

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

Bewertung
0 lesenswert
nicht lesenswert
Ralph H. schrieb:
> Hier die Fehlermeldung:
Mal ohne den VHDL-Code angeschaut zu haben:
ein nicht initialisierter Zähler.

So, und jetzt den Code angeschaut:
So ist es. Schreib da mal besser:
  signal QZaPZei  :  std_logic_vector(2 downto 0) := "000";  --3bit Zähler 

Denn den Wert des Zählers ist ohne Initialisierung erst mal unbekannt 
und damit "UUU". Und "UUU"+'1' gibt wieder "UUU". Und "UUU"+'1' gibt 
wieder "UUU"....

BTW:
Mit Vektoren rechnet man nicht.
Beitrag "Re: Mittelwertberechnung aus vier 8-Bit Zahlen"

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Lothar.. genauso ist es ! Wieder etwas gelernt ! Stimmt ist ja 
auch logisch, aber da muss der Anfänger erstmal drauf kommen..und ich 
zerbrech mir die Birne hier ;-)..
Sollte ich also besser Signale IMMER mit nem Startwert versehen oder ?

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

Bewertung
0 lesenswert
nicht lesenswert
Ralph H. schrieb:
> Sollte ich also besser Signale IMMER mit nem Startwert versehen oder ?
Ich habe ein Problem mit solchen Vereinfachungen wie immer oder nie. 
Also: Initialisieren nur dort, wo es Sinn macht. Das gilt für alle 
Speicherglieder. Ein Signal, das nicht speichert, kann auch nicht 
initialisiert werden, weil es seinen Wert ja erst zur Laufzeit 
bekommt...

Autor: Anguel S. (anguel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Also: Initialisieren nur dort, wo es Sinn macht. Das gilt für alle
> Speicherglieder. Ein Signal, das nicht speichert, kann auch nicht
> initialisiert werden, weil es seinen Wert ja erst zur Laufzeit
> bekommt...
Man muss immer im Hinterkopf haben, dass ein FF beim Start des FPGA auf 
'0' ist, wenn man es nicht explizit auf '1' initialisiert. Nicht 
initialisierte FFs gibt es nicht. Die Init-Werte kommen aus dem 
Bitstream und kosten keine Zusatzressourcen.

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

Bewertung
0 lesenswert
nicht lesenswert
Anguel S. schrieb:
> Man muss immer im Hinterkopf haben, dass ein FF beim Start des FPGA auf
> '0' ist, wenn man es nicht explizit auf '1' initialisiert.
Und dann muß man wissen, dass der Simulator das nicht weiß, und deshalb 
solche Signale mit 'U' (undefined) initialisiert... ;-)

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo Männer.. das hab ich nun hoffentlich gelernt ;-) Bis jetzt macht
meine Schaltung auch was sie soll :-), aber bestimmt muss ich
noch ganz viele Erfahrungen machen und hoffe schonmal auf Eure
Hilfe :-) Danke sagt Ralph!

Autor: Julia (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Die Init-Werte kommen aus dem
>Bitstream und kosten keine Zusatzressourcen.

widersprecht das nicht Lothars aussage ?

>Also: Initialisieren nur dort, wo es Sinn macht.

Also ich würde das so interpretieren, dass es niemals schaden kann, ein 
Signal mit "0" zu initialisieren.

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

Bewertung
0 lesenswert
nicht lesenswert
Julia schrieb:
>> Die Init-Werte kommen aus dem
>> Bitstream und kosten keine Zusatzressourcen.
> widersprecht das nicht Lothars aussage ?
Ob ein Speicherglied auf eine '0' oder eine '1' initialisiert wird, ist 
egal. Wenn es nicht explizit auf einen Wert ('0' oder '1') gesetzt wird, 
dann macht das die Toolchain implizit mit dem Wert '0'.

>>Also: Initialisieren nur dort, wo es Sinn macht.
> Also ich würde das so interpretieren, dass es niemals schaden kann, ein
> Signal mit "0" zu initialisieren.
Es kann schaden, wenn es kein speicherndes Signal ist. Denn der 
simulator wird dem Signal erst mal den gewünschten Init-Wert zuweisen, 
die reale Hardware wird das aber nicht tun (können).

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.