scarf_syntax/specify_section/
specify_path_declarations.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum PathDeclaration<'a> {
9 Simple(
10 Box<(
11 SimplePathDeclaration<'a>,
12 Metadata<'a>, )>,
14 ),
15 EdgeSensitive(
16 Box<(
17 EdgeSensitivePathDeclaration<'a>,
18 Metadata<'a>, )>,
20 ),
21 StateDependent(
22 Box<(
23 StateDependentPathDeclaration<'a>,
24 Metadata<'a>, )>,
26 ),
27}
28
29#[derive(Clone, Debug, PartialEq)]
30pub enum SimplePathDeclaration<'a> {
31 Parallel(
32 Box<(
33 ParallelPathDescription<'a>,
34 Metadata<'a>, PathDelayValue<'a>,
36 )>,
37 ),
38 Full(
39 Box<(
40 FullPathDescription<'a>,
41 Metadata<'a>, PathDelayValue<'a>,
43 )>,
44 ),
45}
46
47#[derive(Clone, Debug, PartialEq)]
48pub struct ParallelPathDescription<'a>(
49 pub Metadata<'a>, pub SpecifyInputTerminalDescriptor<'a>,
51 pub Option<PolarityOperator<'a>>,
52 pub Metadata<'a>, pub SpecifyOutputTerminalDescriptor<'a>,
54 pub Metadata<'a>, );
56
57#[derive(Clone, Debug, PartialEq)]
58pub struct FullPathDescription<'a>(
59 pub Metadata<'a>, pub ListOfPathInputs<'a>,
61 pub Option<PolarityOperator<'a>>,
62 pub Metadata<'a>, pub ListOfPathOutputs<'a>,
64 pub Metadata<'a>, );
66
67#[derive(Clone, Debug, PartialEq)]
68pub enum EdgeSensitivePathDeclaration<'a> {
69 Parallel(
70 Box<(
71 ParallelEdgeSensitivePathDescription<'a>,
72 Metadata<'a>, PathDelayValue<'a>,
74 )>,
75 ),
76 Full(
77 Box<(
78 FullEdgeSensitivePathDescription<'a>,
79 Metadata<'a>, PathDelayValue<'a>,
81 )>,
82 ),
83}
84
85#[derive(Clone, Debug, PartialEq)]
86pub enum ParallelEdgeSensitivePathDescription<'a> {
87 DataSource(
88 Box<(
89 Metadata<'a>, Option<EdgeIdentifier<'a>>,
91 SpecifyInputTerminalDescriptor<'a>,
92 Option<PolarityOperator<'a>>,
93 Metadata<'a>, Metadata<'a>, SpecifyOutputTerminalDescriptor<'a>,
96 Option<PolarityOperator<'a>>,
97 Metadata<'a>, DataSourceExpression<'a>,
99 Metadata<'a>, Metadata<'a>, )>,
102 ),
103 NoDataSource(
104 Box<(
105 Metadata<'a>, Option<EdgeIdentifier<'a>>,
107 SpecifyInputTerminalDescriptor<'a>,
108 Option<PolarityOperator<'a>>,
109 Metadata<'a>, SpecifyOutputTerminalDescriptor<'a>,
111 Metadata<'a>, )>,
113 ),
114}
115
116#[derive(Clone, Debug, PartialEq)]
117pub enum FullEdgeSensitivePathDescription<'a> {
118 DataSource(
119 Box<(
120 Metadata<'a>, Option<EdgeIdentifier<'a>>,
122 ListOfPathInputs<'a>,
123 Option<PolarityOperator<'a>>,
124 Metadata<'a>, Metadata<'a>, ListOfPathOutputs<'a>,
127 Option<PolarityOperator<'a>>,
128 Metadata<'a>, DataSourceExpression<'a>,
130 Metadata<'a>, Metadata<'a>, )>,
133 ),
134 NoDataSource(
135 Box<(
136 Metadata<'a>, Option<EdgeIdentifier<'a>>,
138 ListOfPathInputs<'a>,
139 Option<PolarityOperator<'a>>,
140 Metadata<'a>, ListOfPathOutputs<'a>,
142 Metadata<'a>, )>,
144 ),
145}
146
147#[derive(Clone, Debug, PartialEq)]
148pub enum StateDependentPathDeclaration<'a> {
149 Simple(
150 Box<(
151 Metadata<'a>, Metadata<'a>, ModulePathExpression<'a>,
154 Metadata<'a>, SimplePathDeclaration<'a>,
156 )>,
157 ),
158 EdgeSensitive(
159 Box<(
160 Metadata<'a>, Metadata<'a>, ModulePathExpression<'a>,
163 Metadata<'a>, EdgeSensitivePathDeclaration<'a>,
165 )>,
166 ),
167 NoCondition(
168 Box<(
169 Metadata<'a>, SimplePathDeclaration<'a>,
171 )>,
172 ),
173}
174
175#[derive(Clone, Debug, PartialEq)]
176pub struct DataSourceExpression<'a>(pub Expression<'a>);
177
178#[derive(Clone, Debug, PartialEq)]
179pub enum EdgeIdentifier<'a> {
180 Posedge(Metadata<'a>),
181 Negedge(Metadata<'a>),
182 Edge(Metadata<'a>),
183}
184
185#[derive(Clone, Debug, PartialEq)]
186pub enum PolarityOperator<'a> {
187 Plus(Metadata<'a>),
188 Minus(Metadata<'a>),
189}