sv_parser_syntaxtree/specify_section/
system_timing_check_event_definitions.rs

1use crate::*;
2
3// -----------------------------------------------------------------------------
4
5#[derive(Clone, Debug, PartialEq, Node)]
6pub struct TimingCheckEvent {
7    pub nodes: (
8        Option<TimingCheckEventControl>,
9        SpecifyTerminalDescriptor,
10        Option<(Symbol, TimingCheckCondition)>,
11    ),
12}
13
14#[derive(Clone, Debug, PartialEq, Node)]
15pub struct ControlledTimingCheckEvent {
16    pub nodes: (
17        TimingCheckEventControl,
18        SpecifyTerminalDescriptor,
19        Option<(Symbol, TimingCheckCondition)>,
20    ),
21}
22
23#[derive(Clone, Debug, PartialEq, Node)]
24pub enum TimingCheckEventControl {
25    Posedge(Box<Keyword>),
26    Negedge(Box<Keyword>),
27    Edge(Box<Keyword>),
28    EdgeControlSpecifier(Box<EdgeControlSpecifier>),
29}
30
31#[derive(Clone, Debug, PartialEq, Node)]
32pub enum SpecifyTerminalDescriptor {
33    SpecifyInputTerminalDescriptor(Box<SpecifyInputTerminalDescriptor>),
34    SpecifyOutputTerminalDescriptor(Box<SpecifyOutputTerminalDescriptor>),
35}
36
37#[derive(Clone, Debug, PartialEq, Node)]
38pub struct EdgeControlSpecifier {
39    pub nodes: (Keyword, Bracket<List<Symbol, EdgeDescriptor>>),
40}
41
42#[derive(Clone, Debug, PartialEq, Node)]
43pub struct EdgeDescriptor {
44    pub nodes: (Keyword,),
45}
46
47#[derive(Clone, Debug, PartialEq, Node)]
48pub enum TimingCheckCondition {
49    ScalarTimingCheckCondition(Box<ScalarTimingCheckCondition>),
50    Paren(Box<TimingCheckConditionParen>),
51}
52
53#[derive(Clone, Debug, PartialEq, Node)]
54pub struct TimingCheckConditionParen {
55    pub nodes: (Paren<ScalarTimingCheckCondition>,),
56}
57
58#[derive(Clone, Debug, PartialEq, Node)]
59pub enum ScalarTimingCheckCondition {
60    Expression(Box<Expression>),
61    Unary(Box<ScalarTimingCheckConditionUnary>),
62    Binary(Box<ScalarTimingCheckConditionBinary>),
63}
64
65#[derive(Clone, Debug, PartialEq, Node)]
66pub struct ScalarTimingCheckConditionUnary {
67    pub nodes: (Symbol, Expression),
68}
69
70#[derive(Clone, Debug, PartialEq, Node)]
71pub struct ScalarTimingCheckConditionBinary {
72    pub nodes: (Expression, Symbol, ScalarConstant),
73}
74
75#[derive(Clone, Debug, PartialEq, Node)]
76pub struct ScalarConstant {
77    pub nodes: (Keyword,),
78}