intMAN
version 0.2_20130422
Main Page
Design Unit List
Files
File List
intman_pack.vhd
Go to the documentation of this file.
1
-------------------------------------------------------
2
--! @file
3
--! @brief
Package
of
supplements
for
the intMAN hardware
4
--! @author Josef Strnadel, Brno University
of
Technology, Faculty
of
Information Technology
5
--! @email strnadel@fit.vutbr.cz
6
--! @date 2013-04-17
7
-------------------------------------------------------
8
9
library
IEEE
;
10
use
IEEE.STD_LOGIC_1164.
all
;
11
12
--
13
--
14
--
15
--! custom definitions utilized during the intMAN implementation
16
--
17
package
intMAN_package
is
18
19
--
20
--
21
--
22
-- clock setup
block
23
--
24
25
--! base clock rate [Hz]
26
constant
CLK_BASE_HZ
:
integer
:=
10
*
*
6
;
27
--! monitor clock (MONCLK) rate [Hz]
28
constant
MONCLK_HZ
:
integer
:=
1
*
CLK_BASE_HZ
;
29
--! operating system
time
(OSTIME) rate [Hz]
30
constant
OSTIME_HZ
:
integer
:=
100
;
31
--! number
of
MONCLK cycles (ticks) per one OSTIME cycle (tick)
32
constant
NMONTICKS_IN_OSTICK
:
integer
:=
MONCLK_HZ
/
OSTIME_HZ
;
33
34
--
35
--
36
--
37
-- priority setup
block
38
--
39
40
--! number
of
bits per joint interrupt/task priority
41
constant
PRI_WIDTH
:
integer
:=
8
;
42
--! bit-index
range
for
the priority width
43
subtype
t_pri_width_range
is
integer
range
PRI_WIDTH
-
1
downto
0
;
44
--! priority value
range
45
subtype
t_pri_range
is
integer
range
(
2
*
*
PRI_WIDTH
)
-
1
downto
0
;
46
--! value at which the hard-level priority ends (
0
means the highest priority)
47
constant
PRI_HARD_LAST
:
integer
:=
(
2
*
*
PRI_WIDTH
)
/
2
;
48
--! the lowest priority (reserved
for
the intMAN purposes
and
set
to
the all-1 value)
49
constant
PRI_LAST
:
integer
:=
(
2
*
*
PRI_WIDTH
)
-
1
;
50
51
----------------------------
52
-- interrupt setup
block
53
----------------------------
54
--! the worst-case interrupt service
time
[s]
55
constant
INT_C_MAX
:
real
:=
150
.
0
/
REAL
(
CLK_BASE_HZ
)
;
56
--! the worst-case interrupt service
time
[MONCLK cycles]
57
constant
INT_C_MAX_NMONTICKS
:
integer
:=
INTEGER
(
INT_C_MAX
)
*
MONCLK_HZ
;
58
--! the worst-case interrupt service
time
[OSTIME cycles]
59
constant
INT_C_MAX_NOSTICKS
:
integer
:=
INT_C_MAX_NMONTICKS
/
NMONTICKS_IN_OSTICK
;
60
61
--! number
of
interrupt sources
62
constant
INT_NMAX
:
integer
:=
16
;
63
--! number
of
bits needed
to
address the interrupt sources (=log2(INT_NMAX))
64
constant
INT_WIDTH
:
integer
:=
4
;
65
--! interrupt address bit-index
range
66
subtype
t_int_width_range
is
integer
range
INT_WIDTH
-
1
downto
0
;
67
--! interrupt
range
68
subtype
t_int_range
is
integer
range
INT_NMAX
-
1
downto
0
;
69
70
--! maximum number
of
pending interrupts per one interrupt source
71
subtype
t_intpend_cnt
is
integer
range
0
to
15
;
72
--!
array
of
pending interrupt couters
73
type
t_intpendcnt_arr
is
array
(
t_int_range
)
of
t_intpend_cnt
;
74
--! vector
of
interrupt ready flags
75
subtype
t_intrdy_vec
is
STD_LOGIC_VECTOR
(
t_int_range
)
;
76
77
--! level sensitivity
configuration
datatype
78
subtype
t_intlevel_cfg
is
STD_LOGIC_VECTOR
(
1
downto
0
)
;
79
--! edge sensitivity
configuration
datatype
80
subtype
t_intedge_cfg
is
STD_LOGIC_VECTOR
(
1
downto
0
)
;
81
82
--! interrupt sensitivity
configuration
data structure
83
type
t_intcfg
is
84
record
85
level
:
t_intlevel_cfg
;
86
edge
:
t_intedge_cfg
;
87
end
record
;
88
89
--!
array
of
configurations
for
interrupt sources
90
type
t_intcfg_arr
is
array
(
t_int_range
)
of
t_intcfg
;
91
92
-- interrupt sensitivity legend:
93
-- ----------------------------
94
-- level: log.
0
(
00
), log.
1
(
01
), no (
10
,
11
)
95
-- edge: rising (
01
), falling (
10
), both (
11
), no (
00
)
96
97
--! interrupt
configuration
98
constant
C_INTCFG
:
t_intcfg_arr
:=
99
(
100
0
=
>
(
level
=
>
"00"
,
edge
=
>
"11"
)
,
101
1
=
>
(
level
=
>
"00"
,
edge
=
>
"11"
)
,
102
2
=
>
(
level
=
>
"00"
,
edge
=
>
"11"
)
,
103
3
=
>
(
level
=
>
"00"
,
edge
=
>
"11"
)
,
104
-- );
105
106
-- ,
107
4
=
>
(
level
=
>
"00"
,
edge
=
>
"00"
)
,
108
5
=
>
(
level
=
>
"00"
,
edge
=
>
"00"
)
,
109
6
=
>
(
level
=
>
"00"
,
edge
=
>
"11"
)
,
110
7
=
>
(
level
=
>
"00"
,
edge
=
>
"10"
)
,
111
8
=
>
(
level
=
>
"00"
,
edge
=
>
"01"
)
,
112
9
=
>
(
level
=
>
"00"
,
edge
=
>
"01"
)
,
113
10
=
>
(
level
=
>
"00"
,
edge
=
>
"01"
)
,
114
11
=
>
(
level
=
>
"00"
,
edge
=
>
"01"
)
,
115
12
=
>
(
level
=
>
"00"
,
edge
=
>
"01"
)
,
116
13
=
>
(
level
=
>
"00"
,
edge
=
>
"01"
)
,
117
14
=
>
(
level
=
>
"00"
,
edge
=
>
"01"
)
,
118
15
=
>
(
level
=
>
"00"
,
edge
=
>
"01"
)
119
)
;
120
----
121
---- ,
122
--
16
=> (level => "
00
", edge => "
11
"),
123
--
17
=> (level => "
00
", edge => "
11
"),
124
--
18
=> (level => "
00
", edge => "
11
"),
125
--
19
=> (level => "
00
", edge => "
11
"),
126
--
20
=> (level => "
00
", edge => "
00
"),
127
--
21
=> (level => "
00
", edge => "
00
"),
128
--
22
=> (level => "
00
", edge => "
11
"),
129
--
23
=> (level => "
00
", edge => "
10
"),
130
--
24
=> (level => "
00
", edge => "
01
"),
131
--
25
=> (level => "
00
", edge => "
01
"),
132
--
26
=> (level => "
00
", edge => "
01
"),
133
--
27
=> (level => "
00
", edge => "
01
"),
134
--
28
=> (level => "
00
", edge => "
01
"),
135
--
29
=> (level => "
00
", edge => "
01
"),
136
--
30
=> (level => "
00
", edge => "
01
"),
137
--
31
=> (level => "
00
", edge => "
01
"),
138
------ );
139
----
140
------ ,
141
--
32
=> (level => "
00
", edge => "
11
"),
142
--
33
=> (level => "
00
", edge => "
11
"),
143
--
34
=> (level => "
00
", edge => "
00
"),
144
--
35
=> (level => "
00
", edge => "
00
"),
145
--
36
=> (level => "
00
", edge => "
11
"),
146
--
37
=> (level => "
00
", edge => "
10
"),
147
--
38
=> (level => "
00
", edge => "
01
"),
148
--
39
=> (level => "
00
", edge => "
01
"),
149
--
40
=> (level => "
00
", edge => "
01
"),
150
--
41
=> (level => "
00
", edge => "
01
"),
151
--
42
=> (level => "
00
", edge => "
11
"),
152
--
43
=> (level => "
00
", edge => "
11
"),
153
--
44
=> (level => "
00
", edge => "
00
"),
154
--
45
=> (level => "
00
", edge => "
00
"),
155
--
46
=> (level => "
00
", edge => "
11
"),
156
--
47
=> (level => "
00
", edge => "
10
"),
157
--
48
=> (level => "
00
", edge => "
01
"),
158
--
49
=> (level => "
00
", edge => "
01
"),
159
--
50
=> (level => "
00
", edge => "
01
"),
160
--
51
=> (level => "
00
", edge => "
01
"),
161
--
52
=> (level => "
00
", edge => "
11
"),
162
--
53
=> (level => "
00
", edge => "
11
"),
163
--
54
=> (level => "
00
", edge => "
00
"),
164
--
55
=> (level => "
00
", edge => "
00
"),
165
--
56
=> (level => "
00
", edge => "
11
"),
166
--
57
=> (level => "
00
", edge => "
10
"),
167
--
58
=> (level => "
00
", edge => "
01
"),
168
--
59
=> (level => "
00
", edge => "
01
"),
169
--
60
=> (level => "
00
", edge => "
01
"),
170
--
61
=> (level => "
00
", edge => "
01
"),
171
--
62
=> (level => "
00
", edge => "
11
"),
172
--
63
=> (level => "
00
", edge => "
11
"),
173
---- );
174
------ ,
175
--
64
=> (level => "
00
", edge => "
11
"),
176
--
65
=> (level => "
00
", edge => "
11
"),
177
--
66
=> (level => "
00
", edge => "
11
"),
178
--
67
=> (level => "
00
", edge => "
11
"),
179
--
68
=> (level => "
00
", edge => "
11
"),
180
--
69
=> (level => "
00
", edge => "
11
"),
181
--
70
=> (level => "
00
", edge => "
00
"),
182
--
71
=> (level => "
00
", edge => "
00
"),
183
--
72
=> (level => "
00
", edge => "
11
"),
184
--
73
=> (level => "
00
", edge => "
10
"),
185
--
74
=> (level => "
00
", edge => "
01
"),
186
--
75
=> (level => "
00
", edge => "
01
"),
187
--
76
=> (level => "
00
", edge => "
01
"),
188
--
77
=> (level => "
00
", edge => "
01
"),
189
--
78
=> (level => "
00
", edge => "
01
"),
190
--
79
=> (level => "
00
", edge => "
01
"),
191
--
80
=> (level => "
00
", edge => "
01
"),
192
--
81
=> (level => "
00
", edge => "
01
"),
193
--
82
=> (level => "
00
", edge => "
11
"),
194
--
83
=> (level => "
00
", edge => "
11
"),
195
--
84
=> (level => "
00
", edge => "
00
"),
196
--
85
=> (level => "
00
", edge => "
00
"),
197
--
86
=> (level => "
00
", edge => "
11
"),
198
--
87
=> (level => "
00
", edge => "
10
"),
199
--
88
=> (level => "
00
", edge => "
01
"),
200
--
89
=> (level => "
00
", edge => "
01
"),
201
--
90
=> (level => "
00
", edge => "
01
"),
202
--
91
=> (level => "
00
", edge => "
01
"),
203
--
92
=> (level => "
00
", edge => "
11
"),
204
--
93
=> (level => "
00
", edge => "
11
"),
205
--
94
=> (level => "
00
", edge => "
00
"),
206
--
95
=> (level => "
00
", edge => "
00
"),
207
--
96
=> (level => "
00
", edge => "
11
"),
208
--
97
=> (level => "
00
", edge => "
10
"),
209
--
98
=> (level => "
00
", edge => "
01
"),
210
--
99
=> (level => "
00
", edge => "
01
"),
211
--
100
=> (level => "
00
", edge => "
11
"),
212
--
101
=> (level => "
00
", edge => "
11
"),
213
--
102
=> (level => "
00
", edge => "
11
"),
214
--
103
=> (level => "
00
", edge => "
11
"),
215
--
104
=> (level => "
00
", edge => "
00
"),
216
--
105
=> (level => "
00
", edge => "
00
"),
217
--
106
=> (level => "
00
", edge => "
11
"),
218
--
107
=> (level => "
00
", edge => "
10
"),
219
--
108
=> (level => "
00
", edge => "
01
"),
220
--
109
=> (level => "
00
", edge => "
01
"),
221
--
110
=> (level => "
00
", edge => "
01
"),
222
--
111
=> (level => "
00
", edge => "
01
"),
223
--
112
=> (level => "
00
", edge => "
01
"),
224
--
113
=> (level => "
00
", edge => "
01
"),
225
--
114
=> (level => "
00
", edge => "
01
"),
226
--
115
=> (level => "
00
", edge => "
01
"),
227
--
116
=> (level => "
00
", edge => "
11
"),
228
--
117
=> (level => "
00
", edge => "
11
"),
229
--
118
=> (level => "
00
", edge => "
11
"),
230
--
119
=> (level => "
00
", edge => "
11
"),
231
--
120
=> (level => "
00
", edge => "
00
"),
232
--
121
=> (level => "
00
", edge => "
00
"),
233
--
122
=> (level => "
00
", edge => "
11
"),
234
--
123
=> (level => "
00
", edge => "
10
"),
235
--
124
=> (level => "
00
", edge => "
01
"),
236
--
125
=> (level => "
00
", edge => "
01
"),
237
--
126
=> (level => "
00
", edge => "
01
"),
238
--
127
=> (level => "
00
", edge => "
01
"),
239
------ );
240
----
241
--
128
=> (level => "
00
", edge => "
01
"),
242
--
129
=> (level => "
00
", edge => "
01
"),
243
--
130
=> (level => "
00
", edge => "
01
"),
244
--
131
=> (level => "
00
", edge => "
01
"),
245
--
132
=> (level => "
00
", edge => "
11
"),
246
--
133
=> (level => "
00
", edge => "
11
"),
247
--
134
=> (level => "
00
", edge => "
00
"),
248
--
135
=> (level => "
00
", edge => "
00
"),
249
--
136
=> (level => "
00
", edge => "
11
"),
250
--
137
=> (level => "
00
", edge => "
10
"),
251
--
138
=> (level => "
00
", edge => "
01
"),
252
--
139
=> (level => "
00
", edge => "
01
"),
253
--
140
=> (level => "
00
", edge => "
01
"),
254
--
141
=> (level => "
00
", edge => "
01
"),
255
--
142
=> (level => "
00
", edge => "
11
"),
256
--
143
=> (level => "
00
", edge => "
11
"),
257
--
144
=> (level => "
00
", edge => "
00
"),
258
--
145
=> (level => "
00
", edge => "
00
"),
259
--
146
=> (level => "
00
", edge => "
11
"),
260
--
147
=> (level => "
00
", edge => "
10
"),
261
--
148
=> (level => "
00
", edge => "
01
"),
262
--
149
=> (level => "
00
", edge => "
01
"),
263
--
150
=> (level => "
00
", edge => "
01
"),
264
--
151
=> (level => "
00
", edge => "
01
"),
265
--
152
=> (level => "
00
", edge => "
11
"),
266
--
153
=> (level => "
00
", edge => "
11
"),
267
--
154
=> (level => "
00
", edge => "
00
"),
268
--
155
=> (level => "
00
", edge => "
00
"),
269
--
156
=> (level => "
00
", edge => "
11
"),
270
--
157
=> (level => "
00
", edge => "
10
"),
271
--
158
=> (level => "
00
", edge => "
01
"),
272
--
159
=> (level => "
00
", edge => "
01
"),
273
--
160
=> (level => "
00
", edge => "
01
"),
274
--
161
=> (level => "
00
", edge => "
01
"),
275
--
162
=> (level => "
00
", edge => "
11
"),
276
--
163
=> (level => "
00
", edge => "
11
"),
277
--
164
=> (level => "
00
", edge => "
11
"),
278
--
165
=> (level => "
00
", edge => "
11
"),
279
--
166
=> (level => "
00
", edge => "
11
"),
280
--
167
=> (level => "
00
", edge => "
11
"),
281
--
168
=> (level => "
00
", edge => "
11
"),
282
--
169
=> (level => "
00
", edge => "
11
"),
283
--
170
=> (level => "
00
", edge => "
00
"),
284
--
171
=> (level => "
00
", edge => "
00
"),
285
--
172
=> (level => "
00
", edge => "
11
"),
286
--
173
=> (level => "
00
", edge => "
10
"),
287
--
174
=> (level => "
00
", edge => "
01
"),
288
--
175
=> (level => "
00
", edge => "
01
"),
289
--
176
=> (level => "
00
", edge => "
01
"),
290
--
177
=> (level => "
00
", edge => "
01
"),
291
--
178
=> (level => "
00
", edge => "
01
"),
292
--
179
=> (level => "
00
", edge => "
01
"),
293
--
180
=> (level => "
00
", edge => "
01
"),
294
--
181
=> (level => "
00
", edge => "
01
"),
295
--
182
=> (level => "
00
", edge => "
11
"),
296
--
183
=> (level => "
00
", edge => "
11
"),
297
--
184
=> (level => "
00
", edge => "
00
"),
298
--
185
=> (level => "
00
", edge => "
00
"),
299
--
186
=> (level => "
00
", edge => "
11
"),
300
--
187
=> (level => "
00
", edge => "
10
"),
301
--
188
=> (level => "
00
", edge => "
01
"),
302
--
189
=> (level => "
00
", edge => "
01
"),
303
--
190
=> (level => "
00
", edge => "
01
"),
304
--
191
=> (level => "
00
", edge => "
01
"),
305
--
192
=> (level => "
00
", edge => "
11
"),
306
--
193
=> (level => "
00
", edge => "
11
"),
307
--
194
=> (level => "
00
", edge => "
00
"),
308
--
195
=> (level => "
00
", edge => "
00
"),
309
--
196
=> (level => "
00
", edge => "
11
"),
310
--
197
=> (level => "
00
", edge => "
10
"),
311
--
198
=> (level => "
00
", edge => "
01
"),
312
--
199
=> (level => "
00
", edge => "
01
"),
313
--
200
=> (level => "
00
", edge => "
11
"),
314
--
201
=> (level => "
00
", edge => "
11
"),
315
--
202
=> (level => "
00
", edge => "
11
"),
316
--
203
=> (level => "
00
", edge => "
11
"),
317
--
204
=> (level => "
00
", edge => "
00
"),
318
--
205
=> (level => "
00
", edge => "
00
"),
319
--
206
=> (level => "
00
", edge => "
11
"),
320
--
207
=> (level => "
00
", edge => "
10
"),
321
--
208
=> (level => "
00
", edge => "
01
"),
322
--
209
=> (level => "
00
", edge => "
01
"),
323
--
210
=> (level => "
00
", edge => "
01
"),
324
--
211
=> (level => "
00
", edge => "
01
"),
325
--
212
=> (level => "
00
", edge => "
01
"),
326
--
213
=> (level => "
00
", edge => "
01
"),
327
--
214
=> (level => "
00
", edge => "
01
"),
328
--
215
=> (level => "
00
", edge => "
01
"),
329
--
216
=> (level => "
00
", edge => "
11
"),
330
--
217
=> (level => "
00
", edge => "
11
"),
331
--
218
=> (level => "
00
", edge => "
11
"),
332
--
219
=> (level => "
00
", edge => "
11
"),
333
--
220
=> (level => "
00
", edge => "
00
"),
334
--
221
=> (level => "
00
", edge => "
00
"),
335
--
222
=> (level => "
00
", edge => "
11
"),
336
--
223
=> (level => "
00
", edge => "
10
"),
337
--
224
=> (level => "
00
", edge => "
01
"),
338
--
225
=> (level => "
00
", edge => "
01
"),
339
--
226
=> (level => "
00
", edge => "
01
"),
340
--
227
=> (level => "
00
", edge => "
01
"),
341
--
228
=> (level => "
00
", edge => "
01
"),
342
--
229
=> (level => "
00
", edge => "
01
"),
343
--
230
=> (level => "
00
", edge => "
01
"),
344
--
231
=> (level => "
00
", edge => "
01
"),
345
--
232
=> (level => "
00
", edge => "
11
"),
346
--
233
=> (level => "
00
", edge => "
11
"),
347
--
234
=> (level => "
00
", edge => "
00
"),
348
--
235
=> (level => "
00
", edge => "
00
"),
349
--
236
=> (level => "
00
", edge => "
11
"),
350
--
237
=> (level => "
00
", edge => "
10
"),
351
--
238
=> (level => "
00
", edge => "
01
"),
352
--
239
=> (level => "
00
", edge => "
01
"),
353
--
240
=> (level => "
00
", edge => "
01
"),
354
--
241
=> (level => "
00
", edge => "
01
"),
355
--
242
=> (level => "
00
", edge => "
11
"),
356
--
243
=> (level => "
00
", edge => "
11
"),
357
--
244
=> (level => "
00
", edge => "
00
"),
358
--
245
=> (level => "
00
", edge => "
00
"),
359
--
246
=> (level => "
00
", edge => "
11
"),
360
--
247
=> (level => "
00
", edge => "
10
"),
361
--
248
=> (level => "
00
", edge => "
01
"),
362
--
249
=> (level => "
00
", edge => "
01
"),
363
--
250
=> (level => "
00
", edge => "
01
"),
364
--
251
=> (level => "
00
", edge => "
01
"),
365
--
252
=> (level => "
00
", edge => "
11
"),
366
--
253
=> (level => "
00
", edge => "
11
"),
367
--
254
=> (level => "
00
", edge => "
00
"),
368
--
255
=> (level => "
00
", edge => "
00
")
369
-- );
370
371
--!
array
of
interrupt priorities
372
type
t_intpri_arr
is
array
(
t_int_range
)
of
STD_LOGIC_VECTOR
(
t_pri_width_range
)
;
373
374
end
package
;
375
376
--! empty
377
package
body
intMAN_package
is
378
end
intMAN_package
;
© 2013 Josef Strnadel (
email
,
web
), Faculty of Information Technology, Brno University of Technology (
web
)