www.mikrocontroller.net

Forum: FPGA, VHDL & Co. IOBUF im VirtexII


Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Autor: Martin (Gast)
Datum: 13.07.2007 15:42

Hallo Leute!

Ich versuche gerade einen IP-Core an ein Microblaze-Prozessor zu hängen.
Über den OPB-Bus.
Den IP-Core habe ich selbst unter VHDl-entwickelt (Mein Erster.).

Die Simulationen unter Modelsim verliefen erfolgreich.
Der VHDL-Code, der den IP-Core darstellen soll funktioniert.
Ich habe auch eine Post-Place & Rout Simulation durchgeführt.
Alles funktionierte.

Der IP-Core besitzt 2 Ausgangspins: Enable, CLK
Und einen bidirektionalen Pin, der zwischen Eingang und Ausgang
schaltet: Data

In das File User-Logic habe ich mein VHDL-Model instantiiert.
Hab dort auch entsprechende Port deklariert.

Wenn ich jetzt einen Bit-Stream unter XPS generieren möchte,
damit das Prozessorsystem entsprechend synthetisiert wird, dann
schreibt mir das Programm folgende Fehler raus:

bus_0_wrapper (bus_0) -
C:\test\System.mhs line 170 - Running XST synthesis

ERROR:Xst:2585 - Port <ssdata_I> of instance <bus_0> does not exist in
definition <bus>.
ERROR:Xst:2585 - Port <ssdata_O> of instance <bus_0> does not exist in
definition <bus>.
ERROR:Xst:2585 - Port <ssdata_T> of instance <bus_0> does not exist in
definition <bus>.
ERROR:Xst - Unexpected error found while building hierarchy.
ERROR:MDT - HDL synthesis failed!
INFO:MDT - Refer to


Nur der bidirektionale Pin macht anscheinend Probleme?

Was mache ich falsch?

Danke im Voraus für eure Antworten Profis.

Tschüss
Martin

Antwort
Re: Microplaze lässt sich mit neum IP-Core nicht synthetisi
Autor: Thomas Pototschnig (pototschnig)
Datum: 14.07.2007 08:08

> Nur der bidirektionale Pin macht anscheinend Probleme?

Das hört sich für mich so an, als würdest du im FPGA Tristate-Signale
verwenden wollen. Das funktioniert nicht, weil Tristate nur mit
richtigen Ein- und Ausgangspins funktioniert.

Mein Tipp :-)

Mfg
Thomas Pototschnig

Antwort
Re: Microplaze lässt sich mit neum IP-Core nicht synthetisi
Autor: Martin (Gast)
Datum: 16.07.2007 11:48

Es handelt sich um einen bidirektionalen Pin.
Sobald das VHDL-Model auf den PIN geschrieben hat,
wird dem PIN ein Z zugewiesen und dann sollte er
als Eingangspin fungieren.


Tschüss
Martin

Antwort
Re: Microplaze lässt sich mit neum IP-Core nicht synthetisi
Autor: Thomas Pototschnig (pototschnig)
Datum: 16.07.2007 11:51

Aber es ist schon ein richtiger, physikalischer Pin am FPGA den du
bidirektional verwenden willst?

Wenn ja, dann weiß ich leider auch keine Antwort :-(

Mfg
Thomas Pototschnig

Antwort
Re: Microblaze lässt sich mit neum IP-Core nicht synthetisi
Autor: Breti (Gast)
Datum: 16.07.2007 15:40

Das EDK bekommt das mit den Tristate Pins so nicht gebacken. Ich glaube,
dass das daran liegt, dass man intern im FPGA (Spartan3e bei mir, weiß
nicht was die Virtexte da machen) keine Tristate Signale routen kann.
Die Tristate Signale werden erst im Porttreiber zusammengeführt. Du
musst daher einen Trick anwenden, damit deine userlogic das kann. Du
musst dein Signal 3 Mal deklarieren mit folgendem Schema:

Wenn das Signal "SIGNAL" heißt, dann deklarierst du in der Entity

SIGNAL_I
SIGNAL_O
SIGNAL_T

_I ist ein Input, _O und _T ein Output. Wenn du dem _T Signal logisch
eins zuweist, dann geht der Ausgang auf Tristate. Ansonsten kannst du
über die anderen beiden signale den pin setzen/lesen.

Vergiss nicht, den Port auch in der .mpd datei entsprechend zu
deklarieren, wenn er an einen externen Pin soll:

PORT SIGNAL = "", DIR = IO

Ich hatte das Problem auch schon und da muss man erstmal drauf kommen.
Ich hoffe, dass dir das hilft

Gruß,
Thomas

Antwort
Re: Microblaze lässt sich mit neum IP-Core nicht synthetisi
Autor: Martin (Gast)
Datum: 16.07.2007 16:17

Hallo Breti!

Das hört sich extrem interessant an.
Dies ist sicher der Fehler.

Ich bin mir jetzt jedoch nicht ganz sicher, wie ich vorgehen muss.
Vielleicht darf ich dir meine Architektur kurz erklären:

Ich habe ein VHDL-Model erstellt, welches einfach im Model-Sim zu testen
ist. Sobald das Startregister beschrieben wird, schickt das Model die
Daten ab.

Dann habe ich das VHDL-Model mittel Entity-Instantiation in die
User-Logic
reingeholt.
Diese User-Logic wird wiederrum in den Hauptblock instantiiert, der
am OPB-Bus hängt.

Muss ich jetzt diese drei Deklarationen schon in der untersten Ebene
durchführen (also beim VHDL-Model) oder erst im File User-Logic?

Danke für deine Hilfe.
Tschüss
Martin

Antwort
Re: Microblaze lässt sich mit neum IP-Core nicht synthetisi
Autor: Breti (Gast)
Datum: 16.07.2007 16:28

Leider habe ich bisher nur wenig Erfahrung mit der Simulation und dem
"importieren" von einem Model, wie du es beschreibst. Du musst deine
Userlogic auf jeden Fall erstmal so umschreiben, dass sie in der entity
die drei Signale enthält und natürlich den VHDL Code so abändern, dass
er in der Userlogic diese 3 Signale anstatt des bisherigen Tristate
Signales bedient. Dazu kommt dann noch das toplevel vhdl file deines
cores, welches im gleichen  verzeichnis liegt. auch dort müssen die
signale geändert werden. das sollte es dann aber eigentlich gewesen
sein.

Gruß,
Thomas

Antwort
Re: Microblaze lässt sich mit neum IP-Core nicht synthetisi
Autor: Frank (Gast)
Datum: 16.07.2007 20:18

Das klingt ja extrem seltsam. Normalerweise werden tristate Signale
intern zu einer Multiplexer Struktur. Wenn der Xilinx Synthesizer das
nicht kann, würde es mich wundern. Leider habe ich mit Xilinx noch keine
Erfahrungen gemacht und kann folglich nicht mehr beitragen.

Antwort
Re: Microblaze lässt sich mit neum IP-Core nicht synthetisi
Autor: Matthias (Gast)
Datum: 16.07.2007 20:49

das Problem ist die Synthese in mehreren Schritten durchs EDK. Es werden
nämlich im ersten Schritt Netzlisten synthetisiert für alle
Peripheriekomponenten. Hatte das Problem auch bei meiner selbstgebauten
perihperiekomponente mit Tristate Ports.

Lösen lässt sich das genau so wie es Breti beschrieben hat: Im eigenen
Design nur die drei Signale Port_I, Port_O, Port_T verwenden.
Alle Port = 'Z' werden im Prinzip durch Port_T <= '1' ersetzt usw.

im mpd File das die Peripheriekomponenten  beschreibt, müssen dann
sowohl die Port_I usw. Signale rein als auch das tatsächliche Port
Signal. Und nur das letzte verbindet man dann über die GUI mit einem
tatsächlihcen Pin -> fertig.

Es gibt auch noch eine Option für das .mpd File das die direkte
Verwendung von IO Ports ohne die Aufteilung erlaubt. Wie das heißt
müsste man aber erst in der Doku nachschauen. Und bei mir hats leider
auch nich funktioniert. Hab mein Design dann umgebaut (ging letztendlich
auch sehr schnell) für die 3 Einzelnsignale und dann gings.


Einen ähnlihcen Stolperstein gibts übrigens noch wenn man in einer
Peripheriekomponente IPCores verwendet. Da muss man dann noch ein
Block-Box Definition File schreiben (.bbd), das .xco File in den
passenden Ordner legen und irgendwo style auf mixed stellen.

Antwort
Re: Microblaze lässt sich mit neum IP-Core nicht synthetisi
Autor: Martin (Gast)
Datum: 17.07.2007 18:24

Hallo Matthias und Thomas!

Ich danke euch recht herzlich für eure geniale Hilfe.
Es hat gleich auf Anhieb geklappt.

Ich mach jetzt dann ein Fass auf.

Danke nochmals.

Tschüss
Martin

Antwort
Re: Microblaze lässt sich mit neum IP-Core nicht synthetisieren
Autor: Sven (Gast)
Datum: 14.03.2008 09:53

Hallo Leutz!

Dieser Post hän gt hier zwar schon ne Weile ich hoffe dennoch, dass mir
von Euch jemand helfen kann.

Ich habe genau das selbe Problem mit dem Tristate-Treiber auf einem
VirtexII  Board.


Zu Matthias Post: "Alle Port = 'Z' werden im Prinzip durch Port_T <= '1'
ersetzt usw"

Ist es nicht so, dass der Tristate Zustand mit Port_T <='0' gesetzt
wird. Ich meine Damit der Output für Port_O hochomig wird?

Port_T <= '1' legt doch das an Port_O anliegende Signal auf den Bus?
Genau mit diesem Problem kämpfe ich gerade. Hat einer von Euch ne
Antwort???

Da Xilinx aus einem Tri-State eh eine M ultiplexer Lösung macht, habe
ich schon überlegt den Bidirektionalen Bus selber als Mux zu coden. Hat
jemand von Euch solch eine Lösung schon einmal in Betracht gezogen?

Gruß

Sven

Autor: Izmir Übel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie lautet Deine Frage?

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.