def getBindSubset(self, termname, visited_sources=set()): term = self.getTerm(termname) if term is None: raise verror.DefinitionError('No such signal') bindlist = self.getBindlist(termname) nextsources = visited_sources.copy() ret_binds = collections.OrderedDict() for bind in bindlist: if not termname in ret_binds: ret_binds[termname] = [] ret_binds[termname].append(bind) if bind.isClockEdge(): clock_name = bind.getClockName() if clock_name != util.toTermname( (self.topmodule, self.clock_name)): r_binds, r_sources = self.getBindSubset( clock_name, nextsources) nextsources |= r_sources ret_binds = util.dictlistmerge(ret_binds, r_binds) sources = self.getBindSources(termname) for source in sources: if source in visited_sources: continue nextsources.add(source) r_binds, r_sources = self.getBindSubset(source, nextsources) ret_binds = util.dictlistmerge(ret_binds, r_binds) nextsources |= r_sources return ret_binds, nextsources
def getBindSubset(self, termname, visited_sources=set()): term = self.getTerm(termname) if term is None: raise verror.DefinitionError('No such signal') bindlist = self.getBindlist(termname) nextsources = visited_sources.copy() ret_binds = collections.OrderedDict() for bind in bindlist: if not termname in ret_binds: ret_binds[termname] = [] ret_binds[termname].append(bind) if bind.isClockEdge(): clock_name = bind.getClockName() if clock_name != util.toTermname((self.topmodule, self.clock_name)): r_binds, r_sources = self.getBindSubset(clock_name, nextsources) nextsources |= r_sources ret_binds = util.dictlistmerge(ret_binds, r_binds) sources = self.getBindSources(termname) for source in sources: if source in visited_sources: continue nextsources.add(source) r_binds, r_sources = self.getBindSubset(source, nextsources) ret_binds = util.dictlistmerge(ret_binds, r_binds) nextsources |= r_sources return ret_binds, nextsources
def getBindSourceSubset(self, targets): visited_binddict = collections.OrderedDict() visited_sources = set() for target in targets: termname = util.toTermname(target) r_binds, r_sources = self.getBindSubset(termname, visited_sources) visited_sources |= r_sources visited_binddict = util.dictlistmerge(visited_binddict, r_binds) return visited_binddict, visited_sources