lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 1 | # Copyright lowRISC contributors. |
| 2 | # Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| 3 | # SPDX-License-Identifier: Apache-2.0 |
| 4 | |
Timothy Chen | 09d859b | 2019-11-08 14:01:12 -0800 | [diff] [blame] | 5 | import logging as log |
Weicai Yang | fd2c22e | 2020-02-11 18:37:14 -0800 | [diff] [blame] | 6 | |
Eunchan Kim | cb28a17 | 2019-10-08 16:35:48 -0700 | [diff] [blame] | 7 | from mako import exceptions |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 8 | from mako.template import Template |
| 9 | from pkg_resources import resource_filename |
| 10 | |
| 11 | from .item import NodeType |
| 12 | from .xbar import Xbar |
| 13 | |
| 14 | |
Eunchan Kim | 8f2cb38 | 2020-05-13 11:53:09 -0700 | [diff] [blame] | 15 | def generate(xbar: Xbar, library_name: str = "ip") -> str: |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 16 | """generate uses elaborated model then creates top level Xbar module |
| 17 | with prefix. |
| 18 | """ |
| 19 | |
| 20 | xbar_rtl_tpl = Template( |
Michael Schaffner | c703936 | 2019-10-22 16:16:06 -0700 | [diff] [blame] | 21 | filename=resource_filename('tlgen', 'xbar.rtl.sv.tpl')) |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 22 | xbar_pkg_tpl = Template( |
Michael Schaffner | c703936 | 2019-10-22 16:16:06 -0700 | [diff] [blame] | 23 | filename=resource_filename('tlgen', 'xbar.pkg.sv.tpl')) |
Weicai Yang | a495d20 | 2019-12-05 15:36:27 -0800 | [diff] [blame] | 24 | xbar_core_tpl = Template( |
| 25 | filename=resource_filename('tlgen', 'xbar.core.tpl')) |
Eunchan Kim | 9191f26 | 2020-07-30 16:37:40 -0700 | [diff] [blame] | 26 | xbar_hjson_tpl = Template( |
| 27 | filename=resource_filename('tlgen', 'xbar.hjson.tpl')) |
Eunchan Kim | cb28a17 | 2019-10-08 16:35:48 -0700 | [diff] [blame] | 28 | try: |
| 29 | out_rtl = xbar_rtl_tpl.render(xbar=xbar, ntype=NodeType) |
| 30 | out_pkg = xbar_pkg_tpl.render(xbar=xbar) |
Eunchan Kim | 8f2cb38 | 2020-05-13 11:53:09 -0700 | [diff] [blame] | 31 | out_core = xbar_core_tpl.render(xbar=xbar, |
| 32 | ntype=NodeType, |
| 33 | library_name=library_name) |
Eunchan Kim | 9191f26 | 2020-07-30 16:37:40 -0700 | [diff] [blame] | 34 | out_hjson = xbar_hjson_tpl.render(xbar=xbar) |
Eunchan Kim | 837c796 | 2020-04-30 12:15:49 -0700 | [diff] [blame] | 35 | except: # noqa: E722 |
Eunchan Kim | cb28a17 | 2019-10-08 16:35:48 -0700 | [diff] [blame] | 36 | log.error(exceptions.text_error_template().render()) |
| 37 | |
Eunchan Kim | 9191f26 | 2020-07-30 16:37:40 -0700 | [diff] [blame] | 38 | results = [] |
| 39 | results.append(("rtl/autogen/xbar_%s.sv" % (xbar.name), out_rtl)) |
| 40 | results.append(("rtl/autogen/tl_%s_pkg.sv" % (xbar.name), out_pkg)) |
| 41 | results.append(("xbar_%s.core" % (xbar.name), out_core)) |
| 42 | results.append(("data/autogen/xbar_%s.hjson" % (xbar.name), out_hjson)) |
| 43 | |
| 44 | return results |