blob: 351f867fc2993e00de3e6d3cdb0d52b62f75327f [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
import operator
import sys
from mako import exceptions
from mako.template import Template
from pkg_resources import resource_filename
from .field_enums import HwAccess, SwAccess, SwRdAccess, SwWrAccess
from .gen_rtl import json_to_reg
from .data import *
# function get block class name
def bcname(b):
return b.name + "_reg_block"
# function get reg class name
def rcname(b, r):
return b.name + "_reg_" + r.name
# function get mem class name
def mcname(b, m):
return b.name + "_mem_" + m.name.lower()
# function get mem inst name
def miname(m):
return m.name.lower()
# function get base addr in SV syntax
def sv_base_addr(b):
return "{}'h{:x}".format(b.width, b.base_addr)
# function generate dv ral model using raw dict object parsed from hjson
def gen_dv(obj, outdir):
# obj: OrderedDict
block = json_to_reg(obj)
gen_ral(block, outdir)
# function generate dv ral model using gen_rtl::Block specification
def gen_ral(block, outdir):
# Read Register templates
uvm_reg_tpl = Template(
filename=resource_filename('reggen', 'uvm_reg.sv.tpl'))
# Generate pkg.sv with block name
with open(outdir + "/" + block.name + "_ral_pkg.sv", 'w') as fout:
try:
fout.write(
uvm_reg_tpl.render(block=block,
HwAccess=HwAccess,
SwRdAccess=SwRdAccess,
SwWrAccess=SwWrAccess))
except:
log.error(exceptions.text_error_template().render())