mikrocontroller.net

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


Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: VHDL_Mensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Z oder X?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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'

Autor: Da Micha (damicha)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Manne (Gast)
Datum:

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

Autor: Johannes Ruder (jruder)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!

Autor: Da Micha (damicha)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.