cva6/.gitlab-ci.yml
2024-07-05 12:06:42 +02:00

570 lines
19 KiB
YAML

# Copyright 2022 Thales Silicon Security
#
# Licensed under the Solderpad Hardware Licence, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# SPDX-License-Identifier: Apache-2.0 WITH SHL-2.0
# You may obtain a copy of the License at https://solderpad.org/licenses/
#
# Original Author: Yannick Casamatta (yannick.casamatta@thalesgroup.com)
# Please refer to .gitlab-ci/README.md to add jobs
# Project maintainers must define following variables to adapt this CI to their runtime environment (Settings > CI/CD > Variables)
# - SETUP_CI_CVV_BRANCH: master (the main branch of CVA6 repository)
# A git repository named "setup-ci" must be created in the same namespace as cva6 and must contain the following file:
# - 'cva6/core-v-verif-cva6.yml'
#
# This file must at least contain the variables necessary for the execution of
# this pipeline.
# Other elements such as new jobs can be added to overload the associated
# downstream pipeline included in this repository.
# Example can be found in ".gitlab-ci/setup-ci-example/"
include:
- project: '$CI_PROJECT_NAMESPACE/setup-ci'
ref: '$SETUP_CI_CVV_BRANCH'
file: 'cva6/core-v-verif-cva6.yml'
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
variables:
CI_KIND: verif
- if: $CI_COMMIT_BRANCH == "master"
variables:
CI_KIND: regress
- if: $CI_COMMIT_BRANCH =~ /.*_PR_.*/
variables:
CI_KIND: dev
- if: $CI_COMMIT_BRANCH =~ /^dev.*/
variables:
CI_KIND: dev
- variables:
CI_KIND: none
variables:
GIT_SUBMODULE_STRATEGY: recursive
DASHBOARD: cva6
DV_TARGET: cv32a65x
default:
tags: [$TAGS_RUNNER]
artifacts:
when: always
paths:
- artifacts/
stages:
- setup
- light tests
- heavy tests
- backend tests
- find failures
- report
.setup_job:
stage: setup
variables:
GIT_SUBMODULE_STRATEGY: none
rules: &on_dev
- if: $CI_KIND == "regress"
- if: $CI_KIND == "verif"
- if: $CI_KIND == "dev"
- when: manual
allow_failure: true
check_env:
extends:
- .setup_job
variables:
GIT_STRATEGY: none
script:
- env
artifacts:
paths: []
build_tools:
extends:
- .setup_job
script:
# core-v-verif imports yaml-cpp as a submodule ==> recurse
- git submodule update --init --recursive verif/core-v-verif
- source $SYN_VCS_BASHRC
# ROOT_PROJECT is used by Spike installer and designates the toplevel of core-v-verif tree.
- 'export ROOT_PROJECT=$(pwd)'
# If a local build of Spike is requested, clean up build and installation directories.
- '[ -n "$SPIKE_INSTALL_DIR" -a "$SPIKE_INSTALL_DIR" = "__local__" ] && rm -rf vendor/riscv/riscv-isa-sim/build'
- '[ -n "$SPIKE_INSTALL_DIR" -a "$SPIKE_INSTALL_DIR" = "__local__" ] && rm -rf tools/spike'
# Create default directory corresponding to the artifact path.
- mkdir -p tools/spike
# Set up Spike, whether locally built or pre-installed.
# If initially set to "__local__", SPIKE_INSTALL_DIR will be resolved
# to an absolute path by the installation script.
- source verif/regress/install-spike.sh
# Strip locally built binaries and libraries to reduce artifact size.
- '[ -f $(pwd)/tools/spike/bin/spike ] && strip $(pwd)/tools/spike/bin/spike* $(pwd)/tools/spike/lib/lib*.*'
- mkdir -p artifacts/tools/
- mv tools/spike artifacts/tools/
.fe_smoke_test:
stage: light tests
rules: *on_dev
before_script:
- git -C verif/core-v-verif fetch --unshallow
- mkdir -p tools
- mv artifacts/tools/spike tools
- rm -rf artifacts/
- mkdir -p artifacts/{reports,logs}
- python3 .gitlab-ci/scripts/report_fail.py
- echo $SYN_VCS_BASHRC; source $SYN_VCS_BASHRC
.simu_after_script: &simu_after_script
- for i in $(find verif/sim/out*/[vq]*_sim -type f \( -name "*.csv" -o -name "*.iss" \)) ; do head -10000 $i > artifacts/logs/$(basename $i).head ; done
- head -10000 verif/sim/logfile.log > artifacts/logs/logfile.log.head
- python3 .gitlab-ci/scripts/report_simu.py verif/sim/logfile.log
smoke:
extends:
- .fe_smoke_test
variables:
DASHBOARD_JOB_TITLE: "Smoke test $DV_SIMULATORS"
DASHBOARD_JOB_DESCRIPTION: "Short tests to challenge most architectures with most testbenchs configurations"
DASHBOARD_SORT_INDEX: 0
DASHBOARD_JOB_CATEGORY: "Basic"
SPIKE_TANDEM: 1
COLLECT_SIMU_LOGS: 1
parallel:
matrix:
- DV_SIMULATORS:
- "veri-testharness,spike"
- "vcs-testharness,spike"
- "questa-testharness,spike"
- "vcs-uvm,spike"
script:
- source $QUESTA_BASHRC
- bash verif/regress/smoke-tests.sh
- !reference [.simu_after_script]
gen_smoke:
extends:
- .fe_smoke_test
variables:
DASHBOARD_JOB_TITLE: "Smoke Generated test $DV_SIMULATORS"
DASHBOARD_JOB_DESCRIPTION: "Short generated tests to challenge the CVA6-DV on STEP1 configuration"
DASHBOARD_SORT_INDEX: 0
DASHBOARD_JOB_CATEGORY: "Basic"
DV_SIMULATORS: "vcs-uvm,spike"
COLLECT_SIMU_LOGS: 1
script:
- bash verif/regress/smoke-gen_tests.sh
- !reference [.simu_after_script]
coremark:
extends:
- .fe_smoke_test
variables:
DASHBOARD_JOB_TITLE: "CoreMark"
DASHBOARD_JOB_DESCRIPTION: "Performance indicator"
DASHBOARD_SORT_INDEX: 5
DASHBOARD_JOB_CATEGORY: "Performance"
script:
- bash verif/regress/coremark.sh --no-print
- python3 .gitlab-ci/scripts/report_benchmark.py --coremark verif/sim/out_*/veri-testharness_sim/core_main.*.log
hwconfig:
extends:
- .fe_smoke_test
variables:
DASHBOARD_JOB_TITLE: "HW config $DV_SIMULATORS $DV_HWCONFIG_OPTS"
DASHBOARD_JOB_DESCRIPTION: "Short tests to challenge target configurations"
DASHBOARD_SORT_INDEX: 1
DASHBOARD_JOB_CATEGORY: "Basic"
DV_SIMULATORS: "veri-testharness,spike"
DV_HWCONFIG_OPTS: "cv32a6_imac_sv32"
script:
- source verif/regress/hwconfig_tests.sh
- python3 .gitlab-ci/scripts/report_pass.py
.synthesis_test:
stage: heavy tests
timeout: 2 hours
before_script:
- !reference [.fe_smoke_test, before_script]
rules: &on_dev_rtl
- if: $CI_KIND == "regress"
- if: $CI_KIND == "verif"
- if: $CI_KIND == "dev"
changes:
paths:
- core/**/*
- corev_apu/**/*
compare_to: master
- when: manual
allow_failure: true
spyglass:
extends:
- .synthesis_test
variables:
DV_TARGET: cv32a65x
DASHBOARD_JOB_TITLE: "Report Spyglass Lint Errors"
DASHBOARD_JOB_DESCRIPTION: "Report lint errors and warnings detected by Spyglass"
DASHBOARD_SORT_INDEX: 5
DASHBOARD_JOB_CATEGORY: "Lint Check"
script:
- echo $SYN_SG_BASHRC; source $SYN_SG_BASHRC
- mkdir -p artifacts/lint_reports
- make -C spyglass design_read
- make -C spyglass lint_check
- mv spyglass/sg_run_results/cva6_sg_reports/cva6_lint_lint_rtl artifacts/lint_reports
- python3 .gitlab-ci/scripts/report_spyglass_lint.py spyglass/reference_summary.rpt artifacts/lint_reports/cva6_lint_lint_rtl/summary.rpt
asic-synthesis:
extends:
- .synthesis_test
variables:
DASHBOARD_JOB_TITLE: "ASIC Synthesis $DV_TARGET"
DASHBOARD_JOB_DESCRIPTION: "Synthesis indicator with specific Techno"
DASHBOARD_SORT_INDEX: 5
DASHBOARD_JOB_CATEGORY: "Synthesis"
PERIOD: "15"
DV_TARGET: cv32a65x
script:
- echo $PERIOD
- echo $DV_TARGET
- source ./verif/sim/setup-env.sh
- git clone ${SYNTH_SCRIPT} ${SYNTH_SCRIPT_PATH}
- cp -r ${SYNTH_SCRIPT_PATH}/cva6/ ../
- git apply ${SYNTH_SCRIPT_PATH}/patches/*.patch
- echo $SYN_DCSHELL_BASHRC; source $SYN_DCSHELL_BASHRC
- cp -r ${SYNTH_FLOW} ./
- python3 ${SYNTH_SCRIPT_PATH}/scharm -p configs/modules/CVA6.yml --runner=True --compaign="only-synth"
- export NAND2_AREA=$(cat pd/synth/cva6_${DV_TARGET}/nand2area.txt)
- python3 .gitlab-ci/scripts/report_synth.py pd/synth/cva6_${DV_TARGET}/$PERIOD/reports/cva6_${DV_TARGET}_synth_area.rpt pd/synth/cva6_${DV_TARGET}/$PERIOD/reports/cva6_${DV_TARGET}_synthesis.log
- mv ${SYNTH_SCRIPT_PATH}/artifacts/ artifacts/artifacts_synth/
- mv pd/synth/cva6_${DV_TARGET}/ artifacts/
- mv pd/synth/cva6_${DV_TARGET}_synth.v artifacts/
- mv pd/synth/cva6_${DV_TARGET}_synth.sdf artifacts/
fpga-build:
extends:
- .synthesis_test
variables:
DASHBOARD_JOB_TITLE: "FPGA Build $TARGET"
DASHBOARD_JOB_DESCRIPTION: "Test of FPGA build flow"
DASHBOARD_SORT_INDEX: 9
DASHBOARD_JOB_CATEGORY: "Synthesis"
TARGET: cv32a6_imac_sv32
script:
- source $VIVADO_SETUP
- source ./verif/sim/setup-env.sh
- mkdir -p artifacts/logs
- make fpga target=$TARGET |& tail -20 > artifacts/logs/logfile.log.tail
- mkdir -p artifacts/reports
- mv corev_apu/fpga/work-fpga/ariane_xilinx.bit artifacts/ariane_xilinx_$TARGET.bit
- python3 .gitlab-ci/scripts/report_fpga.py corev_apu/fpga/reports/ariane.utilization.rpt artifacts/logs/logfile.log.tail
.regress_test:
stage: heavy tests
before_script:
- !reference [.fe_smoke_test, before_script]
rules: &on_regress
- if: $CI_KIND == "regress"
- if: $CI_KIND == "verif"
- when: manual
allow_failure: true
dhrystone:
extends:
- .regress_test
variables:
DASHBOARD_JOB_TITLE: "Dhrystone"
DASHBOARD_JOB_DESCRIPTION: "Performance indicator"
DASHBOARD_SORT_INDEX: 5
DASHBOARD_JOB_CATEGORY: "Performance"
script:
- bash verif/regress/dhrystone.sh
- python3 .gitlab-ci/scripts/report_benchmark.py --dhrystone verif/sim/out_*/veri-testharness_sim/dhrystone_main.*.log
riscv_arch_test:
extends:
- .regress_test
variables:
DASHBOARD_JOB_TITLE: "arch_test $DV_TARGET"
DASHBOARD_JOB_DESCRIPTION: "Compliance regression suite"
DASHBOARD_SORT_INDEX: 0
DASHBOARD_JOB_CATEGORY: "Test suites"
DV_SIMULATORS: "veri-testharness,spike"
COLLECT_SIMU_LOGS: 1
script: source verif/regress/dv-riscv-arch-test.sh
after_script: *simu_after_script
compliance:
extends:
- .regress_test
variables:
DASHBOARD_JOB_TITLE: "Compliance $DV_TARGET"
DASHBOARD_JOB_DESCRIPTION: "Compliance regression suite"
DASHBOARD_SORT_INDEX: 2
DASHBOARD_JOB_CATEGORY: "Test suites"
DV_SIMULATORS: "veri-testharness,spike"
COLLECT_SIMU_LOGS: 1
script: source verif/regress/dv-riscv-compliance.sh
after_script: *simu_after_script
riscv-tests-v:
extends:
- .regress_test
variables:
DASHBOARD_JOB_TITLE: "Riscv-test $DV_TARGET (virtual)"
DASHBOARD_JOB_DESCRIPTION: "Riscv-test regression suite (virtual)"
DASHBOARD_SORT_INDEX: 3
DASHBOARD_JOB_CATEGORY: "Test suites"
DV_SIMULATORS: "veri-testharness,spike"
DV_TARGET: cv64a6_imafdc_sv39
DV_TESTLISTS: "../tests/testlist_riscv-tests-$DV_TARGET-v.yaml"
COLLECT_SIMU_LOGS: 1
script: source verif/regress/dv-riscv-tests.sh
after_script: *simu_after_script
riscv-tests-p:
extends:
- .regress_test
variables:
DASHBOARD_JOB_TITLE: "Riscv-test $DV_TARGET (physical)"
DASHBOARD_JOB_DESCRIPTION: "Riscv-test regression suite (physical)"
DASHBOARD_SORT_INDEX: 4
DASHBOARD_JOB_CATEGORY: "Test suites"
DV_SIMULATORS: "veri-testharness,spike"
DV_TESTLISTS: "../tests/testlist_riscv-tests-$DV_TARGET-p.yaml"
COLLECT_SIMU_LOGS: 1
script: source verif/regress/dv-riscv-tests.sh
after_script: *simu_after_script
.verif_test:
extends:
- .regress_test
rules: &on_verif
- if: $CI_KIND == "verif"
allow_failure: true
- when: manual
allow_failure: true
timeout: 6h
mmu_sv32_tests:
extends:
- .verif_test
variables:
DASHBOARD_JOB_TITLE: "mmu_sv32_tests $DV_TARGET"
DASHBOARD_JOB_DESCRIPTION: "MMU SV32 regression suite"
DASHBOARD_SORT_INDEX: 0
DASHBOARD_JOB_CATEGORY: "Test suites"
DV_SIMULATORS: "veri-testharness,spike"
DV_TARGET: cv32a6_imac_sv32
script: source verif/regress/dv-riscv-mmu-sv32-test.sh
after_script: *simu_after_script
generated_tests:
extends:
- .verif_test
variables:
DASHBOARD_SORT_INDEX: 11
DASHBOARD_JOB_CATEGORY: "Code Coverage"
parallel:
matrix:
- list_num: 1
DASHBOARD_JOB_TITLE: "Generated Random Arithmetic tests"
DASHBOARD_JOB_DESCRIPTION: "Generate Random Arithmetic tests using CVA6-DV"
- list_num: 2
DASHBOARD_JOB_TITLE: "Generated Hazard Arithmetic tests"
DASHBOARD_JOB_DESCRIPTION: "Generate Hazard register (RAW) Arithmetic tests using CVA6-DV"
- list_num: 3
DASHBOARD_JOB_TITLE: "Generated Illegal instruction tests"
DASHBOARD_JOB_DESCRIPTION: "Generate Random Illegal instruction tests using CVA6-DV"
- list_num: 4
DASHBOARD_JOB_TITLE: "Generated MMU tests"
DASHBOARD_JOB_DESCRIPTION: "Generate Random MMU tests using CVA6-DV"
- list_num: 5
DASHBOARD_JOB_TITLE: "Generated Random Load_store tests"
DASHBOARD_JOB_DESCRIPTION: "Generate Random Load_store tests using CVA6-DV"
- list_num: 6
DASHBOARD_JOB_TITLE: "Generated Jump tests"
DASHBOARD_JOB_DESCRIPTION: "Generate Random Arithmetic Jump tests using CVA6-DV"
script:
- mkdir -p artifacts/coverage
- source verif/regress/dv-generated-tests.sh
- mv verif/sim/vcs_results/default/vcs.d/simv.vdb artifacts/coverage
- mv verif/sim/seedlist.yaml artifacts/coverage
- python3 .gitlab-ci/scripts/report_pass.py
generated_xif_tests:
extends:
- .verif_test
variables:
DASHBOARD_SORT_INDEX: 12
DASHBOARD_JOB_CATEGORY: "Code Coverage"
parallel:
matrix:
- list_num: 1
DASHBOARD_JOB_TITLE: "Generated Random xif tests"
DASHBOARD_JOB_DESCRIPTION: "Generate Random tests for cvxif using CVA6-DV"
script:
- mkdir -p artifacts/coverage
- source verif/regress/dv-generated-xif-tests.sh
- mv verif/sim/vcs_results/default/vcs.d/simv.vdb artifacts/coverage
- mv verif/sim/seedlist.yaml artifacts/coverage
- python3 .gitlab-ci/scripts/report_pass.py
directed_isacov-tests:
extends:
- .verif_test
variables:
DASHBOARD_SORT_INDEX: 13
DASHBOARD_JOB_CATEGORY: "Functional Coverage"
parallel:
matrix:
- list_num: 0
DASHBOARD_JOB_TITLE: "Directed tests"
DASHBOARD_JOB_DESCRIPTION: "Execute directed tests to improve functional coverage of ISA"
script:
- mkdir -p artifacts/coverage
- source verif/regress/dv-generated-tests.sh
- mv verif/sim/vcs_results/default/vcs.d/simv.vdb artifacts/coverage
- python3 .gitlab-ci/scripts/report_pass.py
csr_embedded_tests:
extends:
- .verif_test
variables:
DASHBOARD_JOB_TITLE: "csr_embedded test $DV_TARGET"
DASHBOARD_JOB_DESCRIPTION: "CSR Test generated using UVM-REG"
DASHBOARD_SORT_INDEX: 15
DASHBOARD_JOB_CATEGORY: "CSR tests"
DV_SIMULATORS: "vcs-uvm"
script:
- mkdir -p artifacts/coverage
- source verif/regress/dv-csr-embedded-tests.sh
- mv verif/sim/vcs_results/default/vcs.d/simv.vdb artifacts/coverage
- python3 .gitlab-ci/scripts/report_pass.py
.backend_test:
stage: backend tests
before_script:
- mkdir -p artifacts/{reports,logs}
- python3 .gitlab-ci/scripts/report_fail.py
simu-gate:
timeout : 4 hours
extends:
- .backend_test
needs:
- build_tools
- asic-synthesis
parallel:
matrix:
- SIMU_PERIOD: ["20"] # 50 Mhz
PERIOD: ["15"] # 66 Mhz
variables:
DASHBOARD_JOB_TITLE: "Gate Level Simulation $DV_TARGET"
DASHBOARD_JOB_DESCRIPTION: "Tests to check netlist from ASIC synthesis and power consumption over different patterns"
DASHBOARD_SORT_INDEX: 6
DASHBOARD_JOB_CATEGORY: "Post Synthesis"
DV_TARGET: cv32a65x
TARGET: $DV_TARGET
script:
- git -C verif/core-v-verif fetch --unshallow
- mkdir -p tools
- mv artifacts/tools/spike tools
- echo $SYN_VCS_BASHRC; source $SYN_VCS_BASHRC
- echo $PERIOD
- source ./verif/sim/setup-env.sh
- git clone ${SYNTH_SCRIPT} ${SYNTH_SCRIPT_PATH}
- cp -r ${SYNTH_SCRIPT_PATH}/cva6/ ../
- git apply ${SYNTH_SCRIPT_PATH}/patches/*.patch
- source verif/regress/install-riscv-tests.sh
- mv artifacts/cva6_${DV_TARGET} pd/synth/
- mv artifacts/cva6_${DV_TARGET}_synth.v pd/synth/
- mv artifacts/cva6_${DV_TARGET}_synth.sdf pd/synth/
- mkdir -p pd/synth/cva6_${DV_TARGET}/outputs/
- python3 ${SYNTH_SCRIPT_PATH}/scharm -p configs/modules/CVA6.yml --runner=True --compaign="simu-gate" --name=$PROG_NAME
- mv ${SYNTH_SCRIPT_PATH}/artifacts/ artifacts/artifacts_gate/
after_script: *simu_after_script
fpga-boot:
extends:
- .backend_test
tags: [fpga,shell]
needs:
- build_tools
- fpga-build
variables:
DASHBOARD_JOB_TITLE: "FPGA Linux32 Boot "
DASHBOARD_JOB_DESCRIPTION: "Test of Linux 32 bits boot on FPGA Genesys2"
DASHBOARD_SORT_INDEX: 10
DASHBOARD_JOB_CATEGORY: "Synthesis"
script:
- source ./verif/sim/setup-env.sh
- source $VIVADO2022_SETUP
- mkdir -p corev_apu/fpga/work-fpga
- mv artifacts/ariane_xilinx_cv32a6_imac_sv32.bit corev_apu/fpga/work-fpga/ariane_xilinx.bit
- cd corev_apu/fpga/scripts
- source check_fpga_boot.sh
- cd -
- python3 .gitlab-ci/scripts/report_fpga_boot.py corev_apu/fpga/scripts/fpga_boot.rpt
retry: 1
code_coverage-report:
extends:
- .backend_test
needs:
- generated_tests
- directed_isacov-tests
- generated_xif_tests
- csr_embedded_tests
variables:
DASHBOARD_JOB_TITLE: "Report merge coverage"
DASHBOARD_JOB_DESCRIPTION: "Report merge coverage of generated tests"
DASHBOARD_SORT_INDEX: 14
DASHBOARD_JOB_CATEGORY: "Code Coverage"
script:
- echo $SYN_VCS_BASHRC; source $SYN_VCS_BASHRC
- mkdir -p artifacts/cov_reports/
- mkdir -p verif/sim/vcs_results/default/vcs.d
- mv artifacts/coverage/simv.vdb verif/sim/vcs_results/default/vcs.d/
- mv artifacts/coverage/seedlist.yaml verif/sim/seedlist.yaml
- make -C verif/sim generate_cov_dash
- mv verif/sim/urgReport artifacts/cov_reports/
- python3 .gitlab-ci/scripts/report_coverage.py artifacts/cov_reports/urgReport/hierarchy.txt artifacts/cov_reports/urgReport/"feature.CVA6 Verification Master Plan1.7.-1268999905.txt"
check gitlab jobs status:
stage: find failures
rules:
- if: $DASHBOARD_URL && $CI_KIND != "none"
when: on_failure
variables:
DASHBOARD_JOB_TITLE: "Environment check"
DASHBOARD_JOB_DESCRIPTION: "Detect environment issues"
DASHBOARD_SORT_INDEX: 0
DASHBOARD_JOB_CATEGORY: "Environment"
GIT_SUBMODULE_STRATEGY: none
script:
- rm -rf artifacts/
- mkdir -p artifacts/reports
- python3 .gitlab-ci/scripts/report_envfail.py
merge reports:
stage: report
variables:
GIT_SUBMODULE_STRATEGY: none
rules:
- if: $DASHBOARD_URL && $CI_KIND != "none"
when: always
script:
- mkdir -p artifacts/reports
- ls -al artifacts/reports
- python3 .gitlab-ci/scripts/merge_job_reports.py artifacts/reports pipeline_report_$CI_PIPELINE_ID.yml
artifacts:
when: always
paths:
- "artifacts/reports/pipeline_report_$CI_PIPELINE_ID.yml"