mirror of
https://github.com/openhwgroup/cva6.git
synced 2025-04-20 04:07:36 -04:00
ISA functional coverage : Add directed tests (#1855)
This commit is contained in:
parent
cedc21bb35
commit
5dd04829e3
6 changed files with 675 additions and 189 deletions
|
@ -137,6 +137,6 @@ done
|
|||
j=0
|
||||
elif [[ "$list_num" = 0 ]];then
|
||||
printf "==== Execute Directed tests to improve functional coverage of isa, by hitting corners !!! ====\n\n"
|
||||
python3 cva6.py --testlist=$DIRECTED_TESTLIST --iss_yaml cva6.yaml --target $DV_TARGET --iss=vcs-uvm,spike --priv=m
|
||||
python3 cva6.py --testlist=$DIRECTED_TESTLIST --iss_yaml cva6.yaml --isa_extension="zcb" --target $DV_TARGET --iss=vcs-uvm,spike --priv=m
|
||||
fi
|
||||
cd -
|
||||
|
|
|
@ -465,145 +465,231 @@ plan "CVA6 Verification Master Plan";
|
|||
feature RV32ZCB;
|
||||
weight = 1;
|
||||
description = "ZCB extension";
|
||||
measure Group C_MUL;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_mul_cg";
|
||||
endmeasure
|
||||
measure Group C_ZEXT_B;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_zext_b_cg";
|
||||
endmeasure
|
||||
measure Group C_SEXT_B;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_sext_b_cg";
|
||||
endmeasure
|
||||
measure Group C_ZEXT_H;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_zext_h_cg";
|
||||
endmeasure
|
||||
measure Group C_SEXT_H;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_sext_h_cg";
|
||||
endmeasure
|
||||
measure Group C_NOT;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_not_cg";
|
||||
endmeasure
|
||||
measure Group C_SB;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_sb_cg";
|
||||
endmeasure
|
||||
measure Group C_LHU;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_lhu_cg";
|
||||
endmeasure
|
||||
measure Group C_LH;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_lh_cg";
|
||||
endmeasure
|
||||
measure Group C_LBU;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_lbu_cg";
|
||||
endmeasure
|
||||
measure Group C_SH;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_sh_cg";
|
||||
endmeasure
|
||||
feature MUL;
|
||||
measure Group MUL;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_mul_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature ZEXT_B;
|
||||
measure Group ZEXT_B;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_zext_b_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature ZEXT_H;
|
||||
measure Group ZEXT_H;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_zext_h_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature SEXT_B;
|
||||
measure Group SEXT_B;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_sext_b_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature SEXT_H;
|
||||
measure Group SEXT_H;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_sext_h_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature NOT;
|
||||
measure Group NOT;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_not_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature SB;
|
||||
measure Group SB;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_sb_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature SH;
|
||||
measure Group SH;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_sh_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature LBU;
|
||||
measure Group LBU;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_lbu_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature LHU;
|
||||
measure Group LHU;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_lhu_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature LH;
|
||||
measure Group LH;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zcb_lh_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
endfeature
|
||||
feature RV32ZB;
|
||||
description = "Bitmanip extension";
|
||||
feature RV32ZBA;
|
||||
measure Group SH1ADD;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zba_sh1add_cg";
|
||||
endmeasure
|
||||
measure Group SH2ADD;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zba_sh2add_cg";
|
||||
endmeasure
|
||||
measure Group SH3ADD;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zba_sh3add_cg";
|
||||
endmeasure
|
||||
feature SH1ADD;
|
||||
measure Group SH1ADD;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zba_sh1add_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature SH2ADD;
|
||||
measure Group SH2ADD;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zba_sh2add_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature SH3ADD;
|
||||
measure Group SH3ADD;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zba_sh3add_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
endfeature
|
||||
feature RV32ZBB;
|
||||
measure Group ANDN;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_andn_cg";
|
||||
endmeasure
|
||||
measure Group CLZ;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_clz_cg";
|
||||
endmeasure
|
||||
measure Group CPOP;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_cpop_cg";
|
||||
endmeasure
|
||||
measure Group CTZ;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_ctz_cg";
|
||||
endmeasure
|
||||
measure Group MAX;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_max_cg";
|
||||
endmeasure
|
||||
measure Group MAXU;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_maxu_cg";
|
||||
endmeasure
|
||||
measure Group MIN;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_min_cg";
|
||||
endmeasure
|
||||
measure Group MINU;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_minu_cg";
|
||||
endmeasure
|
||||
measure Group ORC_B;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_orc_b_cg";
|
||||
endmeasure
|
||||
measure Group ORN;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_orn_cg";
|
||||
endmeasure
|
||||
measure Group REV8;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_rev8_cg";
|
||||
endmeasure
|
||||
measure Group ROL;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_rol_cg";
|
||||
endmeasure
|
||||
measure Group ROR;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_ror_cg";
|
||||
endmeasure
|
||||
measure Group RORI;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_rori_cg";
|
||||
endmeasure
|
||||
measure Group SEXT_B;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_sext_b_cg";
|
||||
endmeasure
|
||||
measure Group SEXT_H;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_sext_h_cg";
|
||||
endmeasure
|
||||
measure Group XNOR;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_xnor_cg";
|
||||
endmeasure
|
||||
measure Group ZEXT_H;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_zext_h_cg";
|
||||
endmeasure
|
||||
feature ANDN;
|
||||
measure Group ANDN;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_andn_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature MAX;
|
||||
measure Group MAX;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_max_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature MAXU;
|
||||
measure Group MAXU;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_maxu_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature MIN;
|
||||
measure Group MIN;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_min_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature MINU;
|
||||
measure Group MINU;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_minu_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature ORN;
|
||||
measure Group ORN;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_orn_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature ROL;
|
||||
measure Group ROL;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_rol_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature ROR;
|
||||
measure Group ROR;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_ror_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature XNOR;
|
||||
measure Group XNOR;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_xnor_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature RORI;
|
||||
measure Group RORI;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_rori_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature CLZ;
|
||||
measure Group CLZ;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_clz_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature CPOP;
|
||||
measure Group CPOP;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_cpop_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature CTZ;
|
||||
measure Group CTZ;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_ctz_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature ORC_B;
|
||||
measure Group ORC_B;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_orc_b_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature REV8;
|
||||
measure Group REV8;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_rev8_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature SEXT_B;
|
||||
measure Group SEXT_B;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_sext_b_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature SEXT_H;
|
||||
measure Group SEXT_H;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_sext_h_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature ZEXT_H;
|
||||
measure Group ZEXT_H;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbb_zext_h_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
endfeature
|
||||
feature RV32ZBC;
|
||||
measure Group CLMUL;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbc_clmul_cg";
|
||||
endmeasure
|
||||
measure Group CLMULH;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbc_clmulh_cg";
|
||||
endmeasure
|
||||
measure Group CLMULR;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbc_clmulr_cg";
|
||||
endmeasure
|
||||
feature CLMUL;
|
||||
measure Group CLMUL;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbc_clmul_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature CLMULH;
|
||||
measure Group CLMULH;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbc_clmulh_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature CLMULR;
|
||||
measure Group CLMULR;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbc_clmulr_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
endfeature
|
||||
feature RV32ZBS;
|
||||
measure Group BCLR;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_bclr_cg";
|
||||
endmeasure
|
||||
measure Group BCLRI;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_bclri_cg";
|
||||
endmeasure
|
||||
measure Group BEXT;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_bext_cg";
|
||||
endmeasure
|
||||
measure Group BEXTI;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_bexti_cg";
|
||||
endmeasure
|
||||
measure Group BINV;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_binv_cg";
|
||||
endmeasure
|
||||
measure Group BINVI;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_binvi_cg";
|
||||
endmeasure
|
||||
measure Group BSET;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_bset_cg";
|
||||
endmeasure
|
||||
measure Group BSETI;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_bseti_cg";
|
||||
endmeasure
|
||||
feature BCLR;
|
||||
measure Group BCLR;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_bclr_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature BCLRI;
|
||||
measure Group BCLRI;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_bclri_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature BINV;
|
||||
measure Group BINV;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_binv_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature BINVI;
|
||||
measure Group BINVI;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_binvi_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature BSET;
|
||||
measure Group BSET;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_bset_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature BSETI;
|
||||
measure Group BSETI;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_bseti_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature BEXT;
|
||||
measure Group BEXT;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_bext_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature BEXTI;
|
||||
measure Group BEXTI;
|
||||
source = "group instance: uvma_isacov_pkg.uvma_isacov_pkg.rv32zbs_bexti_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
endfeature
|
||||
endfeature
|
||||
feature "Instructions execution sequences";
|
||||
|
@ -615,18 +701,26 @@ plan "CVA6 Verification Master Plan";
|
|||
feature "Illegal instructions";
|
||||
weight = 1;
|
||||
Comment = "RVFI limitation issue(#1338)";
|
||||
measure Group ILLEGAL_I_EXT;
|
||||
source = "group instance: uvme_cva6_pkg.uvme_cva6_pkg.illegal_i_cg";
|
||||
endmeasure
|
||||
measure Group ILLEGAL_ZICSR_EXT;
|
||||
source = "group instance: uvme_cva6_pkg.uvme_cva6_pkg.illegal_zicsr_cg";
|
||||
endmeasure
|
||||
measure Group ILLEGAL_ZIFENCEI_EXT;
|
||||
source = "group instance: uvme_cva6_pkg.uvme_cva6_pkg.illegal_zifencei_cg";
|
||||
endmeasure
|
||||
measure Group ILLEGAL_M_EXT;
|
||||
source = "group instance: uvme_cva6_pkg.uvme_cva6_pkg.illegal_m_cg";
|
||||
endmeasure
|
||||
feature I_EXT;
|
||||
measure Group I_EXT;
|
||||
source = "group instance: uvme_cva6_pkg.uvme_cva6_pkg.illegal_i_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature M_EXT;
|
||||
measure Group M_EXT;
|
||||
source = "group instance: uvme_cva6_pkg.uvme_cva6_pkg.illegal_m_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature ZICSR_EXT;
|
||||
measure Group ZICSR_EXT;
|
||||
source = "group instance: uvme_cva6_pkg.uvme_cva6_pkg.illegal_zicsr_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
feature ZIFENCEI_EXT;
|
||||
measure Group ZIFENCEI_EXT;
|
||||
source = "group instance: uvme_cva6_pkg.uvme_cva6_pkg.illegal_zifencei_cg";
|
||||
endmeasure
|
||||
endfeature
|
||||
endfeature
|
||||
endfeature
|
||||
feature "CSR access";
|
||||
|
@ -1311,18 +1405,6 @@ plan "CVA6 Verification Master Plan";
|
|||
measure Group PMP;
|
||||
endmeasure
|
||||
endfeature
|
||||
feature MMU;
|
||||
weight = 0;
|
||||
description = "Memory Management Unit support.\nNot applicable for CVA6 Embedded configuration.";
|
||||
measure Group MMU;
|
||||
endmeasure
|
||||
endfeature
|
||||
feature "Privilege modes";
|
||||
weight = 0;
|
||||
description = "Support machine, supervisor, user and debug privilege modes.\nNot applicable for CVA6 Embedded configuration.";
|
||||
measure Group privileges;
|
||||
endmeasure
|
||||
endfeature
|
||||
endfeature
|
||||
feature "Design level";
|
||||
description = "CVA6 features for design";
|
||||
|
|
|
@ -49,18 +49,26 @@ branch5:
|
|||
remu t4, tp, a1
|
||||
c.andi a5, -1
|
||||
lui zero, 0
|
||||
# (example of) final self-check test
|
||||
li a0, 0xCAFE;
|
||||
li a1, 0xCAFE;
|
||||
xor a2, a0, a1;
|
||||
beqz a2, pass;
|
||||
beq zero, zero, branch_to
|
||||
branch_to:
|
||||
bne zero, zero, main
|
||||
blt zero, zero, main
|
||||
sub a5, zero, a0
|
||||
bge a5, zero, main
|
||||
|
||||
fail:
|
||||
# Failure post-processing (messages, ecall setup etc.)
|
||||
li a0, 0x0;
|
||||
jal exit;
|
||||
#End of test
|
||||
j test_pass
|
||||
|
||||
pass:
|
||||
# Success post-processing (messages, ecall setup etc.)
|
||||
li a0, 0x0;
|
||||
jal exit;
|
||||
test_pass:
|
||||
li ra, 0
|
||||
slli ra, ra, 1
|
||||
addi ra, ra, 1
|
||||
sw ra, tohost, t5
|
||||
self_loop: j self_loop
|
||||
|
||||
test_fail:
|
||||
li ra, 1
|
||||
slli ra, ra, 1
|
||||
addi ra, ra, 1
|
||||
sw ra, tohost, t5
|
||||
self_loop_2: j self_loop_2
|
||||
|
|
337
verif/tests/custom/isacov/isa_test.S
Normal file
337
verif/tests/custom/isacov/isa_test.S
Normal file
|
@ -0,0 +1,337 @@
|
|||
# Copyright 2024 Thales DIS SAS
|
||||
#
|
||||
# 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: Ayoub JALALI (ayoub.jalali@external.thalesgroup.com)
|
||||
|
||||
#*****************************************************************************
|
||||
# isa_test.S
|
||||
#-----------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
.globl main
|
||||
main:
|
||||
# core of the test
|
||||
|
||||
slli zero, zero, 0
|
||||
slli ra, ra, 0
|
||||
slli sp, sp, 0
|
||||
slli gp, gp, 0
|
||||
slli tp, tp, 0
|
||||
slli t0, t0, 0
|
||||
slli t1, t1, 0
|
||||
slli t2, t2, 0
|
||||
slli s0, s0, 0
|
||||
slli s1, s1, 0
|
||||
slli a0, a0, 0
|
||||
slli a1, a1, 0
|
||||
slli a2, a2, 0
|
||||
slli a3, a3, 0
|
||||
slli a4, a4, 0
|
||||
slli a5, a5, 0
|
||||
slli a6, a6, 0
|
||||
slli a7, a7, 0
|
||||
slli s2, s2, 0
|
||||
slli s3, s3, 0
|
||||
slli s4, s4, 0
|
||||
slli s5, s5, 0
|
||||
slli s6, s6, 0
|
||||
slli s7, s7, 0
|
||||
slli s8, s8, 0
|
||||
slli s9, s9, 0
|
||||
slli s10, s10, 0
|
||||
slli s11, s11, 0
|
||||
slli t3, t3, 0
|
||||
slli t4, t4, 0
|
||||
slli t5, t5, 0
|
||||
slli t6, t6, 0
|
||||
|
||||
slti zero, zero, 0
|
||||
slti ra, ra, 0
|
||||
slti sp, sp, 0
|
||||
slti gp, gp, 0
|
||||
slti tp, tp, 0
|
||||
slti t0, t0, 0
|
||||
slti t1, t1, 0
|
||||
slti t2, t2, 0
|
||||
slti s0, s0, 0
|
||||
slti s1, s1, 0
|
||||
slti a0, a0, 0
|
||||
slti a1, a1, 0
|
||||
slti a2, a2, 0
|
||||
slti a3, a3, 0
|
||||
slti a4, a4, 0
|
||||
slti a5, a5, 0
|
||||
slti a6, a6, 0
|
||||
slti a7, a7, 0
|
||||
slti s2, s2, 0
|
||||
slti s3, s3, 0
|
||||
slti s4, s4, 0
|
||||
slti s5, s5, 0
|
||||
slti s6, s6, 0
|
||||
slti s7, s7, 0
|
||||
slti s8, s8, 0
|
||||
slti s9, s9, 0
|
||||
slti s10, s10, 0
|
||||
slti s11, s11, 0
|
||||
slti t3, t3, 0
|
||||
slti t4, t4, 0
|
||||
slti t5, t5, 0
|
||||
slti t6, t6, 0
|
||||
|
||||
sltiu zero, zero, 0
|
||||
sltiu ra, ra, 0
|
||||
sltiu sp, sp, 0
|
||||
sltiu gp, gp, 0
|
||||
sltiu tp, tp, 0
|
||||
sltiu t0, t0, 0
|
||||
sltiu t1, t1, 0
|
||||
sltiu t2, t2, 0
|
||||
sltiu s0, s0, 0
|
||||
sltiu s1, s1, 0
|
||||
sltiu a0, a0, 0
|
||||
sltiu a1, a1, 0
|
||||
sltiu a2, a2, 0
|
||||
sltiu a3, a3, 0
|
||||
sltiu a4, a4, 0
|
||||
sltiu a5, a5, 0
|
||||
sltiu a6, a6, 0
|
||||
sltiu a7, a7, 0
|
||||
sltiu s2, s2, 0
|
||||
sltiu s3, s3, 0
|
||||
sltiu s4, s4, 0
|
||||
sltiu s5, s5, 0
|
||||
sltiu s6, s6, 0
|
||||
sltiu s7, s7, 0
|
||||
sltiu s8, s8, 0
|
||||
sltiu s9, s9, 0
|
||||
sltiu s10, s10, 0
|
||||
sltiu s11, s11, 0
|
||||
sltiu t3, t3, 0
|
||||
sltiu t4, t4, 0
|
||||
sltiu t5, t5, 0
|
||||
sltiu t6, t6, 0
|
||||
|
||||
sltu zero, zero, zero
|
||||
|
||||
srai zero, zero, 0
|
||||
srai ra, ra, 0
|
||||
srai sp, sp, 0
|
||||
srai gp, gp, 0
|
||||
srai tp, tp, 0
|
||||
srai t0, t0, 0
|
||||
srai t1, t1, 0
|
||||
srai t2, t2, 0
|
||||
srai s0, s0, 0
|
||||
srai s1, s1, 0
|
||||
srai a0, a0, 0
|
||||
srai a1, a1, 0
|
||||
srai a2, a2, 0
|
||||
srai a3, a3, 0
|
||||
srai a4, a4, 0
|
||||
srai a5, a5, 0
|
||||
srai a6, a6, 0
|
||||
srai a7, a7, 0
|
||||
srai s2, s2, 0
|
||||
srai s3, s3, 0
|
||||
srai s4, s4, 0
|
||||
srai s5, s5, 0
|
||||
srai s6, s6, 0
|
||||
srai s7, s7, 0
|
||||
srai s8, s8, 0
|
||||
srai s9, s9, 0
|
||||
srai s10, s10, 0
|
||||
srai s11, s11, 0
|
||||
srai t3, t3, 0
|
||||
srai t4, t4, 0
|
||||
srai t5, t5, 0
|
||||
srai t6, t6, 0
|
||||
|
||||
srli zero, zero, 0
|
||||
srli ra, ra, 0
|
||||
srli sp, sp, 0
|
||||
srli gp, gp, 0
|
||||
srli tp, tp, 0
|
||||
srli t0, t0, 0
|
||||
srli t1, t1, 0
|
||||
srli t2, t2, 0
|
||||
srli s0, s0, 0
|
||||
srli s1, s1, 0
|
||||
srli a0, a0, 0
|
||||
srli a1, a1, 0
|
||||
srli a2, a2, 0
|
||||
srli a3, a3, 0
|
||||
srli a4, a4, 0
|
||||
srli a5, a5, 0
|
||||
srli a6, a6, 0
|
||||
srli a7, a7, 0
|
||||
srli s2, s2, 0
|
||||
srli s3, s3, 0
|
||||
srli s4, s4, 0
|
||||
srli s5, s5, 0
|
||||
srli s6, s6, 0
|
||||
srli s7, s7, 0
|
||||
srli s8, s8, 0
|
||||
srli s9, s9, 0
|
||||
srli s10, s10, 0
|
||||
srli s11, s11, 0
|
||||
srli t3, t3, 0
|
||||
srli t4, t4, 0
|
||||
srli t5, t5, 0
|
||||
srli t6, t6, 0
|
||||
|
||||
csrrw zero, mscratch, zero
|
||||
csrrw ra, mscratch, ra
|
||||
csrrw sp, mscratch, sp
|
||||
csrrw gp, mscratch, gp
|
||||
csrrw tp, mscratch, tp
|
||||
csrrw t0, mscratch, t0
|
||||
csrrw t1, mscratch, t1
|
||||
csrrw t2, mscratch, t2
|
||||
csrrw s0, mscratch, s0
|
||||
csrrw s1, mscratch, s1
|
||||
csrrw a0, mscratch, a0
|
||||
csrrw a1, mscratch, a1
|
||||
csrrw a2, mscratch, a2
|
||||
csrrw a3, mscratch, a3
|
||||
csrrw a4, mscratch, a4
|
||||
csrrw a5, mscratch, a5
|
||||
csrrw a6, mscratch, a6
|
||||
csrrw a7, mscratch, a7
|
||||
csrrw s2, mscratch, s2
|
||||
csrrw s3, mscratch, s3
|
||||
csrrw s4, mscratch, s4
|
||||
csrrw s5, mscratch, s5
|
||||
csrrw s6, mscratch, s6
|
||||
csrrw s7, mscratch, s7
|
||||
csrrw s8, mscratch, s8
|
||||
csrrw s9, mscratch, s9
|
||||
csrrw s10, mscratch, s10
|
||||
csrrw s11, mscratch, s11
|
||||
csrrw t3, mscratch, t3
|
||||
csrrw t4, mscratch, t4
|
||||
csrrw t5, mscratch, t5
|
||||
csrrw t6, mscratch, t6
|
||||
|
||||
csrrs zero, mscratch, zero
|
||||
csrrs ra, mscratch, ra
|
||||
csrrs sp, mscratch, sp
|
||||
csrrs gp, mscratch, gp
|
||||
csrrs tp, mscratch, tp
|
||||
csrrs t0, mscratch, t0
|
||||
csrrs t1, mscratch, t1
|
||||
csrrs t2, mscratch, t2
|
||||
csrrs s0, mscratch, s0
|
||||
csrrs s1, mscratch, s1
|
||||
csrrs a0, mscratch, a0
|
||||
csrrs a1, mscratch, a1
|
||||
csrrs a2, mscratch, a2
|
||||
csrrs a3, mscratch, a3
|
||||
csrrs a4, mscratch, a4
|
||||
csrrs a5, mscratch, a5
|
||||
csrrs a6, mscratch, a6
|
||||
csrrs a7, mscratch, a7
|
||||
csrrs s2, mscratch, s2
|
||||
csrrs s3, mscratch, s3
|
||||
csrrs s4, mscratch, s4
|
||||
csrrs s5, mscratch, s5
|
||||
csrrs s6, mscratch, s6
|
||||
csrrs s7, mscratch, s7
|
||||
csrrs s8, mscratch, s8
|
||||
csrrs s9, mscratch, s9
|
||||
csrrs s10, mscratch, s10
|
||||
csrrs s11, mscratch, s11
|
||||
csrrs t3, mscratch, t3
|
||||
csrrs t4, mscratch, t4
|
||||
csrrs t5, mscratch, t5
|
||||
csrrs t6, mscratch, t6
|
||||
|
||||
csrrc zero, mscratch, zero
|
||||
csrrc ra, mscratch, ra
|
||||
csrrc sp, mscratch, sp
|
||||
csrrc gp, mscratch, gp
|
||||
csrrc tp, mscratch, tp
|
||||
csrrc t0, mscratch, t0
|
||||
csrrc t1, mscratch, t1
|
||||
csrrc t2, mscratch, t2
|
||||
csrrc s0, mscratch, s0
|
||||
csrrc s1, mscratch, s1
|
||||
csrrc a0, mscratch, a0
|
||||
csrrc a1, mscratch, a1
|
||||
csrrc a2, mscratch, a2
|
||||
csrrc a3, mscratch, a3
|
||||
csrrc a4, mscratch, a4
|
||||
csrrc a5, mscratch, a5
|
||||
csrrc a6, mscratch, a6
|
||||
csrrc a7, mscratch, a7
|
||||
csrrc s2, mscratch, s2
|
||||
csrrc s3, mscratch, s3
|
||||
csrrc s4, mscratch, s4
|
||||
csrrc s5, mscratch, s5
|
||||
csrrc s6, mscratch, s6
|
||||
csrrc s7, mscratch, s7
|
||||
csrrc s8, mscratch, s8
|
||||
csrrc s9, mscratch, s9
|
||||
csrrc s10, mscratch, s10
|
||||
csrrc s11, mscratch, s11
|
||||
csrrc t3, mscratch, t3
|
||||
csrrc t4, mscratch, t4
|
||||
csrrc t5, mscratch, t5
|
||||
csrrc t6, mscratch, t6
|
||||
|
||||
csrrwi zero, mscratch, 0
|
||||
csrrsi zero, mscratch, 0
|
||||
csrrci zero, mscratch, 0
|
||||
|
||||
add zero, zero, zero
|
||||
add ra, ra, zero
|
||||
add sp, sp, zero
|
||||
add gp, gp, zero
|
||||
add tp, tp, zero
|
||||
add t0, t0, zero
|
||||
add t1, t1, zero
|
||||
add t2, t2, zero
|
||||
add s0, s0, zero
|
||||
add s1, s1, zero
|
||||
add a0, a0, zero
|
||||
add a1, a1, zero
|
||||
add a2, a2, zero
|
||||
add a3, a3, zero
|
||||
add a4, a4, zero
|
||||
add a5, a5, zero
|
||||
add a6, a6, zero
|
||||
add a7, a7, zero
|
||||
add s2, s2, zero
|
||||
add s3, s3, zero
|
||||
add s4, s4, zero
|
||||
add s5, s5, zero
|
||||
add s6, s6, zero
|
||||
add s7, s7, zero
|
||||
add s8, s8, zero
|
||||
add s9, s9, zero
|
||||
add s10, s10, zero
|
||||
add s11, s11, zero
|
||||
add t3, t3, zero
|
||||
add t4, t4, zero
|
||||
add t5, t5, zero
|
||||
add t6, t6, zero
|
||||
|
||||
#End of test
|
||||
j test_pass
|
||||
|
||||
test_pass:
|
||||
li ra, 0
|
||||
slli ra, ra, 1
|
||||
addi ra, ra, 1
|
||||
sw ra, tohost, t5
|
||||
self_loop: j self_loop
|
||||
|
||||
test_fail:
|
||||
li ra, 1
|
||||
slli ra, ra, 1
|
||||
addi ra, ra, 1
|
||||
sw ra, tohost, t5
|
||||
self_loop_2: j self_loop_2
|
|
@ -45,7 +45,7 @@ main:
|
|||
li t4, 0x80000000
|
||||
li t5, 0x80000000
|
||||
li t6, 0x80000000
|
||||
lw zero, -16(zero)
|
||||
|
||||
lw sp, 1024(sp)
|
||||
lw ra, 52(ra)
|
||||
lw gp, 52(gp)
|
||||
|
@ -108,7 +108,7 @@ main:
|
|||
li t4, 0x80000000
|
||||
li t5, 0x80000000
|
||||
li t6, 0x80000000
|
||||
lh zero, -16(zero)
|
||||
|
||||
lh sp, 1024(sp)
|
||||
lh ra, 52(ra)
|
||||
lh gp, 52(gp)
|
||||
|
@ -171,7 +171,7 @@ main:
|
|||
li t4, 0x80000000
|
||||
li t5, 0x80000000
|
||||
li t6, 0x80000000
|
||||
lb zero, -16(zero)
|
||||
|
||||
lb sp, 1024(sp)
|
||||
lb ra, 52(ra)
|
||||
lb gp, 52(gp)
|
||||
|
@ -234,7 +234,7 @@ main:
|
|||
li t4, 0x80000000
|
||||
li t5, 0x80000000
|
||||
li t6, 0x80000000
|
||||
lbu zero, -16(zero)
|
||||
|
||||
lbu sp, 1024(sp)
|
||||
lbu ra, 52(ra)
|
||||
lbu gp, 52(gp)
|
||||
|
@ -297,7 +297,7 @@ main:
|
|||
li t4, 0x80000000
|
||||
li t5, 0x80000000
|
||||
li t6, 0x80000000
|
||||
lhu zero, -16(zero)
|
||||
|
||||
lhu sp, 1024(sp)
|
||||
lhu ra, 52(ra)
|
||||
lhu gp, 52(gp)
|
||||
|
@ -329,21 +329,74 @@ main:
|
|||
lhu t4, 16(t4)
|
||||
lhu t5, 12(t5)
|
||||
lhu t6, 16(t6)
|
||||
add t0, s8, t0
|
||||
addi s8, t0, -420
|
||||
lui s8, 902640
|
||||
# (example of) final self-check test
|
||||
li a0, 0xCAFE;
|
||||
li a1, 0xCAFE;
|
||||
xor a2, a0, a1;
|
||||
beqz a2, pass;
|
||||
|
||||
fail:
|
||||
# Failure post-processing (messages, ecall setup etc.)
|
||||
li a0, 0x0;
|
||||
jal exit;
|
||||
li s0, 0x80000000
|
||||
li s1, 0x80000000
|
||||
li a0, 0x80000000
|
||||
li a1, 0x80000000
|
||||
li a2, 0x80000000
|
||||
li a3, 0x80000000
|
||||
li a4, 0x80000000
|
||||
li a5, 0x80000000
|
||||
|
||||
pass:
|
||||
# Success post-processing (messages, ecall setup etc.)
|
||||
li a0, 0x0;
|
||||
jal exit;
|
||||
c.lbu s0, 2(s0)
|
||||
c.lbu s1, 2(s1)
|
||||
c.lbu a0, 2(a0)
|
||||
c.lbu a1, 2(a1)
|
||||
c.lbu a2, 2(a2)
|
||||
c.lbu a3, 2(a3)
|
||||
c.lbu a4, 2(a4)
|
||||
c.lbu a5, 2(a5)
|
||||
|
||||
li s0, 0x80000000
|
||||
li s1, 0x80000000
|
||||
li a0, 0x80000000
|
||||
li a1, 0x80000000
|
||||
li a2, 0x80000000
|
||||
li a3, 0x80000000
|
||||
li a4, 0x80000000
|
||||
li a5, 0x80000000
|
||||
|
||||
c.lh s0, 0(s0)
|
||||
c.lh s1, 0(s1)
|
||||
c.lh a0, 0(a0)
|
||||
c.lh a1, 0(a1)
|
||||
c.lh a2, 0(a2)
|
||||
c.lh a3, 0(a3)
|
||||
c.lh a4, 0(a4)
|
||||
c.lh a5, 0(a5)
|
||||
|
||||
li s0, 0x80000000
|
||||
li s1, 0x80000000
|
||||
li a0, 0x80000000
|
||||
li a1, 0x80000000
|
||||
li a2, 0x80000000
|
||||
li a3, 0x80000000
|
||||
li a4, 0x80000000
|
||||
li a5, 0x80000000
|
||||
|
||||
c.lhu s0, 0(s0)
|
||||
c.lhu s1, 0(s1)
|
||||
c.lhu a0, 0(a0)
|
||||
c.lhu a1, 0(a1)
|
||||
c.lhu a2, 0(a2)
|
||||
c.lhu a3, 0(a3)
|
||||
c.lhu a4, 0(a4)
|
||||
c.lhu a5, 0(a5)
|
||||
|
||||
#End of test
|
||||
j test_pass
|
||||
|
||||
test_pass:
|
||||
li ra, 0
|
||||
slli ra, ra, 1
|
||||
addi ra, ra, 1
|
||||
sw ra, tohost, t5
|
||||
self_loop: j self_loop
|
||||
|
||||
test_fail:
|
||||
li ra, 1
|
||||
slli ra, ra, 1
|
||||
addi ra, ra, 1
|
||||
sw ra, tohost, t5
|
||||
self_loop_2: j self_loop_2
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
asm_tests: <path_var>/custom/isacov/branch_to_zero.S
|
||||
|
||||
- test: load_reg_hazard
|
||||
iterations: 0
|
||||
iterations: 1
|
||||
path_var: TESTS_PATH
|
||||
gcc_opts: "-static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles ../tests/custom/common/syscalls.c ../tests/custom/common/crt.S -I../tests/custom/env -I../tests/custom/common -T ../tests/custom/common/test.ld -lgcc"
|
||||
asm_tests: <path_var>/custom/isacov/load_reg_hazard.S
|
||||
|
@ -48,3 +48,9 @@
|
|||
path_var: TESTS_PATH
|
||||
gcc_opts: "-static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles ../tests/custom/common/syscalls.c ../tests/custom/common/crt.S -I../tests/custom/env -I../tests/custom/common -T ../tests/custom/common/test.ld -lgcc"
|
||||
asm_tests: <path_var>/custom/isacov/seq_hazard.S
|
||||
|
||||
- test: isa_test
|
||||
iterations: 1
|
||||
path_var: TESTS_PATH
|
||||
gcc_opts: "-static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles ../tests/custom/common/syscalls.c ../tests/custom/common/crt.S -I../tests/custom/env -I../tests/custom/common -T ../tests/custom/common/test.ld -lgcc"
|
||||
asm_tests: <path_var>/custom/isacov/isa_test.S
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue