| # Copyright lowRISC contributors. |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| # SPDX-License-Identifier: Apache-2.0 |
| """Generate SystemVerilog UVM agent extended freom our DV lib |
| """ |
| |
| import os |
| import logging as log |
| |
| from mako.template import Template |
| from pkg_resources import resource_filename |
| from uvmdvgen import VENDOR_DEFAULT |
| |
| |
| def gen_env(name, is_cip, has_ral, has_interrupts, has_alerts, num_edn, |
| env_agents, root_dir, vendor): |
| # yapf: disable |
| # flake8: noqa |
| # 4-tuple - sub-path, ip name, class name, file ext |
| env_srcs = [('dv/env', name + '_', 'env_cfg', '.sv'), |
| ('dv/env', name + '_', 'env_cov', '.sv'), |
| ('dv/env', name + '_', 'env_pkg', '.sv'), |
| ('dv/env', name + '_', 'scoreboard', '.sv'), |
| ('dv/env', name + '_', 'virtual_sequencer', '.sv'), |
| ('dv/env', name + '_', 'env', '.sv'), |
| ('dv/env', name + '_', 'env', '.core'), |
| ('dv/env/seq_lib', name + '_', 'base_vseq', '.sv'), |
| ('dv/env/seq_lib', name + '_', 'smoke_vseq', '.sv'), |
| ('dv/env/seq_lib', name + '_', 'common_vseq', '.sv'), |
| ('dv/env/seq_lib', name + '_', 'vseq_list', '.sv'), |
| ('dv', '', 'tb', '.sv'), |
| ('dv/sva', name + '_', 'bind', '.sv'), |
| ('dv/sva', name + '_', 'sva', '.core'), |
| ('dv/tests', name + '_', 'base_test', '.sv'), |
| ('dv/tests', name + '_', 'test_pkg', '.sv'), |
| ('dv/tests', name + '_', 'test', '.core'), |
| ('dv/cov', '', '', ''), |
| ('dv', name + '_', 'sim_cfg', '.hjson'), |
| ('doc/dv', '', 'index', '.md'), |
| ('doc', '', 'checklist', '.md'), |
| ('data', name + '_', 'testplan', '.hjson'), |
| ('dv', name + '_', 'sim', '.core')] |
| # yapf: enable |
| |
| if vendor != VENDOR_DEFAULT and env_agents != []: |
| env_core_path = root_dir + "/dv/env/" + name + "_env.core" |
| print( |
| "WARNING: Both, --vendor and --env-agents switches are supplied " |
| "on the command line. Please check the VLNV names of the " |
| "dependent agents in the generated {} file.".format(env_core_path)) |
| |
| for tup in env_srcs: |
| path_dir = root_dir + '/' + tup[0] |
| src_prefix = tup[1] |
| src = tup[2] |
| src_suffix = tup[3] |
| |
| ftpl = src + src_suffix + '.tpl' |
| file_name = src_prefix + src + src_suffix |
| |
| if not os.path.exists(path_dir): |
| os.system("mkdir -p " + path_dir) |
| if file_name == "": |
| continue |
| |
| # Skip the checklist if it already exists. |
| file_path = os.path.join(path_dir, file_name) |
| if src == 'checklist' and os.path.exists(file_path): |
| continue |
| |
| # read template |
| tpl = Template(filename=resource_filename('uvmdvgen', ftpl)) |
| |
| # create rendered file |
| with open(file_path, 'w') as fout: |
| try: |
| fout.write( |
| tpl.render(name=name, |
| is_cip=is_cip, |
| has_ral=has_ral, |
| has_interrupts=has_interrupts, |
| has_alerts=has_alerts, |
| num_edn=num_edn, |
| env_agents=env_agents, |
| vendor=vendor)) |
| except Exception as e: |
| log.error(e.text_error_template().render()) |