text: # Copyright lowRISC contributors.
  # Licensed under the Apache License, Version 2.0, see LICENSE for details.
  # SPDX-License-Identifier: Apache-2.0
  # # Lint as: python3
  #
  """Generate FPV CSR read and write assertions 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 .gen_rtl import json_to_reg
  
  
  # function get write property name
  def wpname(r):
      return r.name + "_wr_p"
  
  
  # function get read property name
  def rpname(r):
      return r.name + "_rd_p"
  
  
  def gen_fpv(obj, outdir):
      # obj: OrderedDict
      block = json_to_reg(obj)
      gen_assertion(block, outdir)
  
  
  def gen_assertion(block, outdir):
      # Read Register templates
      fpv_csr_tpl = Template(
          filename=resource_filename('reggen', 'fpv_csr.sv.tpl'))
  
      # Generate pkg.sv with block name
      with open(outdir + "/" + block.name + "_csr_assert_fpv.sv", 'w') as fout:
          try:
              fout.write(
                  fpv_csr_tpl.render(block=block,
                                     HwAccess=HwAccess,
                                     SwRdAccess=SwRdAccess,
                                     SwWrAccess=SwWrAccess))
          except:  # noqa: 722
              log.error(exceptions.text_error_template().render())
              return 1
  
      return 0
  