60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import json
|
||
|
from pathlib import Path
|
||
|
from vunit import VUnit, VUnitCLI
|
||
|
|
||
|
cli = VUnitCLI()
|
||
|
cli.parser.add_argument(
|
||
|
"--ci-mode",
|
||
|
action="store_true",
|
||
|
default=False,
|
||
|
help="Enable special settings used by the CI",
|
||
|
)
|
||
|
args = cli.parse_args()
|
||
|
|
||
|
PRJ = VUnit.from_args(args=args)
|
||
|
PRJ.add_vhdl_builtins()
|
||
|
PRJ.add_com()
|
||
|
PRJ.add_verification_components()
|
||
|
PRJ.add_osvvm()
|
||
|
|
||
|
ROOT = Path(__file__).parent
|
||
|
|
||
|
NEORV32 = PRJ.add_library("neorv32")
|
||
|
NEORV32.add_source_files([
|
||
|
ROOT / "*.vhd",
|
||
|
ROOT / ".." / "rtl" / "**" / "*.vhd",
|
||
|
# In VUnit <=v4.5.0, the glob search is not recursive,
|
||
|
# hence subdir 'mem' is not picked by the previous pattern
|
||
|
ROOT / ".." / "rtl" / "core" / "mem" / "*.vhd"
|
||
|
])
|
||
|
|
||
|
NEORV32.test_bench("neorv32_tb").set_generic("ci_mode", args.ci_mode)
|
||
|
|
||
|
PRJ.set_sim_option("disable_ieee_warnings", True)
|
||
|
PRJ.set_sim_option("ghdl.sim_flags", ["--max-stack-alloc=256"])
|
||
|
|
||
|
def _gen_vhdl_ls(vu):
|
||
|
"""
|
||
|
Generate the vhdl_ls.toml file required by VHDL-LS language server.
|
||
|
"""
|
||
|
# Repo root
|
||
|
parent = Path(__file__).parent.parent
|
||
|
|
||
|
proj = vu._project
|
||
|
libs = proj.get_libraries()
|
||
|
|
||
|
with open(parent / 'vhdl_ls.toml', "w") as f:
|
||
|
for lib in libs:
|
||
|
f.write(f"[libraries.{lib.name}]\n")
|
||
|
files = [str(file).replace('\\', '/') for file in lib._source_files
|
||
|
# Conflicts with *.default.vhd
|
||
|
if not any(exclude in file for exclude in ('neorv32_imem.simple.vhd', 'neorv32_imem.legacy.vhd', 'neorv32_dmem.legacy.vhd'))
|
||
|
]
|
||
|
f.write(f"files = {json.dumps(files, indent=4)}\n")
|
||
|
|
||
|
_gen_vhdl_ls(PRJ)
|
||
|
|
||
|
PRJ.main()
|