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