scarf_syntax/source_text/
module_parameters_and_ports.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum ParameterPortList<'a> {
9 Defaults(
10 Metadata<'a>, Metadata<'a>, ListOfParamAssignments<'a>,
13 Vec<(Metadata<'a>, ParameterPortDeclaration<'a>)>,
14 Metadata<'a>, ),
16 NoDefaults(
17 Metadata<'a>, Metadata<'a>, ParameterPortDeclaration<'a>,
20 Vec<(Metadata<'a>, ParameterPortDeclaration<'a>)>,
21 Metadata<'a>, ),
23 Empty(Metadata<'a>, Metadata<'a>, Metadata<'a>),
24}
25
26#[derive(Clone, Debug, PartialEq)]
27pub enum ParameterPortDeclaration<'a> {
28 ParameterDeclaration(Box<ParameterDeclaration<'a>>),
29 LocalParameterDeclaration(Box<LocalParameterDeclaration<'a>>),
30 DataAssignments(Box<(DataType<'a>, ListOfParamAssignments<'a>)>),
31 TypeParameterDeclaration(Box<TypeParameterDeclaration<'a>>),
32}
33
34#[derive(Clone, Debug, PartialEq)]
35pub struct ListOfPorts<'a>(
36 pub Metadata<'a>, pub Port<'a>,
38 pub Vec<(Metadata<'a>, Port<'a>)>,
39 pub Metadata<'a>,
40);
41
42#[derive(Clone, Debug, PartialEq)]
43pub struct ListOfPortDeclarations<'a>(
44 pub Metadata<'a>, pub Option<(
46 Vec<AttributeInstance<'a>>,
47 AnsiPortDeclaration<'a>,
48 Vec<(
49 Metadata<'a>, Vec<AttributeInstance<'a>>,
51 AnsiPortDeclaration<'a>,
52 )>,
53 )>,
54 pub Metadata<'a>, );
56
57#[derive(Clone, Debug, PartialEq)]
58pub enum PortDeclaration<'a> {
59 InoutDeclaration(Box<(Vec<AttributeInstance<'a>>, InoutDeclaration<'a>)>),
60 InputDeclaration(Box<(Vec<AttributeInstance<'a>>, InputDeclaration<'a>)>),
61 OutputDeclaration(Box<(Vec<AttributeInstance<'a>>, OutputDeclaration<'a>)>),
62 RefDeclaration(Box<(Vec<AttributeInstance<'a>>, RefDeclaration<'a>)>),
63 InterfacePortDeclaration(
64 Box<(Vec<AttributeInstance<'a>>, InterfacePortDeclaration<'a>)>,
65 ),
66}
67
68#[derive(Clone, Debug, PartialEq)]
69pub enum Port<'a> {
70 PortExpression(Box<Option<PortExpression<'a>>>),
71 PortIdentifier(
72 Box<(
73 Metadata<'a>, PortIdentifier<'a>,
75 Metadata<'a>, Option<PortExpression<'a>>,
77 Metadata<'a>, )>,
79 ),
80}
81
82#[derive(Clone, Debug, PartialEq)]
83pub enum PortExpression<'a> {
84 SinglePortReference(Box<PortReference<'a>>),
85 MultiPortReference(
86 Box<(
87 Metadata<'a>, PortReference<'a>,
89 Vec<(Metadata<'a>, PortReference<'a>)>,
90 Metadata<'a>, )>,
92 ),
93}
94
95#[derive(Clone, Debug, PartialEq)]
96pub struct PortReference<'a>(pub PortIdentifier<'a>, pub ConstantSelect<'a>);
97
98#[derive(Clone, Debug, PartialEq)]
99pub enum PortDirection<'a> {
100 Input(Metadata<'a>),
101 Output(Metadata<'a>),
102 Inout(Metadata<'a>),
103 Ref(Metadata<'a>),
104}
105
106#[derive(Clone, Debug, PartialEq)]
107pub struct NetPortHeader<'a>(
108 pub Option<PortDirection<'a>>,
109 pub NetPortType<'a>,
110);
111
112#[derive(Clone, Debug, PartialEq)]
113pub struct VariablePortHeader<'a>(
114 pub Option<PortDirection<'a>>,
115 pub VariablePortType<'a>,
116);
117
118#[derive(Clone, Debug, PartialEq)]
119pub enum InterfacePortHeader<'a> {
120 InterfaceIdentifier(
121 (
122 InterfaceIdentifier<'a>,
123 Option<(Metadata<'a>, ModportIdentifier<'a>)>,
124 ),
125 ),
126 Interface((Metadata<'a>, Option<(Metadata<'a>, ModportIdentifier<'a>)>)),
127}
128
129#[derive(Clone, Debug, PartialEq)]
130pub enum AnsiPortDeclaration<'a> {
131 NetPort(Box<AnsiNetPortDeclaration<'a>>),
132 VariablePort(Box<AnsiVariablePortDeclaration<'a>>),
133 ConstantPort(Box<AnsiConstantPortDeclaration<'a>>),
134}
135
136#[derive(Clone, Debug, PartialEq)]
137pub enum NetOrInterfacePortHeader<'a> {
138 NetPortHeader(Box<NetPortHeader<'a>>),
139 InterfacePortHeader(Box<InterfacePortHeader<'a>>),
140}
141
142#[derive(Clone, Debug, PartialEq)]
143pub struct AnsiNetPortDeclaration<'a>(
144 pub Option<NetOrInterfacePortHeader<'a>>,
145 pub PortIdentifier<'a>,
146 pub Vec<UnpackedDimension<'a>>,
147 pub Option<(Metadata<'a>, ConstantExpression<'a>)>,
148);
149
150#[derive(Clone, Debug, PartialEq)]
151pub struct AnsiVariablePortDeclaration<'a>(
152 pub Option<VariablePortHeader<'a>>,
153 pub PortIdentifier<'a>,
154 pub Vec<VariableDimension<'a>>,
155 pub Option<(Metadata<'a>, ConstantExpression<'a>)>,
156);
157
158#[derive(Clone, Debug, PartialEq)]
159pub struct AnsiConstantPortDeclaration<'a>(
160 pub Option<PortDirection<'a>>,
161 pub Metadata<'a>, pub PortIdentifier<'a>,
163 pub Metadata<'a>, pub Option<Expression<'a>>,
165 pub Metadata<'a>, );