scarf_syntax/behavioral_statements/
timing_control_statements.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct ProceduralTimingControlStatement<'a>(
9 pub ProceduralTimingControl<'a>,
10 pub StatementOrNull<'a>,
11);
12
13#[derive(Clone, Debug, PartialEq)]
14pub enum DelayOrEventControl<'a> {
15 Delay(Box<DelayControl<'a>>),
16 Event(Box<EventControl<'a>>),
17 Repeat(
18 Box<(
19 Metadata<'a>, Metadata<'a>, Expression<'a>,
22 Metadata<'a>, EventControl<'a>,
24 )>,
25 ),
26}
27
28#[derive(Clone, Debug, PartialEq)]
29pub enum DelayControl<'a> {
30 Value(
31 Box<(
32 Metadata<'a>, DelayValue<'a>,
34 )>,
35 ),
36 Mintypmax(
37 Box<(
38 Metadata<'a>, Metadata<'a>, MintypmaxExpression<'a>,
41 Metadata<'a>, )>,
43 ),
44}
45
46#[derive(Clone, Debug, PartialEq)]
47pub enum EventControl<'a> {
48 Clocking(Box<ClockingEvent<'a>>),
49 Wildcard(
50 Box<(
51 Metadata<'a>, Metadata<'a>, )>,
54 ),
55 ParenWildcard(
56 Box<(
57 Metadata<'a>, Metadata<'a>, Metadata<'a>, Metadata<'a>, )>,
62 ),
63}
64
65#[derive(Clone, Debug, PartialEq)]
66pub enum ClockingEvent<'a> {
67 Ps(
68 Box<(
69 Metadata<'a>, PsIdentifier<'a>,
71 )>,
72 ),
73 Hierarchical(
74 Box<(
75 Metadata<'a>, HierarchicalIdentifier<'a>,
77 )>,
78 ),
79 Expression(
80 Box<(
81 Metadata<'a>, Metadata<'a>, EventExpression<'a>,
84 Metadata<'a>, )>,
86 ),
87}
88
89#[derive(Clone, Debug, PartialEq)]
90pub enum EventExpression<'a> {
91 Trigger(
92 Box<(
93 Option<EdgeIdentifier<'a>>,
94 Expression<'a>,
95 Option<(
96 Metadata<'a>, Expression<'a>,
98 )>,
99 )>,
100 ),
101 Sequence(
102 Box<(
103 SequenceInstance<'a>,
104 Option<(
105 Metadata<'a>, Expression<'a>,
107 )>,
108 )>,
109 ),
110 Or(
111 Box<(
112 EventExpression<'a>,
113 Metadata<'a>, EventExpression<'a>,
115 )>,
116 ),
117 Comma(
118 Box<(
119 EventExpression<'a>,
120 Metadata<'a>, EventExpression<'a>,
122 )>,
123 ),
124 Paren(
125 Box<(
126 Metadata<'a>, EventExpression<'a>,
128 Metadata<'a>, )>,
130 ),
131}
132
133#[derive(Clone, Debug, PartialEq)]
134pub enum ProceduralTimingControl<'a> {
135 Delay(Box<DelayControl<'a>>),
136 Event(Box<EventControl<'a>>),
137 Cycle(Box<CycleDelay<'a>>),
138}
139
140#[derive(Clone, Debug, PartialEq)]
141pub enum JumpStatement<'a> {
142 Return(
143 Box<(
144 Metadata<'a>, Option<Expression<'a>>,
146 Metadata<'a>, )>,
148 ),
149 Break(
150 Box<(
151 Metadata<'a>, Metadata<'a>, )>,
154 ),
155 Continue(
156 Box<(
157 Metadata<'a>, Metadata<'a>, )>,
160 ),
161}
162
163#[derive(Clone, Debug, PartialEq)]
164pub enum WaitStatement<'a> {
165 Expression(
166 Box<(
167 Metadata<'a>, Metadata<'a>, Expression<'a>,
170 Metadata<'a>, StatementOrNull<'a>,
172 )>,
173 ),
174 Fork(
175 Box<(
176 Metadata<'a>, Metadata<'a>, Metadata<'a>, )>,
180 ),
181 Order(
182 Box<(
183 Metadata<'a>, Metadata<'a>, HierarchicalIdentifier<'a>,
186 Vec<(
187 Metadata<'a>, HierarchicalIdentifier<'a>,
189 )>,
190 Metadata<'a>, ActionBlock<'a>,
192 )>,
193 ),
194}
195
196#[derive(Clone, Debug, PartialEq)]
197pub enum EventTrigger<'a> {
198 Blocking(
199 Box<(
200 Metadata<'a>, HierarchicalEventIdentifier<'a>,
202 NonrangeSelect<'a>,
203 Metadata<'a>, )>,
205 ),
206 Nonblocking(
207 Box<(
208 Metadata<'a>, Option<DelayOrEventControl<'a>>,
210 HierarchicalEventIdentifier<'a>,
211 NonrangeSelect<'a>,
212 Metadata<'a>, )>,
214 ),
215}
216
217#[derive(Clone, Debug, PartialEq)]
218pub enum DisableStatement<'a> {
219 Task(
220 Box<(
221 Metadata<'a>, HierarchicalTaskIdentifier<'a>,
223 Metadata<'a>, )>,
225 ),
226 Block(
227 Box<(
228 Metadata<'a>, HierarchicalBlockIdentifier<'a>,
230 Metadata<'a>, )>,
232 ),
233 Fork(
234 Box<(
235 Metadata<'a>, Metadata<'a>, Metadata<'a>, )>,
239 ),
240}