Remove ISA, ISA_ISS from Makefile

Move their calculation into the Python scripts, which means that we
don't have to make sure everything is kept in sync.
This commit is contained in:
Rupert Swarbrick 2022-04-26 15:35:49 +01:00 committed by Canberk Topal
parent b63ab3b120
commit ecdb1e01f6
7 changed files with 63 additions and 24 deletions

View file

@ -46,9 +46,6 @@ COV := 0
SIMULATOR := vcs
# ISS (spike, ovpsim)
ISS := spike
# ISA
ISA := rv32imcb
ISA_ISS := rv32imc_Zba_Zbb_Zbc_Zbs_Xbitmanip
# Test name (default: full regression)
TEST := all
TESTLIST := riscv_dv_extension/testlist.yaml
@ -102,7 +99,6 @@ clean:
# Options used for privileged CSR test generation
CSR_OPTS=--csr_yaml=${CSR_FILE} \
--isa="${ISA}" \
--end_signature_addr=${SIGNATURE_ADDR}
# This is a list of directories that are automatically generated by some
@ -198,7 +194,7 @@ ts-dirs := $(foreach ts,$(tests-and-seeds),$(RUN-DIR)/$(ts)/)
# This depends on the vendored in code in $(GEN_DIR). It also depends on the
# values of the following Makefile variables (we want to regenerate things if,
# for example, the simulator changes).
instr-gen-build-var-deps := SIMULATOR ISA CSR_OPTS \
instr-gen-build-var-deps := SIMULATOR CSR_OPTS \
SIGNATURE_ADDR PMP_REGIONS PMP_GRANULARITY
# To achieve this variable tracking, we dump each of the variables to a Makefile
# fragment and try to load it up the next time around. This done with the
@ -241,9 +237,9 @@ $(BUILD-DIR)/instr-gen/.compile.stamp: \
$(verb)scripts/build-instr-gen.py \
$(verb-arg) \
--simulator $(SIMULATOR) \
--ibex-config $(IBEX_CONFIG) \
--end-signature-addr $(SIGNATURE_ADDR) \
--output $(BUILD-DIR)/instr-gen \
--isa $(ISA)
--output $(BUILD-DIR)/instr-gen
$(call dump-vars,$(ig-build-vars-path),gen,$(instr-gen-build-var-deps))
@touch $@
@ -266,7 +262,7 @@ $(test-asms): \
--end-signature-addr $(SIGNATURE_ADDR) \
--output-dir $(@D) \
--gen-build-dir $(BUILD-DIR)/instr-gen \
--isa $(ISA) \
--ibex-config $(IBEX_CONFIG) \
--test-dot-seed $* \
--pmp-num-regions $(PMP_REGIONS) \
--pmp-granularity $(PMP_GRANULARITY)
@ -294,7 +290,7 @@ $(test-bins): \
$(verb-arg) \
--input $(RUN-DIR)/$*/test.S \
--output $@ \
--isa $(ISA) \
--ibex-config $(IBEX_CONFIG) \
--test-dot-seed $*
.PHONY: instr_gen_compile
@ -315,10 +311,10 @@ $(iss-sim-logs): \
$(RUN-DIR)/%/test.bin scripts/run-iss.py
$(verb)scripts/run-iss.py \
$(verb-arg) \
--ibex-config $(IBEX_CONFIG) \
--iss=$(ISS) \
--input=$(RUN-DIR)/$*/test.o \
--output=$@ \
--isa=$(ISA_ISS)
--output=$@
.PHONY: iss_run
iss_run: $(iss-sim-logs)

View file

@ -9,7 +9,7 @@ import os
import shutil
import sys
from scripts_lib import run_one, start_riscv_dv_run_cmd
from scripts_lib import run_one, start_riscv_dv_run_cmd, get_isas_for_config
def main() -> int:
@ -18,7 +18,7 @@ def main() -> int:
parser.add_argument('--simulator', required=True)
parser.add_argument('--end-signature-addr', required=True)
parser.add_argument('--output', required=True)
parser.add_argument('--isa', required=True)
parser.add_argument('--ibex-config', required=True)
args = parser.parse_args()
@ -32,11 +32,13 @@ def main() -> int:
os.makedirs(args.output, exist_ok=True)
isa, iss_isa = get_isas_for_config(args.ibex_config)
cmd = (start_riscv_dv_run_cmd(args.verbose) +
['--co', '--steps=gen',
'--simulator', args.simulator,
'--output', args.output,
'--isa', args.isa,
'--isa', isa,
'--end_signature_addr', args.end_signature_addr])
log_path = os.path.join(args.output, 'build.log')

View file

@ -10,7 +10,8 @@ import shlex
import sys
import tempfile
from scripts_lib import read_test_dot_seed, start_riscv_dv_run_cmd, run_one
from scripts_lib import (read_test_dot_seed, start_riscv_dv_run_cmd,
get_isas_for_config, run_one)
def main() -> int:
@ -18,13 +19,14 @@ def main() -> int:
parser.add_argument('--verbose', action='store_true')
parser.add_argument('--input', required=True)
parser.add_argument('--output', required=True)
parser.add_argument('--isa', required=True)
parser.add_argument('--ibex-config', required=True)
parser.add_argument('--test-dot-seed',
type=read_test_dot_seed, required=True)
args = parser.parse_args()
isa, iss_isa = get_isas_for_config(args.ibex_config)
testname, seed = args.test_dot_seed
if not args.output.endswith('.bin'):
@ -51,7 +53,7 @@ def main() -> int:
'--test', testname,
'--start_seed', str(seed),
'--iterations', '1',
'--isa', args.isa,
'--isa', isa,
'--debug', orig_list],
redirect_stdstreams=out_riscv_dv_path)
if dv_ret:

View file

@ -13,7 +13,8 @@ import sys
import tempfile
from typing import List
from scripts_lib import read_test_dot_seed, start_riscv_dv_run_cmd, run_one
from scripts_lib import (read_test_dot_seed, start_riscv_dv_run_cmd,
get_isas_for_config, run_one)
def main() -> int:
@ -23,7 +24,7 @@ def main() -> int:
parser.add_argument('--end-signature-addr', required=True)
parser.add_argument('--output-dir', required=True)
parser.add_argument('--gen-build-dir', required=True)
parser.add_argument('--isa', required=True)
parser.add_argument('--ibex-config', required=True)
parser.add_argument('--test-dot-seed',
type=read_test_dot_seed, required=True)
@ -33,6 +34,8 @@ def main() -> int:
args = parser.parse_args()
isa, iss_isa = get_isas_for_config(args.ibex_config)
testname, seed = args.test_dot_seed
inst_overrides = [
@ -65,7 +68,7 @@ def main() -> int:
['--so', '--steps=gen',
'--output', placeholder,
'--simulator', args.simulator,
'--isa', args.isa,
'--isa', isa,
'--test', testname,
'--start_seed', str(seed),
'--iterations', '1',

View file

@ -8,7 +8,7 @@ import argparse
import os
import sys
from scripts_lib import run_one
from scripts_lib import get_isas_for_config, run_one
def main() -> int:
@ -17,10 +17,12 @@ def main() -> int:
parser.add_argument('--iss', required=True)
parser.add_argument('--input', required=True)
parser.add_argument('--output', required=True)
parser.add_argument('--isa', required=True)
parser.add_argument('--ibex-config', required=True)
args = parser.parse_args()
isa, iss_isa = get_isas_for_config(args.ibex_config)
# riscv-dv knows how to run an ISS simulation (see yaml/iss.yaml in the
# vendored directory), but it has definite (and inconvenient!) opinions
# about where files should end up. Rather than fight with it, let's just
@ -39,7 +41,7 @@ def main() -> int:
else:
spike = 'spike'
cmd = [spike, '--log-commits', '--isa', args.isa, '-l', args.input]
cmd = [spike, '--log-commits', '--isa', iss_isa, '-l', args.input]
return run_one(args.verbose,
cmd,
redirect_stdstreams=args.output)

View file

@ -12,10 +12,17 @@ import sys
from typing import Dict, List, Optional, Tuple
THIS_DIR = os.path.dirname(__file__)
IBEX_ROOT = os.path.join(THIS_DIR, 4 * '../')
IBEX_ROOT = os.path.normpath(os.path.join(THIS_DIR, 4 * '../'))
RISCV_DV_ROOT = os.path.normpath(os.path.join(IBEX_ROOT,
'vendor/google_riscv-dv'))
_OLD_SYS_PATH = sys.path
try:
sys.path = [os.path.join(IBEX_ROOT, 'util')] + sys.path
from ibex_config import parse_config
finally:
sys.path = _OLD_SYS_PATH
TestAndSeed = Tuple[str, int]
@ -99,3 +106,28 @@ def read_test_dot_seed(arg: str) -> TestAndSeed:
.format(arg))
return (match.group(1), int(match.group(2), 10))
def get_isas_for_config(ibex_cfg: str) -> Tuple[str, str]:
'''Get ISA and ISS_ISA keys for the given Ibex config'''
yaml_path = os.path.join(IBEX_ROOT, "ibex_configs.yaml")
cfg = parse_config(ibex_cfg, yaml_path)
# NOTE: This logic should match the code in the get_isa_string() function
# in core_ibex/tests/core_ibex_base_test.sv: keep them in sync!
has_multiplier = cfg.rv32m != 'ibex_pkg::RV32MNone'
base_isa = 'rv32{}{}c'.format('e' if cfg.rv32e else 'i',
'm' if has_multiplier else '')
bitmanip_mapping = {
'ibex_pkg::RV32BNone': [],
'ibex_pkg::RV32BBalanced': ['Zba', 'Zbb', 'Zbs', 'Xbitmanip'],
'ibex_pkg::RV32BOTEarlGrey': ['Zba', 'Zbb', 'Zbc', 'Zbs', 'Xbitmanip'],
'ibex_pkg::RV32BFull': ['Zba', 'Zbb', 'Zbc', 'Zbs', 'Xbitmanip'],
}
bitmanip_isa = bitmanip_mapping.get(cfg.rv32b)
if bitmanip_isa is None:
raise ValueError(f'Unknown RV32B value ({cfg.rv32b}) in config YAML')
return (base_isa, '_'.join([base_isa] + bitmanip_isa))

View file

@ -39,6 +39,8 @@ class core_ibex_base_test extends uvm_test;
irq_collected_port = new("irq_collected_port_test", this);
endfunction
// NOTE: This logic should match the code in the get_isas_for_config() function in
// core_ibex/scripts/scripts_lib.py: keep them in sync!
function string get_isa_string();
bit RV32E;
rv32m_e RV32M;