OpenCores
URL https://opencores.org/ocsvn/jtag_stapl_player/jtag_stapl_player/trunk

Subversion Repositories jtag_stapl_player

[/] [jtag_stapl_player/] [trunk/] [scan_chain.stp] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 sukhanov
NOTE "CREATOR" "&RA version 1.0";
2
NOTE "DATE" "2014/05/07";
3
'NOTE "STAPL_VERSION" "JESD00-C";
4
'NOTE "ALG_VERSION" "4";
5
'NOTE "STACK_DEPTH" "3";
6
'NOTE "MAX_FREQ" "10000000"; '10MHz
7
'NOTE "TARGET" "1";
8
 
9
'*********************************************************
10
ACTION READ_IDCODES = DO_READ_IDCODES;
11
ACTION READ_IDCODE = DO_READ_IDCODE;
12
ACTION READ_IDCODE1 = DO_READ_IDCODE1;
13
ACTION READ_IDCODE2 = DO_READ_IDCODE2;
14
ACTION BYPASS = DO_BYPASS;
15
'*********************************************************
16
 
17
DATA data_id;
18
BOOLEAN idcode_data[32*10]; '[idcode_length * max_num_devices]
19
BOOLEAN i_idcode[10] = #1001101000; 'assumed IDCODE instruction
20
BOOLEAN ones_data[10*32] =
21
    $FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
22
     FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
23
BOOLEAN tmp_ir[10*10]; '[ir_length * max_num_devices]
24
BOOLEAN read_data[10+1]; 'max_num_devices + 1
25
INTEGER max_num_devices =10;
26
INTEGER ir_length=10;
27
INTEGER total_irlength=0;
28
INTEGER idcode_length =32;
29
BOOLEAN irdata[10*32];
30
INTEGER i;
31
INTEGER j;
32
INTEGER number_of_chips;
33
ENDDATA;
34
 
35
 
36
PROCEDURE SELECT1;
37
        PREIR 0;
38
    PREDR 0;
39
        POSTIR 8;
40
        POSTDR 1;
41
ENDPROC;
42
 
43
PROCEDURE SELECT2;
44
    PREIR 8;
45
    PREDR 1;
46
    POSTIR 0;
47
    POSTDR 0;
48
ENDPROC;
49
 
50
PROCEDURE DO_READ_IDCODE USES data_id;
51
    IRSTOP IRPAUSE;
52
    DRSTOP DRPAUSE;
53
        PRINT ">IRSCAN";
54
    IRSCAN 8, $0f, CAPTURE irdata[7..0];
55
    WAIT IDLE, 1 CYCLES;
56
    DRSCAN 32, $00000000, CAPTURE idcode_data[31..0];
57
    EXPORT "IDCODE", idcode_data[31..0];
58
ENDPROC;
59
 
60
PROCEDURE DO_READ_IDCODE1 USES SELECT1, DO_READ_IDCODE, data_id;
61
        CALL SELECT1;
62
        CALL DO_READ_IDCODE;
63
ENDPROC;
64
 
65
PROCEDURE DO_READ_IDCODE2 USES SELECT2, DO_READ_IDCODE, data_id;
66
    CALL SELECT2;
67
    CALL DO_READ_IDCODE;
68
ENDPROC;
69
 
70
PROCEDURE DO_BYPASS USES data_id;
71
    IRSTOP IRPAUSE;
72
    DRSTOP DRPAUSE;
73
    IRSCAN 8, $ff, CAPTURE irdata[7..0];
74
    EXPORT "Prev IR", irdata[7..0];
75
    WAIT IDLE, 1 CYCLES;
76
    DRSCAN 32, $00000000, CAPTURE idcode_data[31..0];
77
    EXPORT "DRSCAN", idcode_data[31..0];
78
ENDPROC;
79
 
80
'*****************************************************
81
PROCEDURE DO_READ_IDCODES USES compute_number_of_chips, data_id;
82
        'Initialize devices
83
        IRSTOP IRPAUSE;
84
        DRSTOP DRPAUSE;
85
        STATE RESET;
86
        CALL compute_number_of_chips;
87
 
88
        'Read id codes of all devices in the chain
89
        'Method - after reset the DR should contain the 32-bit ID number
90
        STATE RESET;
91
        DRSCAN (number_of_chips*idcode_length),
92
                ones_data[((number_of_chips* idcode_length)-1)..0],
93
                CAPTURE idcode_data[((number_of_chips* idcode_length)-1)..0];
94
        FOR i=0 TO (number_of_chips-1);
95
                ' that does not work;EXPORT "IDCODE", idcode_data[((i*32)+31)..(i*32)];
96
                FOR j=0 TO 31;
97
                        irdata[j] = idcode_data[(i*32)+j];
98
                NEXT j;
99
                EXPORT "IDCODE",irdata[31..0];
100
        NEXT i;
101
ENDPROC;
102
 
103
'*********************************************************
104
PROCEDURE compute_number_of_chips USES data_id;
105
 
106
        'Compute the total length of the IR
107
        FOR i=0 to (ir_length * max_num_devices);
108
                irdata[i] = 0;
109
        NEXT i;
110
        IRSCAN (ir_length * max_num_devices), irdata[((ir_length * max_num_devices)-1)..0];
111
    IRSCAN (ir_length * max_num_devices), ones_data[((ir_length * max_num_devices)-1)..0],
112
                CAPTURE irdata[((ir_length * max_num_devices)-1)..0];
113
        FOR i=0 TO (ir_length * max_num_devices)-1;
114
        IF(irdata[i] ==0) THEN
115
        total_irlength = total_irlength+1;
116
        NEXT i;
117
 
118
        'Compute number of chips in the chain by sending BYPASS codes into the chain
119
        IRSCAN (ir_length * max_num_devices),
120
                ones_data[((ir_length * max_num_devices)-1)..0];
121
        DRSCAN (max_num_devices +1),
122
                ones_data[max_num_devices..0],
123
                CAPTURE read_data[max_num_devices..0];
124
        FOR i=0 TO max_num_devices-1;
125
                IF(read_data[i] ==0) THEN
126
                number_of_chips=number_of_chips+1;
127
        NEXT i;
128
        EXPORT "Number of chips",number_of_chips;
129
ENDPROC;
130
'********************************************************
131
 
132
CRC 2001;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.