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