scarf_syntax/behavioral_statements/
clocking_block.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum ClockingDeclaration<'a> {
9 Local(
10 Box<(
11 Option<Metadata<'a>>, Metadata<'a>, Option<ClockingIdentifier<'a>>,
14 ClockingEvent<'a>,
15 Metadata<'a>, Vec<ClockingItem<'a>>,
17 Metadata<'a>, Option<(
19 Metadata<'a>, ClockingIdentifier<'a>,
21 )>,
22 )>,
23 ),
24 Global(
25 Box<(
26 Metadata<'a>, Metadata<'a>, Option<ClockingIdentifier<'a>>,
29 ClockingEvent<'a>,
30 Metadata<'a>, Vec<ClockingItem<'a>>,
32 Metadata<'a>, Option<(
34 Metadata<'a>, ClockingIdentifier<'a>,
36 )>,
37 )>,
38 ),
39}
40
41#[derive(Clone, Debug, PartialEq)]
42pub enum ClockingItem<'a> {
43 Default(
44 Box<(
45 Metadata<'a>, DefaultSkew<'a>,
47 Metadata<'a>, )>,
49 ),
50 Decl(
51 Box<(
52 ClockingDirection<'a>,
53 ListOfClockingDeclAssign<'a>,
54 Metadata<'a>, )>,
56 ),
57 Assert(Box<(Vec<AttributeInstance<'a>>, AssertionItemDeclaration<'a>)>),
58}
59
60#[derive(Clone, Debug, PartialEq)]
61pub enum DefaultSkew<'a> {
62 Input(
63 Box<(
64 Metadata<'a>, ClockingSkew<'a>,
66 )>,
67 ),
68 Output(
69 Box<(
70 Metadata<'a>, ClockingSkew<'a>,
72 )>,
73 ),
74 InputOutput(
75 Box<(
76 Metadata<'a>, ClockingSkew<'a>,
78 Metadata<'a>, ClockingSkew<'a>,
80 )>,
81 ),
82}
83
84#[derive(Clone, Debug, PartialEq)]
85pub enum ClockingDirection<'a> {
86 Input(
87 Box<(
88 Metadata<'a>, Option<ClockingSkew<'a>>,
90 )>,
91 ),
92 Output(
93 Box<(
94 Metadata<'a>, Option<ClockingSkew<'a>>,
96 )>,
97 ),
98 InputOutput(
99 Box<(
100 Metadata<'a>, Option<ClockingSkew<'a>>,
102 Metadata<'a>, Option<ClockingSkew<'a>>,
104 )>,
105 ),
106 Inout(
107 Box<
108 Metadata<'a>, >,
110 ),
111}
112
113#[derive(Clone, Debug, PartialEq)]
114pub struct ListOfClockingDeclAssign<'a>(
115 pub ClockingDeclAssign<'a>,
116 pub Vec<(
117 Metadata<'a>, ClockingDeclAssign<'a>,
119 )>,
120);
121
122#[derive(Clone, Debug, PartialEq)]
123pub struct ClockingDeclAssign<'a>(
124 pub SignalIdentifier<'a>,
125 pub Option<(
126 Metadata<'a>, Expression<'a>,
128 )>,
129);
130
131#[derive(Clone, Debug, PartialEq)]
132pub enum ClockingSkew<'a> {
133 Edge(Box<(EdgeIdentifier<'a>, Option<DelayControl<'a>>)>),
134 Delay(Box<DelayControl<'a>>),
135}
136
137#[derive(Clone, Debug, PartialEq)]
138pub struct ClockingDrive<'a>(
139 pub ClockvarExpression<'a>,
140 pub Metadata<'a>, pub Option<CycleDelay<'a>>,
142 pub Expression<'a>,
143);
144
145#[derive(Clone, Debug, PartialEq)]
146pub enum CycleDelay<'a> {
147 Integral(
148 Box<(
149 Metadata<'a>, IntegralNumber<'a>,
151 )>,
152 ),
153 Identifier(
154 Box<(
155 Metadata<'a>, Identifier<'a>,
157 )>,
158 ),
159 Expression(
160 Box<(
161 Metadata<'a>, Metadata<'a>, Expression<'a>,
164 Metadata<'a>, )>,
166 ),
167}
168
169#[derive(Clone, Debug, PartialEq)]
170pub struct Clockvar<'a>(pub HierarchicalIdentifier<'a>);
171
172#[derive(Clone, Debug, PartialEq)]
173pub struct ClockvarExpression<'a>(pub Clockvar<'a>, pub Select<'a>);