blob: 5cceed56bddf17be008c7bc465ad1e31919bba58 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
r"""Generates top level documentation from an hjson configuration file."""
import sys
import argparse
import logging as log
import hjson
from lib import common
from tabulate import tabulate
def to_markdown(text):
"""Adds prefix and sufix newlines to 'text'."""
doc_text = f"""
{text}
"""
return doc_text
def generate_mmap_table(top_level):
"""Generates top level memory map table."""
header = ["Name", "Type", "Byte Address"]
table = [header]
colalign = ("left", ) * len(header)
for module in top_level["module"]:
for j, (name, base) in enumerate(module["base_addrs"].items()):
base_address = f"{base} ({name})"
if name == "null":
base_address = f"{base} (regs)"
if j == 0:
row = [module["name"], module["type"], base_address]
else:
row = ["", "", base_address]
table.append(row)
return tabulate(table,
headers="firstrow",
tablefmt="pipe",
colalign=colalign)
def generate_pinout_table(top_level):
"""Generates top level pinout table."""
header = ["ID", "Name", "Bank", "Type", "Connection Type", "Description"]
table = [header]
colalign = ("left", ) * len(header)
for pad in top_level["pinout"]["pads"]:
row = [pad["idx"], pad["name"], pad["bank"], pad["type"], pad["connection"], pad["desc"]]
table.append(row)
return tabulate(table,
headers="firstrow",
tablefmt="pipe",
colalign=colalign)
def main():
log.basicConfig(level=log.WARNING,
format="%(levelname)s: %(message)s")
parser = argparse.ArgumentParser(
prog="gen-top-docs",
description=common.wrapped_docstring(),
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument(
"--topcfg",
"-t",
required=True,
help="Topgen generated config file `top_{name}.hjson`.",
)
parser.add_argument(
"--generator",
"-g",
help="Select generator",
)
args = parser.parse_args()
gen = args.generator
doc_generators = {
"mmap": generate_mmap_table,
"pinout": generate_pinout_table,
}
with open(args.topcfg, 'r') as infile:
top_level = hjson.load(infile)
if gen not in doc_generators:
sys.exit(f"Unknown generator {gen}")
print(doc_generators[gen](top_level))
if __name__ == "__main__":
main()