@@ -283,128 +283,6 @@ def _createAlwaysinfo(self, node, scope):
283283
284284 return (clock_name , clock_edge , clock_bit , reset_name , reset_edge , reset_bit , senslist )
285285
286- #def _first_lvalue_is_const(self, node):
287- # """ [FUNCTIONS]
288- # Walk until lvalue and judge whether it is constant or not.
289- #
290- # ex.
291- # if(RST)
292- # reg1 <= 1'd0: //const: judged as rst branch
293- #
294- # if(RST)
295- # reg1 <= {1'd0, 1'd0}: //const: judged as rst branch
296- #
297- # if(RST)
298- # reg1 <= reg2: //variable: judged as not rst branch
299- #
300- # if(RST)
301- # reg1 <= {1'd0, reg2}: //variable: judged as not rst branch
302- # """
303- # if isinstance(node, Always):
304- # return self._first_lvalue_is_const(node.statement)
305- # elif isinstance(node, Block):
306- # return self._first_lvalue_is_const(node.statements[0])
307- # elif isinstance(node, IfStatement):
308- # return self._first_lvalue_is_const(node.true_statement)
309- # elif isinstance(node, NonblockingSubstitution):
310- # print(node.left.var)# for debug
311- # return self._first_lvalue_is_const(node.right)
312- # elif isinstance(node, Identifier):
313- # node_chain = self.get_scopechain(node)
314- # if node_chain in self.dataflow.terms.keys():
315- # #Parameter is regard as constant.
316- # return 'Parameter' in self.dataflow.terms[node_chain].termtype
317- # return False
318- # elif hasattr(node, 'children'):
319- # for child in node.children():
320- # if not self._first_lvalue_is_const(child):
321- # return False
322- # return True
323- # elif isinstance(node, Rvalue):
324- # return self._first_lvalue_is_const(node.var)
325- # elif hasattr(node, 'value'):
326- # return True
327- # else:
328- # raise Exception('Pyverilog unknown error')
329-
330- #def get_scopechain(self, node):
331- # assert isinstance(node, Identifier), 'Node type should be Identifier.'
332- # scope_list = self.frames.current.get_module_list() + [util.ScopeLabel(str(node)),]
333- # return util.ScopeChain(scope_list)
334-
335- #def _get_rst_info(self, node, rst_name='', is_posedge=True, rst_bit=0):
336- # """ [FUNCTIONS]
337- # get reset information from first if statement.
338- #
339- # ex1.
340- # always @(posedge CLK or posedge RST) begin
341- # if(RST)
342- # reg1 <= 0;
343- # else
344- # reg1 <= !reg1;
345- # end
346- # ->RST is posedge RST.
347- #
348- # ex2.
349- # always @(posedge CLK or posedge RST) begin
350- # if(!RSTN[1])
351- # reg1 <= 0;
352- # else
353- # reg1 <= !reg1;
354- # end
355- # ->RSTN[1] is negedge RST.
356- #
357- # ex3.
358- # always @(posedge CLK or posedge RST) begin
359- # if(RST && RST2)
360- # reg1 <= 0;
361- # else
362- # reg1 <= !reg1;
363- # end
364- # -> reg1 has no reset. (too complex condition)
365- # """
366- # if isinstance(node, Always):
367- # return self._get_rst_info(node.statement, rst_name, is_posedge, rst_bit)
368- # elif isinstance(node, Block):
369- # return self._get_rst_info(node.statements[0], rst_name, is_posedge, rst_bit)
370- # elif isinstance(node, IfStatement):
371- # return self._get_rst_info(node.cond, rst_name, is_posedge, rst_bit)
372- # elif isinstance(node, pyverilog.vparser.ast.Ulnot):
373- # is_posedge = not is_posedge
374- # return self._get_rst_info(node.children()[0], rst_name, is_posedge, rst_bit)
375- # elif isinstance(node, pyverilog.vparser.ast.Pointer):
376- # #TODO if identifier
377- # if isinstance(node.ptr, Identifier):
378- # ptr_chain = self.get_scopechain(node.ptr)
379- # if 'Parameter' in self.dataflow.terms[ptr_chain].termtype:
380- # rst_bit = self.dataflow.binddict[ptr_chain][0].tree.eval()
381- # return self._get_rst_info(node.var, rst_name, is_posedge, rst_bit)
382- # else:
383- # return (None, None, None)
384- # elif hasattr(node.ptr, 'value'):
385- # return self._get_rst_info(node.var, rst_name, is_posedge, int(node.ptr.value))
386- # elif isinstance(node, pyverilog.vparser.ast.Identifier):
387- # return (node, is_posedge, rst_bit)
388- # return (None, None, None)
389-
390- #def _has_if_branch(self, node):
391- # """ [FUNCTIONS]
392- # Return always block have 'if branch' or not.
393- # ex.
394- # always @(posedge CLK or posedge RST) begin
395- # reg1 <= 0;
396- # end
397- # -> reg1 has no reset. (If statement isn't exists.)
398- # """
399- # if isinstance(node, Always):
400- # return self._has_if_branch(node.statement)
401- # elif isinstance(node, Block):
402- # return self._has_if_branch(node.statements[0])
403- # elif isinstance(node, IfStatement):
404- # return True
405- # else:
406- # return False
407-
408286 def visit_IfStatement (self , node ):
409287 if self .frames .isFunctiondef () and not self .frames .isFunctioncall (): return
410288 if self .frames .isTaskdef () and not self .frames .isTaskcall (): return
0 commit comments