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>





SpartanMC