1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef _VME_OPCODE_H
15#define _VME_OPCODE_H
16
17#define VME_VERSION_NUMBER "12.1"
18
19
20
21#define VMEHEXMAX 60000L
22#define SCANMAX 64000L
23
24
25
26
27
28
29
30#define RESET 0x00
31#define IDLE 0x01
32#define IRPAUSE 0x02
33#define DRPAUSE 0x03
34#define SHIFTIR 0x04
35#define SHIFTDR 0x05
36
37#define DRCAPTURE 0x06
38
39
40
41
42
43
44#define INTEL_PRGM 0x0001
45#define CASCADE 0x0002
46#define REPEATLOOP 0x0008
47#define SHIFTRIGHT 0x0080
48#define SHIFTLEFT 0x0100
49#define VERIFYUES 0x0200
50
51
52
53
54
55
56#define EXPRESS 0x0001
57#define SIR_DATA 0x0002
58#define SDR_DATA 0x0004
59#define COMPRESS 0x0008
60#define TDI_DATA 0x0010
61#define TDO_DATA 0x0020
62#define MASK_DATA 0x0040
63#define HEAP_IN 0x0080
64#define LHEAP_IN 0x0200
65#define VARIABLE 0x0400
66#define CRC_DATA 0x0800
67#define CMASK_DATA 0x1000
68#define RMASK_DATA 0x2000
69#define READ_DATA 0x4000
70#define DMASK_DATA 0x8000
71
72
73
74
75
76
77
78#define signalENABLE 0x1C
79#define signalTMS 0x1D
80#define signalTCK 0x1E
81#define signalTDI 0x1F
82#define signalTRST 0x20
83
84
85
86
87
88
89
90#define VENDOR 0x56
91#define LATTICE 0x01
92#define ALTERA 0x02
93#define XILINX 0x03
94
95
96
97
98
99
100
101#define ENDDATA 0x00
102#define RUNTEST 0x01
103#define ENDDR 0x02
104#define ENDIR 0x03
105#define ENDSTATE 0x04
106#define TRST 0x05
107#define HIR 0x06
108
109
110
111#define TIR 0x07
112
113
114
115#define HDR 0x08
116#define TDR 0x09
117#define ispEN 0x0A
118#define FREQUENCY 0x0B
119
120
121
122#define STATE 0x10
123#define SIR 0x11
124#define SDR 0x12
125#define TDI 0x13
126
127#define TDO 0x14
128
129
130
131#define MASK 0x15
132#define XSDR 0x16
133
134
135
136#define XTDI 0x17
137
138
139
140#define XTDO 0x18
141
142
143
144#define MEM 0x19
145
146
147
148#define WAIT 0x1A
149#define TCK 0x1B
150#define SHR 0x23
151
152
153
154#define SHL 0x24
155
156
157#define HEAP 0x32
158#define REPEAT 0x33
159#define LEFTPAREN 0x35
160#define VAR 0x55
161#define SEC 0x1C
162
163
164
165#define SMASK 0x1D
166#define MAX_WAIT 0x1E
167#define ON 0x1F
168#define OFF 0x20
169#define SETFLOW 0x30
170#define RESETFLOW 0x31
171
172#define CRC 0x47
173
174
175
176#define CMASK 0x48
177
178
179
180#define RMASK 0x49
181
182
183
184#define READ 0x50
185
186
187
188#define ENDLOOP 0x59
189#define SECUREHEAP 0x60
190#define VUES 0x61
191#define DMASK 0x62
192
193
194
195#define COMMENT 0x63
196#define HEADER 0x64
197#define FILE_CRC 0x65
198#define LCOUNT 0x66
199#define LDELAY 0x67
200#define LSDR 0x68
201#define LHEAP 0x69
202
203
204
205#define CONTINUE 0x70
206#define LVDS 0x71
207#define ENDVME 0x7F
208#define ENDFILE 0xFF
209
210
211
212
213
214
215
216#define VME_VERIFICATION_FAILURE -1
217#define VME_FILE_READ_FAILURE -2
218#define VME_VERSION_FAILURE -3
219#define VME_INVALID_FILE -4
220#define VME_ARGUMENT_FAILURE -5
221#define VME_CRC_FAILURE -6
222
223#define g_ucPinTDI 0x01
224#define g_ucPinTCK 0x02
225#define g_ucPinTMS 0x04
226#define g_ucPinENABLE 0x08
227#define g_ucPinTRST 0x10
228
229
230
231
232
233
234
235
236typedef struct {
237 unsigned short usPositiveIndex;
238 unsigned short usNegativeIndex;
239 unsigned char ucUpdate;
240} LVDSPair;
241
242typedef enum {
243 min_lattice_iface_type,
244 lattice_jtag_mode,
245 max_lattice_iface_type
246} Lattice_iface;
247
248typedef enum {
249 min_lattice_type,
250 Lattice_XP2,
251 max_lattice_type
252} Lattice_Family;
253
254typedef struct {
255 Lattice_Family family;
256 Lattice_iface iface;
257 size_t size;
258 void *iface_fns;
259 void *base;
260 int cookie;
261 char *desc;
262} Lattice_desc;
263
264
265typedef void (*Lattice_jtag_init)(void);
266typedef void (*Lattice_jtag_set_tdi)(int v);
267typedef void (*Lattice_jtag_set_tms)(int v);
268typedef void (*Lattice_jtag_set_tck)(int v);
269typedef int (*Lattice_jtag_get_tdo)(void);
270
271typedef struct {
272 Lattice_jtag_init jtag_init;
273 Lattice_jtag_set_tdi jtag_set_tdi;
274 Lattice_jtag_set_tms jtag_set_tms;
275 Lattice_jtag_set_tck jtag_set_tck;
276 Lattice_jtag_get_tdo jtag_get_tdo;
277} lattice_board_specific_func;
278
279void writePort(unsigned char pins, unsigned char value);
280unsigned char readPort(void);
281void sclock(void);
282void ispVMDelay(unsigned short int a_usMicroSecondDelay);
283void calibration(void);
284
285int lattice_load(Lattice_desc *desc, const void *buf, size_t bsize);
286int lattice_dump(Lattice_desc *desc, const void *buf, size_t bsize);
287int lattice_info(Lattice_desc *desc);
288
289void ispVMStart(void);
290void ispVMEnd(void);
291extern void ispVMFreeMem(void);
292signed char ispVMCode(void);
293void ispVMDelay(unsigned short int a_usMicroSecondDelay);
294void ispVMCalculateCRC32(unsigned char a_ucData);
295unsigned char GetByte(void);
296void writePort(unsigned char pins, unsigned char value);
297unsigned char readPort(void);
298void sclock(void);
299#endif
300