Forum: FPGA, VHDL & Co. Entwicklung von C/C++ Anwendung auf einem NIOS II mit SD-RAM


von entwickler (Gast)


Lesenswert?

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

von meiner (Gast)


Lesenswert?

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.

von entwickler (Gast)


Lesenswert?

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?

von meiner (Gast)


Lesenswert?

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.

von entwickler (Gast)


Lesenswert?

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?

von Harald F. (hfl)


Lesenswert?

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".

von entwickler (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.