blob: 31c63cce1ee82107e8bbb3cf8bb6977be50c9354 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
r"""Command-line tool to autogenerate boilerplate DV testbench code extended from dv_lib / cip_lib
"""
import argparse
import os
import sys
from uvmdvgen import gen_agent, gen_env
def main():
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument(
"name",
metavar="[ip/block name]",
help="Name of the ip/block for which the UVM TB is being auto-generated"
)
parser.add_argument(
"-a",
"--gen_agent",
action='store_true',
help="Generate UVM agent code extended from DV library")
parser.add_argument(
"-s",
"--has_separate_host_device_driver",
action='store_true',
help=
"""IP / block agent creates a separate driver for host and device modes.
(ignored if -a switch is not passed)""")
parser.add_argument(
"-e",
"--gen_env",
action='store_true',
help="Generate testbench UVM env code")
parser.add_argument(
"-c",
"--is_cip",
action='store_true',
help=
"""Is comportable IP - this will result in code being extended from CIP
library. If switch is not passed, then the code will be extended from
DV library instead. (ignored if -e switch is not passed)"""
)
parser.add_argument(
"-ea",
"--env_agents",
nargs="+",
metavar="agt1 agt2",
help="""Env creates an interface agent specified here. They are
assumed to already exist. Note that the list is space-separated,
and not comma-separated. (ignored if -e switch is not passed)"""
)
parser.add_argument(
"-ao",
"--agent_outdir",
default="name",
metavar="[hw/dv/sv]",
help="""Path to place the agent code. A directory called <name>_agent is
created at this location. (default set to './<name>')"""
)
parser.add_argument(
"-eo",
"--env_outdir",
default="name",
metavar="[hw/ip/<ip>/dv]",
help="""Path to place the env code. 3 directories are created - env,
tb and tests. (default set to './<name>')""")
args = parser.parse_args()
if args.agent_outdir == "name": args.agent_outdir = args.name
if args.env_outdir == "name": args.env_outdir = args.name
if args.gen_agent:
gen_agent.gen_agent(args.name, \
args.has_separate_host_device_driver, \
args.agent_outdir)
if args.gen_env:
if not args.env_agents: args.env_agents = []
gen_env.gen_env(args.name, \
args.is_cip, \
args.env_agents, \
args.env_outdir)
if __name__ == '__main__':
main()