File: glue-vhdl.h

package info (click to toggle)
fauhdlc 20180504-2
  • links: PTS
  • area: main
  • in suites: buster
  • size: 2,956 kB
  • sloc: cpp: 23,188; ansic: 6,077; yacc: 3,764; lex: 763; makefile: 605; sh: 494; xml: 403
file content (259 lines) | stat: -rw-r--r-- 7,645 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
/* $Id$
 *
 *  Glue layer between fauhdli and FAUmachine to access FAUmachine signals 
 *  from VHDL. This is the local implementation for a standalone 
 *  fauhdli interpreter. (Most callbacks simply print an info).
 *
 * Copyright (C) 2008-2009 FAUmachine Team <info@faumachine.org>.
 * This program is free software. You can redistribute it and/or modify it
 * under the terms of the GNU General Public License, either version 2 of
 * the License, or (at your option) any later version. See COPYING.
 */

#ifndef __GLUE_VHDL_H_INCLUDED
#define __GLUE_VHDL_H_INCLUDED

#include "fauhdli.h"

extern void *
glue_vhdl_create(void);

extern void
glue_vhdl_destroy(void *_cpssp);

/** Create a foreign component (entity).
 *  @param _cpssp glue_vhdl instance.
 *  @param type type of the component (entity name).
 *  @param name name of the instantiated unit
 *  @return unique component id.
 */
extern unsigned int
glue_vhdl_comp_create(
	void *_cpssp,
	const char *type,
	const char *name
);

/*  Create a FAUmachine signal and return its ID.
 *  @param _cpssp opaque pointer.
 *  @param type type of the signal.
 *  @param name signal name (for debugging only)
 *  @return unique signal id.
 */
extern unsigned int
glue_vhdl_create_signal(
	void *_cpssp, 
	const char *type, 
	const char *name
);

/** Initialize a foreign architecture.
 *  The foreign architecture must first have been created with
 *  glue_vhdl_arch_create and the ports must have been connected
 *  with glue_vhdl_arch_port_connect (same with generics).
 *
 *  @param _cpssp glue_vhdl instance.
 *  @param arch architecture id (cf. glue_vhdl_arch_create).
 */
extern void
glue_vhdl_arch_init(void *_cpssp, unsigned int arch);

/** set a FAUmachine signal with signal id sig_id and data data.
 *  @param _cpssp opaque pointer.
 *  @param sig_id signal id (cf. system.h)
 *  @param data data fitting to the signal. (FIXME composites)
 *  @param drv pointer to driver instance.
 */
extern void
glue_vhdl_set(
	void *_cpssp,
	unsigned int sig_id, 
	union fauhdli_value data,
	void *drv
);

/** Set a procedure call argument of a foreign procedure.
 *  @param _cpssp opaque pointer.
 *  @param proc name of the foreign procedure.
 *  @param param name of the parameter
 *  @param value parameter value. Content depending on the signature
 *         of the foreign procedure.
 *         For parameter passing mechanisms, see GenCode.cpp.
 */
extern void
glue_vhdl_proc_set(
	void *_cpssp,
	const char *proc,
	const char *param, 
	union fauhdli_value value
);

/** Call a foreign procedure.
 *  @param _cpssp opaque pointer.
 *  @param proc name of the procedure to call.
 */
extern void
glue_vhdl_proc_call(void *_cpssp, const char *proc);

/** Create a foreign architecture. A foreign architecture means, that
 *  it is really declared in VHDL, but could e.g. instantiate only 
 *  foreign entities. This is mainly a callback before the VHDL
 *  architecture gets created (but after the signals for the architecture
 *  have been created), in case of need.
 *
 *  @param _cpssp opaque pointer.
 *  @param type type of the component (entity name).
 *  @param name name of the instantiated architecture
 *  @return unique component id.
 */
extern unsigned int
glue_vhdl_arch_create(
	void *_cpssp,
	const char *type,
	const char *name
);

/** Connect a VHDL signal to a FAUmachine signal so that writes are getting
 *  forwarded to FAUmachine.
 *  This function should get called if a VHDL driver is connected to a 
 *  foreign VHDL signal.
 *  @param _cpssp opaque pointer.
 *  @param sig_id FAUmachine signal id.
 *  @param init initial driving value.
 *  @param drv corresponding driver pointer.
 */
extern void
glue_vhdl_connect_out(
	void *_cpssp,
	unsigned int sig_id,
	union fauhdli_value init,
	void *drv
);

/** Connect a foreign signal that is read from VHDL.
 *  This function will call drv_update or in case a FAUmachine signal with 
 *  sig_id obtains a new value.
 *  @param _cpssp opaque pointer.
 *  @param sig_id unique FAUmachine signal id.
 *  @param drv driver instance that will be passed as _drv parameter for
 *  	   drv_update
 */
extern void
glue_vhdl_connect_in(
	void *_cpssp,
	unsigned int sig_id,
	void *drv
);

/** Initialize a foreign component.
 *  The foreign component must first have been created with
 *  glue_vhdl_comp_create and the ports must have been connected
 *  with glue_vhdl_comp_port_connect.
 *
 *  @param _cpssp opaque pointer.
 *  @param comp component id (cf. glue_vhdl_comp_create).
 */
extern void
glue_vhdl_comp_init(void *_cpssp, unsigned int comp);

/** connect a foreign signal to the port of a foreign component.
 *  @param _cpssp opaque pointer.
 *  @param comp unique component id (cf. glue_vhdl_comp_create, return value)
 *  @param port name of the desired port.
 *  @param sig unique signal id (cf. glue_vhdl_create_signal, return value)
 */ 
extern void
glue_vhdl_comp_port_connect(
	void *_cpssp,
	unsigned int comp, 
	const char *port, 
	unsigned int sig
);

/** connect a foreign signal to the port of a foreign component.
 *  @param _cpssp opaque pointer.
 *  @param arch unique architecture id (cf. glue_vhdl_arch_create, 
 *  	   return value)
 *  @param port name of the desired port.
 *  @param sig unique signal id (cf. glue_vhdl_create_signal, return value)
 */ 
extern void
glue_vhdl_arch_port_connect(
	void *_cpssp,
	unsigned int arch, 
	const char *port, 
	unsigned int sig
);

/** set a generic of a foreign component (which is not an array).
 *  @param _cpssp opaque pointer.
 *  @param comp unique component id (cf. glue_vhdl_comp_create, return value)
 *  @param generic name of the desired generic.
 *  @param val VHDL value (direct value for non-composites, pointer for 
 *         record types).
 *  @param type name of the corresponding VHDL type.
 */
extern void
glue_vhdl_comp_generic_nonarray_set(
	void *_cpssp,
	unsigned int comp,
	const char *generic,
	union fauhdli_value val,
	const char *type
);

/** set a generic of a foreign architecture (which is not an array).
 *  @param _cpssp opaque pointer.
 *  @param comp unique component id (cf. glue_vhdl_comp_create, return value)
 *  @param generic name of the desired generic.
 *  @param val VHDL value (direct value for non-composites, pointer for 
 *         record types).
 *  @param type name of the corresponding VHDL type.
 */
extern void
glue_vhdl_arch_generic_nonarray_set(
	void *_cpssp,
	unsigned int arch,
	const char *generic,
	union fauhdli_value val,
	const char *type
);

/** set a generic of a foreign component (which is an array).
 *  @param _cpssp opaque pointer.
 *  @param comp unique component id (cf. glue_vhdl_comp_create, return value)
 *  @param generic name of the desired generic.
 *  @param element_type type name of the element type
 *  @param base pointer to base of array.
 *  @param array_size size of array.
 */
extern void
glue_vhdl_comp_generic_array_set(
	void *_cpssp,
	unsigned int comp,
	const char *generic,
	const char *element_type,
	union fauhdli_value base,
	universal_integer array_size
);

/** set a generic of a foreign architecture (which is an array).
 *  @param _cpssp opaque pointer.
 *  @param arch unique architecture id (cf. glue_vhdl_comp_create, 
 *  	   return value)
 *  @param generic name of the desired generic.
 *  @param element_type type name of the element type
 *  @param base pointer to base of array.
 *  @param array_size size of array.
 */
extern void
glue_vhdl_arch_generic_array_set(
	void *_cpssp,
	unsigned int arch,
	const char *generic,
	const char *element_type,
	union fauhdli_value base,
	universal_integer array_size
);

#endif /* __GLUE_VHDL_H_INCLUDED */