Skip to main content

scarf_syntax/specify_section/system_timing_checks/
system_timing_check_commands.rs

1// =======================================================================
2// specify_timing_check_commands.rs
3// =======================================================================
4//! CST Nodes from 1800-2023 A.7.5.1
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum SystemTimingCheck<'a> {
9    Setup(Box<DollarSetupTimingCheck<'a>>),
10    Hold(Box<DollarHoldTimingCheck<'a>>),
11    Setuphold(Box<DollarSetupholdTimingCheck<'a>>),
12    Recovery(Box<DollarRecoveryTimingCheck<'a>>),
13    Removal(Box<DollarRemovalTimingCheck<'a>>),
14    Recrem(Box<DollarRecremTimingCheck<'a>>),
15    Skew(Box<DollarSkewTimingCheck<'a>>),
16    Timeskew(Box<DollarTimeskewTimingCheck<'a>>),
17    Fullskew(Box<DollarFullskewTimingCheck<'a>>),
18    Period(Box<DollarPeriodTimingCheck<'a>>),
19    Width(Box<DollarWidthTimingCheck<'a>>),
20    Nochange(Box<DollarNochangeTimingCheck<'a>>),
21}
22
23#[derive(Clone, Debug, PartialEq)]
24pub struct DollarSetupTimingCheck<'a>(
25    pub Metadata<'a>, // $setup
26    pub Metadata<'a>, // (
27    pub DataEvent<'a>,
28    pub Metadata<'a>, // ,
29    pub ReferenceEvent<'a>,
30    pub Metadata<'a>, // ,
31    pub TimingCheckLimit<'a>,
32    pub  Option<(
33        Metadata<'a>, // ,
34        Option<Notifier<'a>>,
35    )>,
36    pub Metadata<'a>, // )
37    pub Metadata<'a>, // ;
38);
39
40#[derive(Clone, Debug, PartialEq)]
41pub struct DollarHoldTimingCheck<'a>(
42    pub Metadata<'a>, // $hold
43    pub Metadata<'a>, // (
44    pub ReferenceEvent<'a>,
45    pub Metadata<'a>, // ,
46    pub DataEvent<'a>,
47    pub Metadata<'a>, // ,
48    pub TimingCheckLimit<'a>,
49    pub  Option<(
50        Metadata<'a>, // ,
51        Option<Notifier<'a>>,
52    )>,
53    pub Metadata<'a>, // )
54    pub Metadata<'a>, // ;
55);
56
57#[derive(Clone, Debug, PartialEq)]
58pub struct DollarSetupholdTimingCheck<'a>(
59    pub Metadata<'a>, // $setuphold
60    pub Metadata<'a>, // (
61    pub ReferenceEvent<'a>,
62    pub Metadata<'a>, // ,
63    pub DataEvent<'a>,
64    pub Metadata<'a>, // ,
65    pub TimingCheckLimit<'a>,
66    pub Metadata<'a>, // ,
67    pub TimingCheckLimit<'a>,
68    pub  Option<(
69        Metadata<'a>, // ,
70        Option<Notifier<'a>>,
71        Option<(
72            Metadata<'a>, // ,
73            Option<TimestampCondition<'a>>,
74            Option<(
75                Metadata<'a>, // ,
76                Option<TimecheckCondition<'a>>,
77                Option<(
78                    Metadata<'a>, // ,
79                    Option<DelayedReference<'a>>,
80                    Option<(
81                        Metadata<'a>, // ,
82                        Option<DelayedData<'a>>,
83                    )>,
84                )>,
85            )>,
86        )>,
87    )>,
88    pub Metadata<'a>, // )
89    pub Metadata<'a>, // ;
90);
91
92#[derive(Clone, Debug, PartialEq)]
93pub struct DollarRecoveryTimingCheck<'a>(
94    pub Metadata<'a>, // $recovery
95    pub Metadata<'a>, // (
96    pub ReferenceEvent<'a>,
97    pub Metadata<'a>, // ,
98    pub DataEvent<'a>,
99    pub Metadata<'a>, // ,
100    pub TimingCheckLimit<'a>,
101    pub  Option<(
102        Metadata<'a>, // ,
103        Option<Notifier<'a>>,
104    )>,
105    pub Metadata<'a>, // )
106    pub Metadata<'a>, // ;
107);
108
109#[derive(Clone, Debug, PartialEq)]
110pub struct DollarRemovalTimingCheck<'a>(
111    pub Metadata<'a>, // $removal
112    pub Metadata<'a>, // (
113    pub ReferenceEvent<'a>,
114    pub Metadata<'a>, // ,
115    pub DataEvent<'a>,
116    pub Metadata<'a>, // ,
117    pub TimingCheckLimit<'a>,
118    pub  Option<(
119        Metadata<'a>, // ,
120        Option<Notifier<'a>>,
121    )>,
122    pub Metadata<'a>, // )
123    pub Metadata<'a>, // ;
124);
125
126#[derive(Clone, Debug, PartialEq)]
127pub struct DollarRecremTimingCheck<'a>(
128    pub Metadata<'a>, // $recrem
129    pub Metadata<'a>, // (
130    pub ReferenceEvent<'a>,
131    pub Metadata<'a>, // ,
132    pub DataEvent<'a>,
133    pub Metadata<'a>, // ,
134    pub TimingCheckLimit<'a>,
135    pub Metadata<'a>, // ,
136    pub TimingCheckLimit<'a>,
137    pub  Option<(
138        Metadata<'a>, // ,
139        Option<Notifier<'a>>,
140        Option<(
141            Metadata<'a>, // ,
142            Option<TimestampCondition<'a>>,
143            Option<(
144                Metadata<'a>, // ,
145                Option<TimecheckCondition<'a>>,
146                Option<(
147                    Metadata<'a>, // ,
148                    Option<DelayedReference<'a>>,
149                    Option<(
150                        Metadata<'a>, // ,
151                        Option<DelayedData<'a>>,
152                    )>,
153                )>,
154            )>,
155        )>,
156    )>,
157    pub Metadata<'a>, // )
158    pub Metadata<'a>, // ;
159);
160
161#[derive(Clone, Debug, PartialEq)]
162pub struct DollarSkewTimingCheck<'a>(
163    pub Metadata<'a>, // $skew
164    pub Metadata<'a>, // (
165    pub ReferenceEvent<'a>,
166    pub Metadata<'a>, // ,
167    pub DataEvent<'a>,
168    pub Metadata<'a>, // ,
169    pub TimingCheckLimit<'a>,
170    pub  Option<(
171        Metadata<'a>, // ,
172        Option<Notifier<'a>>,
173    )>,
174    pub Metadata<'a>, // )
175    pub Metadata<'a>, // ;
176);
177
178#[derive(Clone, Debug, PartialEq)]
179pub struct DollarTimeskewTimingCheck<'a>(
180    pub Metadata<'a>, // $timeskew
181    pub Metadata<'a>, // (
182    pub ReferenceEvent<'a>,
183    pub Metadata<'a>, // ,
184    pub DataEvent<'a>,
185    pub Metadata<'a>, // ,
186    pub TimingCheckLimit<'a>,
187    pub  Option<(
188        Metadata<'a>, // ,
189        Option<Notifier<'a>>,
190        Option<(
191            Metadata<'a>,
192            Option<EventBasedFlag<'a>>,
193            Option<(Metadata<'a>, Option<RemainActiveFlag<'a>>)>,
194        )>,
195    )>,
196    pub Metadata<'a>, // )
197    pub Metadata<'a>, // ;
198);
199
200#[derive(Clone, Debug, PartialEq)]
201pub struct DollarFullskewTimingCheck<'a>(
202    pub Metadata<'a>, // $fullskew
203    pub Metadata<'a>, // (
204    pub ReferenceEvent<'a>,
205    pub Metadata<'a>, // ,
206    pub DataEvent<'a>,
207    pub Metadata<'a>, // ,
208    pub TimingCheckLimit<'a>,
209    pub  Option<(
210        Metadata<'a>, // ,
211        Option<Notifier<'a>>,
212        Option<(
213            Metadata<'a>,
214            Option<EventBasedFlag<'a>>,
215            Option<(Metadata<'a>, Option<RemainActiveFlag<'a>>)>,
216        )>,
217    )>,
218    pub Metadata<'a>, // )
219    pub Metadata<'a>, // ;
220);
221
222#[derive(Clone, Debug, PartialEq)]
223pub struct DollarPeriodTimingCheck<'a>(
224    pub Metadata<'a>, // $period
225    pub Metadata<'a>, // (
226    pub ControlledReferenceEvent<'a>,
227    pub Metadata<'a>, // ,
228    pub TimingCheckLimit<'a>,
229    pub  Option<(
230        Metadata<'a>, // ,
231        Option<Notifier<'a>>,
232    )>,
233    pub Metadata<'a>, // )
234    pub Metadata<'a>, // ;
235);
236
237#[derive(Clone, Debug, PartialEq)]
238pub struct DollarWidthTimingCheck<'a>(
239    pub Metadata<'a>, // $width
240    pub Metadata<'a>, // (
241    pub ControlledReferenceEvent<'a>,
242    pub Metadata<'a>, // ,
243    pub TimingCheckLimit<'a>,
244    pub Metadata<'a>, // ,
245    pub Threshold<'a>,
246    pub  Option<(
247        Metadata<'a>, // ,
248        Option<Notifier<'a>>,
249    )>,
250    pub Metadata<'a>, // )
251    pub Metadata<'a>, // ;
252);
253
254#[derive(Clone, Debug, PartialEq)]
255pub struct DollarNochangeTimingCheck<'a>(
256    pub Metadata<'a>, // $nochange
257    pub Metadata<'a>, // (
258    pub ReferenceEvent<'a>,
259    pub Metadata<'a>, // ,
260    pub DataEvent<'a>,
261    pub Metadata<'a>, // ,
262    pub StartEdgeOffset<'a>,
263    pub Metadata<'a>, // ,
264    pub EndEdgeOffset<'a>,
265    pub  Option<(
266        Metadata<'a>, // ,
267        Option<Notifier<'a>>,
268    )>,
269    pub Metadata<'a>, // )
270    pub Metadata<'a>, // ;
271);