blob: a0df901bf9039cb723167ed17dddaafe2fddc699 [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
"""Generate SystemVerilog designs from validated register JSON tree
"""
import logging as log
from mako import exceptions
from mako.template import Template
from pkg_resources import resource_filename
from .access import HwAccess, SwRdAccess, SwWrAccess
from .ip_block import IpBlock
def escape_name(name):
return name.lower().replace(' ', '_')
def gen_rtl(block: IpBlock, outdir: str):
# Read Register templates
reg_top_tpl = Template(
filename=resource_filename('reggen', 'reg_top.sv.tpl'))
reg_pkg_tpl = Template(
filename=resource_filename('reggen', 'reg_pkg.sv.tpl'))
# Generate pkg.sv with block name
with open(outdir + "/" + block.name.lower() + "_reg_pkg.sv", 'w',
encoding='UTF-8') as fout:
try:
fout.write(
reg_pkg_tpl.render(block=block,
HwAccess=HwAccess,
SwRdAccess=SwRdAccess,
SwWrAccess=SwWrAccess))
except: # noqa F722 for template Exception handling
log.error(exceptions.text_error_template().render())
return 1
# Generate top.sv
with open(outdir + "/" + block.name.lower() + "_reg_top.sv", 'w',
encoding='UTF-8') as fout:
try:
fout.write(
reg_top_tpl.render(block=block,
HwAccess=HwAccess,
SwRdAccess=SwRdAccess,
SwWrAccess=SwWrAccess))
except: # noqa F722 for template Exception handling
log.error(exceptions.text_error_template().render())
return 1
return 0