1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum CovergroupDeclaration<'a> {
9 Initial(
10 Box<(
11 Metadata<'a>, CovergroupIdentifier<'a>,
13 Option<(
14 Metadata<'a>, Option<TfPortList<'a>>,
16 Metadata<'a>, )>,
18 Option<CoverageEvent<'a>>,
19 Metadata<'a>, Vec<CoverageSpecOrOption<'a>>,
21 Metadata<'a>, Option<(
23 Metadata<'a>, CovergroupIdentifier<'a>,
25 )>,
26 )>,
27 ),
28 Extends(
29 Box<(
30 Metadata<'a>, Metadata<'a>, CovergroupIdentifier<'a>,
33 Metadata<'a>, Vec<CoverageSpecOrOption<'a>>,
35 Metadata<'a>, Option<(
37 Metadata<'a>, CovergroupIdentifier<'a>,
39 )>,
40 )>,
41 ),
42}
43
44#[derive(Clone, Debug, PartialEq)]
45pub enum CoverageSpecOrOption<'a> {
46 Spec(Box<(Vec<AttributeInstance<'a>>, CoverageSpec<'a>)>),
47 Option(
48 Box<(
49 Vec<AttributeInstance<'a>>,
50 CoverageOption<'a>,
51 Metadata<'a>, )>,
53 ),
54}
55
56#[derive(Clone, Debug, PartialEq)]
57pub enum CoverageOption<'a> {
58 Option(
59 Box<(
60 Metadata<'a>, Metadata<'a>, MemberIdentifier<'a>,
63 Metadata<'a>, Expression<'a>,
65 )>,
66 ),
67 TypeOption(
68 Box<(
69 Metadata<'a>, Metadata<'a>, MemberIdentifier<'a>,
72 Metadata<'a>, ConstantExpression<'a>,
74 )>,
75 ),
76}
77
78#[derive(Clone, Debug, PartialEq)]
79pub enum CoverageSpec<'a> {
80 Point(Box<CoverPoint<'a>>),
81 Cross(Box<CoverCross<'a>>),
82}
83
84#[derive(Clone, Debug, PartialEq)]
85pub enum CoverageEvent<'a> {
86 Clocking(Box<ClockingEvent<'a>>),
87 Function(
88 Box<(
89 Metadata<'a>, Metadata<'a>, Metadata<'a>, Metadata<'a>, Option<TfPortList<'a>>,
94 Metadata<'a>, )>,
96 ),
97 Block(
98 Box<(
99 Metadata<'a>, Metadata<'a>, BlockEventExpression<'a>,
102 Metadata<'a>, )>,
104 ),
105}
106
107#[derive(Clone, Debug, PartialEq)]
108pub enum BlockEventExpression<'a> {
109 Or(
110 Box<(
111 BlockEventExpression<'a>,
112 Metadata<'a>,
113 BlockEventExpression<'a>,
114 )>,
115 ),
116 Begin(
117 Box<(
118 Metadata<'a>, HierarchicalBtfIdentifier<'a>,
120 )>,
121 ),
122 End(
123 Box<(
124 Metadata<'a>, HierarchicalBtfIdentifier<'a>,
126 )>,
127 ),
128}
129
130#[derive(Clone, Debug, PartialEq)]
131pub enum HierarchicalIdentifierOrClassScope<'a> {
132 Identifier(
133 Box<(
134 HierarchicalIdentifier<'a>,
135 Metadata<'a>, )>,
137 ),
138 Scope(Box<ClassScope<'a>>),
139}
140
141#[derive(Clone, Debug, PartialEq)]
142pub enum HierarchicalBtfIdentifier<'a> {
143 Tf(Box<HierarchicalTfIdentifier<'a>>),
144 Block(Box<HierarchicalBlockIdentifier<'a>>),
145 Method(
146 Box<(
147 Option<HierarchicalIdentifierOrClassScope<'a>>,
148 MethodIdentifier<'a>,
149 )>,
150 ),
151}
152
153#[derive(Clone, Debug, PartialEq)]
154pub struct CoverPoint<'a>(
155 pub Option<(
156 Option<DataTypeOrImplicit<'a>>,
157 CoverPointIdentifier<'a>,
158 Metadata<'a>, )>,
160 pub Metadata<'a>, pub Expression<'a>,
162 pub Option<(
163 Metadata<'a>, Metadata<'a>, Expression<'a>,
166 Metadata<'a>, )>,
168 pub BinsOrEmpty<'a>,
169);
170
171#[derive(Clone, Debug, PartialEq)]
172pub enum BinsOrEmpty<'a> {
173 Bins(
174 Box<(
175 Metadata<'a>, Vec<AttributeInstance<'a>>,
177 Vec<(
178 BinsOrOptions<'a>,
179 Metadata<'a>, )>,
181 Metadata<'a>, )>,
183 ),
184 Empty(Box<Metadata<'a>>),
185}
186
187#[derive(Clone, Debug, PartialEq)]
188pub enum BinsOrOptions<'a> {
189 Coverage(Box<CoverageOption<'a>>),
190 Range(
191 Box<(
192 Option<Metadata<'a>>, BinsKeyword<'a>,
194 BinIdentifier<'a>,
195 Option<(
196 Metadata<'a>, Option<CovergroupExpression<'a>>,
198 Metadata<'a>, )>,
200 Metadata<'a>, Metadata<'a>, CovergroupRangeList<'a>,
203 Metadata<'a>, Option<(
205 Metadata<'a>, Metadata<'a>, WithCovergroupExpression<'a>,
208 Metadata<'a>, )>,
210 Option<(
211 Metadata<'a>, Metadata<'a>, Expression<'a>,
214 Metadata<'a>, )>,
216 )>,
217 ),
218 Point(
219 Box<(
220 Option<Metadata<'a>>, BinsKeyword<'a>,
222 BinIdentifier<'a>,
223 Option<(
224 Metadata<'a>, Option<CovergroupExpression<'a>>,
226 Metadata<'a>, )>,
228 Metadata<'a>, CoverPointIdentifier<'a>,
230 Metadata<'a>, Metadata<'a>, WithCovergroupExpression<'a>,
233 Metadata<'a>, Option<(
235 Metadata<'a>, Metadata<'a>, Expression<'a>,
238 Metadata<'a>, )>,
240 )>,
241 ),
242 Set(
243 Box<(
244 Option<Metadata<'a>>, BinsKeyword<'a>,
246 BinIdentifier<'a>,
247 Option<(
248 Metadata<'a>, Option<CovergroupExpression<'a>>,
250 Metadata<'a>, )>,
252 Metadata<'a>, SetCovergroupExpression<'a>,
254 Option<(
255 Metadata<'a>, Metadata<'a>, Expression<'a>,
258 Metadata<'a>, )>,
260 )>,
261 ),
262 Trans(
263 Box<(
264 Option<Metadata<'a>>, BinsKeyword<'a>,
266 BinIdentifier<'a>,
267 Option<(
268 Metadata<'a>, Metadata<'a>, )>,
271 Metadata<'a>, TransList<'a>,
273 Option<(
274 Metadata<'a>, Metadata<'a>, Expression<'a>,
277 Metadata<'a>, )>,
279 )>,
280 ),
281 Default(
282 Box<(
283 BinsKeyword<'a>,
284 BinIdentifier<'a>,
285 Option<(
286 Metadata<'a>, Option<CovergroupExpression<'a>>,
288 Metadata<'a>, )>,
290 Metadata<'a>, Metadata<'a>, Option<(
293 Metadata<'a>, Metadata<'a>, Expression<'a>,
296 Metadata<'a>, )>,
298 )>,
299 ),
300 DefaultSequence(
301 Box<(
302 BinsKeyword<'a>,
303 BinIdentifier<'a>,
304 Metadata<'a>, Metadata<'a>, Metadata<'a>, Option<(
308 Metadata<'a>, Metadata<'a>, Expression<'a>,
311 Metadata<'a>, )>,
313 )>,
314 ),
315}
316
317#[derive(Clone, Debug, PartialEq)]
318pub enum BinsKeyword<'a> {
319 Bins(Metadata<'a>),
320 IllegalBins(Metadata<'a>),
321 IgnoreBins(Metadata<'a>),
322}
323
324#[derive(Clone, Debug, PartialEq)]
325pub struct TransList<'a>(
326 pub Metadata<'a>, pub TransSet<'a>,
328 pub Metadata<'a>, pub Vec<(
330 Metadata<'a>, Metadata<'a>, TransSet<'a>,
333 Metadata<'a>, )>,
335);
336
337#[derive(Clone, Debug, PartialEq)]
338pub struct TransSet<'a>(
339 pub TransRangeList<'a>,
340 pub Vec<(
341 Metadata<'a>, TransRangeList<'a>,
343 )>,
344);
345
346#[derive(Clone, Debug, PartialEq)]
347pub enum TransRangeList<'a> {
348 NoRepeat(Box<TransItem<'a>>),
349 Repeat(
350 Box<(
351 TransItem<'a>,
352 Metadata<'a>, Metadata<'a>, RepeatRange<'a>,
355 Metadata<'a>, )>,
357 ),
358 GotoRepeat(
359 Box<(
360 TransItem<'a>,
361 Metadata<'a>, Metadata<'a>, RepeatRange<'a>,
364 Metadata<'a>, )>,
366 ),
367 NonconsecutiveRepeat(
368 Box<(
369 TransItem<'a>,
370 Metadata<'a>, Metadata<'a>, RepeatRange<'a>,
373 Metadata<'a>, )>,
375 ),
376}
377
378#[derive(Clone, Debug, PartialEq)]
379pub struct TransItem<'a>(pub CovergroupRangeList<'a>);
380
381#[derive(Clone, Debug, PartialEq)]
382pub enum RepeatRange<'a> {
383 Expr(Box<CovergroupExpression<'a>>),
384 Range(
385 Box<(
386 CovergroupExpression<'a>,
387 Metadata<'a>, CovergroupExpression<'a>,
389 )>,
390 ),
391}
392
393#[derive(Clone, Debug, PartialEq)]
394pub struct CoverCross<'a>(
395 pub Option<(
396 CrossIdentifier<'a>,
397 Metadata<'a>, )>,
399 pub Metadata<'a>, pub ListOfCrossItems<'a>,
401 pub Option<(
402 Metadata<'a>, Metadata<'a>, Expression<'a>,
405 Metadata<'a>, )>,
407 pub CrossBody<'a>,
408);
409
410#[derive(Clone, Debug, PartialEq)]
411pub struct ListOfCrossItems<'a>(
412 pub CrossItem<'a>,
413 pub Metadata<'a>, pub CrossItem<'a>,
415 pub Vec<(
416 Metadata<'a>, CrossItem<'a>,
418 )>,
419);
420
421#[derive(Clone, Debug, PartialEq)]
422pub enum CrossItem<'a> {
423 CoverPoint(Box<CoverPointIdentifier<'a>>),
424 Variable(Box<VariableIdentifier<'a>>),
425}
426
427#[derive(Clone, Debug, PartialEq)]
428pub enum CrossBody<'a> {
429 Items(
430 Box<(
431 Metadata<'a>, Vec<CrossBodyItem<'a>>,
433 Metadata<'a>, )>,
435 ),
436 Null(Box<Metadata<'a>>),
437}
438
439#[derive(Clone, Debug, PartialEq)]
440pub enum CrossBodyItem<'a> {
441 Function(Box<FunctionDeclaration<'a>>),
442 BinsSelection(
443 Box<(
444 BinsSelectionOrOption<'a>,
445 Metadata<'a>, )>,
447 ),
448}
449
450#[derive(Clone, Debug, PartialEq)]
451pub enum BinsSelectionOrOption<'a> {
452 Coverage(Box<(Vec<AttributeInstance<'a>>, CoverageOption<'a>)>),
453 Bins(Box<(Vec<AttributeInstance<'a>>, BinsSelection<'a>)>),
454}
455
456#[derive(Clone, Debug, PartialEq)]
457pub struct BinsSelection<'a>(
458 pub BinsKeyword<'a>,
459 pub BinIdentifier<'a>,
460 pub Metadata<'a>, pub SelectExpression<'a>,
462 pub Option<(
463 Metadata<'a>, Metadata<'a>, Expression<'a>,
466 Metadata<'a>, )>,
468);
469
470#[derive(Clone, Debug, PartialEq)]
471pub enum SelectExpression<'a> {
472 Condition(Box<SelectCondition<'a>>),
473 Not(
474 Box<(
475 Metadata<'a>, SelectCondition<'a>,
477 )>,
478 ),
479 And(
480 Box<(
481 SelectExpression<'a>,
482 Metadata<'a>, SelectExpression<'a>,
484 )>,
485 ),
486 Or(
487 Box<(
488 SelectExpression<'a>,
489 Metadata<'a>, SelectExpression<'a>,
491 )>,
492 ),
493 Paren(
494 Box<(
495 Metadata<'a>, SelectExpression<'a>,
497 Metadata<'a>, )>,
499 ),
500 With(
501 Box<(
502 SelectExpression<'a>,
503 Metadata<'a>, Metadata<'a>, WithCovergroupExpression<'a>,
506 Metadata<'a>, Option<(
508 Metadata<'a>, IntegerCovergroupExpression<'a>,
510 )>,
511 )>,
512 ),
513 CrossIdentifier(Box<CrossIdentifier<'a>>),
514 CrossSet(
515 Box<(
516 CrossSetExpression<'a>,
517 Option<(
518 Metadata<'a>, IntegerCovergroupExpression<'a>,
520 )>,
521 )>,
522 ),
523}
524
525#[derive(Clone, Debug, PartialEq)]
526pub struct SelectCondition<'a>(
527 pub Metadata<'a>, pub Metadata<'a>, pub BinsExpression<'a>,
530 pub Metadata<'a>, pub Option<(
532 Metadata<'a>, Metadata<'a>, CovergroupRangeList<'a>,
535 Metadata<'a>, )>,
537);
538
539#[derive(Clone, Debug, PartialEq)]
540pub enum BinsExpression<'a> {
541 Variable(Box<VariableIdentifier<'a>>),
542 CoverPoint(
543 Box<(
544 CoverPointIdentifier<'a>,
545 Option<(
546 Metadata<'a>, BinIdentifier<'a>,
548 )>,
549 )>,
550 ),
551}
552
553#[derive(Clone, Debug, PartialEq)]
554pub struct CovergroupRangeList<'a>(
555 pub CovergroupValueRange<'a>,
556 pub Vec<(
557 Metadata<'a>, CovergroupValueRange<'a>,
559 )>,
560);
561
562#[derive(Clone, Debug, PartialEq)]
563pub enum CovergroupValueRange<'a> {
564 Expr(Box<CovergroupExpression<'a>>),
565 ExprRange(
566 Box<(
567 Metadata<'a>, CovergroupExpression<'a>,
569 Metadata<'a>, CovergroupExpression<'a>,
571 Metadata<'a>, )>,
573 ),
574 DollarLow(
575 Box<(
576 Metadata<'a>, Metadata<'a>, Metadata<'a>, CovergroupExpression<'a>,
580 Metadata<'a>, )>,
582 ),
583 DollarHigh(
584 Box<(
585 Metadata<'a>, CovergroupExpression<'a>,
587 Metadata<'a>, Metadata<'a>, Metadata<'a>, )>,
591 ),
592 AbsoluteTolerance(
593 Box<(
594 Metadata<'a>, CovergroupExpression<'a>,
596 Metadata<'a>, CovergroupExpression<'a>,
598 Metadata<'a>, )>,
600 ),
601 RelativeTolerance(
602 Box<(
603 Metadata<'a>, CovergroupExpression<'a>,
605 Metadata<'a>, CovergroupExpression<'a>,
607 Metadata<'a>, )>,
609 ),
610}
611
612#[derive(Clone, Debug, PartialEq)]
613pub struct WithCovergroupExpression<'a>(pub CovergroupExpression<'a>);
614
615#[derive(Clone, Debug, PartialEq)]
616pub struct SetCovergroupExpression<'a>(pub CovergroupExpression<'a>);
617
618#[derive(Clone, Debug, PartialEq)]
619pub enum IntegerCovergroupExpression<'a> {
620 Expression(Box<CovergroupExpression<'a>>),
621 Dollar(Box<Metadata<'a>>),
622}
623
624#[derive(Clone, Debug, PartialEq)]
625pub struct CrossSetExpression<'a>(pub CovergroupExpression<'a>);
626
627#[derive(Clone, Debug, PartialEq)]
628pub struct CovergroupExpression<'a>(pub Expression<'a>);