Hallo, ich schreibe gerade meine Diplomarbeit, stehe jetzt aber vor einem Problem! Ich wollte mit dem Trenz Industrie Board (Spartan 3e) ein Signal abtasten, aufbereiten und per USB an einen PC senden. Ich habe nun ein VHDL Code generiert, der mein Signal abtastet. Weiterhin hab ich ein EDK Projekt erstellt, der Daten vom RAM über USB an den Rechner schiebt. Ich habe jetzt das EDK File in das ISE Projekt mit hinein geladen. Jetzt zu meinem Problem. Wie kann ich aus meinen VHDL Code auf das EDK Projekt zugreifen und Daten übertragen? Danke
Du hast per EDK ein Microblaze mit entsprechender Peripheri in ein ISE Projekt eingebunden und möchtest das ganze nun mit deinem VHDL Modul kommunizieren lassen? Wenn ich das so richtig verstanden habe, dann gibt es für Dich mind. zwei Möglichkeiten, eine Verbindung zwischen deinem VHDL Modul und dem Prozessorkern zu ermöglichen. 1) Du gehts noch einmal einen Schritt zurück ins XPS. Dort erzeugst Du aus Deinem VHDL Modul einen IP Core mit PLB oder OPB Slave-Anbindung. Diesen IP Core fügst Du dann in dein System ein ung legst per UCF fest, über welche Pins dein Modul nach draussen verbunden ist. Die ISE brauchst Du in diesem Fall garnicht. 2) Du bindest im XPS eine kleine Brücke ein (oder missbrauchst den EPC-Controller, wobei ich nicht beurteilen kann, ob das eine so gute Idee ist), mit hilfe derer Du ein vereinfachtes Interface nach draussen leitest. In der ISE instanziierst Du dann dein MB System, sowie dein VHDL Modul und verbindest die beiden über die Brücke miteinander. Ich denke für Dich dürfte die erste Möglichkeit der einfachste und schnellste Weg sein, Dein System zu realisieren.
Erstmal danke für die schnelle Antwort, versuche mich gerade mit der ersten Lösung. Muss ich, wenn ich eine neue Peripherie erstelle will, alle PLB Daten manuell zuweisen. Dies würde heißen, dass ich in dem VHDL Projekt alle PLB Slave Signale einbinden müßte? Oder gibt es ein File, die den Import der Peripherie erleichtert? Danke
Guten Morgen, im Menü "Hardware->Create or Import Peripheral" findest du einen Wizard, der dir beim Erstellen des IP-Grundgerüst hilft. Dabei kannst du auswählen, ob du beispielsweise einen reinen Slave-IP bauen möchtest. Der Wizard generiert dir dann zwei Dateien, eine mit dem Namen "user_logig.vhd". In diese Datei baust du deine eigene Logik ein und ziehst ggf. noch Signale über die entity Deklaration der beiden Dateien nach draussen.
Danke nochmals, das hat geklappt.Aber wie deklariere ich meinen Einsprung aus meiner c-File. Oder läuft der FPGA Core eigenständig?
Deine Frage musst du mir etwas näher erläutern, ich verstehe nicht ganz was du meinst (vielleicht langsam Zeit das Labor zu verlassen?).
Hi, es gibt auch die möglichkeit, die Daten von einem Verilog/Vhdl-Modul über ein oder mehrere GPIO's in den MicroBlaze zu bringen (jeder Kanal hat dann 32bit Parallel-Zugriff). Nachteil: man braucht noch ein Bit zum 'ein-Clocken', quasi ein Frame-Signal. Vorteil: geht ganz flott und man nimmt das Standard-Header-File vom GPIO-Modul, und nutzt da nur die Basiszugriffe (nicht bei jedem Zugriff Status-Check). Ich habe genau dasselbe Problem mit einem Spartan3e vor kurzem gehabt und wollte auch die Daten über USB übertragen. Aber auf FPGA-Seite gibt eine keinen vernünftigen USB-Core für Full-Speed und wenn, dann nur in 'Zusammenarbeit' mit einem Cypress-Baustein. Auf PC-Seite ist die Programmierung sehr aufwändig. Es geht zwar z.B. mit einem Baustein von FTDI aber davon rate ich ab, weil sich der Baustein unter Laborbedingung ständig 'aufhängt'. Eine wesentlich bessere möglichkeit ist es, TCP/IP zu nutzen, allerdings als Protokoll UDP (also keine 'überwachte' Verbindung, sondern 'schicken' der Daten ohne Kontrolle, ob das Packet auch angekommen ist). Vorteil: 10Mbit (also 8Mbit netto) funktionieren ohne zusätzliche Hardware, das ganze geht mit ca. 20 Zeilen Verilog/VHDL (notfalls geht es sogar ohne Übertrager). Auf der PC-Seite nutzt man den "winsocket", eine einfache Datenverbindung, die auf dem PC nur Daten empfangen muss sind mit socket.c ca. 20 Zeilen. Wenn das FPGA-Board einen "MII"-Baustein besitzt, geht das ganze auch genauso mit 100Mbit (bei mindestens 25Mhz System-Clock). Vielleicht helfen die Informationen - Papa Schlumpf
Zu meiner jetzigen Situaltion: Ich habe eine Peripherie erzeugt (mit FIFO zugriff). In der User Logic habe ich mein Code eingefügt, zur Zeit ein Test LED blinken. In der UCF mein Port für Clock und LED eingebunden. In XPS an den PLB Bus gelegt, Speicherbereich festgelegt. Aber bei den Ports auf "NC". Das XPS Programm gestarte und gewartet, ob die LED blinkt. Leider nicht. Muss ich in dem XPS C File noch die Adresse aufrufen, oder ein Interrupt setzen??? Jetzt ist Zeit das Labor zu verlassen... Danke
Also ich wiederhole mal, um zu sehen ob ich dich richtig verstanden haben. Du hast einen eigenen IP erzeugt und deinen Code dort eingefügt. Du hast den IP eingebunden, am PLB angeschlossen und einen Adressbereich erzeugen lassen. Was du nicht gemacht hast, die Ports deines IP nach draussen geführt und auf obersters Ebene in ISE mit Pads aus dem UCF verbunden. Ist das richtig so? Wen dem so ist, so verwundert es nicht, dass nichts passiert. Also nochmal: 1) IP Gerüst per Wizard generieren 2) Code einfügen in user_logic.vhd 3) Eigenen Code mit PLB Signalen verbinden 4) Alle anderen Ports über die beiden Enities nach draussen führen 5) Im XPS den IP einfügen 6) Mit PLB verbinden und Adressbereich generieren lassen 7) Alle anderen Ports als Externe Signale hinzufügen (in der Drop-Down "Make External" anwählen 8) Den Microblaze im ISE einbinden ("Add Source") 9) Instanziierungstemplate erzeugen und im Toplevel einbinden 10) Ports über die Toplevel Entity nach draussen ziehen 11) Im UCF diese Ports auf Pads des FPGA legen Fertig. Wenn du einen dieser Schritte nicht einhälst, passiert nichts. Hoffe das hilft dir.
Hallo Sven, es würde mich doch interessieren: Hast Du die Standard-USB-IP vom EDK verwendet ? Welchen USB-SW-Treiber verwendest Du PC-seitig ? Welche Datenraten erreichst Du ? Ich würde mich gerne belehren lassen, dass es mit USB auch gut funktioniert. Danke. PapaSchlumpf.
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.