1use 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>, pub Metadata<'a>, pub DataEvent<'a>,
28 pub Metadata<'a>, pub ReferenceEvent<'a>,
30 pub Metadata<'a>, pub TimingCheckLimit<'a>,
32 pub Option<(
33 Metadata<'a>, Option<Notifier<'a>>,
35 )>,
36 pub Metadata<'a>, pub Metadata<'a>, );
39
40#[derive(Clone, Debug, PartialEq)]
41pub struct DollarHoldTimingCheck<'a>(
42 pub Metadata<'a>, pub Metadata<'a>, pub ReferenceEvent<'a>,
45 pub Metadata<'a>, pub DataEvent<'a>,
47 pub Metadata<'a>, pub TimingCheckLimit<'a>,
49 pub Option<(
50 Metadata<'a>, Option<Notifier<'a>>,
52 )>,
53 pub Metadata<'a>, pub Metadata<'a>, );
56
57#[derive(Clone, Debug, PartialEq)]
58pub struct DollarSetupholdTimingCheck<'a>(
59 pub Metadata<'a>, pub Metadata<'a>, pub ReferenceEvent<'a>,
62 pub Metadata<'a>, pub DataEvent<'a>,
64 pub Metadata<'a>, pub TimingCheckLimit<'a>,
66 pub Metadata<'a>, pub TimingCheckLimit<'a>,
68 pub Option<(
69 Metadata<'a>, Option<Notifier<'a>>,
71 Option<(
72 Metadata<'a>, Option<TimestampCondition<'a>>,
74 Option<(
75 Metadata<'a>, Option<TimecheckCondition<'a>>,
77 Option<(
78 Metadata<'a>, Option<DelayedReference<'a>>,
80 Option<(
81 Metadata<'a>, Option<DelayedData<'a>>,
83 )>,
84 )>,
85 )>,
86 )>,
87 )>,
88 pub Metadata<'a>, pub Metadata<'a>, );
91
92#[derive(Clone, Debug, PartialEq)]
93pub struct DollarRecoveryTimingCheck<'a>(
94 pub Metadata<'a>, pub Metadata<'a>, pub ReferenceEvent<'a>,
97 pub Metadata<'a>, pub DataEvent<'a>,
99 pub Metadata<'a>, pub TimingCheckLimit<'a>,
101 pub Option<(
102 Metadata<'a>, Option<Notifier<'a>>,
104 )>,
105 pub Metadata<'a>, pub Metadata<'a>, );
108
109#[derive(Clone, Debug, PartialEq)]
110pub struct DollarRemovalTimingCheck<'a>(
111 pub Metadata<'a>, pub Metadata<'a>, pub ReferenceEvent<'a>,
114 pub Metadata<'a>, pub DataEvent<'a>,
116 pub Metadata<'a>, pub TimingCheckLimit<'a>,
118 pub Option<(
119 Metadata<'a>, Option<Notifier<'a>>,
121 )>,
122 pub Metadata<'a>, pub Metadata<'a>, );
125
126#[derive(Clone, Debug, PartialEq)]
127pub struct DollarRecremTimingCheck<'a>(
128 pub Metadata<'a>, pub Metadata<'a>, pub ReferenceEvent<'a>,
131 pub Metadata<'a>, pub DataEvent<'a>,
133 pub Metadata<'a>, pub TimingCheckLimit<'a>,
135 pub Metadata<'a>, pub TimingCheckLimit<'a>,
137 pub Option<(
138 Metadata<'a>, Option<Notifier<'a>>,
140 Option<(
141 Metadata<'a>, Option<TimestampCondition<'a>>,
143 Option<(
144 Metadata<'a>, Option<TimecheckCondition<'a>>,
146 Option<(
147 Metadata<'a>, Option<DelayedReference<'a>>,
149 Option<(
150 Metadata<'a>, Option<DelayedData<'a>>,
152 )>,
153 )>,
154 )>,
155 )>,
156 )>,
157 pub Metadata<'a>, pub Metadata<'a>, );
160
161#[derive(Clone, Debug, PartialEq)]
162pub struct DollarSkewTimingCheck<'a>(
163 pub Metadata<'a>, pub Metadata<'a>, pub ReferenceEvent<'a>,
166 pub Metadata<'a>, pub DataEvent<'a>,
168 pub Metadata<'a>, pub TimingCheckLimit<'a>,
170 pub Option<(
171 Metadata<'a>, Option<Notifier<'a>>,
173 )>,
174 pub Metadata<'a>, pub Metadata<'a>, );
177
178#[derive(Clone, Debug, PartialEq)]
179pub struct DollarTimeskewTimingCheck<'a>(
180 pub Metadata<'a>, pub Metadata<'a>, pub ReferenceEvent<'a>,
183 pub Metadata<'a>, pub DataEvent<'a>,
185 pub Metadata<'a>, pub TimingCheckLimit<'a>,
187 pub Option<(
188 Metadata<'a>, 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>, pub Metadata<'a>, );
199
200#[derive(Clone, Debug, PartialEq)]
201pub struct DollarFullskewTimingCheck<'a>(
202 pub Metadata<'a>, pub Metadata<'a>, pub ReferenceEvent<'a>,
205 pub Metadata<'a>, pub DataEvent<'a>,
207 pub Metadata<'a>, pub TimingCheckLimit<'a>,
209 pub Option<(
210 Metadata<'a>, 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>, pub Metadata<'a>, );
221
222#[derive(Clone, Debug, PartialEq)]
223pub struct DollarPeriodTimingCheck<'a>(
224 pub Metadata<'a>, pub Metadata<'a>, pub ControlledReferenceEvent<'a>,
227 pub Metadata<'a>, pub TimingCheckLimit<'a>,
229 pub Option<(
230 Metadata<'a>, Option<Notifier<'a>>,
232 )>,
233 pub Metadata<'a>, pub Metadata<'a>, );
236
237#[derive(Clone, Debug, PartialEq)]
238pub struct DollarWidthTimingCheck<'a>(
239 pub Metadata<'a>, pub Metadata<'a>, pub ControlledReferenceEvent<'a>,
242 pub Metadata<'a>, pub TimingCheckLimit<'a>,
244 pub Metadata<'a>, pub Threshold<'a>,
246 pub Option<(
247 Metadata<'a>, Option<Notifier<'a>>,
249 )>,
250 pub Metadata<'a>, pub Metadata<'a>, );
253
254#[derive(Clone, Debug, PartialEq)]
255pub struct DollarNochangeTimingCheck<'a>(
256 pub Metadata<'a>, pub Metadata<'a>, pub ReferenceEvent<'a>,
259 pub Metadata<'a>, pub DataEvent<'a>,
261 pub Metadata<'a>, pub StartEdgeOffset<'a>,
263 pub Metadata<'a>, pub EndEdgeOffset<'a>,
265 pub Option<(
266 Metadata<'a>, Option<Notifier<'a>>,
268 )>,
269 pub Metadata<'a>, pub Metadata<'a>, );