1use crate::*;
2
3#[derive(Clone, Debug, PartialEq, Node)]
6pub enum ElaborationSystemTask {
7 TaskFatal(Box<ElaborationSystemTaskFatal>),
8 TaskError(Box<ElaborationSystemTaskError>),
9 TaskWarning(Box<ElaborationSystemTaskWarning>),
10 TaskInfo(Box<ElaborationSystemTaskInfo>),
11}
12
13#[derive(Clone, Debug, PartialEq, Node)]
14pub struct ElaborationSystemTaskFatal {
15 pub nodes: (
16 Keyword,
17 Option<Paren<(FinishNumber, Option<(Symbol, ListOfArguments)>)>>,
18 Symbol,
19 ),
20}
21
22#[derive(Clone, Debug, PartialEq, Node)]
23pub struct ElaborationSystemTaskError {
24 pub nodes: (Keyword, Option<Paren<Option<ListOfArguments>>>, Symbol),
25}
26
27#[derive(Clone, Debug, PartialEq, Node)]
28pub struct ElaborationSystemTaskWarning {
29 pub nodes: (Keyword, Option<Paren<Option<ListOfArguments>>>, Symbol),
30}
31
32#[derive(Clone, Debug, PartialEq, Node)]
33pub struct ElaborationSystemTaskInfo {
34 pub nodes: (Keyword, Option<Paren<Option<ListOfArguments>>>, Symbol),
35}
36
37#[derive(Clone, Debug, PartialEq, Node)]
38pub enum FinishNumber {
39 Zero(Box<Symbol>),
40 One(Box<Symbol>),
41 Two(Box<Symbol>),
42}
43
44#[derive(Clone, Debug, PartialEq, Node)]
45pub enum ModuleCommonItem {
46 ModuleOrGenerateItemDeclaration(Box<ModuleOrGenerateItemDeclaration>),
47 InterfaceInstantiation(Box<InterfaceInstantiation>),
48 ProgramInstantiation(Box<ProgramInstantiation>),
49 AssertionItem(Box<AssertionItem>),
50 BindDirective(Box<BindDirective>),
51 ContinuousAssign(Box<ContinuousAssign>),
52 NetAlias(Box<NetAlias>),
53 InitialConstruct(Box<InitialConstruct>),
54 FinalConstruct(Box<FinalConstruct>),
55 AlwaysConstruct(Box<AlwaysConstruct>),
56 LoopGenerateConstruct(Box<LoopGenerateConstruct>),
57 ConditionalGenerateConstruct(Box<ConditionalGenerateConstruct>),
58 ElaborationSystemTask(Box<ElaborationSystemTask>),
59}
60
61#[derive(Clone, Debug, PartialEq, Node)]
62pub enum ModuleItem {
63 PortDeclaration(Box<(PortDeclaration, Symbol)>),
64 NonPortModuleItem(Box<NonPortModuleItem>),
65}
66
67#[derive(Clone, Debug, PartialEq, Node)]
68pub enum ModuleOrGenerateItem {
69 Parameter(Box<ModuleOrGenerateItemParameter>),
70 Gate(Box<ModuleOrGenerateItemGate>),
71 Udp(Box<ModuleOrGenerateItemUdp>),
72 Module(Box<ModuleOrGenerateItemModule>),
73 ModuleItem(Box<ModuleOrGenerateItemModuleItem>),
74}
75
76#[derive(Clone, Debug, PartialEq, Node)]
77pub struct ModuleOrGenerateItemParameter {
78 pub nodes: (Vec<AttributeInstance>, ParameterOverride),
79}
80
81#[derive(Clone, Debug, PartialEq, Node)]
82pub struct ModuleOrGenerateItemGate {
83 pub nodes: (Vec<AttributeInstance>, GateInstantiation),
84}
85
86#[derive(Clone, Debug, PartialEq, Node)]
87pub struct ModuleOrGenerateItemUdp {
88 pub nodes: (Vec<AttributeInstance>, UdpInstantiation),
89}
90
91#[derive(Clone, Debug, PartialEq, Node)]
92pub struct ModuleOrGenerateItemModule {
93 pub nodes: (Vec<AttributeInstance>, ModuleInstantiation),
94}
95
96#[derive(Clone, Debug, PartialEq, Node)]
97pub struct ModuleOrGenerateItemModuleItem {
98 pub nodes: (Vec<AttributeInstance>, ModuleCommonItem),
99}
100
101#[derive(Clone, Debug, PartialEq, Node)]
102pub enum ModuleOrGenerateItemDeclaration {
103 PackageOrGenerateItemDeclaration(Box<PackageOrGenerateItemDeclaration>),
104 GenvarDeclaration(Box<GenvarDeclaration>),
105 ClockingDeclaration(Box<ClockingDeclaration>),
106 Clocking(Box<ModuleOrGenerateItemDeclarationClocking>),
107 Disable(Box<ModuleOrGenerateItemDeclarationDisable>),
108}
109
110#[derive(Clone, Debug, PartialEq, Node)]
111pub struct ModuleOrGenerateItemDeclarationClocking {
112 pub nodes: (Keyword, Keyword, ClockingIdentifier, Symbol),
113}
114
115#[derive(Clone, Debug, PartialEq, Node)]
116pub struct ModuleOrGenerateItemDeclarationDisable {
117 pub nodes: (Keyword, Keyword, Keyword, ExpressionOrDist, Symbol),
118}
119
120#[derive(Clone, Debug, PartialEq, Node)]
121pub enum NonPortModuleItem {
122 GenerateRegion(Box<GenerateRegion>),
123 ModuleOrGenerateItem(Box<ModuleOrGenerateItem>),
124 SpecifyBlock(Box<SpecifyBlock>),
125 Specparam(Box<NonPortModuleItemSpecparam>),
126 ProgramDeclaration(Box<ProgramDeclaration>),
127 ModuleDeclaration(Box<ModuleDeclaration>),
128 InterfaceDeclaration(Box<InterfaceDeclaration>),
129 TimeunitsDeclaration(Box<TimeunitsDeclaration>),
130}
131
132#[derive(Clone, Debug, PartialEq, Node)]
133pub struct NonPortModuleItemSpecparam {
134 pub nodes: (Vec<AttributeInstance>, SpecparamDeclaration),
135}
136
137#[derive(Clone, Debug, PartialEq, Node)]
138pub struct ParameterOverride {
139 pub nodes: (Keyword, ListOfDefparamAssignments, Symbol),
140}
141
142#[derive(Clone, Debug, PartialEq, Node)]
143pub enum BindDirective {
144 Scope(Box<BindDirectiveScope>),
145 Instance(Box<BindDirectiveInstance>),
146}
147
148#[derive(Clone, Debug, PartialEq, Node)]
149pub struct BindDirectiveScope {
150 pub nodes: (
151 Keyword,
152 BindTargetScope,
153 Option<(Symbol, BindTargetInstanceList)>,
154 BindInstantiation,
155 ),
156}
157
158#[derive(Clone, Debug, PartialEq, Node)]
159pub struct BindDirectiveInstance {
160 pub nodes: (Keyword, BindTargetInstance, BindInstantiation),
161}
162
163#[derive(Clone, Debug, PartialEq, Node)]
164pub enum BindTargetScope {
165 ModuleIdentifier(Box<ModuleIdentifier>),
166 InterfaceIdentifier(Box<InterfaceIdentifier>),
167}
168
169#[derive(Clone, Debug, PartialEq, Node)]
170pub struct BindTargetInstance {
171 pub nodes: (HierarchicalIdentifier, ConstantBitSelect),
172}
173
174#[derive(Clone, Debug, PartialEq, Node)]
175pub struct BindTargetInstanceList {
176 pub nodes: (List<Symbol, BindTargetInstance>,),
177}
178
179#[derive(Clone, Debug, PartialEq, Node)]
180pub enum BindInstantiation {
181 ProgramInstantiation(Box<ProgramInstantiation>),
182 ModuleInstantiation(Box<ModuleInstantiation>),
183 InterfaceInstantiation(Box<InterfaceInstantiation>),
184 CheckerInstantiation(Box<CheckerInstantiation>),
185}