From 4bc5cfa22e59481c6e762990dcbd5963b3a165bc Mon Sep 17 00:00:00 2001 From: dd-baoshan Date: Wed, 19 Jun 2024 09:19:35 +0800 Subject: [PATCH 1/2] Fix issue found in random test Signed-off-by: dd-baoshan --- cv32e40p/env/uvme/cov/uvme_rv32x_hwloop_covg.sv | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/cv32e40p/env/uvme/cov/uvme_rv32x_hwloop_covg.sv b/cv32e40p/env/uvme/cov/uvme_rv32x_hwloop_covg.sv index d87916cec9..238d6bee1e 100644 --- a/cv32e40p/env/uvme/cov/uvme_rv32x_hwloop_covg.sv +++ b/cv32e40p/env/uvme/cov/uvme_rv32x_hwloop_covg.sv @@ -908,6 +908,7 @@ class uvme_rv32x_hwloop_covg # ( if (is_init_mmode_mret && pending_irq_ack) begin is_init_mmode_mret = 0; pending_irq_ack = 0; + wait(0); // stop this thread end end // INIT_MACHINE_MODE forever begin : IRQ_PERIOD @@ -963,6 +964,8 @@ class uvme_rv32x_hwloop_covg # ( enter_hwloop_sub_cnt++; if (is_trap && is_dbg_mode && !cv32e40p_rvvi_vif.csr_dcsr_step && enter_hwloop_sub_cnt == 1) begin : TRAP_DUETO_DBG_ENTRY // exception trap and debug are b2b cycles (except debug step) has_pending_trap_due2_dbg = 1; + enter_hwloop_sub = 0; enter_hwloop_sub_cnt = 0; + is_ebreak = 0; is_ecall = 0; is_illegal = 0; is_trap = 0; end // TRAP_DUETO_DBG_ENTRY else if (pc_is_mtvec_addr() && !is_mcause_irq()) begin : EXCEPTION_ENTRY for (int i=0; i Date: Wed, 19 Jun 2024 10:50:33 +0800 Subject: [PATCH 2/2] Fix zfinx_reserved_gpr constraint Signed-off-by: dd-baoshan --- cv32e40p/env/corev-dv/cv32e40p_asm_program_gen.sv | 2 +- cv32e40p/env/corev-dv/cv32e40p_instr_gen_config.sv | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cv32e40p/env/corev-dv/cv32e40p_asm_program_gen.sv b/cv32e40p/env/corev-dv/cv32e40p_asm_program_gen.sv index 66bd44a981..6b7109dceb 100644 --- a/cv32e40p/env/corev-dv/cv32e40p_asm_program_gen.sv +++ b/cv32e40p/env/corev-dv/cv32e40p_asm_program_gen.sv @@ -430,7 +430,7 @@ class cv32e40p_asm_program_gen extends corev_asm_program_gen; //gprs for floating point instructions if(RV32ZFINX inside {supported_isa}) begin foreach(corev_cfg.zfinx_reserved_gpr[i]) begin - if (corev_cfg.zfinx_reserved_gpr[i] inside {ZERO, RA, SP, GP, TP}) continue; + if (corev_cfg.zfinx_reserved_gpr[i] inside {ZERO, corev_cfg.ra, corev_cfg.sp, GP, corev_cfg.tp}) continue; imm = get_rand_spf_value(); reg_name = corev_cfg.zfinx_reserved_gpr[i].name(); str = $sformatf("%0sli%0s %0s, 0x%0x", indent, indent, reg_name.tolower(), imm); diff --git a/cv32e40p/env/corev-dv/cv32e40p_instr_gen_config.sv b/cv32e40p/env/corev-dv/cv32e40p_instr_gen_config.sv index 57ae7c5c58..ca9b41b587 100644 --- a/cv32e40p/env/corev-dv/cv32e40p_instr_gen_config.sv +++ b/cv32e40p/env/corev-dv/cv32e40p_instr_gen_config.sv @@ -158,7 +158,7 @@ class cv32e40p_instr_gen_config extends riscv_instr_gen_config; zfinx_reserved_gpr.size() == num_zfinx_reserved_reg; unique {zfinx_reserved_gpr}; foreach(zfinx_reserved_gpr[i]) { - !(zfinx_reserved_gpr[i] inside {ZERO, RA, SP, GP, TP, S0, S1, A0, A1, A2, A3, A4, A5}); + !(zfinx_reserved_gpr[i] inside {ZERO, ra, sp, GP, tp, S0, S1, A0, A1, A2, A3, A4, A5}); (zfinx_reserved_gpr[i] != dp); (zfinx_reserved_gpr[i] != str_rs1); (zfinx_reserved_gpr[i] != str_rs3);