def isResetCond(self, node): sbuf = stringio.StringIO() node.show(buf=sbuf) s = sbuf.getvalue() sbuf.close() s = s.replace('\r\n', '') s = s.replace('\n', '') return isReset(s)
def generate(self): preprocess_define = [] if self.single_clock: preprocess_define.append('CORAM_SINGLE_CLOCK') if self.define: preprocess_define.extend(self.define) code_parser = VerilogCodeParser(self.filelist, preprocess_include=self.include, preprocess_define=preprocess_define) ast = code_parser.parse() module_visitor = ModuleVisitor() module_visitor.visit(ast) modulenames = module_visitor.get_modulenames() moduleinfotable = module_visitor.get_moduleinfotable() instanceconvert_visitor = InstanceConvertVisitor( moduleinfotable, self.topmodule) instanceconvert_visitor.start_visit() replaced_instance = instanceconvert_visitor.getMergedReplacedInstance() replaced_instports = instanceconvert_visitor.getReplacedInstPorts() replaced_items = instanceconvert_visitor.getReplacedItems() new_moduleinfotable = instanceconvert_visitor.get_new_moduleinfotable() instancereplace_visitor = InstanceReplaceVisitor( replaced_instance, replaced_instports, replaced_items, new_moduleinfotable) ret = instancereplace_visitor.getAST() # gather user-defined io-ports on top-module and parameters to connect external frametable = instanceconvert_visitor.getFrameTable() top_ioports = [] for i in moduleinfotable.getIOPorts(self.topmodule): if signaltype.isClock(i) or signaltype.isReset(i): continue top_ioports.append(i) top_scope = ScopeChain([ScopeLabel(self.topmodule, 'module')]) top_sigs = frametable.getSignals(top_scope) top_params = frametable.getConsts(top_scope) for sk, sv in top_sigs.items(): if len(sk) > 2: continue signame = sk[1].scopename for svv in sv: if (signame in top_ioports and not (signaltype.isClock(signame) or signaltype.isReset(signame)) and isinstance(svv, vast.Input) or isinstance(svv, vast.Output) or isinstance(svv, vast.Inout)): port = svv msb_val = instanceconvert_visitor.optimize( instanceconvert_visitor.getTree( port.width.msb, top_scope)) lsb_val = instanceconvert_visitor.optimize( instanceconvert_visitor.getTree( port.width.lsb, top_scope)) width = int(msb_val.value) - int(lsb_val.value) + 1 self.top_ioports[signame] = (port, width) break for ck, cv in top_params.items(): if len(ck) > 2: continue signame = ck[1].scopename param = cv[0] if isinstance(param, vast.Genvar): continue self.top_parameters[signame] = param self.coram_object = instanceconvert_visitor.getCoramObject() return ret
def generate(self): code_parser = VerilogCodeParser(self.filelist, preprocess_include=self.include, preprocess_define=self.define) ast = code_parser.parse() module_visitor = ModuleVisitor() module_visitor.visit(ast) modulenames = module_visitor.get_modulenames() moduleinfotable = module_visitor.get_moduleinfotable() template_parser = VerilogCodeParser( (self.template_file,) ) template_ast = template_parser.parse() template_visitor = ModuleVisitor() template_visitor.visit(template_ast) templateinfotable = template_visitor.get_moduleinfotable() instanceconvert_visitor = InstanceConvertVisitor(moduleinfotable, self.topmodule, templateinfotable) instanceconvert_visitor.start_visit() replaced_instance = instanceconvert_visitor.getMergedReplacedInstance() replaced_instports = instanceconvert_visitor.getReplacedInstPorts() replaced_items = instanceconvert_visitor.getReplacedItems() new_moduleinfotable = instanceconvert_visitor.get_new_moduleinfotable() instancereplace_visitor = InstanceReplaceVisitor(replaced_instance, replaced_instports, replaced_items, new_moduleinfotable) ret = instancereplace_visitor.getAST() # gather user-defined io-ports on top-module and parameters to connect external frametable = instanceconvert_visitor.getFrameTable() top_ioports = [] for i in moduleinfotable.getIOPorts(self.topmodule): if signaltype.isClock(i) or signaltype.isReset(i): continue top_ioports.append(i) top_sigs = frametable.getSignals( ScopeChain( [ScopeLabel(self.topmodule, 'module')] ) ) top_params = frametable.getConsts( ScopeChain( [ScopeLabel(self.topmodule, 'module')] ) ) for sk, sv in top_sigs.items(): if len(sk) > 2: continue signame = sk[1].scopename for svv in sv: if (signame in top_ioports and not (signaltype.isClock(signame) or signaltype.isReset(signame)) and isinstance(svv, vast.Input) or isinstance(svv, vast.Output) or isinstance(svv, vast.Inout)): port = svv self.top_ioports[signame] = port break for ck, cv in top_params.items(): if len(ck) > 2: continue signame = ck[1].scopename param = cv[0] if isinstance(param, vast.Genvar): continue self.top_parameters[signame] = param self.target_object = instanceconvert_visitor.getTargetObject() return ret
def generate(self): preprocess_define = [] if self.single_clock: preprocess_define.append('CORAM_SINGLE_CLOCK') if self.define: preprocess_define.extend(self.define) code_parser = VerilogCodeParser(self.filelist, preprocess_include=self.include, preprocess_define=preprocess_define) ast = code_parser.parse() module_visitor = ModuleVisitor() module_visitor.visit(ast) modulenames = module_visitor.get_modulenames() moduleinfotable = module_visitor.get_moduleinfotable() instanceconvert_visitor = InstanceConvertVisitor(moduleinfotable, self.topmodule) instanceconvert_visitor.start_visit() replaced_instance = instanceconvert_visitor.getMergedReplacedInstance() replaced_instports = instanceconvert_visitor.getReplacedInstPorts() replaced_items = instanceconvert_visitor.getReplacedItems() new_moduleinfotable = instanceconvert_visitor.get_new_moduleinfotable() instancereplace_visitor = InstanceReplaceVisitor(replaced_instance, replaced_instports, replaced_items, new_moduleinfotable) ret = instancereplace_visitor.getAST() # gather user-defined io-ports on top-module and parameters to connect external frametable = instanceconvert_visitor.getFrameTable() top_ioports = [] for i in moduleinfotable.getIOPorts(self.topmodule): if signaltype.isClock(i) or signaltype.isReset(i): continue top_ioports.append(i) top_scope = ScopeChain( [ScopeLabel(self.topmodule, 'module')] ) top_sigs = frametable.getSignals(top_scope) top_params = frametable.getConsts(top_scope) for sk, sv in top_sigs.items(): if len(sk) > 2: continue signame = sk[1].scopename for svv in sv: if (signame in top_ioports and not (signaltype.isClock(signame) or signaltype.isReset(signame)) and isinstance(svv, vast.Input) or isinstance(svv, vast.Output) or isinstance(svv, vast.Inout)): port = svv msb_val = instanceconvert_visitor.optimize(instanceconvert_visitor.getTree(port.width.msb, top_scope)) lsb_val = instanceconvert_visitor.optimize(instanceconvert_visitor.getTree(port.width.lsb, top_scope)) width = int(msb_val.value) - int(lsb_val.value) + 1 self.top_ioports[signame] = (port, width) break for ck, cv in top_params.items(): if len(ck) > 2: continue signame = ck[1].scopename param = cv[0] if isinstance(param, vast.Genvar): continue self.top_parameters[signame] = param self.coram_object = instanceconvert_visitor.getCoramObject() return ret
def _remove_reset_cond(cond): condstr = cond.tostr() if signaltype.isReset(condstr): return None return cond
def generate(self): code_parser = VerilogCodeParser(self.filelist, preprocess_include=self.include, preprocess_define=self.define) ast = code_parser.parse() module_visitor = ModuleVisitor() module_visitor.visit(ast) modulenames = module_visitor.get_modulenames() moduleinfotable = module_visitor.get_moduleinfotable() template_parser = VerilogCodeParser((self.template_file, )) template_ast = template_parser.parse() template_visitor = ModuleVisitor() template_visitor.visit(template_ast) templateinfotable = template_visitor.get_moduleinfotable() instanceconvert_visitor = InstanceConvertVisitor( moduleinfotable, self.topmodule, templateinfotable) instanceconvert_visitor.start_visit() replaced_instance = instanceconvert_visitor.getMergedReplacedInstance() replaced_instports = instanceconvert_visitor.getReplacedInstPorts() replaced_items = instanceconvert_visitor.getReplacedItems() new_moduleinfotable = instanceconvert_visitor.get_new_moduleinfotable() instancereplace_visitor = InstanceReplaceVisitor( replaced_instance, replaced_instports, replaced_items, new_moduleinfotable) ret = instancereplace_visitor.getAST() # gather user-defined io-ports on top-module and parameters to connect external frametable = instanceconvert_visitor.getFrameTable() top_ioports = [] for i in moduleinfotable.getIOPorts(self.topmodule): if signaltype.isClock(i) or signaltype.isReset(i): continue top_ioports.append(i) top_sigs = frametable.getSignals( ScopeChain([ScopeLabel(self.topmodule, 'module')])) top_params = frametable.getConsts( ScopeChain([ScopeLabel(self.topmodule, 'module')])) for sk, sv in top_sigs.items(): if len(sk) > 2: continue signame = sk[1].scopename for svv in sv: if (signame in top_ioports and not (signaltype.isClock(signame) or signaltype.isReset(signame)) and isinstance(svv, vast.Input) or isinstance(svv, vast.Output) or isinstance(svv, vast.Inout)): port = svv self.top_ioports[signame] = port break for ck, cv in top_params.items(): if len(ck) > 2: continue signame = ck[1].scopename param = cv[0] if isinstance(param, vast.Genvar): continue self.top_parameters[signame] = param self.target_object = instanceconvert_visitor.getTargetObject() return ret