sv_parser_syntaxtree/behavioral_statements/
timing_control_statements.rs

1use crate::*;
2
3// -----------------------------------------------------------------------------
4
5#[derive(Clone, Debug, PartialEq, Node)]
6pub struct ProceduralTimingControlStatement {
7    pub nodes: (ProceduralTimingControl, StatementOrNull),
8}
9
10#[derive(Clone, Debug, PartialEq, Node)]
11pub enum DelayOrEventControl {
12    Delay(Box<DelayControl>),
13    Event(Box<EventControl>),
14    Repeat(Box<DelayOrEventControlRepeat>),
15}
16
17#[derive(Clone, Debug, PartialEq, Node)]
18pub struct DelayOrEventControlRepeat {
19    pub nodes: (Keyword, Paren<Expression>, EventControl),
20}
21
22#[derive(Clone, Debug, PartialEq, Node)]
23pub enum DelayControl {
24    Delay(Box<DelayControlDelay>),
25    Mintypmax(Box<DelayControlMintypmax>),
26}
27
28#[derive(Clone, Debug, PartialEq, Node)]
29pub struct DelayControlDelay {
30    pub nodes: (Symbol, DelayValue),
31}
32
33#[derive(Clone, Debug, PartialEq, Node)]
34pub struct DelayControlMintypmax {
35    pub nodes: (Symbol, Paren<MintypmaxExpression>),
36}
37
38#[derive(Clone, Debug, PartialEq, Node)]
39pub enum EventControl {
40    EventIdentifier(Box<EventControlEventIdentifier>),
41    EventExpression(Box<EventControlEventExpression>),
42    Asterisk(Box<EventControlAsterisk>),
43    ParenAsterisk(Box<EventControlParenAsterisk>),
44    SequenceIdentifier(Box<EventControlSequenceIdentifier>),
45}
46
47#[derive(Clone, Debug, PartialEq, Node)]
48pub struct EventControlEventIdentifier {
49    pub nodes: (Symbol, HierarchicalEventIdentifier),
50}
51
52#[derive(Clone, Debug, PartialEq, Node)]
53pub struct EventControlEventExpression {
54    pub nodes: (Symbol, Paren<EventExpression>),
55}
56
57#[derive(Clone, Debug, PartialEq, Node)]
58pub struct EventControlAsterisk {
59    pub nodes: (Symbol,),
60}
61
62#[derive(Clone, Debug, PartialEq, Node)]
63pub struct EventControlParenAsterisk {
64    pub nodes: (Symbol, Paren<Symbol>),
65}
66
67#[derive(Clone, Debug, PartialEq, Node)]
68pub struct EventControlSequenceIdentifier {
69    pub nodes: (Symbol, PsOrHierarchicalSequenceIdentifier),
70}
71
72#[derive(Clone, Debug, PartialEq, Node)]
73pub enum EventExpression {
74    Expression(Box<EventExpressionExpression>),
75    Sequence(Box<EventExpressionSequence>),
76    Or(Box<EventExpressionOr>),
77    Comma(Box<EventExpressionComma>),
78    Paren(Box<EventExpressionParen>),
79}
80
81#[derive(Clone, Debug, PartialEq, Node)]
82pub struct EventExpressionExpression {
83    pub nodes: (
84        Option<EdgeIdentifier>,
85        Expression,
86        Option<(Keyword, Expression)>,
87    ),
88}
89
90#[derive(Clone, Debug, PartialEq, Node)]
91pub struct EventExpressionSequence {
92    pub nodes: (SequenceInstance, Option<(Keyword, Expression)>),
93}
94
95#[derive(Clone, Debug, PartialEq, Node)]
96pub struct EventExpressionOr {
97    pub nodes: (EventExpression, Keyword, EventExpression),
98}
99
100#[derive(Clone, Debug, PartialEq, Node)]
101pub struct EventExpressionComma {
102    pub nodes: (EventExpression, Symbol, EventExpression),
103}
104
105#[derive(Clone, Debug, PartialEq, Node)]
106pub struct EventExpressionParen {
107    pub nodes: (Paren<EventExpression>,),
108}
109
110#[derive(Clone, Debug, PartialEq, Node)]
111pub enum ProceduralTimingControl {
112    DelayControl(Box<DelayControl>),
113    EventControl(Box<EventControl>),
114    CycleDelay(Box<CycleDelay>),
115}
116
117#[derive(Clone, Debug, PartialEq, Node)]
118pub enum JumpStatement {
119    Return(Box<JumpStatementReturn>),
120    Break(Box<JumpStatementBreak>),
121    Continue(Box<JumpStatementContinue>),
122}
123
124#[derive(Clone, Debug, PartialEq, Node)]
125pub struct JumpStatementReturn {
126    pub nodes: (Keyword, Option<Expression>, Symbol),
127}
128
129#[derive(Clone, Debug, PartialEq, Node)]
130pub struct JumpStatementBreak {
131    pub nodes: (Keyword, Symbol),
132}
133
134#[derive(Clone, Debug, PartialEq, Node)]
135pub struct JumpStatementContinue {
136    pub nodes: (Keyword, Symbol),
137}
138
139#[derive(Clone, Debug, PartialEq, Node)]
140pub enum WaitStatement {
141    Wait(Box<WaitStatementWait>),
142    Fork(Box<WaitStatementFork>),
143    Order(Box<WaitStatementOrder>),
144}
145
146#[derive(Clone, Debug, PartialEq, Node)]
147pub struct WaitStatementWait {
148    pub nodes: (Keyword, Paren<Expression>, StatementOrNull),
149}
150
151#[derive(Clone, Debug, PartialEq, Node)]
152pub struct WaitStatementFork {
153    pub nodes: (Keyword, Keyword, Symbol),
154}
155
156#[derive(Clone, Debug, PartialEq, Node)]
157pub struct WaitStatementOrder {
158    pub nodes: (
159        Keyword,
160        Paren<List<Symbol, HierarchicalIdentifier>>,
161        ActionBlock,
162    ),
163}
164
165#[derive(Clone, Debug, PartialEq, Node)]
166pub enum EventTrigger {
167    Named(Box<EventTriggerNamed>),
168    Nonblocking(Box<EventTriggerNonblocking>),
169}
170
171#[derive(Clone, Debug, PartialEq, Node)]
172pub struct EventTriggerNamed {
173    pub nodes: (Symbol, HierarchicalEventIdentifier, Symbol),
174}
175
176#[derive(Clone, Debug, PartialEq, Node)]
177pub struct EventTriggerNonblocking {
178    pub nodes: (
179        Symbol,
180        Option<DelayOrEventControl>,
181        HierarchicalEventIdentifier,
182        Symbol,
183    ),
184}
185
186#[derive(Clone, Debug, PartialEq, Node)]
187pub enum DisableStatement {
188    Task(Box<DisableStatementTask>),
189    Block(Box<DisableStatementBlock>),
190    Fork(Box<DisableStatementFork>),
191}
192
193#[derive(Clone, Debug, PartialEq, Node)]
194pub struct DisableStatementTask {
195    pub nodes: (Keyword, HierarchicalTaskIdentifier, Symbol),
196}
197
198#[derive(Clone, Debug, PartialEq, Node)]
199pub struct DisableStatementBlock {
200    pub nodes: (Keyword, HierarchicalBlockIdentifier, Symbol),
201}
202
203#[derive(Clone, Debug, PartialEq, Node)]
204pub struct DisableStatementFork {
205    pub nodes: (Keyword, Keyword, Symbol),
206}