Hallo. Ich habe jetzt schon eine ganze weile in diesem Forum nach einträgen gesucht die mir helfen könnten und leider nichts gefunden. Seit kurzem Besitze ich das Eva. Board DE1 von Altera. Ich habe schon kleinere VHDL-dateien geschrieben und sie erfolgreich über JTAG auf den FPGA Cyclon II EC2C20F484C7 übertragen. Jetzt wäre die nächste Aufgabe in meinem Projekt den NIOS II prozessor auf den FPGA zu bringen und programmierbar zu machen. Da ich neu bin auf dem Gebiet habe ich absolut keine Ahnung wie ich das angehen muss. ein paar tipps zum anfang wären nicht schlecht, da die tutorials nicht gerade übersichtlich sind und mich zum teil eher verwirren. über links die das vorgehen leicht und verständnisvoll beschreiben wäre ich auch dankbar hier ein paar fragen vorab: angenommen ich hab den NIOS II prozessor nun auf dem fpga und schreibe jetzt eine c-datei mit NIOS II IDE, wird dann der prozessor dabei nicht überschrieben wenn ich anschließend diese auf den fpga übertrage oder muss ich einen anderen speicherplatz angeben? und wie verwende ich dann die PINs/ports? haben diese Namen oder Adressen? Ich möchte zum einstieg erstmal ein programm schreiben das eine led des boards blinken lässt. wär super wenn ihr mir helfen könntet danke schon im vorraus tutsch
Hallo, bin durch nachforschen im internet auf ein nios tutorial gestoßen. Hab alles genau nach gemacht wie es dort verlangt wurde. Wenn ich jetzt beim SOPC-Builder jetzt allerdings auf generate klicke kommt folgende Fehlermeldung. die datei nios_sh ist in dem ordner jedoch vorhanden. woran könnte es liegen? Info: first_nios2_system: Generating QIP file. Info: Starting PTF file elaboration. 5 [main] sh 988 fork: child 1164 - died waiting for longjmp before initialization, errno 11 d:/programme/altera fpga/quartus/sopc_builder/bin/nios_sh: fork: Resource temporarily unavailable 8 [main] sh 3408 fork: child 2980 - died waiting for longjmp before initialization, errno 11 d:/programme/altera fpga/quartus/sopc_builder/bin/nios_sh: fork: Resource temporarily unavailable Error: D:\Programme\altera fpga\NIOS2_Prozessor_SELBER/first_nios2_system.ptf: Failed to refresh PTF file Info: Finished elaborating PTF file. Executing: d:/programme/altera fpga/quartus//sopc_builder/bin/sopc_builder --classic --generate D:/Programme/altera fpga/NIOS2_Prozessor_SELBER/first_nios2_system.ptf Info: Starting generation... 6 [main] sh 3964 fork: child 1652 - died waiting for longjmp before initialization, errno 11 d:/programme/altera fpga/quartus/sopc_builder/bin/nios_sh: fork: Resource temporarily unavailable Error: System generation failed. gruß christoph
Installationspfad mit spaces scheint dem SOPC Builder immer noch nicht zu bekommen: d:/programme/ altera fpga /quartus/sopc_builder/ Cheers, Roger
hi, erstmal danke für deine antwort. habe jetzt quartus auf ein neues verzeichnis installiert. jetzt bringt er beim generieren diese Fehlermeldung Info: meinNIOS2: Generating QIP file. Info: Starting PTF file elaboration. 6 [main] sh 3868 fork: child 2324 - died waiting for longjmp before initialization, errno 11 d:/programme/altera/quartus/sopc_builder/bin/nios_sh: fork: Resource temporarily unavailable Error: D:\Programme\altera\meinNIOS2/meinNIOS2.ptf: Failed to refresh PTF file Info: Finished elaborating PTF file. Executing: d:/programme/altera/quartus//sopc_builder/bin/sopc_builder --classic --generate D:/Programme/altera/meinNIOS2/meinNIOS2.ptf Info: Starting generation... 6 [main] sh 4092 fork: child 2000 - died waiting for longjmp before initialization, errno 11 d:/programme/altera/quartus/sopc_builder/bin/nios_sh: fork: Resource temporarily unavailable Error: System generation failed.
habe den Fehler immernoch und kann ihn nicht beseitigen, hat jemand von euch eine idee woran es liegen könnte? (betriebssystem vista, quartus v7.2) gruß christoph
An deiner Stelle würde ich die 9.0 Version der Quartus Software sowie die der NiosII IDE installieren. Wie Roger schon bemerkte, lass die Leerzeichen im Installationspfad raus. Dann müsste die Geschichte ohne Probleme funktionieren. Habe hier das gleiche Bord vor mir liegen und benutzte die besagten Version beider Programme; das klappt prima! Gruss, Matthias
hi, ihr hattet recht, mit der version 9.0 funktioniert alles einwandfrei!! Danke. Nun noch eine frage: ich hab jetzt ein NIOS II prozessor auf meinen board gespielt und möchte es jetzt mit NIOS IDE programmieren. als erstes habe ich ein beispiel programm "binary_count" verwendet was einwandfrei funktioniert. Wenn ich jetzt aber mein eigenes Programm schreibe, wie greife ich dann auf die IOs zu? kann ich die Namen vom Blockschaltbild verwenden oder die Adressen? und wenn die adressen, wie finde ich sie? Oder doch die einzelnen PINS? vielen dank schonmal. Ihr habt mir bisher sehr geholfen
Beides geht! Nach der ersten Kompilierung (Build) kannst du die Headerdatei "system.h" einbinden. In ihr sind jegliche Zuordnungen enthalten. Wenn du nun auf eine PIO names INTERFACE zugreifen möchtest kann das über den Alias INTERFACE_BASE geschehen oder die Adresse die diesem define in der Headerdatei zugeordnet wurde. Also einfach mal via SOPC Builder eine PIO Einbinden, als Ausgang konfigurieren und schon kanns losgehen. Gruss, Matthias
danke mathias. Aber irgendwie wills bei mir nicht klappen. Also ich hab jetzt mein blockschaltbild mal angehängt. über jtag programm drauf gespielt und den prozessor mit einem count_binary standard programm getestet und funktioniert einwandfrei. jetzt hab ich selber ein neues projekt mit dem nios II ide gemacht und erstmal build geklickt. danach diese quelldatei geschrieben: #include "system.h" int main(void) { LEDG0=0; LEDG1=1; } natürlich gab es beim Kompilieren Fehler. wie genau müsste ich jetzt vorgehen wenn ich LEDG0 z.b. auf null setzen möchte? (blockschaltbild im anahng)
Wie ich sehe heisst deine PIO LED_PIO, sprich du musst diese mit PIO_LED_BASE ansprecehn, wenn du den Portstate verändern mäöchtest. Bei deinem Programm wirst du zudem das Problem haben, dass du das Toggeln der LED's nicht sehen wirst. Das geht leider etwas zu schnell ;-) Klick mal auf system.h, da findest du dann irgendwo dein PIO Interface. Wie du siehst steht hinter dem ..._BASE #define nichts anderes als die Adresse, die du der Komponente im SOPC Builder zugordnet hast. Gruss, Matze
hi ok. also ich habe jetzt den port mit LED_PIO_BASE angesprochen. hiermein programm das nur die erste led des ports aufleuechten lassen soll: #include "system.h" int main(void) { LED_PIO_BASE=1; while(1); return 0; } Bekomme aber folgende Fehlermeldung make -s all includes Compiling main.c... ../main.c: In function `main': ../main.c:9: error: invalid lvalue in assignment make: *** [obj/main.o] Error 1 Build completed in 20.353 seconds
Sorry, da habe ich selbst gerade etwas übersehen. Probiere es mal bitte so: #include "altera_avalon_pio_regs.h" #include "system.h" #include <stdio.h> int main() { IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0x01); while (1); return 0; } Matze
funktioniert leider auch nicht. hier die fehlermeldung: **** Build of configuration Debug for project blank_project_0 **** make -s all includes Compiling main.c... ../main.c: In function `main': ../main.c:6: error: syntax error before numeric constant make: *** [obj/main.o] Error 1 Build completed in 27.554 seconds
jetzt gehts. ich habe noch ein paar enter nach der main klammer gemacht und jetzt kompiliert er es fehlerfrei....kein plan warum. ist wohl ein bug im prgramm. aber jetz wäre es noch super wenn du mir erklären könntest was diese zeile macht und wieso ich diese funktion aufrufen muss. ist es nicht direkt möglich den port zu beschreiben? IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0x01); christoph
Müsste so laufen #include "system.h" int main() { unsigned int *ptr = (unsigned int*)LED_PIO_BASE ; *ptr =0x01; while (1); return 0; } Gruss, Matze
"aber jetz wäre es noch super wenn du mir erklären könntest was diese zeile macht und wieso ich diese funktion aufrufen muss. ist es nicht direkt möglich den port zu beschreiben? IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0x01);" Dies ist eine einfache Definition in der Headerdatei: #include "altera_avalon_pio_regs.h" Macht die ganze GEschichte etwas lesbarer.
ok. schonmal vielen dank. wenn ich jetzt den port einen namen geben möchte. wie gehe ich dann vor? z.b. ich möchte meinen port jetzt Port3 nennen. ich kenne es so, dass man dann z.b. sfr Port3 = 0xAdresse schreibt. mir ist aufgefallen, dass das bei nios leider nicht geht. Gibts eine möglichkeit soetwas zu machen? (sozusagen eine eigene Headerdatei zu erstellen)
Was meinst du denn genau mit Port? Der Port hat doch schon einen Namen --> PIO_LED_BASE !?!
> ich kenne es so, dass man dann z.b. sfr Port3 = 0xAdresse schreibt.
Hier ist es halt anders.
Folgendes ist moeglich:
1 | volatile unsigned long* my_port = (volatile void*)PIO_LED_BASE; |
2 | *my_port = 0xCAFEBABE; |
Nur machst du dir damit eine Wurmbuechse auf. Die Register der SOPC Komponenten sind memory mapped, darunter auch die des PIO. Sobald du ein NIOS mit data cache hast, sind die selbst gestrickten Zugriffe nicht mehr zuverlaessig. Sollte die PIO Komponente mal eine andere register map haben, faellst du damit auch auf die Nase. Desshalb gibts die Makros wie
1 | IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0xCAFEBABE); |
da wird dann ein Zugriff mittels IO Instruktion gemacht, welche am cache
vorbei gehen.
> (sozusagen eine eigene Headerdatei zu erstellen)
All die Arbeit nimmt dir der SOPC Builder ja ab, alle Komponenten sind
in der system.h drin.
Cheers, Roger
ok gut danke. welche funktionen gibt es denn noch und wo finde ich diese? wie spreche ich dann zum beispiel meinen timer an? gruß christoph
genauso wie deine PIO --> memory mapped peripheral components. Der Timer hat wie dein PIO Interface eine fix definierte Adresse. Die Funktionalität des Timers, sowie aller anderer Komponenten ist auf eine Registerstruktur abgebildet. Durch das beschreiben der jeweiligen Register kannst du den Timer konfigurieren, starten etc. Schau dir mal das Altera Handbuch zu diesem Thema an. Gruss, Matze
Hallo zusammen, ich habe ein paar Codes, Matrizen Rechnungen,Kalman Filter,Gauß Verfahren und mochte die auf FPGA zum laufen bringen. Da ich nur die Codes kenne und weisst nicht wie der Einstiegt dazu ist, möchte ich wissen was ist für mich den nächsten Schritt, wo soll ich anfangen. Gruß. Castro
hi leute, habe gerade diesen thread hier gefunden! Dieser passt ziemlich genau auf mein problem das ich zurzeit auch habe. Habe eine ganz ähnliche Struktur, aus dem angehängten Blockschaltbild könnt ihr entnehmen das dies dem weiter oben dargestellten recht nahe kommt. Dieses Struktur habe ich mit der Software Quartus 2 und dem SOPC Builder erstellt. Am Ausgang des PIO ist noch ein zusätzliches Nicht Glied geschaltet da das Entwicklungsboard auf dem ich arbeite (Cyclone II mit EP2C25F672C6N FPGA) mit negativer Logik arbeitet und die LED's ohne dieses Nicht Glied quasi immer angeschaltet wären. Dies habe ich nun mit Quartus 2 vollständig kompiliert und auf mein FPGA geschrieben, dies funktioniert auch einwandfrei. Jetzt möchte ich ebenfalls gewisse LED's ansteuern. Ab diesem Punkt komme ich nicht mehr weiter. Denn ich möchte dazu die "System Console" des SOPC Builders nutzen und damit quasi die LED's steuern. Dies soll schlußendlich darauf hinauslaufen das ich beispielsweise die Koeffizienten eines FIR Filters ändern kann, ohne das komplette Design immer neu kompilieren zu müssen. Hoffe ihr könnt mir hier helfen! lg phil
Phil schrieb: > habe gerade diesen thread hier gefunden! Dieser passt ziemlich genau auf > mein problem das ich zurzeit auch habe. Aber trotzdem haettest du einen neuen thread aufmachen koennen! > Jetzt möchte ich ebenfalls gewisse LED's ansteuern. > Ab diesem Punkt komme ich nicht mehr weiter. Da die LEDs an einem PIO haengen und dieser an einem NIOS, machst du das in C. Kreiere ein neues C/C++ Projekt im NIOS EDK und waehle als template "Board Diagnostics" dann solltest du was zum zurechtschnippeln haben. > Denn ich möchte dazu die "System Console" des SOPC Builders nutzen und > damit quasi die LED's steuern. Die System Console steht dir als stdin/stdout zur verfuegung, wenn du in deinem SOPC eine JTAG UART drinn hast und diese in der sytem library auch darauf gemapt hast. > Dies soll schlußendlich darauf hinauslaufen das ich beispielsweise die > Koeffizienten eines FIR Filters ändern kann, ohne das komplette Design > immer neu kompilieren zu müssen. Oje, laeuft der FIR in software oder als HDL? Bei letzterem nimmst du besser eine oder mehrere virtual JTAG komponenten. Cheers, Roger
hi roger, vielen dank erstmal für deine wirklich flotte antwort" "Aber trotzdem haettest du einen neuen thread aufmachen koennen!" Ich hab das deshalb nicht gemacht weil es in vielen anderen Foren immer heißt "benutzt doch erstmal die Such-Funktion" ;-) " > Jetzt möchte ich ebenfalls gewisse LED's ansteuern. > Ab diesem Punkt komme ich nicht mehr weiter. Da die LEDs an einem PIO haengen und dieser an einem NIOS, machst du das in C. Kreiere ein neues C/C++ Projekt im NIOS EDK und waehle als template "Board Diagnostics" dann solltest du was zum zurechtschnippeln haben. " Okay erstmal, wo in welchen Dokument finde ich die Information das die PIO an einem Nios hängen? Leider ist mir die allgemein diese struktur noch etwas schleierhaft. Nun ich wollte mit Nios 2 IDE genau das erstellen, allerdings fehlt mir wohl was zum "zurechtschnippeln" Was meinst du damit? Ich habe anbei mal ein Screenshot drangehängt, was meine Problemstellung verdeutlichen soll. " > Denn ich möchte dazu die "System Console" des SOPC Builders nutzen und > damit quasi die LED's steuern. Die System Console steht dir als stdin/stdout zur verfuegung, wenn du in deinem SOPC eine JTAG UART drinn hast und diese in der sytem library auch darauf gemapt hast. " In meinem SOPC habe ich folgendes drin: JTAG to Avalon Master Bridge ("Avalon Memory Mapped Master") PIO ("Avalon Memory Mapped Slave") Diese sind auch miteinander verbunden im SOPC. Ich habe diese Konfiguration so übernommen weil diese in einem Beispiel "LED Lightshow Example" welches in einem Alterdokument drin stand, so vorgegeben wurde. Den Rest lasse ich einfach mal weg da ich nunmal Neuling auf diesem gebiet bin und mir das alles noch ein wenig schwer fällt. :-) lg phil
Phil schrieb: > "Aber trotzdem haettest du einen neuen thread aufmachen koennen!" > Ich hab das deshalb nicht gemacht weil es in vielen anderen Foren immer > heißt "benutzt doch erstmal die Such-Funktion" ;-) Mag sein, bloss hast du ein neues Problem, das verdient auch einen neuen thread, weil um dir zu helfen will keiner das alte Geschreibsel durchackern. > Okay erstmal, wo in welchen Dokument finde ich die Information das die > PIO an einem Nios hängen? Leider ist mir die allgemein diese struktur > noch etwas schleierhaft. Das legst du im SOPC builder fest. > In meinem SOPC habe ich folgendes drin: > JTAG to Avalon Master Bridge ("Avalon Memory Mapped Master") > PIO ("Avalon Memory Mapped Slave") Das reicht nicht fuer das Nios EDK, um damit ein C/C++ Projekt betreiben zu koennen brauchts mindestens noch eine NIOS CPU und etwas Speicher. 4KB On-Chip RAM reichen fuer etwas blinke blinke. Die Fehlermeldung in deinem screenshot sagt uebrigens dasselbe. > Diese sind auch miteinander verbunden im SOPC. Ich habe diese > Konfiguration so übernommen weil diese in einem Beispiel "LED Lightshow > Example" welches in einem Alterdokument drin stand, so vorgegeben wurde. Da hat es sicher auch ein NIOS drinn. Cheers, Roger
"Das reicht nicht fuer das Nios EDK, um damit ein C/C++ Projekt betreiben zu koennen brauchts mindestens noch eine NIOS CPU und etwas Speicher. 4KB On-Chip RAM reichen fuer etwas blinke blinke. Die Fehlermeldung in deinem screenshot sagt uebrigens dasselbe." Okay das wusste ich nicht! "Da hat es sicher auch ein NIOS drinn." Das ist eben der Punkt, im SOPC Builder von diesem Beispiel taucht keine Nios CPU und kein Ram Speicher auf!!! Daher bin ich davon ausgegangen das meins dann stimmt...leider fehlt mir die Kenntniss darüber ob das nicht doch in irgend einem HDL Code drin steht..ich weiß es nicht. Okay nun gut ich habe jetzt im SOPC Builder noch eine Nios CPU eingefügt sowie 4 KB Ram Speicher den du erwähnt hattest. Nachdem ich das nun in mein Schematic File eingebunden und nochmal kompiliert habe, hat es anschließend funktioniert. Ich konnte über die "System Console" ganz einfach die LED's ansteuern! Danke nochmal für deine Hilfe!! Werde für meine nächste Frage nun einen neuen Thread aufmachen, das ist doch ein klein wenig komplexer! :-) lg Phil
Und hier ist noch ein Einsteiger ;-) Ich hab eine n-Kanal-PWM mit dem Nios verknüpft und greife wie folgt auf eine PWM zu: void PWMout (int channel, int value){ IOWR_ALTERA_AVALON_PIO_DATA(PWM_SEL_BASE, channel); IOWR_ALTERA_AVALON_PIO_DATA(PWM_DATA_BASE, value); } while( 1 ) { PWMout(1, 50); } return 0; Wie bekomme ich es jetzt hin, gleichzeitig mehrere Kanäle (unabhängig voneinander) anzusteuern. Und ich bin (noch) kein C-Guru. Arbeite mich gerade erst ein.
> und greife wie folgt auf eine PWM zu:
Muss heißen: " und greife wie folgt auf einen PWM-Kanal zu:... "
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.