Hallo zusammen, ich versuche gerade die Struktur vom JTAG für die LM32 (Mico32) CPU zu verstehen. Es gibt hier folgende Sourcen: - lm32_top.v - jtag_cores.v (wird in lm32_top verwendet) - jtag_lm32.v (wird in jtag_cores verwendet) - JTAGB - lm32_jtag.v (wird in lm32_cpu verwendet) - er1.v Wo ich jetzt die Probleme habe ist bei jtag_cores.v. Dort wird das Module "jtagconn16" definiert und auch als Instanz verwendet. Was macht aber "jtagconn16"? Meine Vermutung ist das hiermit die Verbindung zum JTAGB (Hard Komponente im Chip) hergestellt wird. Da der LM32 ein ER1 und ER2 Register verwendet, vermute ich das "jtagconn16" hier mit dem ER2 Register verbunden ist. In folgenden Thread gibt es hier eine Info zu: Beitrag "Re: Lattice JTAG port nutzen" Wie ist aber er1.v in dem LM32 eingebunden, hierfür habe ich noch nichts gefunden. Eine Beschreibung von JTAGB findet man im "FPGA Libraries Reference Guide" von Lattice. Ich frage mich ob es mit einem Nachbau von JTAGB möglich ist ein Debugging über JTAG z.B. auf einem Altera FPGA mit LM32 zu ermöglichen. Hierfür habe ich aber noch nicht die aktuelle JTAG Struktur des LM32 verstanden. Viele Grüße, Michael
Das ganze ist so gut wie nicht dokumentiert, und ausprobiert habe ich noch nichts. Also alles unter Vorbehalt des Irrtums: er1.v wird nicht mehr verwendet, sondern ist durch jtagconn16 ersetzt worden. jtagconn16 wird von der Software (vermutlich translate oder map) automatisch implementiert. Das erlaubt mehrfache Instanzen von jtagconn16, die getrennt angesprochen werden können, z.B. Reveal plus LM32 Debug, sogar mehrfache Instanzen der gleichen IP (z.B. Multicore LM32). Der Trick dabei ist, dass man keine zentrale Instanz verbinden muss wie beim ursprünglichen er1.v
1 | (* JTAG_IP="LM32", IP_ID="0", HUB_ID="0", syn_noprune=1 *) jtagconn16 jtagconn16_lm32_inst ( |
2 | .er2_tdo (er2_tdo2), |
3 | .jtck (jtck), |
4 | .jtdi (jtdi), |
5 | .jshift (jshift), |
6 | .jupdate (jupdate), |
7 | .jrstn (jrstn), |
8 | .jce2 (jce2), |
9 | .ip_enable (ip_enable) |
10 | ); |
Hallo Lattice User, vielen Dank für die Info, ich werde mir das mit den neuen Infos am Wochenende mal anschauen. Viele Grüße, Michael
Du kannst dir auch mal die Dokumentation/Sourcen vom Milkymist SoC ansehen. Da läuft ein lm32 in einem Spartan6: http://m-labs.hk/m1.html
Hallo Christoph, Vielen Dank für den Tip. Ich hatte mir schon mal von GitHub, https://github.com/m-labs/lm32 , dem Code gezogen, aber warum auch immer habe ich den JTAG Code nicht durchgeschaut. - lm32_top.v - lm32_cpu.v (wied in lm32_top verwendet) - jtag_cores.v (wird in lm32_top verwendet) - jtag_tap_spartan6.v (wird in jtag_cores verwendet) - lm32_jtag.v (wird in lm32_cpu verwendet) Jetzt wird einiges klar. Bei dieser Version benutzt jtag_cores.v ein Modul mit dem Namen jtag_tap. Dieses Module wird von tag_tap_spartan6.v zur Verfügung gestellt. Ich glaube das ist jetzt der Punkt wo man ansetzen kann mit einem eigenen allgemeinen TAP Controller. Mal schauen wie man das jetzt auf den aktuellen Source vom LatticeMico32 übertragen kann. Viele Grüße, Michael
Hallo, mein Projekt eines allgemeinen TAP Controllers für die lm32 CPU um die Lattice Tools auf anderen FPGAs zu verwenden werde ich nicht weiterführen. Siehe auch: Beitrag "Re: Suche Softcore Alternative mit Compiler und Debugger" Gruß, Michael
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.