core-v-verif系列之cva6 cva6.py执行示例(1)

执行命令 bash verif/regress/dv-riscv-arch-test.sh

bash verif/regress/dv-riscv-arch-test.sh

备注, 这里我们设置了环境变量
export RISCV=RISCV_TOOLS
export DV_SIMULATORS=veri-testharness,spike
export NUM_JOBS=$(nproc)

执行输出日志

[install-verilator.sh] Entry values:
    VERILATOR_BUILD_DIR=''
    VERILATOR_INSTALL_DIR=''
Setting VERILATOR_INSTALL_DIR to '/cva6/tools/verilator-v5.008'...
Setting VERILATOR_BUILD_DIR to '/cva6/tools/verilator-v5.008/build-v5.008'...
Verilator already installed in '/cva6/tools/verilator-v5.008'.
Spike already installed in '/cva6/tools/spike'.
Spike already installed in '/cva6/tools/spike'.
Repo:   https://github.com/riscv-non-isa/riscv-arch-test
Branch: main
Hash:   a5a49fc9f244192649e57fe61b4513d9bc39b1e3
Spike dir: /cva6/verif/core-v-verif/vendor/riscv/riscv-isa-sim
Executing command: python3 cva6.py --testlist=../tests/testlist_riscv-arch-test-cv64a6_imafdc_sv39.yaml --target cv64a6_imafdc_sv39 --iss_yaml=cva6.yaml --iss=veri-testharness,spike  --issrun_opts=+tb_performance_mode+debug_disable=1+UVM_VERBOSITY=UVM_NONE --linker=../tests/riscv-arch-test/riscv-target/spike/link.ld

执行python3 cva6.py调用顺序

Executing command: python3 cva6.py --testlist=../tests/testlist_riscv-arch-test-cv64a6_imafdc_sv39.yaml --target cv64a6_imafdc_sv39 --iss_yaml=cva6.yaml --iss=veri-testharness,spike  --issrun_opts=+tb_performance_mode+debug_disable=1+UVM_VERBOSITY=UVM_NONE --linker=../tests/riscv-arch-test/riscv-target/spike/link.ld

以下是执行该脚本时的主要函数调用顺序:

  1. main():

    • 初始化全局变量。
    • 获取当前工作目录并解析命令行参数。
    • 加载配置文件。
    • 设置 issrun_optslog_format
    • 记录 UVM seed。
    • 设置日志记录器。
    • 检查工具版本。
    • 创建日志文件处理程序。
    • 创建输出目录。
    • 添加 ISA 扩展。
    • 如果设置了 verilog_style_check 参数,则运行 Verilog 风格检查。
  2. run_test(如果指定了 c_testself_testsasm_tests 参数):

    • 根据测试类型(C 文件、汇编文件或 ELF 文件)编译和运行定向测试。
  3. openhw_process_regression_list (如果没有指定定向测试且未设置 --co 参数):

    • 处理回归测试列表并获取匹配的测试。
  4. gen(如果 steps 参数包含 genall):

    • get_generator_cmd:
      • 设置编译和仿真命令。
    • do_compile:
      • 编译指令生成器。
    • do_simulate:
      • 运行指令生成器。
  5. gcc_compile(如果 steps 参数包含 gcc_compileall):

    • 使用 RISC-V GCC 工具链编译汇编程序。
  6. iss_sim(如果 steps 参数包含 iss_simall):

    • 运行 ISS 仿真。
  7. iss_cmp(如果 steps 参数包含 iss_cmpall):

    • 比较 ISS 仿真结果。
  8. sys.exit(RET_SUCCESS):

    • 成功完成后退出程序。

参数解释

  • --testlist=../tests/testlist_riscv-arch-test-cv64a6_imafdc_sv39.yaml:指定回归测试列表文件。
  • --target=cv64a6_imafdc_sv39:指定目标配置。
  • --iss_yaml=cva6.yaml:指定 ISS 配置文件。
  • --iss=veri-testharness,spike:指定使用的 ISS。
  • --issrun_opts=+tb_performance_mode+debug_disable=1+UVM_VERBOSITY=UVM_NONE:指定 ISS 运行选项。
  • --linker=../tests/riscv-arch-test/riscv-target/spike/link.ld:指定链接器文件。

总结

主要函数调用顺序从 main 函数开始,根据输入参数和配置文件逐步调用其他函数以完成编译、仿真和结果比较等任务。

main函数

函数调用顺序分析

下面我们将从 main 函数开始,逐步分析在指定输入参数情况下 cva6.py 脚本中各个函数的调用顺序。

输入参数
python3 cva6.py --testlist=../tests/testlist_riscv-arch-test-cv64a6_imafdc_sv39.yaml --target=cv64a6_imafdc_sv39 --iss_yaml=cva6.yaml --iss=veri-testharness,spike --issrun_opts=+tb_performance_mode+debug_disable=1+UVM_VERBOSITY=UVM_NONE --linker=../tests/riscv-arch-test/riscv-target/spike/link.ld
main 函数
def main():
    try:
        global issrun_opts
        global test_iteration
        global log_format
        cwd = os.path.dirname(os.path.realpath(__file__))
        args = parse_args(cwd)
        load_config(args, cwd)

        if args.axi_active == "yes":
            args.issrun_opts = args.issrun_opts + " +uvm_set_config_int=*uvm_test_top,force_axi_mode,1"
        elif args.axi_active == "no":
            args.issrun_opts = args.issrun_opts + " +uvm_set_config_int=uvm_test_top,force_axi_mode,0"

        if args.gen_sv_seed > 0 and args.sv_seed != "1":
            logging.error('You cannot use gen_sv_seed and sv_seed options at the same time')

        if args.gen_sv_seed > 0:
            args.issrun_opts = args.issrun_opts + " +ntb_random_seed_automatic"
            log_format = 1
        elif args.gen_sv_seed == 0:
            args.issrun_opts = args.issrun_opts + " +ntb_random_seed=" + args.sv_seed
            args.gen_sv_seed = 1
            log_format = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值