Forum: FPGA, VHDL & Co. kurzzeitig 'X' Zustände beim Simulieren


von Bryan (Gast)


Lesenswert?

Hallo,

ich habe in der Postfit Simulation an einer Stelle einen Takt lang einen 
undefinierten Zunstand 'X' auf einem Signal.
Zu diesem Zeitpunkt interessiert mich der Wert aber gar nicht und wird 
bis zur "wichtigen" Abfrage auch definiert (mit dem gewünschten Wert).

Meine Frage nun, muss ich weiter nach möglichen Fehlern suchen?
"Raucht" mir, falls ich dieses Design in einen CPLD flashe dieser ab?

Danke!

von der mechatroniker (Gast)


Lesenswert?

Wenn du 'X' auf einem Signal hast, hast du mindestens zwei Prozesse, die 
das Signal beschreiben. Das kann aber nicht funktionieren, wenn diese 
Prozesse immer dann, wenn es nicht näher bestimmt ist, irgendwas 
schreiben, vielmehr brauchst du dann Tristate-Logik, der Prozess, der 
nichts besseres weiß, sollte also seinen Ausgang auf 'Z' legen.

von FPGA-Fragender (Gast)


Lesenswert?

ISt das wirklich so? Deutet das x IMMER auf konkurrierendes Schreiben ?
Könnte die Ursache nicht auch darin liegen, daß ein Signal nicht 
initialisiert ist unddaher irgendwas falsch schaltet, sodaß es dann erst 
dadurch (im Simulator) dazu kommt - während es real garnicht passieren 
kann?

Ich denke da ein Register im RAM, die etwas steuern, wobei der Simulator 
den Inhalt der REgister nicht sieht.

von Patrick N. (pneuberger)


Lesenswert?

FPGA-Fragender wrote:
> ISt das wirklich so? Deutet das x IMMER auf konkurrierendes Schreiben ?

Ja; beim Datentyp std-logic(-vector) entsteht das "X" nur bei der 
Verknüpfung von "0" und "1" bzw. von "0" oder "1" mit "-".

> Könnte die Ursache nicht auch darin liegen, daß ein Signal nicht
> initialisiert ist unddaher irgendwas falsch schaltet, sodaß es dann erst
> dadurch (im Simulator) dazu kommt - während es real garnicht passieren
> kann?

Nein. Für nicht initialisierte Signale gibt es beim Datentyp 
std-logic(-vector) eigens den Zustand "U" (uninitialized).
Für nähere Informationen siehe Library ieee.std_logic_1164. Dort gibt's 
alle möglichen Zustände sowie die resolution table.

> Ich denke da ein Register im RAM, die etwas steuern, wobei der Simulator
> den Inhalt der REgister nicht sieht.

Verstehe ich jetzt nicht so ganz. Wenn aus einem Baustein, den man nur 
als Black Box vor sich hat, ein "X" herauskommt, läuft im Baustein was 
schief. Eigentlich sollte jeder Baustein so gestaltet sein, dass er auch 
bei ungültigen Eingangskombinationen einen gültigen Ausgangswert 
liefert. "X" gehört da sicher nicht hinzu.


MfG

Patrick

von Frank U. (Gast)


Lesenswert?

Vielleicht, wenn aus einem Register, das im Simulator unbekannt ist, 
eine Konfiduration kommt, die Portrichtungen definiert ?

von Jonathan S. (psihodelia)


Lesenswert?

probier mal std_ulogic_vector anstatt std_logic_vector
std_ulogic anstatt std_logic, dann müssen potenzielle Tri-State 
Konflikten früher identifiziert werden sein (nicht in der Laufzeit)

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.