ChipScope
Verwendung von ChipScope im SpartanMC
Ab der Version des SpartanMC Core vom 04.03.2015 kann bei Bedarf mit einem Schalter im jConfig ein ChipScope Modul mit implementiert werden. ACHTUNG: Der Modul verändert das Zeitverhalten und benötigt sehr viele Blockrams und LUTs.Bei Fehlermeldungen siehe ChipScope im SpartanMC
Der Modul zeichnet 4096 Ereignisse folgender Busse und Signale auf:
Nr. | Kurzbezeichnung | Signal Bezeichnung | Daten Bits im ChipScope | = Trigger Port |
1 | PC | Befehlszähler | Data Port 17 bis 00 | TRIG0 |
2 | IR | Befehlsregister | Data Port 35 bis 18 | TRIG1 |
3 | LED | SFR_LED Port | Data Port 42 bis 36 | TRIG2 |
4 | intr | Interrupt Signal | Data Port 43 | TRIG3 |
5 | rfe | Return Interrupt | Data Port 44 | TRIG4 |
6 | EI | Enable Interrupt | Data Port 45 | TRIG4 |
7 | res | Reset Signal | Data Port 46 | TRIG4 |
Im XILINX Programm Analyzer kann dann auf alle Signale und Busse getriggert werden. Um möglicht einfach Punkte zum Triggern einzurichten, wurde die LED Signale mit aufgenommen. Ausgaben auf das SFR_LED Register kann man sehr einfach in jedes Programm an beliebiger Stelle wie in der folgenden Darstellung einfügen.
- Analyzer Projektdatei für Spartan 3 und 6 mit Triggerung bei RESET=0
- Analyzer Projektdatei für Spartan 3 und 6 mit Triggerung bei (RESET=0)&(INTR=1)&(EI=1)
- Analyzer Projektdatei für Virtex 5 mit Triggerung bei RESET=0
- Analyzer Projektdatei für Virtex 5 mit Triggerung bei (RESET=0)&(INTR=1)
unsigned char led; /* beliebige Anzahl von C Befehlen */ led = 1; __asm__("MOVI2S sfr_led, %0"::"r"(led)); /* beliebige Anzahl von C Befehlen */ led = 2; __asm__("MOVI2S sfr_led, %0"::"r"(led)); /* beliebige Anzahl von C Befehlen */ led = 3; __asm__("MOVI2S sfr_led, %0"::"r"(led)); /* beliebige Anzahl von C Befehlen */
Beim Triggern auf das Reset Signal = 0 entstand folgende Liste, die man im ASCII prn Format speichern kann. Die Adressen des PC muss man immer mit 2 multiplizieren, um sie mit den Angaben in der *.lst Datei des Programms zu vergleichen.
Sample Sample in in Buffer Window pc instr leds intr rfe EI res 0 0 00000 15000 00 0 0 0 1 1 1 00000 15000 00 0 0 0 1 2 2 00000 15000 00 0 0 0 1 3 3 00000 15000 00 0 0 0 1 4 4 00000 15000 00 0 0 0 1 5 5 00000 15000 00 0 0 0 0 6 6 00001 1B00A 00 0 0 0 0 7 7 00002 02105 00 0 0 0 0 8 8 00003 15200 00 0 0 0 0 9 9 0000A 14001 00 0 0 0 0 10 10 0000B 1A084 00 0 0 0 0 11 11 0000C 2C001 00 0 0 0 0 12 12 0000D 0209E 00 0 0 0 0 13 13 0000E 14057 00 0 0 0 0 14 14 0000F 1A1FF 00 0 0 0 0 15 15 00010 2C001 00 0 0 0 0 16 16 00011 02164 00 0 0 0 0 17 17 00012 28001 00 0 0 0 0 18 18 00004 1B2A2 00 0 0 0 0 19 19 00005 02125 00 0 0 0 0 20 20 00006 15402 00 0 0 0 0 21 21 000A2 06023 00 0 0 0 0 22 22 000C5 15BA0 00 0 0 0 0 23 23 000C6 1BA00 00 0 0 0 0 24 24 000C7 259A0 00 0 0 0 0 25 25 000C8 148D0 00 0 0 0 0
Auszüge aus der dazu gehörigen *.lst Datei
Disassembly of section .startup: 00000000 <_startup>: 0: 00 01 50 00 lhi r8, 0 ; 0x00 2: 00 01 b0 0a ori r8, 10 ; 0x0a 4: 00 00 21 05 jalrs r8 6: 00 01 52 00 lhi r9, 0 ; 0x00 8: 00 01 b2 a2 ori r9, 162 ; 0xa2 a: 00 00 21 25 jalrs r9 c: 00 01 54 02 lhi r10, 2 ; 0x02 e: 00 01 b5 bd ori r10, 445 ; 0x1bd 10: 00 00 21 42 jr r10 12: 00 00 20 15 or r0, r0 Disassembly of section .init: 00000014 <_init>: 14: 00 01 40 01 lhi r0, 1 ; 0x01 16: 00 01 a0 84 ori r0, 132 ; 0x84 18: 00 02 c0 01 srli r0, 1 ; 0x01 1a: 00 00 20 9e movi2s sfr_iv, r0 1c: 00 01 40 57 lhi r0, 87 ; 0x57 1e: 00 01 a1 ff ori r0, 511 ; 0x1ff 20: 00 02 c0 01 srli r0, 1 ; 0x01 22: 00 00 21 64 jrs r11 24: 00 02 80 01 slli r0, 1 ; 0x01 00000144 <_loader>: 144: 00 00 60 23 jals 0x0018a ; 0x18a <loader_init> 146: 00 00 7f d4 jals 0x000ee ; 0xee <host_request> 148: 00 03 18 00 seqi r12, 0 ; 0x00 14a: 00 00 09 85 mov r4, r12 14c: 00 00 c0 1d beqzc 0x00186 ; 0x186 <L40> 14e: 00 01 4a 00 lhi r5, 0 ; 0x00 0000018a <loader_init>: 18a: 00 01 5b a0 lhi r13, 416 ; 0x1a0 18c: 00 01 ba 00 ori r13, 0 ; 0x00 0000018e <L2>: 18e: 00 02 59 a0 l18 r12, 0(r13) 190: 00 01 48 d0 lhi r4, 208 ; 0xd0 192: 00 01 a8 05 ori r4, 5 ; 0x05 194: 00 00 38 94 and r12, r4 196: 00 01 48 90 lhi r4, 144 ; 0x90 198: 00 01 a8 05 ori r4, 5 ; 0x05 19a: 00 00 38 98 seq r12, r4 19c: 00 00 20 15 or r0, r0 19e: 00 00 df f8 beqzc 0x0018e ; 0x18e <L2>