Verständnisproblem beim JTAG für LM32 (Lattice)

OP #3767792
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
Gast #3768831
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
);
OP #3774249
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.