import dashboard.gen_dashboard_entry as gen_dashboard_entry import difgen.gen_dif_listing as gen_dif_listing import reggen.gen_cfg_html as gen_cfg_html import reggen.gen_html as gen_html import reggen.validate as validate import reggen.gen_selfdoc as reggen_selfdoc import dvsim.testplanner.testplan_utils as testplan_utils import tlgen USAGE = """ build_docs [options] """ # Version of hugo extended to be used to build the docs try: tool_requirements = check_tool_requirements.read_tool_requirements() HUGO_EXTENDED_VERSION = tool_requirements['hugo_extended'] except Exception as e: print("Unable to get required hugo version: %s" % str(e), file=sys.stderr) sys.exit(1) # Configurations # TODO: Move to config.yaml SRCTREE_TOP = Path(__file__).parent.joinpath('..').resolve() config = { # Toplevel source directory "topdir": SRCTREE_TOP, # Pre-generate register and hwcfg fragments from these files. "hardware_definitions": [
(master_doc, 'ibex.tex', u'Ibex Documentation', u'lowRISC', 'manual'), ] latex_logo = '' # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [(master_doc, 'ibex', u'Ibex Documentation', [author], 1)] # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'ibex', u'Ibex Documentation', author, 'ibex', 'Ibex RV32 CPU core', 'Miscellaneous'), ] # -- Tool version numbers ------------------------------------------------- # Add minimum versions of required tools as variables for use inside the # documentation. tool_reqs = ctr.read_tool_requirements() rst_epilog = "" for tool, req in tool_reqs.items(): rst_epilog += (".. |tool_requirements.{}| replace:: {}\n".format( tool, req.min_version))
import dashboard.gen_dashboard_entry as gen_dashboard_entry import difgen.gen_dif_listing as gen_dif_listing import reggen.gen_cfg_html as gen_cfg_html import reggen.gen_html as gen_html import reggen.gen_selfdoc as reggen_selfdoc import dvsim.testplanner.testplan_utils as testplan_utils import tlgen from reggen.ip_block import IpBlock USAGE = """ build_docs [options] """ # Version of hugo extended to be used to build the docs try: TOOL_REQUIREMENTS = check_tool_requirements.read_tool_requirements() HUGO_EXTENDED_VERSION = TOOL_REQUIREMENTS['hugo_extended'].min_version except Exception as e: print("Unable to get required hugo version: %s" % str(e), file=sys.stderr) sys.exit(1) # Configurations # TODO: Move to config.yaml SRCTREE_TOP = Path(__file__).parent.joinpath('..').resolve() config = { # Toplevel source directory "topdir": SRCTREE_TOP, # Pre-generate register and hwcfg fragments from these files. "hardware_definitions": [
def _parse_module_header_verible(generic_impl_filepath, module_name): """ Parse a SystemVerilog file to extract the 'module' header using Verible Implementation of _parse_module_header() which uses verible-verilog-syntax to do the parsing. This is the primary implementation and is used when supported Verible version is available. See _parse_module_header() for API details. """ from verible_verilog_syntax import VeribleVerilogSyntax, PreOrderTreeIterator parser = VeribleVerilogSyntax() data = parser.parse_file(generic_impl_filepath, options={"skip_null": True}) if data.errors: for err in data.errors: print( f'Verible: {err.phase} error in line {err.line} column {err.column}' + (': {err.message}' if err.message else '.')) # Intentionally not raising an exception here. # There are chances that Verible recovered from errors. if not data.tree: raise ValueError(f"Unable to parse {generic_impl_filepath!r}.") module = data.tree.find({"tag": "kModuleDeclaration"}) header = module.find({"tag": "kModuleHeader"}) if not header: raise ValueError("Unable to extract module header from %s." % (generic_impl_filepath, )) name = header.find({"tag": ["SymbolIdentifier", "EscapedIdentifier"]}, iter_=PreOrderTreeIterator) if not name: raise ValueError("Unable to extract module name from %s." % (generic_impl_filepath, )) imports = header.find_all({"tag": "kPackageImportDeclaration"}) parameters_list = header.find({"tag": "kFormalParameterList"}) parameters = set() if parameters_list: for parameter in parameters_list.iter_find_all( {"tag": "kParamDeclaration"}): if parameter.find({"tag": "parameter"}): parameter_id = parameter.find( {"tag": ["SymbolIdentifier", "EscapedIdentifier"]}) parameters.add(parameter_id.text) ports = header.find({"tag": "kPortDeclarationList"}) try: # Get Verible version for eventual debugging tool_requirements = check_tool_requirements.read_tool_requirements() verible_req = tool_requirements['verible'] verible_version = verible_req.get_version() parser_info = f'Verible {verible_version}' except: parser_info = f'Verible' return { 'module_header': header.text, 'package_import_declaration': '\n'.join([i.text for i in imports]), 'parameter_port_list': parameters_list.text if parameters_list else '', 'ports': ports.text if ports else '', 'parameters': parameters, 'parser': parser_info }