| # 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 |
| |
| from mako import exceptions |
| from mako.template import Template |
| from pkg_resources import resource_filename |
| |
| |
| def gen_agent(name, has_separate_host_device_driver, root_dir, vendor): |
| # set sub name |
| agent_dir = root_dir + "/" + name + "_agent" |
| |
| # yapf: disable |
| # flake8: noqa |
| # 4-tuple - path, ip name, class name, file ext |
| agent_srcs = [(agent_dir, name + '_', 'if', '.sv'), |
| (agent_dir, name + '_', 'item', '.sv'), |
| (agent_dir, name + '_', 'agent_cfg', '.sv'), |
| (agent_dir, name + '_', 'agent_cov', '.sv'), |
| (agent_dir, name + '_', 'monitor', '.sv'), |
| (agent_dir, name + '_', 'driver', '.sv'), |
| (agent_dir, name + '_', 'host_driver', '.sv'), |
| (agent_dir, name + '_', 'device_driver', '.sv'), |
| (agent_dir, name + '_', 'agent_pkg', '.sv'), |
| (agent_dir, name + '_', 'agent', '.sv'), |
| (agent_dir, name + '_', 'agent', '.core'), |
| (agent_dir, "", 'README', '.md'), |
| (agent_dir + "/seq_lib", name + '_', 'seq_list', '.sv'), |
| (agent_dir + "/seq_lib", name + '_', 'base_seq', '.sv')] |
| # yapf: enable |
| |
| for tup in agent_srcs: |
| path_dir = tup[0] |
| src_prefix = tup[1] |
| src = tup[2] |
| src_suffix = tup[3] |
| |
| if has_separate_host_device_driver: |
| if src == "driver": continue |
| else: |
| if src == "host_driver": continue |
| if src == "device_driver": continue |
| |
| ftpl = src + src_suffix + '.tpl' |
| fname = src_prefix + src + src_suffix |
| |
| # read template |
| tpl = Template(filename=resource_filename('uvmdvgen', ftpl)) |
| |
| if not os.path.exists(path_dir): os.system("mkdir -p " + path_dir) |
| with open(path_dir + "/" + fname, 'w') as fout: |
| try: |
| fout.write( |
| tpl.render(name=name, |
| has_separate_host_device_driver= |
| has_separate_host_device_driver, |
| vendor=vendor)) |
| except: |
| log.error(exceptions.text_error_template().render()) |