intMAN  version 0.2_20130422
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]
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
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)