Forum: FPGA, VHDL & Co. Verständnisproblem beim JTAG für LM32 (Lattice)


von Michael F. (mifi)


Lesenswert?

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

von Lattice User (Gast)


Lesenswert?

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
);

von Michael F. (mifi)


Lesenswert?

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

von Christoph Z. (christophz)


Lesenswert?

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

von Michael F. (mifi)


Lesenswert?

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

von Michael F. (mifi)


Lesenswert?

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