blob: b113a3ce344d666356b33042c834ba8948ab40ac [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
DV_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
GEN_DIR := $(realpath ${DV_DIR}/../../vendor/google_riscv-dv)
TOOLCHAIN := ${RISCV_TOOLCHAIN}
OUT := "${DV_DIR}/out"
# Run time options for the instruction generator
GEN_OPTS :=
# Run time options for ibex RTL simulation
SIM_OPTS :=
# Enable waveform dumping
WAVES := 1
# Enable coverage dump
COV := 0
# RTL simulator
SIMULATOR := "vcs"
# ISS (spike, ovpsim)
ISS := "spike"
# ISA
ISA := "rv32imc"
# Test name (default: full regression)
TEST := "all"
# Seed for instruction generator and RTL simulation
SEED := -1
# Verbose logging
VERBOSE :=
# Number of iterations for each test, assign a non-zero value to override the
# iteration count in the test list
ITERATIONS := 0
# LSF CMD
LSF_CMD :=
# Generator timeout limit in seconds
TIMEOUT := 1800
# Privileged CSR YAML description file
CSR_FILE := ${DV_DIR}/riscv_dv_extension/csr_description.yaml
# Pass/fail signature address at the end of test
SIGNATURE_ADDR := 8ffffffc
SHELL=/bin/bash
export PRJ_DIR:= $(realpath ${DV_DIR}/../../..)
.PHONY: rtl_sim clean gcc_compile iss_sim
all: clean gen gcc_compile iss_sim compile rtl_sim post_compare
clean:
rm -rf ${OUT}
# Common options for all targets
COMMON_OPTS:=--seed=${SEED} \
--test=${TEST} \
--testlist=${DV_DIR}/riscv_dv_extension/testlist.yaml \
--iterations=${ITERATIONS}
ifeq ($(VERBOSE), 1)
COMMON_OPTS+=--verbose
endif
# Options used for privileged CSR test generation
CSR_OPTS=--csr_yaml=${CSR_FILE} \
--isa=${ISA} \
--end_signature_addr=0x${SIGNATURE_ADDR}
# Generate random instructions
.SILENT gen:
mkdir -p ${OUT}
cd ${GEN_DIR}; \
python3 ./run.py \
--output=${OUT}/instr_gen ${GEN_OPTS} \
--steps=gen \
--gen_timeout=${TIMEOUT} \
--lsf_cmd="${LSF_CMD}" \
${COMMON_OPTS} \
${CSR_OPTS} \
--cmp_opts="+define+RISCV_CORE_SETTING=${DV_DIR}/riscv_dv_extension/ibex_core_setting.sv \
+define+RISCV_DV_EXT_FILE_LIST=${DV_DIR}/riscv_dv_extension/flist \
+incdir+${DV_DIR}/riscv_dv_extension/ " \
--sim_opts="+uvm_set_type_override=riscv_asm_program_gen,ibex_asm_program_gen \
+signature_addr=${SIGNATURE_ADDR}";
# Compile the generated assmebly programs to ELF/BIN
gcc_compile:
cd ${GEN_DIR}; \
python3 ./run.py \
--o=${OUT}/instr_gen ${GEN_OPTS} \
--steps=gcc_compile \
${COMMON_OPTS} \
--gcc_opts=-mno-strict-align \
--isa=${ISA} \
--mabi=ilp32
# ISS simulation
iss_sim:
cd ${GEN_DIR}; \
python3 ./run.py \
--o=${OUT}/instr_gen ${GEN_OPTS} \
--steps=iss_sim \
${COMMON_OPTS} \
--iss=${ISS} \
--isa=${ISA} \
# Compile ibex core TB
compile:
mkdir -p ${OUT}/rtl_sim
python3 ./sim.py \
--o=${OUT} \
--steps=compile \
${COMMON_OPTS} \
--simulator=${SIMULATOR} \
--en_cov=${COV} \
--en_wave=${WAVES} \
# Run ibex RTL simulation with random instructions
rtl_sim:
mkdir -p ${OUT}/rtl_sim
python3 ./sim.py \
--o=${OUT} \
--steps=sim \
${COMMON_OPTS} \
--simulator=${SIMULATOR} \
--en_cov ${COV} \
--en_wave ${WAVES} \
--sim_opts="+signature_addr=0x${SIGNATURE_ADDR}" \
${SIM_OPTS}
# Compare the regression result between ISS and RTL sim
post_compare:
rm -rf ${OUT}/regr.log
python3 ./sim.py \
--o=${OUT} \
--steps=compare \
${COMMON_OPTS} \
--simulator=${SIMULATOR} \
--iss=${ISS}
# Load verdi to review coverage
cov:
cd ${OUT}/rtl_sim; verdi -cov -covdir test.vdb &