scarf_syntax/declarations/
interface_declarations.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct ModportDeclaration<'a>(
9 pub Metadata<'a>, pub ModportItem<'a>,
11 pub Vec<(
12 Metadata<'a>, ModportItem<'a>,
14 )>,
15 pub Metadata<'a>, );
17
18#[derive(Clone, Debug, PartialEq)]
19pub struct ModportItem<'a>(
20 pub ModportIdentifier<'a>,
21 pub Metadata<'a>, pub ModportPortsDeclaration<'a>,
23 pub Vec<(
24 Metadata<'a>, ModportPortsDeclaration<'a>,
26 )>,
27 pub Metadata<'a>, );
29
30#[derive(Clone, Debug, PartialEq)]
31pub enum ModportPortsDeclaration<'a> {
32 Simple(
33 Box<(
34 Vec<AttributeInstance<'a>>,
35 ModportSimplePortsDeclaration<'a>,
36 )>,
37 ),
38 Tf(Box<(Vec<AttributeInstance<'a>>, ModportTfPortsDeclaration<'a>)>),
39 Clocking(Box<(Vec<AttributeInstance<'a>>, ModportClockingDeclaration<'a>)>),
40}
41
42#[derive(Clone, Debug, PartialEq)]
43pub struct ModportClockingDeclaration<'a>(
44 pub Metadata<'a>, pub ClockingIdentifier<'a>,
46);
47
48#[derive(Clone, Debug, PartialEq)]
49pub struct ModportSimplePortsDeclaration<'a>(
50 pub PortDirection<'a>,
51 pub ModportSimplePort<'a>,
52 pub Vec<(
53 Metadata<'a>, ModportSimplePort<'a>,
55 )>,
56);
57
58#[derive(Clone, Debug, PartialEq)]
59pub enum ModportSimplePort<'a> {
60 Name(Box<PortIdentifier<'a>>),
61 Expression(
62 Box<(
63 Metadata<'a>, PortIdentifier<'a>,
65 Metadata<'a>, Option<Expression<'a>>,
67 Metadata<'a>, )>,
69 ),
70}
71
72#[derive(Clone, Debug, PartialEq)]
73pub struct ModportTfPortsDeclaration<'a>(
74 pub ImportExport<'a>,
75 pub ModportTfPort<'a>,
76 pub Vec<(
77 Metadata<'a>, ModportTfPort<'a>,
79 )>,
80);
81
82#[derive(Clone, Debug, PartialEq)]
83pub enum ModportTfPort<'a> {
84 Method(Box<MethodPrototype<'a>>),
85 Tf(Box<TfIdentifier<'a>>),
86}
87
88#[derive(Clone, Debug, PartialEq)]
89pub enum ImportExport<'a> {
90 Import(Metadata<'a>),
91 Export(Metadata<'a>),
92}