Hallo zusammen,
ich habe ein Cyclone 3 Starter Kit. Auf diesem befindet sich ein
externer Flash (von Intel), der mit dem FPGA verbunden ist. Diesen
externen Flash versuche ich nun zu beschreiben und schließlich die Daten
von ihm zu lesen. Also vereinfacht gesagt, will ich Schreib- und
Leseoperationen ausführen. Diese Operationen sollen jedoch über die JTAG
Schnittstelle erfolgen. D.h., dass die Daten über die JTAG-Schnittstelle
gesendet werden und schließlich an dem externen Flash anliegen sollen.
Somit sollen auch die Daten über die JTAG-Schnittstelle gelesen werden
können.
Da ich mit FPGAs noch nicht soviel zu tun hatte, kenn ich mich auch
nicht besonders gut mit ihnen aus. Deshalb auch meine Frage, ob dies
jemand schon gemacht hat und mir somit helfen kann? Hat einer eine gute
Idee, wie ich vorgehen kann? Gibt es evtl. von Altera schon
vorgefertigte Tools, die dieses Ziel erreichen? Mir ist jeder Tipp/Rat
willkommen.
Viele Grüße
"Kit Installation"-exe (Altera-Seite) installiert alle
möglichen Infos inkl. Docs etc.
Dort findest du eine Anleitung zum Programmieren des
Flash als auch ein POF-File für das Rücksetzen auf
Werkseinstellung.
Danke für die Antwort.
Nur nutze ich den Altera-Programmer, wenn ich den Flash beschreibe. Ich
will aber eine Art Bootloader in VHDL schreiben, der mir den externen
Flash über JTAG beschreibt. Denn das ganze soll schließlich auf eine
andere Hardware portiert werden.
Hat dazu vllt. jemand eine Idee?
Gruß
Geh einfach in Quartus -> Programmer -> Add Device und dann statt .sof
wählst Du Dein Flash-Device aus (ob jetzt seriell oder parallel musst Du
schauen). Wenn Du soweit bist, wird vom Quartus automatisch (in
Abhängigkeit von Deinem FPGA) ein SOF File in das FPGA erzeugt/geladen
(quasi ein Wrapper JTAG->FLASH) und darüber kannst Du dann Deine Daten
laden.
Und ja, es gibt von Altera Tools dafür. Allerdings habe ich selber noch
nie einzelne Adressen oder so beschrieben, sondern gleich ganze Dateien
geflasht.
Kest
Danke für die Antwort Kest. Trotzdem habe ich noch ein paar Fragen.
Wenn ich dich richtig verstanden habe, kann Quartus selbstständig ein
Programm einfügen, das die JTAG-Schnittstelle mit der
FLASH-Schnittstelle vebindet. Und über dieses Programm ist es mir dann
möglich, meine Daten über JTAG zu flashen. Ist das richtig so? Klappt
das mit jedem beliebigen Flash?
Auf meiner Zielhardware befindet sich nämlich ein MX29LV320C Flash (das
Board ist nur für Testzwecke da). Ist es mit diesem auch möglich? Zudem
würde mich interessieren, wie dieses Programm aussieht. Ist es evtl.
möglich, dass ich den VHDL Code hinter dem Programm sehen kann? Denn
genau diese Programm, das die JTAG- mit der Flash-Schnitstelle
verbindet, will ich nämlich schreiben.
Mir reicht es übrigens, wenn ich die ganzen Programme flashe. Einzelne
Adressen schreiben, liegt zunächst nicht in meinem Interesse.
Und nochmal zum Quartus-Programmer. Wenn ich diesen öffne, dann befindet
sich oberhalb meine kompilierte .sof und unterhalb mein FPGA. Muss ich
nicht vllt. den FPGA highlighten -> Attach Flash Device durchführen?
Kest schrieb:> Geh einfach in Quartus -> Programmer -> Add Device und dann statt .sof> wählst Du Dein Flash-Device aus (ob jetzt seriell oder parallel musst Du> schauen)
Dies verwirrt mich nämlich ein bisschen, da statt einer .sof ein
Flash-Device ausgewählt werden soll?! Deshalb bitte ich nochmals um eine
genauerer Erklärung falls möglich.
Bitte habt etwas Geduld mit mir, denn aller Anfang ist schwer.
Viele Grüße
LdB schrieb:> Wenn ich dich richtig verstanden habe, kann Quartus selbstständig ein> Programm einfügen, das die JTAG-Schnittstelle mit der> FLASH-Schnittstelle vebindet. Und über dieses Programm ist es mir dann> möglich, meine Daten über JTAG zu flashen. Ist das richtig so? Klappt> das mit jedem beliebigen Flash?
Du hast richtig verstanden. Ich denke nicht, dass es mit jedem
beliebigen Flash klappt. Stichwort CFI-Flash: schaue bei Altera nach, ob
das möglich ist. Wichtig ist nur, dass Dein CFI-Flash an den "richtigen"
Pins des FPGAs häbngt (Standardbelegung), denn woher soll dann das FPGA
wissen, wie Dein Flash angebunden ist ;-)
LdB schrieb:> Zudem> würde mich interessieren, wie dieses Programm aussieht. Ist es evtl.> möglich, dass ich den VHDL Code hinter dem Programm sehen kann? Denn> genau diese Programm, das die JTAG- mit der Flash-Schnitstelle> verbindet, will ich nämlich schreiben.
Wenn Du das machen möchtest, dann müsstest Du tiefer in die Materie
einsteigen. Es gibt keinen fertigen VHDL Code dafür. Aber Du könntest
ein NIOS System erstellen mit einem CFI-Flash controller, dann in C die
Flash-Bibliotheken einbinden -- dann hättest Du die Möglichkeit Flash zu
beschereiben/zu lesen. Dann müsstest Du Dich noch mit JTAG-Schnittstelle
auseinandersetzen, um darüber die DAten zu schieben. Ist wohl möglich,
aber ich habe es nie gemacht (mit JTAG).
Was ich öfters gemacht habe war einfache ein "Bootloader": die Daten
kommen über UART/USB/Ethernet rein und werden in das Flash
geschrieben/gelesen.
LdB schrieb:> Und nochmal zum Quartus-Programmer. Wenn ich diesen öffne, dann befindet> sich oberhalb meine kompilierte .sof und unterhalb mein FPGA. Muss ich> nicht vllt. den FPGA highlighten -> Attach Flash Device durchführen?
Ja, genau das musst Du tun!
LdB schrieb:> Dies verwirrt mich nämlich ein bisschen, da statt einer .sof ein> Flash-Device ausgewählt werden soll?! Deshalb bitte ich nochmals um eine> genauerer Erklärung falls möglich.
Sobald Du "Attach Flash Device" gemacht hast, wird Deine "*.sof" Datei
blau gehiglighted. Das heißt, diese Datei kommt jetzt von Altera
(Factory default PFL image)
Das müsste so gehen (ob das mit Deinem Flash geht, kann ich aber nicht
sagen, kannst Du aber mit Verify mal "checken", ob's läuft).
Ansonsten liesmal die Doku (Stichwort: CFI, PFL image, Flash
programming...) :-)
Grüße,
Kest
Also nochmals Danke für die ausführliche Erklärung.
Also ich benutze noch das Cyclone 3 Starter Kit als Testhardware. Und
ich bin langsam am verzweifeln. Ich bin genau wie Du es gesagt hast
vorgegangen und trotzdem ist das Ganze fehlgeschlagen.
Zunächst habe ich mein Design kompiliert und den Programmer gestartet.
Über Attach Flash Device habe ich den auf dem Board befindlichen Intel
128Mb Flash ausgewählt. Nur habe ich das Problem, dass meine .sof nicht
blau gehighlightet wird. Als, dass der factory default PFL, wie bei dir
eingefügt wird. Und beim Laden des Programms es eine Fehlermeldung gibt.
Hast du evtl. dafür auch eine Idee? Muss ich vllt. noch irgendetwas
aktivieren?
Gruß
Du brauchst keine SOF!
- Einfach alles löschen
- Add device
- FPGA Auswählen (Cyclone III)
- auf das "none" gehen
- rechte Masutaste -> "Attach Flash Device"
- Flash auswählen -> ok
- es steht immer noch "none" nicht in Blau!
- jetzt auf z.B. "black check" beim Flash kliken
- "none" wird zu "Factory default PFL image"
Das war's
Kest
Vielen Dank Kest. Es hat gleich funktioniert.
Nur noch eine Frage zu deinen "Bootloadern", da ich ja das gleiche
ereichen will. Hast du diese Bootloader in VHDL geschrieben oder hast du
sie in einem Nios System erstellt? Was ist deiner Meinung nach
einfacher, da ich mich zuerst daran versuchen will, bevor ich evtl. die
schwerer Methode angehe?
Wäre nett, wenn du mir noch antwortest, auch wenn du schon die Nerven
mit mir verloren hast ;-).
Gruß
Ich habe alles mit dem SOPC und NIOS erstellt. Die Treiber für Flash
gibts ja auch noch dazu deshalb macht da keinen Sinn selber was zu
machen.
Mit dem SOPC ist es auf jeden Fall einfacher (und schneller)! Es gibt ja
unendlich viele Beispiele von Altera (Application Notes).
Grüße,
Kest
Also ich habe mich jetzt für die Qsys-Variante entschieden. Der
SOPC-Builder von Quartus ist scheinbar veraltet. Ist aber soviel ich
weiß dasselbe.
Für mein System habe ich nun folgende Komponenten:
- einen NIOS2 prozessor
- ein System ID Peripheral
- ein Common Flash Interface
- ein JTAG UART Core
Ist das alles? Oder habe ich evtl. etwas vergessen?
Gruß
LdB schrieb:> Ist das alles? Oder habe ich evtl. etwas vergessen?
Mal doch mal, wie Du die Komponenten miteinander verbinden willst.
Da kann man auch viel besser Lücken und Engpässe ausmachen.
Duke
Duke Scarring schrieb:> Mal doch mal, wie Du die Komponenten miteinander verbinden willst.
Ok. Ich habe ein Bild angefügt, wie des ganze System aussehen soll.
Zudem habe ich die genaue Verschaltung des Systems in Qsys angehängt.
Nun habe ich aber ein Problem mit dem Adress Map. Ich weiß nicht ganz
genau, wie man die Base-Adresse und die End-Adresse herausfindet oder
berechnet. Ich habe nämlich noch einen Haufen voll von Errors, weil die
Adressen sich überlappen. Kann mir einer sagen, wie ich die Adressen
berechnen kann, sodass die Messages verschwinden? Die Wahl der Adressen
ist doch nicht beliebig oder?
Gruß
Hallo,
ich habe ja schon vorhin geschrieben -- für den Nios bräuchtest Du jetzt
RAM, zur Zeit lässt Du alles aus dem Flash laufen -> keine gute Idee,
wenn man mit dem Zugriff auf den Flash noch nicht klar kommt. Mach also
ein On-Chip Memory rein, mit der passenden Größe und verbinde es mit dem
NIOS.
Um die Basis-Adressen automatisch zuzuweisen gehst Du auf System->
Assign Base Addresses.
Grüße,
Kest
Also, ich hab jetzt die Hardware-Komponenten fertig, wie man im
Screenshot sieht. Ich habe das System mit Qsys aufgebaut. Muss nun noch
die .qsys umgeformt werden, damit ich die.sopcinfo bekomme? Oder brauch
ich die erst gar net?
Mein Vorgehen sieht jetzt wie folgt aus. Zunächst werde ich nun in
Quartus in einer .bdf das System implementieren und den Clk und Reset
mit Inputpins versehen und die Ausgänge zuweisen. Danach das System
kompilieren um die .sof zu erhalten. Mit dieser .sof muss ich ja mein
FPGA laden. Nun sollte es mir in NIOS2 SBT for Eclipse möglich sein,
mein System zu generieren. Die C-Bibliotheken müssten dann schon
enthalten sein oder irre ich mich da? Muss ich diese evtl selbst
einfügen? Wenn dies geschehen ist, kann ich ja die Software in mein
Nios-System laden und es sollte funktionieren. Hab ich evtl etwas
vergessen?
Und zuletzt würde mich interessieren, ob des ganze überhaupt mit der
Quartus II Web Edition möglich ist oder brauche ich die lizensierte
Version?
Grüße
Das ganze funktioniert auch mit der Web-Edition (falls nur NIOS-e
eingebunden wird). Ansonsten musst Du halt immer JTAG dranlassen.
Wenn Du Eclipse startest, neues Projekt anlegst, die richtige .sopcinfo
auswählst, werden alle treiber-Dateien automatisch eingebunden.
Kest
Also ich habe jetzt mein Qsys-System fertig. Die Generierung war
ebenfalls erfolgreich mit keinen Errors und keinen Warnings. Nun füge
ich mein System in mein Quartus-Projekt ein. Dazu erstelle ich eine .bdf
und füge das System als Blockschaltbild ein, verbinde die Ein- und
Ausgänge jeweils mit den richtigen Pins. Nur ist mir aufgefallen, dass
die JTAG-Schnitstelle nicht im Blockschaltbild vorhanden ist. Ist das so
richtig?
Nachdem ich nun die.qip eingebunden habe, kompilier ich nun das ganze
System. Dies geschieht auch ohne Errors, jedoch mit 72 Warnings. Davon
sind vier critical Warnings. Ist das normal? Funktioniert des System
trotzdem, wie es soll?
Zumindest will ich noch die Critical Warnings wegbekomen. Und zwar
erhalte ich viermal:
Critical Warning (332168): The following clock transfers have no clock
uncertainty assignment. For more accurate results, apply clock
uncertainty assignments or use the derive_clock_uncertainty command.
Hattest du des schon und kannst mir helfen?
Gruß