[tool] Add nice debug info for Mako
Debugging Mako template error is quite hard. With this PR, at least it
gives the exact location in the template file when error occurs.
Reference: https://docs.makotemplates.org/en/latest/usage.html#handling-exceptions
diff --git a/util/reggen/gen_dv.py b/util/reggen/gen_dv.py
index 751a5df..3de9f0b 100644
--- a/util/reggen/gen_dv.py
+++ b/util/reggen/gen_dv.py
@@ -8,6 +8,7 @@
import operator
import sys
+from mako import exceptions
from mako.template import Template
from pkg_resources import resource_filename
@@ -57,8 +58,11 @@
# Generate pkg.sv with block name
with open(outdir + "/" + block.name + "_reg_block.sv", 'w') as fout:
- fout.write(
- uvm_reg_tpl.render(block=block,
- HwAccess=HwAccess,
- SwRdAccess=SwRdAccess,
- SwWrAccess=SwWrAccess))
+ try:
+ fout.write(
+ uvm_reg_tpl.render(block=block,
+ HwAccess=HwAccess,
+ SwRdAccess=SwRdAccess,
+ SwWrAccess=SwWrAccess))
+ except:
+ log.error(exceptions.text_error_template().render())
diff --git a/util/reggen/gen_rtl.py b/util/reggen/gen_rtl.py
index 3aaa949..14e1475 100644
--- a/util/reggen/gen_rtl.py
+++ b/util/reggen/gen_rtl.py
@@ -9,6 +9,7 @@
import sys
from mako.template import Template
+from mako import exceptions
from pkg_resources import resource_filename
from .data import *
@@ -185,17 +186,23 @@
# Generate pkg.sv with block name
with open(outdir + "/" + block.name + "_reg_pkg.sv", 'w',
encoding='UTF-8') as fout:
- fout.write(
- reg_pkg_tpl.render(block=block,
- HwAccess=HwAccess,
- SwRdAccess=SwRdAccess,
- SwWrAccess=SwWrAccess))
+ try:
+ fout.write(
+ reg_pkg_tpl.render(block=block,
+ HwAccess=HwAccess,
+ SwRdAccess=SwRdAccess,
+ SwWrAccess=SwWrAccess))
+ except:
+ log.error(exceptions.text_error_template().render())
# Generate top.sv
with open(outdir + "/" + block.name + "_reg_top.sv", 'w',
encoding='UTF-8') as fout:
- fout.write(
- reg_top_tpl.render(block=block,
- HwAccess=HwAccess,
- SwRdAccess=SwRdAccess,
- SwWrAccess=SwWrAccess))
+ try:
+ fout.write(
+ reg_top_tpl.render(block=block,
+ HwAccess=HwAccess,
+ SwRdAccess=SwRdAccess,
+ SwWrAccess=SwWrAccess))
+ except:
+ log.error(exceptions.text_error_template().render())
diff --git a/util/tlgen/generate.py b/util/tlgen/generate.py
index 7a9ba25..ecee495 100644
--- a/util/tlgen/generate.py
+++ b/util/tlgen/generate.py
@@ -2,6 +2,7 @@
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
+from mako import exceptions
from mako.template import Template
from pkg_resources import resource_filename
@@ -23,7 +24,11 @@
xbar_bind_tpl = Template(
filename=resource_filename('tlgen', 'xbar.bind.tpl.sv'))
- out_rtl = xbar_rtl_tpl.render(xbar=xbar, ntype=NodeType)
- out_pkg = xbar_pkg_tpl.render(xbar=xbar)
- out_bind = xbar_bind_tpl.render(xbar=xbar, ntype=NodeType)
+ try:
+ out_rtl = xbar_rtl_tpl.render(xbar=xbar, ntype=NodeType)
+ out_pkg = xbar_pkg_tpl.render(xbar=xbar)
+ out_bind = xbar_bind_tpl.render(xbar=xbar, ntype=NodeType)
+ except:
+ log.error(exceptions.text_error_template().render())
+
return (out_rtl, out_pkg, out_bind)
diff --git a/util/topgen.py b/util/topgen.py
index c421e3c..4694ae3 100755
--- a/util/topgen.py
+++ b/util/topgen.py
@@ -12,6 +12,7 @@
import hjson
from mako.template import Template
+from mako import exceptions
import tlgen
from reggen import gen_rtl, gen_dv, validate
@@ -33,7 +34,10 @@
def generate_rtl(top, tpl_filename):
top_rtl_tpl = Template(filename=tpl_filename)
- out_rtl = top_rtl_tpl.render(top=top)
+ try:
+ out_rtl = top_rtl_tpl.render(top=top)
+ except:
+ log.error(exceptions.text_error_template().render())
return out_rtl
@@ -46,7 +50,10 @@
# Add clocks to the top configuration
obj["clocks"] = xbar.clocks
- out_rtl, out_pkg, out_bind = tlgen.generate(xbar)
+ try:
+ out_rtl, out_pkg, out_bind = tlgen.generate(xbar)
+ except:
+ log.error(exceptions.text_error_template().render())
rtl_path = out_path / 'rtl'
rtl_path.mkdir(parents=True, exist_ok=True)
@@ -96,7 +103,10 @@
out = StringIO()
with hjson_tpl_path.open(mode='r', encoding='UTF-8') as fin:
hjson_tpl = Template(fin.read())
- out = hjson_tpl.render(src=src, target=target, prio=prio)
+ try:
+ out = hjson_tpl.render(src=src, target=target, prio=prio)
+ except:
+ log.error(exceptions.text_error_template().render())
log.info("RV_PLIC hjson: %s" % out)
if out == "":
@@ -121,7 +131,10 @@
# Generate RV_PLIC Top Module
with rtl_tpl_path.open(mode='r', encoding='UTF-8') as fin:
rtl_tpl = Template(fin.read())
- out = rtl_tpl.render(src=src, target=target, prio=prio)
+ try:
+ out = rtl_tpl.render(src=src, target=target, prio=prio)
+ except:
+ log.error(exceptions.text_error_template().render())
log.info("RV_PLIC RTL: %s" % out)
if out == "":
diff --git a/util/uvmdvgen/gen_agent.py b/util/uvmdvgen/gen_agent.py
index afb848a..5f96d54 100644
--- a/util/uvmdvgen/gen_agent.py
+++ b/util/uvmdvgen/gen_agent.py
@@ -6,6 +6,7 @@
import os
+from mako import exceptions
from mako.template import Template
from pkg_resources import resource_filename
@@ -52,8 +53,10 @@
if not os.path.exists(path_dir): os.system("mkdir -p " + path_dir)
with open(path_dir + "/" + fname, 'w') as fout:
- fout.write(
- tpl.render(
- name=name,
- has_separate_host_device_driver=
- has_separate_host_device_driver))
+ try:
+ fout.write(
+ tpl.render(name=name,
+ has_separate_host_device_driver=
+ has_separate_host_device_driver))
+ except:
+ log.error(exceptions.text_error_template().render())
diff --git a/util/uvmdvgen/gen_env.py b/util/uvmdvgen/gen_env.py
index 577bd17..67981eb 100644
--- a/util/uvmdvgen/gen_env.py
+++ b/util/uvmdvgen/gen_env.py
@@ -51,5 +51,9 @@
if not os.path.exists(path_dir): os.system("mkdir -p " + path_dir)
with open(path_dir + "/" + fname, 'w') as fout:
- fout.write(
- tpl.render(name=name, is_cip=is_cip, env_agents=env_agents))
+ try:
+ fout.write(
+ tpl.render(name=name, is_cip=is_cip,
+ env_agents=env_agents))
+ except:
+ log.error(exceptions.text_error_template().render())