Forum: FPGA, VHDL & Co. Testbenchfrage


von Ralph H. (guru)


Angehängte Dateien:

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 !

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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:
1
  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"

von Ralph H. (guru)


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 ?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

von Anguel S. (anguel)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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... ;-)

von Ralph H. (guru)


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!

von Julia (Gast)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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).

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
Noch kein Account? Hier anmelden.