From a0b899a11a8af2bef0c6840854dde0e32d5f3180 Mon Sep 17 00:00:00 2001 From: Ingrid Haahjem Date: Thu, 20 Jul 2023 08:04:09 -0500 Subject: [PATCH 1/4] Both rd and rs1 get value of rd_rs1 in build_asm Signed-off-by: Ingrid Haahjem --- lib/support/isa_support.sv | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/support/isa_support.sv b/lib/support/isa_support.sv index d91926b478..e0608dbebd 100644 --- a/lib/support/isa_support.sv +++ b/lib/support/isa_support.sv @@ -1407,9 +1407,11 @@ asm.imm.valid = 0; end else if (name inside { C_MV }) begin asm.rd.gpr = instr.compressed.format.cr.rd_rs1.gpr; + asm.rs1.gpr = instr.compressed.format.cr.rd_rs1.gpr; asm.rs2.gpr = instr.compressed.format.cr.rs2.gpr; asm.rd.valid = 1; asm.rs2.valid = 1; + asm.rs1.valid = 1; end else if (name inside { C_ADD }) begin asm.rd.gpr = instr.compressed.format.cr.rd_rs1.gpr; asm.rs1.gpr = instr.compressed.format.cr.rd_rs1.gpr; @@ -1427,6 +1429,7 @@ CI_TYPE: begin if (name inside { C_LI, C_NOP, C_ADDI }) begin asm.rd.gpr = instr.compressed.format.ci.rd_rs1.gpr; + asm.rs1.gpr = instr.compressed.format.ci.rd_rs1.gpr; asm.imm.imm_raw = { instr.compressed.format.ci.imm_12, instr.compressed.format.ci.imm_6_2 }; asm.imm.imm_raw_sorted = { instr.compressed.format.ci.imm_12, instr.compressed.format.ci.imm_6_2 }; asm.imm.imm_type = IMM; @@ -1434,6 +1437,7 @@ asm.imm.sign_ext = 1; asm.imm.imm_value = get_imm_value_ci({ instr.compressed.format.ci.imm_12, instr.compressed.format.ci.imm_6_2 }); asm.rd.valid = 1; + asm.rs1.valid = 1; asm.imm.valid = 1; end else if (name == C_LUI) begin asm.rd.gpr = instr.compressed.format.ci.rd_rs1.gpr; From 67f921d2802f26bb39769979b949aae16ce35310 Mon Sep 17 00:00:00 2001 From: Henrik Fegran Date: Thu, 20 Jul 2023 16:24:13 +0200 Subject: [PATCH 2/4] Removed return statement causing wrong hint instruction disassembly --- lib/support/isa_support.sv | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/support/isa_support.sv b/lib/support/isa_support.sv index e0608dbebd..b10705e37b 100644 --- a/lib/support/isa_support.sv +++ b/lib/support/isa_support.sv @@ -1271,7 +1271,6 @@ if(check_if_hint(name, format, instr)) begin asm.is_hint = 1; - return asm; end casex (format) From 9b6bcdc10243c0a30666fb77a650c1dbe34da851 Mon Sep 17 00:00:00 2001 From: Henrik Fegran Date: Thu, 20 Jul 2023 16:28:16 +0200 Subject: [PATCH 3/4] Changed nonblocking assignment to blocking in always_comb block --- .../uvma_rvfi/uvma_rvfi_instr_if.sv | 72 +++++++++---------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/lib/uvm_agents/uvma_rvfi/uvma_rvfi_instr_if.sv b/lib/uvm_agents/uvma_rvfi/uvma_rvfi_instr_if.sv index b945429c5e..14e6e72bfa 100644 --- a/lib/uvm_agents/uvma_rvfi/uvma_rvfi_instr_if.sv +++ b/lib/uvm_agents/uvma_rvfi/uvma_rvfi_instr_if.sv @@ -296,42 +296,42 @@ interface uvma_rvfi_instr_if_t // assigning signal aliases to helper functions always_comb begin - instr_asm <= decode_instr(rvfi_insn); - - is_dret <= is_dret_f(); - is_mret <= is_mret_f(); - is_uret <= is_uret_f(); - is_wfi <= is_wfi_f(); - is_wfe <= is_wfe_f(); - is_ebreak <= is_ebreak_f(); - is_ebreak_compr <= is_ebreak_compr_f(); - is_ebreak_noncompr <= is_ebreak_noncompr_f(); - is_ecall <= is_ecall_f(); - is_branch <= is_branch_f(); - is_div <= is_div_f(); - is_rem <= is_rem_f(); - is_cslli <= is_cslli_f(); - is_nmi <= is_nmi_f(); - is_compressed <= is_compressed_f(); - is_dbg_trg <= is_dbg_trg_f(); - is_mmode <= is_mmode_f(); - is_not_mmode <= is_not_mmode_f(); - is_umode <= is_umode_f(); - is_not_umode <= is_not_umode_f(); - is_pma_instr_fault <= is_pma_instr_fault_f(); - is_instr_bus_valid <= is_instr_bus_valid_f(); - is_pushpop <= is_pushpop_f(); - is_split_datatrans_actual <= is_split_datatrans_actual_f(); - is_split_datatrans_intended <= is_split_datatrans_intended_f(); - is_mem_act <= is_mem_act_f(); - is_tablejump_raw <= is_tablejump_raw_f(); - is_pma_fault <= is_pma_fault_f(); - is_fencefencei <= is_fencefencei_f(); - rvfi_mem_addr_word0highbyte <= rvfi_mem_addr_word0highbyte_f(); - rvfi_mem_rmask_intended <= rvfi_mem_rmask_intended_f(); - rvfi_mem_wmask_intended <= rvfi_mem_wmask_intended_f(); - is_deprioritized_load_acc_fault <= is_deprioritized_exception_f({21'd 0, EXC_CAUSE_LOAD_ACC_FAULT}); - is_deprioritized_store_acc_fault <= is_deprioritized_exception_f({21'd 0, EXC_CAUSE_STORE_ACC_FAULT}); + instr_asm = decode_instr(rvfi_insn); + + is_dret = is_dret_f(); + is_mret = is_mret_f(); + is_uret = is_uret_f(); + is_wfi = is_wfi_f(); + is_wfe = is_wfe_f(); + is_ebreak = is_ebreak_f(); + is_ebreak_compr = is_ebreak_compr_f(); + is_ebreak_noncompr = is_ebreak_noncompr_f(); + is_ecall = is_ecall_f(); + is_branch = is_branch_f(); + is_div = is_div_f(); + is_rem = is_rem_f(); + is_cslli = is_cslli_f(); + is_nmi = is_nmi_f(); + is_compressed = is_compressed_f(); + is_dbg_trg = is_dbg_trg_f(); + is_mmode = is_mmode_f(); + is_not_mmode = is_not_mmode_f(); + is_umode = is_umode_f(); + is_not_umode = is_not_umode_f(); + is_pma_instr_fault = is_pma_instr_fault_f(); + is_instr_bus_valid = is_instr_bus_valid_f(); + is_pushpop = is_pushpop_f(); + is_split_datatrans_actual = is_split_datatrans_actual_f(); + is_split_datatrans_intended = is_split_datatrans_intended_f(); + is_mem_act = is_mem_act_f(); + is_tablejump_raw = is_tablejump_raw_f(); + is_pma_fault = is_pma_fault_f(); + is_fencefencei = is_fencefencei_f(); + rvfi_mem_addr_word0highbyte = rvfi_mem_addr_word0highbyte_f(); + rvfi_mem_rmask_intended = rvfi_mem_rmask_intended_f(); + rvfi_mem_wmask_intended = rvfi_mem_wmask_intended_f(); + is_deprioritized_load_acc_fault = is_deprioritized_exception_f({21'd 0, EXC_CAUSE_LOAD_ACC_FAULT}); + is_deprioritized_store_acc_fault = is_deprioritized_exception_f({21'd 0, EXC_CAUSE_STORE_ACC_FAULT}); end always_comb begin From 4bded472e36f9ec887728e1504a240a6ad8f720c Mon Sep 17 00:00:00 2001 From: Ingrid Haahjem Date: Fri, 21 Jul 2023 01:30:40 -0500 Subject: [PATCH 4/4] rs1 not valid for c.li instruction Signed-off-by: Ingrid Haahjem --- lib/support/isa_support.sv | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/support/isa_support.sv b/lib/support/isa_support.sv index e0608dbebd..1eb00aa022 100644 --- a/lib/support/isa_support.sv +++ b/lib/support/isa_support.sv @@ -614,7 +614,6 @@ FUNCT3_REMU = 3'b111 } m_minor_opcode_e; - typedef enum logic [4:0] { FUNCT5_C_ZEXTB = 5'b11000, FUNCT5_C_SEXTB = 5'b11001, @@ -1427,7 +1426,7 @@ end end CI_TYPE: begin - if (name inside { C_LI, C_NOP, C_ADDI }) begin + if (name inside { C_NOP, C_ADDI }) begin asm.rd.gpr = instr.compressed.format.ci.rd_rs1.gpr; asm.rs1.gpr = instr.compressed.format.ci.rd_rs1.gpr; asm.imm.imm_raw = { instr.compressed.format.ci.imm_12, instr.compressed.format.ci.imm_6_2 }; @@ -1439,6 +1438,16 @@ asm.rd.valid = 1; asm.rs1.valid = 1; asm.imm.valid = 1; + end else if (name == C_LI) begin + asm.rd.gpr = instr.compressed.format.ci.rd_rs1.gpr; + asm.imm.imm_raw = { instr.compressed.format.ci.imm_12, instr.compressed.format.ci.imm_6_2 }; + asm.imm.imm_raw_sorted = { instr.compressed.format.ci.imm_12, instr.compressed.format.ci.imm_6_2 }; + asm.imm.imm_type = IMM; + asm.imm.width = 6; + asm.imm.sign_ext = 1; + asm.imm.imm_value = get_imm_value_ci({ instr.compressed.format.ci.imm_12, instr.compressed.format.ci.imm_6_2 }); + asm.rd.valid = 1; + asm.imm.valid = 1; end else if (name == C_LUI) begin asm.rd.gpr = instr.compressed.format.ci.rd_rs1.gpr; asm.imm.imm_raw = { instr.compressed.format.ci.imm_12, instr.compressed.format.ci.imm_6_2 };