Skip to content

VCS Compiling problem for cv32e40p and PULP

Issue Description

Hello, I encountered an issue while running the cv32e40p project. When I attempt to execute the following command in the cv32e40p/sim/core directory:

make vcs-custom TEST=pulp_general_alu CUSTOM=. CV_SIMULATOR=vcs

The simulation run fails, producing multiple errors, including a UVM_FATAL log entry. Below is part of the error output:

ucli% run
[cv32e40p_core]: PULP_XPULP =           0, PULP_CLUSTER =           0, FPU           0, PULP_ZFINX           0, NUM_MHPMCOUNTERS           1
UVM_INFO /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(265) @ 0ns: reporter [RNDSTALL] INSTR OBI stall enable: 1
UVM_INFO /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(266) @ 0ns: reporter [RNDSTALL] INSTR OBI stall mode:   1
UVM_INFO /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(267) @ 0ns: reporter [RNDSTALL] INSTR OBI stall gnt:    1
UVM_INFO /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(268) @ 0ns: reporter [RNDSTALL] INSTR OBI stall valid:  2
UVM_INFO /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(269) @ 0ns: reporter [RNDSTALL] INSTR OBI stall max:    3
UVM_INFO /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(270) @ 0ns: reporter [RNDSTALL] DATA  OBI stall enable: 0
UVM_INFO /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(271) @ 0ns: reporter [RNDSTALL] DATA  OBI stall mode:   0
UVM_INFO /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(272) @ 0ns: reporter [RNDSTALL] DATA  OBI stall gnt:    0
UVM_INFO /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(273) @ 0ns: reporter [RNDSTALL] DATA  OBI stall valid:  0
UVM_INFO /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(274) @ 0ns: reporter [RNDSTALL] DATA  OBI stall max:    0
UVM_ERROR /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(487) @ 6140ns: reporter [MM_RAM] out of bounds read from ccda43ac (RAM_ADDR_WIDTH=22; dm_halt_addri=1a110800, DBG_ADDR_WIDTH=14)
UVM_ERROR /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(487) @ 15980ns: reporter [MM_RAM] out of bounds read from 0550107b (RAM_ADDR_WIDTH=22; dm_halt_addri=1a110800, DBG_ADDR_WIDTH=14)
UVM_ERROR /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(487) @ 15980ns: reporter [MM_RAM] out of bounds read from 0550107c (RAM_ADDR_WIDTH=22; dm_halt_addri=1a110800, DBG_ADDR_WIDTH=14)
UVM_ERROR /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(487) @ 15990ns: reporter [MM_RAM] out of bounds read from 0550107c (RAM_ADDR_WIDTH=22; dm_halt_addri=1a110800, DBG_ADDR_WIDTH=14)
UVM_ERROR /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(487) @ 15990ns: reporter [MM_RAM] out of bounds read from 0550107f (RAM_ADDR_WIDTH=22; dm_halt_addri=1a110800, DBG_ADDR_WIDTH=14)
UVM_ERROR /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(487) @ 16080ns: reporter [MM_RAM] out of bounds read from 055010d3 (RAM_ADDR_WIDTH=22; dm_halt_addri=1a110800, DBG_ADDR_WIDTH=14)
UVM_ERROR /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(487) @ 16080ns: reporter [MM_RAM] out of bounds read from 055010d4 (RAM_ADDR_WIDTH=22; dm_halt_addri=1a110800, DBG_ADDR_WIDTH=14)
UVM_ERROR /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(487) @ 16090ns: reporter [MM_RAM] out of bounds read from 055010d4 (RAM_ADDR_WIDTH=22; dm_halt_addri=1a110800, DBG_ADDR_WIDTH=14)
UVM_ERROR /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(487) @ 16090ns: reporter [MM_RAM] out of bounds read from 055010d7 (RAM_ADDR_WIDTH=22; dm_halt_addri=1a110800, DBG_ADDR_WIDTH=14)
"/home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv", 445: tb_top.cv32e40p_tb_wrapper_i.ram_i.out_of_bounds_write: started at 16120000ps failed at 16120000ps
        Offending '(((((((((((((data_addr_i < (2 ** RAM_ADDR_WIDTH)) || ((data_addr_i >= dm_halt_addr_i) && (data_addr_i < (dm_halt_addr_i + (2 ** DBG_ADDR_WIDTH))))) || (data_addr_i == MMADDR_PRINT)) || (data_addr_i == MMADDR_TIMERREG)) || (data_addr_i == MMADDR_TIMERVAL)) || (data_addr_i == MMADDR_DBG)) || (data_addr_i == MMADDR_TESTSTATUS)) || (data_addr_i == MMADDR_EXIT)) || (data_addr_i == MMADDR_SIGBEGIN)) || (data_addr_i == MMADDR_SIGEND)) || (data_addr_i == MMADDR_SIGDUMP)) || (data_addr_i == MMADDR_TICKS)) || (data_addr_i[31:16] == MMADDR_RNDSTALL))'
UVM_FATAL /home/gk/Desktop/Package/gk/core-v-verif/cv32e40p/tb/core/mm_ram.sv(462) @ 16120ns: reporter [MM_RAM] out of bounds write to 0550107c with 00000020

--- UVM Report Summary ---

** Report counts by severity
UVM_INFO :   10
UVM_WARNING :    0
UVM_ERROR :    9
UVM_FATAL :    1
** Report counts by id
[MM_RAM]    10
[RNDSTALL]    10
$finish called from file "/home/gk/Desktop/Package/vcs2018/vcs/O-2018.09-SP2/etc/uvm/base/uvm_report_object.svh", line 292.

Changes I Made

To enable PULP functionality and try to resolve the issue, I made the following changes:

  1. Modified the PULP_XPULP parameter in cv32e40p_core.sv:
    parameter PULP_XPULP = 1;
  2. Uncommented the following lines (327–329) in Common.mk:
    ifeq ($(firstword $(subst _, ,$(TEST))),pulp)
    CFLAGS = -Os -g -D__riscv__=1 -D__LITTLE_ENDIAN__=1 -march=rv32imcxpulpv2 -Wa,-march=rv32imcxpulpv2 -fdata-sections -ffunction-sections -fdiagnostics-color=always
    endif
  3. Configured toolchain environment variables for PULP GCC:
    export CV_SW_TOOLCHAIN=/home/gk/Desktop/Package/v1.0.16-pulp-riscv-gcc-ubuntu-16
    export CV_SW_PREFIX=riscv32-unknown-elf-
    export CV_SW_MARCH=rv32gc

Request for Help

I am seeking guidance on how to properly configure the project to enable support for PULP-based tests (TEST=pulp_general_alu). A similar setup with corev-openhw-gcc-ubuntu2004-20241020 as the toolchain was able to successfully run TEST=hello-world, but it also failed when running TEST=pulp_general_alu.


Additional Information Host system: Ubuntu 20.04 VCS version: O-2018.09-SP2_Full64 Hardware compiler: PULP GCC v1.0.16 riscv


Attachment Details

I have attached a file named full_terminal_output.log to this issue. The file contains the complete terminal logs that resulted from running the failing command. Please review this file for further insights into the error.

full_terminal_output.log