11#-------------------------------------------------------------------------------
22# signalvisitor.py
3- #
3+ #
44# Signal definition visitor
55#
66# Copyright (C) 2013, Shinya Takamaeda-Yamazaki
@@ -62,6 +62,9 @@ def visit_Reg(self, node):
6262 def visit_Wire (self , node ):
6363 self .frames .addSignal (node )
6464
65+ def visit_Supply (self , node ):
66+ self .frames .addSignal (node )
67+
6568 def visit_RegArray (self , node ):
6669 self .frames .addSignal (node )
6770
@@ -87,7 +90,7 @@ def visit_Localparam(self, node):
8790 if not self .hasConstant (name ):
8891 value = self .optimize (self .getTree (node .value , self .frames .getCurrent ()))
8992 self .setConstant (name , value )
90-
93+
9194 def visit_Genvar (self , node ):
9295 self .frames .addConst (node )
9396 name = self .frames .getCurrent () + ScopeLabel (node .name , 'signal' )
@@ -110,7 +113,7 @@ def visit_Task(self, node):
110113 def visit_Initial (self , node ):
111114 pass
112115 #label = self.labels.get( self.frames.getLabelKey('initial') )
113- #current = self.frames.addFrame(ScopeLabel(label, 'initial'),
116+ #current = self.frames.addFrame(ScopeLabel(label, 'initial'),
114117 # generate=self.frames.isGenerate(),
115118 # initial=True)
116119 #self.generic_visit(node)
@@ -124,25 +127,25 @@ def visit_Instance(self, node):
124127 if node .array : return self ._visit_Instance_array (node )
125128 nodename = node .name
126129 return self ._visit_Instance_body (node , nodename )
127-
130+
128131 def _visit_Instance_array (self , node ):
129132 if node .name == '' :
130133 raise verror .FormatError ("Module %s requires an instance name" % node .module )
131-
134+
132135 current = self .frames .getCurrent ()
133136 msb = self .optimize (self .getTree (node .array .msb , current )).value
134137 lsb = self .optimize (self .getTree (node .array .lsb , current )).value
135-
138+
136139 for i in range (lsb , msb + 1 ):
137140 nodename = node .name + '_' + str (i )
138141 self ._visit_Instance_body (node , nodename )
139-
142+
140143 def _visit_Instance_body (self , node , nodename ):
141144 if node .module in primitives : return self ._visit_Instance_primitive (node )
142145
143146 if nodename == '' :
144147 raise verror .FormatError ("Module %s requires an instance name" % node .module )
145-
148+
146149 current = self .stackInstanceFrame (nodename , node .module )
147150
148151 self .setInstanceSimpleConstantTerms ()
@@ -151,9 +154,9 @@ def _visit_Instance_body(self, node, nodename):
151154
152155 paramnames = self .moduleinfotable .getParamNames (node .module )
153156 for paramnames_i , param in enumerate (node .parameterlist ):
154- paramname = paramnames [paramnames_i ] if param .paramname is None else param .paramname
157+ paramname = paramnames [paramnames_i ] if param .paramname is None else param .paramname
155158 if paramname not in paramnames :
156- raise verror .FormatError ("No such parameter: %s in %s" %
159+ raise verror .FormatError ("No such parameter: %s in %s" %
157160 (paramname , nodename ))
158161 value = self .optimize (self .getTree (param .argname , current ))
159162 name , definition = self .searchConstantDefinition (scope , paramname )
@@ -167,10 +170,10 @@ def _visit_Instance_body(self, node, nodename):
167170
168171 def _visit_Instance_primitive (self , node ):
169172 pass
170-
173+
171174 def visit_Always (self , node ):
172175 label = self .labels .get ( self .frames .getLabelKey ('always' ) )
173- current = self .frames .addFrame (ScopeLabel (label , 'always' ),
176+ current = self .frames .addFrame (ScopeLabel (label , 'always' ),
174177 generate = self .frames .isGenerate (),
175178 always = True )
176179 self .generic_visit (node )
@@ -204,13 +207,13 @@ def _toELSE(self, label):
204207 def _if_true (self , node ):
205208 if node .true_statement is None : return None
206209 label = self .labels .get ( self .frames .getLabelKey ('if' ) )
207- current = self .frames .addFrame (ScopeLabel (label , 'if' ),
210+ current = self .frames .addFrame (ScopeLabel (label , 'if' ),
208211 frametype = 'ifthen' ,
209212 condition = node .cond ,
210- functioncall = self .frames .isFunctioncall (),
213+ functioncall = self .frames .isFunctioncall (),
211214 taskcall = self .frames .isTaskcall (),
212- generate = self .frames .isGenerate (),
213- always = self .frames .isAlways (),
215+ generate = self .frames .isGenerate (),
216+ always = self .frames .isAlways (),
214217 initial = self .frames .isInitial ())
215218 self .visit (node .true_statement )
216219 self .frames .setCurrent (current )
@@ -221,8 +224,8 @@ def _if_false(self, node, label):
221224 label = self ._toELSE (label )
222225 current = self .frames .addFrame (ScopeLabel (label , 'if' ),
223226 frametype = 'ifelse' ,
224- condition = node .cond ,
225- functioncall = self .frames .isFunctioncall (),
227+ condition = node .cond ,
228+ functioncall = self .frames .isFunctioncall (),
226229 taskcall = self .frames .isTaskcall (),
227230 generate = self .frames .isGenerate (),
228231 always = self .frames .isAlways (),
@@ -242,31 +245,31 @@ def _case(self, comp, caselist):
242245 cond = IntConst ('1' )
243246 if case .cond is not None :
244247 if len (case .cond ) > 1 :
245- cond = Eq (comp , case .cond [0 ])
248+ cond = Eq (comp , case .cond [0 ])
246249 for c in case .cond [1 :]:
247250 cond = Lor (cond , Eq (comp , c ))
248251 else :
249252 cond = Eq (comp , case .cond [0 ])
250253 label = self .labels .get ( self .frames .getLabelKey ('if' ) )
251- current = self .frames .addFrame (ScopeLabel (label , 'if' ),
254+ current = self .frames .addFrame (ScopeLabel (label , 'if' ),
252255 frametype = 'ifthen' ,
253- condition = cond ,
254- functioncall = self .frames .isFunctioncall (),
256+ condition = cond ,
257+ functioncall = self .frames .isFunctioncall (),
255258 taskcall = self .frames .isTaskcall (),
256- generate = self .frames .isGenerate (),
257- always = self .frames .isAlways (),
259+ generate = self .frames .isGenerate (),
260+ always = self .frames .isAlways (),
258261 initial = self .frames .isInitial ())
259262 if case .statement is not None : self .visit (case .statement )
260263 self .frames .setCurrent (current )
261264 if len (caselist ) == 1 : return
262265 label = self ._toELSE (label )
263266 current = self .frames .addFrame (ScopeLabel (label , 'if' ),
264- frametype = 'ifelse' ,
265- condition = cond ,
266- functioncall = self .frames .isFunctioncall (),
267+ frametype = 'ifelse' ,
268+ condition = cond ,
269+ functioncall = self .frames .isFunctioncall (),
267270 taskcall = self .frames .isTaskcall (),
268- generate = self .frames .isGenerate (),
269- always = self .frames .isAlways (),
271+ generate = self .frames .isGenerate (),
272+ always = self .frames .isAlways (),
270273 initial = self .frames .isInitial ())
271274 self ._case (comp , caselist [1 :])
272275
@@ -290,15 +293,15 @@ def visit_ForStatement(self, node):
290293 raise verror .FormatError (("Can not process the for-statement. "
291294 "for-condition should be evaluated statically." ))
292295 # loop termination
293- if rslt .value <= 0 : break
296+ if rslt .value <= 0 : break
294297
295298 ## main-statement
296299 current = self .frames .addFrame (ScopeLabel (label , 'for' , loop ),
297- frametype = 'for' ,
298- functioncall = self .frames .isFunctioncall (),
300+ frametype = 'for' ,
301+ functioncall = self .frames .isFunctioncall (),
299302 taskcall = self .frames .isTaskcall (),
300- generate = self .frames .isGenerate (),
301- always = self .frames .isAlways (),
303+ generate = self .frames .isGenerate (),
304+ always = self .frames .isAlways (),
302305 initial = self .frames .isInitial (),
303306 loop = loop , loop_iter = self .frames .getForIter ())
304307 self .visit (node .statement )
@@ -335,7 +338,7 @@ def visit_Block(self, node):
335338 functioncall = self .frames .isFunctioncall (),
336339 taskcall = self .frames .isTaskcall (),
337340 generate = self .frames .isGenerate (),
338- always = self .frames .isAlways (),
341+ always = self .frames .isAlways (),
339342 initial = self .frames .isInitial ())
340343 self .generic_visit (node )
341344 self .frames .setCurrent (current )
@@ -346,7 +349,7 @@ def visit_Assign(self, node):
346349 def visit_BlockingSubstitution (self , node ):
347350 if self .frames .isForpre () or self .frames .isForpost ():
348351 current = self .frames .getCurrent ()
349- name , definition = self .searchConstantDefinition (current ,
352+ name , definition = self .searchConstantDefinition (current ,
350353 node .left .var .name )
351354 value = self .optimize (self .getTree (node .right .var , current ))
352355 self .setConstant (name , value )
@@ -387,7 +390,7 @@ def setInstanceConstantTerms(self):
387390 for definition in definitions :
388391 term = self .makeConstantTerm (name , definition , current )
389392 self .setConstantTerm (name , term )
390-
393+
391394 def setInstanceConstants (self ):
392395 current = self .frames .getCurrent ()
393396
@@ -425,7 +428,7 @@ def setConstantTerm(self, name, term):
425428
426429 def hasConstantTerm (self , name ):
427430 self .optimizer .hasTerm (name )
428-
431+
429432 ############################################################################
430433 def toScopeChain (self , blocklabel ):
431434 scopelist = []
@@ -452,7 +455,7 @@ def searchConstantDefinition(self, key, name):
452455 foundkey , founddef = self .frames .searchSignalDefinition (key , name )
453456 if foundkey is not None :
454457 return foundkey + ScopeLabel (name , 'signal' ), founddef
455- if foundkey is None :
458+ if foundkey is None :
456459 raise verror .DefinitionError ('constant value not found: %s' % name )
457460
458461 def searchScopeConstantValue (self , blocklabel , name ):
@@ -482,7 +485,7 @@ def getTree(self, node, scope):
482485 def makeDFTree (self , node , scope ):
483486 if isinstance (node , str ):
484487 return self .searchConstantValue (scope , node )
485-
488+
486489 if isinstance (node , Identifier ):
487490 if node .scope is not None :
488491 const = self .searchScopeConstantValue (node .scope , node .name )
@@ -532,8 +535,8 @@ def makeDFTree(self, node, scope):
532535 var_df = self .makeDFTree (node .var , scope )
533536 ptr_df = self .makeDFTree (node .ptr , scope )
534537
535- if (isinstance (var_df , DFTerminal ) and
536- (signaltype .isRegArray (self .getTermtype (var_df .name )) or
538+ if (isinstance (var_df , DFTerminal ) and
539+ (signaltype .isRegArray (self .getTermtype (var_df .name )) or
537540 signaltype .isWireArray (self .getTermtype (var_df .name )))):
538541 return DFPointer (var_df , ptr_df )
539542 return DFPartselect (var_df , ptr_df , copy .deepcopy (ptr_df ))
0 commit comments