| # Copyright lowRISC contributors. |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| import logging as log |
| |
| from mako import exceptions |
| from mako.template import Template |
| from pkg_resources import resource_filename |
| |
| from .item import NodeType |
| from .xbar import Xbar |
| |
| |
| def generate(xbar: Xbar, library_name: str = "ip") -> str: |
| """generate uses elaborated model then creates top level Xbar module |
| with prefix. |
| """ |
| |
| xbar_rtl_tpl = Template( |
| filename=resource_filename('tlgen', 'xbar.rtl.sv.tpl')) |
| xbar_pkg_tpl = Template( |
| filename=resource_filename('tlgen', 'xbar.pkg.sv.tpl')) |
| xbar_core_tpl = Template( |
| filename=resource_filename('tlgen', 'xbar.core.tpl')) |
| xbar_hjson_tpl = Template( |
| filename=resource_filename('tlgen', 'xbar.hjson.tpl')) |
| try: |
| out_rtl = xbar_rtl_tpl.render(xbar=xbar, ntype=NodeType) |
| out_pkg = xbar_pkg_tpl.render(xbar=xbar) |
| out_core = xbar_core_tpl.render(xbar=xbar, |
| ntype=NodeType, |
| library_name=library_name) |
| out_hjson = xbar_hjson_tpl.render(xbar=xbar) |
| except: # noqa: E722 |
| log.error(exceptions.text_error_template().render()) |
| |
| results = [] |
| results.append(("rtl/autogen/xbar_%s.sv" % (xbar.name), out_rtl)) |
| results.append(("rtl/autogen/tl_%s_pkg.sv" % (xbar.name), out_pkg)) |
| results.append(("xbar_%s.core" % (xbar.name), out_core)) |
| results.append(("data/autogen/xbar_%s.hjson" % (xbar.name), out_hjson)) |
| |
| return results |