Пример #1
0
    def getActiveConditions_fsm(self, fsm_sig, funcdict):
        # returns a list of some (state, transcond) pairs
        active_conditions = []
        fsm_sig_width = self.getWidth(fsm_sig)
        for condlist, func in sorted(funcdict.items(),
                                     key=lambda x: len(x[0])):
            node = transition.walkCondlist(condlist, fsm_sig, fsm_sig_width)
            state_node_list = []
            if isinstance(node, transition.StateNodeList):
                for n in node.nodelist:
                    state_node_list.append(n)
            elif node:
                state_node_list.append(node)

            for state_node in state_node_list:
                # if state_node.isany:
                #    active_conditions.append( ('any', state_node.transcond) )
                for rs, re in state_node.range_pairs:
                    for state in range(rs, re + 1):
                        transcond = self.optimizer.optimize(
                            state_node.transcond)
                        if isinstance(transcond,
                                      DFEvalValue) and transcond.value == 0:
                            continue
                        active_conditions.append((state, transcond))
        return tuple(active_conditions)
 def getFiniteStateMachine(self, termname, funcdict):
     fsm = FiniteStateMachine(util.toFlatname(termname))
     if len(funcdict) == 0: return fsm
     width = self.getWidth(termname)
     for condlist, func in sorted(funcdict.items(), key=lambda x:len(x[0])):
         if not isinstance(func, DFEvalValue): continue
         print("Condition: %s, Inferring transition condition" % str(condlist))
         node = transition.walkCondlist(condlist, termname, width)
         if node is None: continue
         statenode_list = node.nodelist if isinstance(node, transition.StateNodeList) else [node,]
         for statenode in statenode_list: fsm.construct(func.value, statenode)
     return fsm
Пример #3
0
 def getFiniteStateMachine(self, termname, funcdict):
     fsm = FiniteStateMachine(util.toFlatname(termname))
     if len(funcdict) == 0: return fsm
     width = self.getWidth(termname)
     for condlist, func in sorted(funcdict.items(), key=lambda x:len(x[0])):
         if not isinstance(func, DFEvalValue): continue
         print("Condition: %s, Inferring transition condition" % str(condlist))
         node = transition.walkCondlist(condlist, termname, width)
         if node is None: continue
         statenode_list = node.nodelist if isinstance(node, transition.StateNodeList) else [node,]
         for statenode in statenode_list: fsm.construct(func.value, statenode)
     return fsm
Пример #4
0
    def getActiveConditions_fsm(self, fsm_sig, funcdict):
        # returns a list of some (state, transcond) pairs
        active_conditions = []
        fsm_sig_width = self.getWidth(fsm_sig)
        for condlist, func in sorted(funcdict.items(), key=lambda x:len(x[0])):
            node = transition.walkCondlist(condlist, fsm_sig, fsm_sig_width)
            state_node_list = []
            if isinstance(node, transition.StateNodeList):
                for n in node.nodelist: state_node_list.append(n)
            elif node:
                state_node_list.append(node)

            for state_node in state_node_list:
                #if state_node.isany:
                #    active_conditions.append( ('any', state_node.transcond) )
                for rs, re in state_node.range_pairs:
                    for state in range(rs, re+1):
                        transcond = self.optimizer.optimize(state_node.transcond)
                        if isinstance(transcond, DFEvalValue) and transcond.value == 0: continue
                        active_conditions.append( (state, transcond) )
        return tuple(active_conditions)