Forum: FPGA, VHDL & Co. STD_LOGIC type 'z'


von Hannes (Gast)


Lesenswert?

Hallo!

Ich versuche gerade, ein VHDL SPI-Interface auf meinem Xilinx Spartan3 
Starter-Kit-Board zum laufen zu bringen. Ich arbeite mit ISE. In der 
Behavioral-Simulation funktioniert auch alles super, in der 
Post-Route-Simulation springen 2 Signale nach der Initialisierung mit 
dem Wert '1' plötzlich auf 'z'.
Weiß von euch vielleicht jemand, woran das liegen könnte? Vielleicht 
gibt es ja Standardfehler, die zu so einem Ergebnis führen?
Ich brauche das SPI-Interface für meine Arbeit an der Uni und habe es 
ziemlich eilig, es wäre also super nett, wenn Ihr alle kräftig 
antwortet! Vielen Dank schon mal im voraus,
Hannes!

von VHDL_Mensch (Gast)


Lesenswert?

Z oder X?

von Matthias (Gast)


Lesenswert?

In der Testbench(!) mal kein 'Z' zuweisen, sondern 'H' oder 'L' 
verwenden (je nachdem ob deine Schaltung pull up oder down Widerstände 
hätte).

Das hat mir schonmal bei der Simulation eines ähnlichen Bussystems 
geholfen. Allerdings kam da bei der Post-Route Simulation ein 'X'

von Da M. (damicha)


Lesenswert?

Hallo Hannes.

Ist das SPI Design von Dir oder benutzt Du ein fertiges?
Wenn ja, dann schau doch mal in den Code, ob dort irgendwo ein 'Z' 
zugewiesen wird.
Falls das SPI Modul Multi Slave fähig ist, müssen die Ausgänge auf 'Z' 
gesetzt werden, falls es nicht aktiv ist. (Meistens ist das Chip Enable 
Low Aktiv!)
Also vielleicht ein Konfigurationsproblem.

Ein netter Fehler bei Testbenches ist auch das nicht Einhalten der Setup 
und Hold Zeiten für die Steuersignale. Das wirkt sich dann aus, wenn das 
Design ein Timing bekommt!
Du darfst also in der Testbench Signale nicht direkt zur Taktflanke 
ändern.
Die Simulation sollte Dir aber hierbei Timing-Violations ausspucken

Gruß DaMicha.

von Manne (Gast)


Lesenswert?

ModelSim hat einen Wavetracker. Du klickst das Signal an und bekommst 
gesagt, wo das Z herkommt.

von Johannes R. (jruder)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!

Erst mal vielen Dank für die zahlreichen und schnellen Antworten!!!

Zu euren Antworten:

- An VHDL_Mensch: Es ist definitiv ein 'z'.

- An  Matthias: Meine Testbench erzeugt nur ein 50 MHz Taktsignal. 
Dieser Takt treibt dann mein SPI-Interface, das ein mal pro Sekunde (zu 
Testzwecken) Daten über den SPI-Bus empfangen soll. Innerhalb meiner 
Testbench weise ich also kein 'z' zu. Vielleich kannst du mir nochmal 
genauer erklären, wie du weitergekommen bist?

- An Da Micha: Ich verwende ein SPI-Modul, das in einer Application-Note 
von Xilinx beschrieben ist 
(http://direct.xilinx.com/bvdocs/appnotes/xapp386.pdf, Habe kein anderes 
gefunden). Hierin wird in einem FPGA ein SPI-Interface für einen mC 
realisiert. Es ist also das eigentliche SPI-Interface und ein 
zusätzliches mC-Interface implementiert. Da ich nur das SPI-Interface 
benötige, musste ich das mC-Interface wegschneiden.
Das Modul ist ein SPI-Master-Modul für max. 8 Slaves. Ich verstehe 
allerdings nicht, warum bei Inaktivität die Ausgänge auf 'z' gesetzt 
werden. Die cs-Leitung wird doch normalerweise, wenn keine Kommunikation 
gewünscht ist, auf '1' gesetzt. Wenn man mit einem best. Slave 
kommunizieren will, setzt man dessen cs auf '0'. Vielleicht kannst du 
mir das nochmal genauer erklären?
Den nächsten Punkt verstehe ich auch nicht, aber ISE bringt keine 
Fehler. Es kommen einige Warnungen (im Anhang als Textfile), die aber 
hauptsächlich auf offen gelassene Leitungen zurückzuführen sind. 
Vielleicht kannst du es dir ja mal anschauen?

An Manne: Das wäre super, aber momentan habe ich kein ModelSim (Ich 
verwende das ISE-Webpack). Gibt es vielleicht noch andere Möglichkeiten?

So, vielen Dank nochmal für eure Hilfe. Wenn jemand noch mehr Ideen hat, 
wäre es echt super, wenn ihr sie posten würdet. Habe leider ein wenig 
Zeitdruck.

Grüße, Hannes!

von Da M. (damicha)


Lesenswert?

Hallo Hannes.

Gibt es denn innerhalb des SPI Designs eine Stelle, an der ein 'Z' 
zugewiesen wird? Danach würde ich als nächstes mal schaun, den irgendwo 
muss es ja her kommen.
Vielleicht ist im Design auch ein Tri-State Buffer als Komponente 
instanziiert worden: z.B.: OBUFT

Gruß DaMicha.

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.