1use crate::*;
2
3#[derive(Clone, Debug, PartialEq, Node)]
6pub enum SystemTimingCheck {
7 SetupTimingCheck(Box<SetupTimingCheck>),
8 HoldTimingCheck(Box<HoldTimingCheck>),
9 SetupholdTimingCheck(Box<SetupholdTimingCheck>),
10 RecoveryTimingCheck(Box<RecoveryTimingCheck>),
11 RemovalTimingCheck(Box<RemovalTimingCheck>),
12 RecremTimingCheck(Box<RecremTimingCheck>),
13 SkewTimingCheck(Box<SkewTimingCheck>),
14 TimeskewTimingCheck(Box<TimeskewTimingCheck>),
15 FullskewTimingCheck(Box<FullskewTimingCheck>),
16 PeriodTimingCheck(Box<PeriodTimingCheck>),
17 WidthTimingCheck(Box<WidthTimingCheck>),
18 NochangeTimingCheck(Box<NochangeTimingCheck>),
19}
20
21#[derive(Clone, Debug, PartialEq, Node)]
22pub struct SetupTimingCheck {
23 pub nodes: (
24 Keyword,
25 Paren<(
26 DataEvent,
27 Symbol,
28 ReferenceEvent,
29 Symbol,
30 TimingCheckLimit,
31 Option<(Symbol, Option<Notifier>)>,
32 )>,
33 Symbol,
34 ),
35}
36
37#[derive(Clone, Debug, PartialEq, Node)]
38pub struct HoldTimingCheck {
39 pub nodes: (
40 Keyword,
41 Paren<(
42 ReferenceEvent,
43 Symbol,
44 DataEvent,
45 Symbol,
46 TimingCheckLimit,
47 Option<(Symbol, Option<Notifier>)>,
48 )>,
49 Symbol,
50 ),
51}
52
53#[derive(Clone, Debug, PartialEq, Node)]
54pub struct SetupholdTimingCheck {
55 pub nodes: (
56 Keyword,
57 Paren<(
58 ReferenceEvent,
59 Symbol,
60 DataEvent,
61 Symbol,
62 TimingCheckLimit,
63 Symbol,
64 TimingCheckLimit,
65 Option<(
66 Symbol,
67 Option<Notifier>,
68 Option<(
69 Symbol,
70 Option<TimestampCondition>,
71 Option<(
72 Symbol,
73 Option<TimecheckCondition>,
74 Option<(
75 Symbol,
76 Option<DelayedReference>,
77 Option<(Symbol, Option<DelayedData>)>,
78 )>,
79 )>,
80 )>,
81 )>,
82 )>,
83 Symbol,
84 ),
85}
86
87#[derive(Clone, Debug, PartialEq, Node)]
88pub struct RecoveryTimingCheck {
89 pub nodes: (
90 Keyword,
91 Paren<(
92 ReferenceEvent,
93 Symbol,
94 DataEvent,
95 Symbol,
96 TimingCheckLimit,
97 Option<(Symbol, Option<Notifier>)>,
98 )>,
99 Symbol,
100 ),
101}
102
103#[derive(Clone, Debug, PartialEq, Node)]
104pub struct RemovalTimingCheck {
105 pub nodes: (
106 Keyword,
107 Paren<(
108 ReferenceEvent,
109 Symbol,
110 DataEvent,
111 Symbol,
112 TimingCheckLimit,
113 Option<(Symbol, Option<Notifier>)>,
114 )>,
115 Symbol,
116 ),
117}
118
119#[derive(Clone, Debug, PartialEq, Node)]
120pub struct RecremTimingCheck {
121 pub nodes: (
122 Keyword,
123 Paren<(
124 ReferenceEvent,
125 Symbol,
126 DataEvent,
127 Symbol,
128 TimingCheckLimit,
129 Symbol,
130 TimingCheckLimit,
131 Option<(
132 Symbol,
133 Option<Notifier>,
134 Option<(
135 Symbol,
136 Option<TimestampCondition>,
137 Option<(
138 Symbol,
139 Option<TimecheckCondition>,
140 Option<(
141 Symbol,
142 Option<DelayedReference>,
143 Option<(Symbol, Option<DelayedData>)>,
144 )>,
145 )>,
146 )>,
147 )>,
148 )>,
149 Symbol,
150 ),
151}
152
153#[derive(Clone, Debug, PartialEq, Node)]
154pub struct SkewTimingCheck {
155 pub nodes: (
156 Keyword,
157 Paren<(
158 ReferenceEvent,
159 Symbol,
160 DataEvent,
161 Symbol,
162 TimingCheckLimit,
163 Option<(Symbol, Option<Notifier>)>,
164 )>,
165 Symbol,
166 ),
167}
168
169#[derive(Clone, Debug, PartialEq, Node)]
170pub struct TimeskewTimingCheck {
171 pub nodes: (
172 Keyword,
173 Paren<(
174 ReferenceEvent,
175 Symbol,
176 DataEvent,
177 Symbol,
178 TimingCheckLimit,
179 Option<(
180 Symbol,
181 Option<Notifier>,
182 Option<(
183 Symbol,
184 Option<EventBasedFlag>,
185 Option<(Symbol, Option<RemainActiveFlag>)>,
186 )>,
187 )>,
188 )>,
189 Symbol,
190 ),
191}
192
193#[derive(Clone, Debug, PartialEq, Node)]
194pub struct FullskewTimingCheck {
195 pub nodes: (
196 Keyword,
197 Paren<(
198 ReferenceEvent,
199 Symbol,
200 DataEvent,
201 Symbol,
202 TimingCheckLimit,
203 Symbol,
204 TimingCheckLimit,
205 Option<(
206 Symbol,
207 Option<Notifier>,
208 Option<(
209 Symbol,
210 Option<EventBasedFlag>,
211 Option<(Symbol, Option<RemainActiveFlag>)>,
212 )>,
213 )>,
214 )>,
215 Symbol,
216 ),
217}
218
219#[derive(Clone, Debug, PartialEq, Node)]
220pub struct PeriodTimingCheck {
221 pub nodes: (
222 Keyword,
223 Paren<(
224 ControlledReferenceEvent,
225 Symbol,
226 TimingCheckLimit,
227 Option<(Symbol, Option<Notifier>)>,
228 )>,
229 Symbol,
230 ),
231}
232
233#[derive(Clone, Debug, PartialEq, Node)]
234pub struct WidthTimingCheck {
235 pub nodes: (
236 Keyword,
237 Paren<(
238 ControlledReferenceEvent,
239 Symbol,
240 TimingCheckLimit,
241 Symbol,
242 Threshold,
243 Option<(Symbol, Option<Notifier>)>,
244 )>,
245 Symbol,
246 ),
247}
248
249#[derive(Clone, Debug, PartialEq, Node)]
250pub struct NochangeTimingCheck {
251 pub nodes: (
252 Keyword,
253 Paren<(
254 ReferenceEvent,
255 Symbol,
256 DataEvent,
257 Symbol,
258 StartEdgeOffset,
259 Symbol,
260 EndEdgeOffset,
261 Option<(Symbol, Option<Notifier>)>,
262 )>,
263 Symbol,
264 ),
265}