Hallo, ich möchte eine C++ Anwendung auf einen FPGA portieren. Hierzu möchte ich den Softcore Prozessor NIOS II der Firma Altera verwenden. Allerdings bereiten mir mehrere Punkte Kopfzerbrechen und auch nach längerer Suche und wälzen von Dokumentationen komme ich nicht wirklich voran. 1. Ich finde keine Dokumentation in welcher beschrieben wird wie einzelne Module innerhalb von Qsys verbunden werden müssen. Clock und Reset sind klar, aber wie muss z.B. der Instruction Master verbunden werden? Ich habe nur ein entsprechendes Dokument für den SOPC Builder gefunden,eine Umsetzung dieses Tutorials und anschließende Konvertierung nach QSys ist nicht zielführend. 2. Wie lassen sich Systeme mit SDRAM Speicher simulieren? Welche Schritte müssen zusätzlich verrichtet werden? 3. Welche Ursache kann es haben, das bestimmte Elemente nicht in ModelSim angezeigt werden? Das Tutorial AN 351 beschreibt die Simulierung eines Hardware Designs. Hierbei werden in einem Schritt die entsprechenden Signale in das Waveform Fenster geladen, allerdings nicht gefunden. Auch eine Suche von Hand schlägt fehl. Die fehlenden Signale beziehen sich u.a. auf den JTAG Port Der Ziel FPGA ist ein Cyclone II auf einem Board der Firma Altera (EP2C35F672C6). Ich verwende ModelSim 6.6, Quartus 11.0 und Eclipse 3.6.1. über hilfreiche Ratschläge wäre ich dankbar! Gruß, entwickler
also zu 1. kann ich weiterhelfen: überall wo programmcode ausgeführt/geladen wird, muss der instruction master hin. Also jtag, sdram, evtl flash. Ansonsten reicht der data master Bei verwendung von SDRam, DRAM_clock nicht vergessen :) und 3ns Phasendifferenz zwischen CPU_CLK und DRAM_CLK über eine pll realisieren. Erspart viel ärger. zu den anderen punkten: hab noch nie versucht eine nioscore zu simulieren, dafür gibts imho genug andere debugmöglichkeiten. Entgegen irgendeiner Appnote würde ich aber zum simulieren die orginal vhdl-daten hernehmen und nicht die extra für die simluation erstellenten im "simulation" ordner. Da haben mir auch immer mal einige signal gefehlt, dafür waren völlig nutzlose zusätzliche dabei.
Danke für deine Antwort! Sowohl Data Master als auch Instruction Master können dann an den selben Avalon Slave angeschlossen werden, korrekt? Eine PLL benötigt keinen Programmcode, also auch keinen Instruction Master, richtig? Was ist mit DRAM_clock gemeint? Mein Eingangs Clock (50Mhz) läuft durch eine PLL (jetzt 85MHz) und teilt sich anschließend in sysClk und SRAM Clk (Phasenverschoben) auf. Ist die gemeint? Welche anderen Debugmöglichkeiten bieten sich denn an? Schlussendlich muss das ganze ja auf dem Core laufen.Das Problem mit den fehlenden/nutzlosen Signalen konnte ich auch beobachten. Ist des Rätsels Lösung also eine selbstgeschriebene Testbench? Wie kann ich in diesem Fall dann meinen Programmcode (also die ELF) laden?
pll braucht kein instruction richt, wobei ich die bis jetzt schon immer direkt im vhdl-code hatte. Genau dass mit dem verzögerten signal habe ich gemeint, dass passt so. Zum Debuggen des C-Code kann man den gdb verwenden über nios-ide. Wobei ich da auch nicht wirklich erfahrung hab, weil meine c-programme so übersichtlich sind, dass ich noch nicht wirklich debuggen musste. Ich habe mein hardware design in verschiedene module gesplittet und für die dann einzelne testbenches erstellt. Imho der einzig wirklich sinnvolle weg. Am ende noch eine Testbench für die toplevelentity um die richtige zusammenschaltung zu testen. Dabei habe ich dann eben immer die direkt von mir erstellten vhdl-files hergenommen. Hat bis jetzt anstandslos funktioniert, sogar pll wurde ohne weiteres zutun richtig mit simuliert. In Verbindung mit niosdesigns habe ich aber noch nichts mit modelsim simuliert. Den benutzt ich eigentlich nur um ein paar daten am lcd anzuzeigen, oder über uart parameter einzulesen.
Hi, Okaz das alles habe ich soweit verstanden. Mein Problem ist aber nun folgendes: Ich habe den Softcore Prozessor, bzw. mein SOC, bestehend aus JTAG, SDRAM Controller, OnChip Memory, NIOS II Core, PLL, Timer, sysID und PIO. Der Rest meines Codes ist reines VHDL. Mir ist noch nicht ganz klar wie es möglich ist Code auf dem NIOS zu simulieren. Mein Ziel ist eine Weiterverarbeitung von vorverarbeiteten Daten. Auf dem NIOS läuft eine C/C++ Anwendung welche Daten sammelt und vorverarbeitet. Diese Daten sollen in bestimmten Abständen vom Rest der Hardware "abgeholt" werden, idealerweise über den Avalon Bus. Wenn ich nun den NIOS in eine Testbench implementiere, so fehlt ja noch das Programm, denn die VHDL Dateien werden vom SOPC Builder erzeugt. Ich kann also nur die reine Verdrahtung prüfen. Betreffend des Avalon Bus: Wie kann ich mein VHDL Modul mit dem Avalon Bus des SOC verbinden? Ich will nicht extra einen Speicherzugriff direkt auf dem SDRAM implementieren sondern am liebsten über den Aavalon direkt vom SOC lesen. Der PIO ist hierfür nicht geeignet (nicht breit genug, Bus ist variabler und vermutlich auch performanter). Gibt es ein "Avalon nach draussen" Modul im SOPC Builder?
entwickler schrieb:
> Wie kann ich mein VHDL Modul mit dem Avalon Bus des SOC verbinden?
Wenn der Modul von der Software angesprochen werden soll, dann muss es
dafür in den Adressraum der NIOS CPU eingeblendet werden. Das ist nicht
weiter schwierig, das Modul muss nur dafür geeignet sein. Nehmen wir mal
an, in deinem Modul gibt es ein paar Kommando- und Statusregister. Dann
baust Du dir ein Wrapper-Modul als top-level, und dieses Wrapper-Modul
muss Avalon-kompatibel sein. Dann kannst Du es mit dem Component-Editor
in dein SoC einfügen.
Grüße,
Harald
p.s. Simulation eines SoC inklusive Progreamm geht auch, ist aber eher
unüblich. Man muss bei der Generierung des Systems angeben, dass ein
Simulationsmodel erzeugt werden soll, und sagt später in der NIOS SBT
"Run as Modelsim".
Hi Harald, gerade dieses "Run as ModelSim" bereitet mir ja Probleme welche auch von "meiner" beschrieben wurde: fehlende und unnütze Signale. Daher finde ich den Ansatz mit einer selbstgeschriebenen Top level Entity vorerst ansprechender. In wie fern gestaltet sich die beötigte Avalon Kompatibilität? Welche Signale müsen denn alle hierfür bereitgestellt werden? Muss eine state Machine für den kompletten Avalon bereitgestellt werden? Wie kann der NIOS II dann noch auf einen Interupt des selbstgeschriebenen VHDL Moduls reagieren? Bisher liegt dieser Interrupt auf einem PIO Port welcher mit einem Ausgangssignal des selbstgeschriebenen VHDL Moduls verbunden ist.
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.