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!
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'
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.
ModelSim hat einen Wavetracker. Du klickst das Signal an und bekommst gesagt, wo das Z herkommt.
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.