Beispiel #1
0
    def generate(self,
                 signalname,
                 identical=False,
                 walk=True,
                 step=1,
                 reorder=False,
                 delay=False):
        termname = util.toTermname(signalname)
        tree = self.treewalker.getTree(termname)
        if tree is None:
            raise verror.DefinitionError('No such signals: %s' %
                                         str(signalname))
        if walk:
            tree = self.treewalker.walkTree(tree,
                                            visited=set(),
                                            step=step,
                                            delay=delay)
            if reorder:
                tree = reorder.reorder(tree)

        tree = self.optimizer.optimize(tree)
        if reorder:
            tree = reorder.reorder(tree)

        tree = replace.replaceUndefined(tree, termname)

        name = self.rename(signalname)
        self.identical = identical
        self.add_node(name, label=signalname)
        self.visit(tree, name)
 def makeTree(self, termname):
     tree = self.getTree(termname)
     tree = self.treewalker.walkTree(tree)
     tree = reorder.reorder(tree)
     tree = self.optimizer.optimize(tree)
     tree = replace.replaceUndefined(tree, termname)
     return tree
 def makeTree(self, termname):
     tree = self.getTree(termname)
     tree = self.treewalker.walkTree(tree)
     tree = reorder.reorder(tree)
     tree = self.optimizer.optimize(tree)
     tree = replace.replaceUndefined(tree, termname)
     return tree
Beispiel #4
0
    def generate(self, signalname, identical=False, walk=True, step=1, reorder=False, delay=False):
        termname = util.toTermname(signalname)
        tree = self.treewalker.getTree(termname)
        if tree is None:
            raise verror.DefinitionError('No such signals: %s' % str(signalname))
        if walk: 
            tree = self.treewalker.walkTree(tree, visited=set(), step=step, delay=delay)
            if reorder: tree = reorder.reorder(tree)            

        tree = self.optimizer.optimize(tree)
        if reorder: tree = reorder.reorder(tree)

        tree = replace.replaceUndefined(tree, termname)

        name = self.rename(signalname)
        self.identical = identical
        self.add_node(name, label=signalname)
        self.visit(tree, name)
Beispiel #5
0
 def splitBind(self, bind, splitpos):
     tree = bind.tree
     msb = self.optimizer.optimizeConstant(bind.msb)
     lsb = self.optimizer.optimizeConstant(bind.lsb)
     ptr = self.optimizer.optimizeConstant(bind.ptr)
     if ptr is not None and msb is None or lsb is None:
         termtype = self.getTermtype(bind.dest)
         if signaltype.isRegArray(termtype) or signaltype.isWireArray(
                 termtype):
             msb = self.optimizer.optimizeConstant(copy.deepcopy(term.msb))
             lsb = self.optimizer.optimizeConstant(copy.deepcopy(term.lsb))
         else:
             msb = copy.deepcopy(ptr)
             lsb = copy.deepcopy(ptr)
     if ptr is None and msb is None or lsb is None:
         term = self.getTerm(bind.dest)
         msb = self.optimizer.optimizeConstant(copy.deepcopy(term.msb))
         lsb = self.optimizer.optimizeConstant(copy.deepcopy(term.lsb))
     if splitpos > lsb.value and splitpos <= msb.value:  # split
         right_lsb = lsb.value
         right_msb = splitpos - 1
         right_width = splitpos - lsb.value
         left_lsb = splitpos
         left_msb = msb.value
         left_width = msb.value - splitpos + 1
         right_tree = reorder.reorder(
             DFPartselect(copy.deepcopy(tree), DFEvalValue(right_width - 1),
                          DFEvalValue(0)))
         left_tree = reorder.reorder(
             DFPartselect(copy.deepcopy(tree), DFEvalValue(msb.value),
                          DFEvalValue(msb.value - left_width + 1)))
         right_tree = self.optimizer.optimize(right_tree)
         left_tree = self.optimizer.optimize(left_tree)
         left_bind = copy.deepcopy(bind)
         left_bind.tree = left_tree
         left_bind.msb = DFEvalValue(left_msb)
         left_bind.lsb = DFEvalValue(left_lsb)
         right_bind = copy.deepcopy(bind)
         right_bind.tree = right_tree
         right_bind.msb = DFEvalValue(right_msb)
         right_bind.lsb = DFEvalValue(right_lsb)
         return left_bind, right_bind
     return bind, None
Beispiel #6
0
 def splitBind(self, bind, splitpos):
     tree = bind.tree
     msb = self.optimizer.optimizeConstant(bind.msb)
     lsb = self.optimizer.optimizeConstant(bind.lsb)
     ptr = self.optimizer.optimizeConstant(bind.ptr)
     if ptr is not None and msb is None or lsb is None:
         termtype = self.getTermtype(bind.dest)
         if signaltype.isRegArray(termtype) or signaltype.isWireArray(termtype):
             msb = self.optimizer.optimizeConstant(copy.deepcopy(term.msb))
             lsb = self.optimizer.optimizeConstant(copy.deepcopy(term.lsb))
         else:
             msb = copy.deepcopy(ptr)
             lsb = copy.deepcopy(ptr)
     if ptr is None and msb is None or lsb is None:
         term = self.getTerm(bind.dest)
         msb = self.optimizer.optimizeConstant(copy.deepcopy(term.msb))
         lsb = self.optimizer.optimizeConstant(copy.deepcopy(term.lsb))
     if splitpos > lsb.value and splitpos <= msb.value: # split
         right_lsb = lsb.value
         right_msb = splitpos - 1
         right_width = splitpos - lsb.value
         left_lsb = splitpos
         left_msb = msb.value
         left_width = msb.value - splitpos + 1
         right_tree = reorder.reorder(DFPartselect(copy.deepcopy(tree), DFEvalValue(right_width-1), DFEvalValue(0)))
         left_tree = reorder.reorder(DFPartselect(copy.deepcopy(tree), DFEvalValue(msb.value), DFEvalValue(msb.value-left_width+1)))
         right_tree = self.optimizer.optimize(right_tree)
         left_tree = self.optimizer.optimize(left_tree)
         left_bind = copy.deepcopy(bind)
         left_bind.tree = left_tree
         left_bind.msb = DFEvalValue(left_msb)
         left_bind.lsb = DFEvalValue(left_lsb)
         right_bind = copy.deepcopy(bind)
         right_bind.tree = right_tree
         right_bind.msb = DFEvalValue(right_msb)
         right_bind.lsb = DFEvalValue(right_lsb)
         return left_bind, right_bind
     return bind, None