Hallo, ich habe ein Lattice ECP2-Board und möchte darauf den LM32-uP integrieren. Ich habe zunächst eine sehr einfache Konfiguration für den LM32 gewählt: LM32 + 16kB EBR über Wishbone angeschlossen. Exception Adresse (EBA) im LM32 ist auf die Startadresse des EBR's eingestellt. Diese Konfiguration lässt sich scheinbar auch ohne größere Probleme auf den FPGA bringen. Starte ich nun ein einfaches Beispielprogramm (LEDtest) im Debug-Modus über Eclipse so funktioniert alles bestens. Jetzt wollte ich das Programm (bzw. zur Benutzung im EBR erstellte .mem-Datei) über Memory Initialization im ISPLever in den Bitstream in den FPGA integrieren und anschließend einspielen und ablaufen lassen (ohne Eclipse zu benutzen). Weiterhin habe ich versucht das so generierte Bit-File in den SPI-Flash zu bringen. Leider tut sich in beiden Fällen rein gar nichts. Der LM32 scheint auf dem FPGA zwar richtig erstellt worden zu sein (man kann ohne Probleme den Debug-Modus starten und das Programm darüber zum laufen bringen), aber das Programm läuft nicht selbstständig nach dem Übertragen des Bitstreams los (es wird nach einiger Zeit ein Reset ausgelöst). Hat vielleicht jemand eine Idee woran das liegen kann. Kann man den EBR gar nicht über den Bitstream via Memory Initialization initialisieren? Oder wird bei der Erstellung des EBR mit Hilfe des MicoSystemBuilders gar kein EBR erstellt und man muss dieses erst noch im ISPLever über PCIExpress hinzufügen?
Hi, 1) eine Initialisierung des EBRs aus dem Flash Inhalt ist auf jeden Fall möglich. 2) es ist eher unwahrscheinlich (aber möglich), dass kein EBR angelegt worden ist. Falls ja, muesste es eine diesbzgl. Meldung im Synthese Report geben. Ich glaube in dem Memory Abschnitt, kann man die hierarchische Pfade zu allen EBRs finden. Vorsichtshalber hier nachschauen. 3) Woran das liegen kann? Falls 2) in Ordnung ist, tippe ich zunächst auf die Startadresse. Welcher Wert hast Du im Microsystem Builder (MSB) eingestellt? Sind Deine EBR-Selects usw. in Ordnung? Nachdem Du anscheinend so ein schönes abgeschlossenes System hast, würde ich es auch mit einer kurzen Simulation probieren. Hier kannst Du sehen, ob der erste Befehl tatsächlich aus dem EBR geholt wird.
Hallo, erst mal danke für schnelle die Antwort. > 1) > eine Initialisierung des EBRs aus dem Flash Inhalt ist auf jeden Fall > möglich. Das ist gut zu wissen, ich zweifelte nämlich so langsam daran, obwohl es explizit in den Manuals aufgeführt ist, dass man das Programm via Memory Initialization in das Bitfile einbetten kann. > 2) > es ist eher unwahrscheinlich (aber möglich), dass kein EBR angelegt > worden ist. Falls ja, muesste es eine diesbzgl. Meldung im Synthese > Report geben. Ich glaube in dem Memory Abschnitt, kann man die > hierarchische Pfade zu allen EBRs finden. Vorsichtshalber hier > nachschauen. Es werden während der Synthese zwar eine Menge Warnungen ausgegeben, aber keine Fehlermeldung. In dem Memory Initialization Tool im ISPLever kann ich das EBR auch sehen und die zugehörigen Pfade sind dort auch angegeben. Ich wähle das entsprechende EBR an (es gibt noch zusätzlich welches für den Cache) und gebe dann den mem-File an, den es beinhalten soll. Nach dem Abspeichern erhalte ich die Meldung das die Änderung im zugehörigen Place&Route-File abgespeichert wurde. Anschließend wird der Bitstream mit diesem File neu generiert. Was mich aber ein wenig wundert ist, dass wenn ich das Memory-Tool ein zweites mal aufrufe dort der mem-File nicht mehr eingetragen ist. Vielleicht ist das aber auch richtig so. > 3) Woran das liegen kann? Falls 2) in Ordnung ist, tippe ich zunächst > auf die Startadresse. Welcher Wert hast Du im Microsystem Builder (MSB) > eingestellt? Sind Deine EBR-Selects usw. in Ordnung? EBR steht auf der Startadresse 0x00004000, den gleichen Wert habe ich im EBA des LM32 angegeben. Adressen hab ich danach im MSB vor der Generierung der Verilog-Module gelockt. DRC läuft ohne Fehler durch. Das sollte doch so richtig sein? Wie gesagt, wenn ich das Programm über Eclipse im Debug-Modus oder Run-Modus starte, läuft es ohne Probleme. Das spricht doch eigentlich dafür, dass die Adressen richtig sind. Muss vielleicht das Debug-Interface im LM32 entfernt werden (steht auf Adresse 0x0)? Ja, ich befürchte auch, dass irgendein EBR-Select nicht richtig desetzt ist. Im MSB kann man aber nur Größe und Startadresse des EBR angegeben (und Initialisierungs File, dies hat aber den gleichen Effekt, als wenn man das über das Memory Tool im ISPLever angibt). Ich erhalte nämlich während der Systhese die Warnung, dass in den EBR-Modulen das globale Reset (GSR) disabeled ist und man darauf achten soll, dass beim Startup Write-Enable und Chip-Enable ebefalls disabled werden, damit der Code im EBR nicht beschädigt wird. Wie kann ich weitere Selects des EBR's vornehmen, wenn es über das MSB generiert wurde? Direkt im Verilog-Code? > Nachdem Du anscheinend so ein schönes abgeschlossenes System hast, würde > ich es auch mit einer kurzen Simulation probieren. Hier kannst Du sehen, > ob der erste Befehl tatsächlich aus dem EBR geholt wird. Ja, habe ich bereits gemacht. Simulation läuft ohne Probleme inklusive mem-File. LED-Ausgänge blinken auch in der Simulationsausgabe. Allerdings muss man für die Simulation auch die Peripherals des LM32 austauschen. Anstatt der Black-Box-Modelle für die Synthese (im pmi_dev.v), muss man die Behavioral-Modelle für die Simulation benutzen (macht natürlich auch Sinn). Insofern ist die Simulation nicht mehr identisch mit der Synthese - wodurch man z.B. Punkt 2 nicht ausschliessen kann.
Hi, es ist schon eine Weile her seitdem ich zuletzt etwas mit Mico32 gemacht habe. Wegen den Details muesste ich nochmal nachschauen. Im SW-Developers Guide (so ca. Seite 300 in der Ausgabe von Okt. 2008) gibt es eine Anleitung wie man die Memory Files generieren muss. Der Abschnitt heisst "Advanced Programming Topics -> Deploying to On-Chip Memory" Hast Du Deine "Memory Initialisation File" auch so generiert?
Hallo, > Im SW-Developers Guide (so ca. Seite 300 in der Ausgabe von Okt. 2008) > gibt es eine Anleitung wie man die Memory Files generieren muss. Der > Abschnitt heisst "Advanced Programming Topics -> Deploying to On-Chip > Memory" > > Hast Du Deine "Memory Initialisation File" auch so generiert? Habe ich mir durchgelesen und meiner Meinung nach habe ich das auch alles so gemacht wie beschrieben. Eigentlich ist ja gerade die Initialisierung eines EBR-Memories nicht besonders kompliziert :(
Hi Mark, inzwischen habe ich mein Lattice Board ausgegraben und das LED Demo aus dem on-chip RAM zum laufen gebracht. Ich weiss nicht, ob ich mich an dem Manual gehalten habe aber es lief in etwa ab wie ich es mir vorgestellt habe. Hier vielleicht noch ein Paar Punkte: 1) Im MSB Fenster -a- "Location of Exception Handler" für den Mico32 muss identisch sein mit der Basisadresse des EBRs -b- Dopple Click auf EBR: Initialisation File muss die Datei sein die von der SW-Build angelegt wird. Ggfs. Zeitstempel vergleichen. Ich habe File-Format 'Hex' gewählt 2) Nach dem SW Build, Tools -> Software Deployment aufrufen. Hier die Mem Init Datei festlegen, die oben unter 1b) verwendet wird. 3) Nachdem der SW Deployment gelaufen ist, FPGA neu synthetisieren. Sonst wird die Mem Init Datei nicht im Bitstream übernommen 4) Falls Du vorher z.B. aus ext. Flash+(SD)RAM gelaufen bist, hast Du möglicherweise noch ein Code-Copy Stub mitgelinkt. Das brauchst Du beim Laufen aus dem internen EBR natürlich nicht Viel Erfolg.
Hi Mark, "normalerweise" funktionieren beide Fälle. Als .mem File im MSB oder nachträglich mit dem Memorytool. Das Programm bleibt aber hängen, falls Du irgendwelche printf Kommandos noch im Code hast. Diese funktionieren über JTAG nur, wenn per Debugport hochgeladen wurde. Problematisch bei den .mem Files sind zu lange Pfadnamen und Pfade mit Leerzeichen. Diese werden von den Tools nicht korrekt übernommen. In selten Fällen kann das Linkerspript auch auf falsche Adressen zeigen. Kannst Du evtl. das *.msb und Deinen C-Code hier bitte posten? Viele Grüße Arndt
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.