Skip to main content

scarf_syntax/declarations/
interface_declarations.rs

1// =======================================================================
2// interface_declarations.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.2.9
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct ModportDeclaration<'a>(
9    pub Metadata<'a>, // modport
10    pub ModportItem<'a>,
11    pub  Vec<(
12        Metadata<'a>, // ,
13        ModportItem<'a>,
14    )>,
15    pub Metadata<'a>, // ;
16);
17
18#[derive(Clone, Debug, PartialEq)]
19pub struct ModportItem<'a>(
20    pub ModportIdentifier<'a>,
21    pub Metadata<'a>, // (
22    pub ModportPortsDeclaration<'a>,
23    pub  Vec<(
24        Metadata<'a>, // ,
25        ModportPortsDeclaration<'a>,
26    )>,
27    pub Metadata<'a>, // )
28);
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>, // clocking
45    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>, // ,
54        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>, // .
64            PortIdentifier<'a>,
65            Metadata<'a>, // (
66            Option<Expression<'a>>,
67            Metadata<'a>, // )
68        )>,
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>, // ,
78        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}