diff --git a/sim/imperas.ic b/sim/imperas.ic index 8b4ef2d45..6a34466f0 100644 --- a/sim/imperas.ic +++ b/sim/imperas.ic @@ -1,42 +1,54 @@ #--showoverrides -#--help --helpall +#--showcommands ---override cpu/show_c_prefix=T +# Core settings --override cpu/unaligned=F --override cpu/ignore_non_leaf_DAU=1 --override cpu/wfi_is_nop=T +--override cpu/mimpid=0x100 -# this should be 16 not 0 +# THIS NEEDS FIXING to 16 --override cpu/PMP_registers=0 +# PMA Settings +# 'r': read access allowed +# 'w': write access allowed +# 'x': execute access allowed +# 'a': aligned access required +# 'A': atomic instructions NOT allowed (actually USER1 privilege needed) +# 'P': push/pop instructions NOT allowed (actually USER2 privilege needed) +# '1': 1-byte accesses allowed +# '2': 2-byte accesses allowed +# '4': 4-byte accesses allowed +# '8': 8-byte accesses allowed +# '-', space: ignored (use for input string formatting). +# +# SV39 Memory 0x0000000000 0x7FFFFFFFFF +# +--callcommand refRoot/cpu/setPMA -lo 0x0000000000 -hi 0x7FFFFFFFFF -attributes " ------ ---- "; # INITIAL +--callcommand refRoot/cpu/setPMA -lo 0x0000001000 -hi 0x0000001FFF -attributes " r-x-A- 1248 "; # BOOTROM +--callcommand refRoot/cpu/setPMA -lo 0x0000012100 -hi 0x000001211F -attributes " rw--A- --48 "; # SDC +--callcommand refRoot/cpu/setPMA -lo 0x0002000000 -hi 0x000200FFFF -attributes " rw--A- 1248 "; # CLINT +--callcommand refRoot/cpu/setPMA -lo 0x000C000000 -hi 0x000FFFFFFF -attributes " rw--A- --4- "; # PLIC +--callcommand refRoot/cpu/setPMA -lo 0x0010000000 -hi 0x0010000007 -attributes " rw--A- 1--- "; # UART0 error - 0x10000000 - 0x100000FF +--callcommand refRoot/cpu/setPMA -lo 0x0010060000 -hi 0x00100600FF -attributes " rw--A- --4- "; # GPIO error - 0x10006000 - 0x100060FF +--callcommand refRoot/cpu/setPMA -lo 0x0080000000 -hi 0x008FFFFFFF -attributes " rwx--- 1248 "; # UNCORE_RAM + # Enable the Imperas instruction coverage #-extlib refRoot/cpu/cv=imperas.com/intercept/riscvInstructionCoverage/1.0 #-override refRoot/cpu/cv/cover=basic #-override refRoot/cpu/cv/extensions=RV32I # Add Imperas simulator application instruction tracing ---trace ---tracechange ---traceshowicount ---tracemode ---tracemem ASX ---monitornetschange +--override cpu/show_c_prefix=T +--trace --tracechange --traceshowicount --tracemode -tracemem ASX --monitornetschange # Exceptions and pagetables debug --override cpu/debugflags=6 -# Turn on verbose output for Imperas simulator +# Turn on verbose output for Imperas simulator and Model --verbose - -# Turn on verbose output for RISCV model --override cpu/verbose=1 # Store simulator output to logfile --output imperas.log - - -# ignore settings of bits DAU for non leaf page table walks ---override cpu/ignore_non_leaf_DAU=1 - -# mimpid = 0x100 ---override cpu/mimpid=0x100 diff --git a/sim/wally-imperas.do b/sim/wally-imperas.do index 985739cb4..2de97be20 100644 --- a/sim/wally-imperas.do +++ b/sim/wally-imperas.do @@ -24,6 +24,7 @@ vlib work # start and run simulation # remove +acc flag for faster sim during regressions if there is no need to access internal signals # *** modelsim won't take `PA_BITS, but will take other defines for the lengths of DTIM_RANGE and IROM_LEN. For now just live with the warnings. + vlog +incdir+../config/$1 \ +incdir+../config/shared \ +define+USE_IMPERAS_DV \ @@ -42,6 +43,7 @@ vlog +incdir+../config/$1 \ ../src/*/*/*.sv \ -suppress 2583 \ -suppress 7063 + vopt +acc work.testbench -G DEBUG=1 -o workopt vsim workopt +nowarn3829 -fatal 7 \ -sv_lib $env(IMPERAS_HOME)/lib/Linux64/ImperasLib/imperas.com/verification/riscv/1.0/model \ diff --git a/testbench/testbench_imperas.sv b/testbench/testbench_imperas.sv index f5ad63bcd..27bd12467 100644 --- a/testbench/testbench_imperas.sv +++ b/testbench/testbench_imperas.sv @@ -138,11 +138,6 @@ module testbench; .CMP_CSR (1) ) idv_trace2api(rvvi); - int PRIV_RWX = RVVI_MEMORY_PRIVILEGE_READ | RVVI_MEMORY_PRIVILEGE_WRITE | RVVI_MEMORY_PRIVILEGE_EXEC; - int PRIV_RW = RVVI_MEMORY_PRIVILEGE_READ | RVVI_MEMORY_PRIVILEGE_WRITE; - int PRIV_RX = RVVI_MEMORY_PRIVILEGE_READ | RVVI_MEMORY_PRIVILEGE_EXEC; - int PRIV_X = RVVI_MEMORY_PRIVILEGE_EXEC; - initial begin MAX_ERRS = 3; @@ -173,37 +168,25 @@ module testbench; void'(rvviRefCsrSetVolatile(0, 32'h344)); // MIP void'(rvviRefCsrSetVolatile(0, 32'h144)); // SIP -/* - // Memory lo, hi, priv (RVVI_MEMORY_PRIVILEGE_{READ,WRITE,EXEC}) - void'(rvviRefMemorySetPrivilege(56'h0, 56'h7fffffffff, 0)); - if (`BOOTROM_SUPPORTED) - void'(rvviRefMemorySetPrivilege(`BOOTROM_BASE, (`BOOTROM_BASE + `BOOTROM_RANGE), PRIV_RX)); - if (`UNCORE_RAM_SUPPORTED) - void'(rvviRefMemorySetPrivilege(`UNCORE_RAM_BASE, (`UNCORE_RAM_BASE + `UNCORE_RAM_RANGE), PRIV_RWX)); - if (`EXT_MEM_SUPPORTED) - void'(rvviRefMemorySetPrivilege(`EXT_MEM_BASE, (`EXT_MEM_BASE + `EXT_MEM_RANGE), PRIV_RWX)); - + // Privileges for PMA are set in the imperas.ic + // volatile (IO) regions are defined here + // only real ROM/RAM areas are BOOTROM and UNCORE_RAM if (`CLINT_SUPPORTED) begin - void'(rvviRefMemorySetPrivilege(`CLINT_BASE, (`CLINT_BASE + `CLINT_RANGE), PRIV_RW)); void'(rvviRefMemorySetVolatile(`CLINT_BASE, (`CLINT_BASE + `CLINT_RANGE))); end if (`GPIO_SUPPORTED) begin - void'(rvviRefMemorySetPrivilege(`GPIO_BASE, (`GPIO_BASE + `GPIO_RANGE), PRIV_RW)); void'(rvviRefMemorySetVolatile(`GPIO_BASE, (`GPIO_BASE + `GPIO_RANGE))); end if (`UART_SUPPORTED) begin - void'(rvviRefMemorySetPrivilege(`UART_BASE, (`UART_BASE + `UART_RANGE), PRIV_RW)); - void'(rvviRefMemorySetVolatile(`UART_BASE, (`UART_BASE + `UART_RANGE))); + //void'(rvviRefMemorySetVolatile(`UART_BASE, (`UART_BASE + `UART_RANGE))); + void'(rvviRefMemorySetVolatile(`UART_BASE, (`UART_BASE + 7))); // BUG end if (`PLIC_SUPPORTED) begin - void'(rvviRefMemorySetPrivilege(`PLIC_BASE, (`PLIC_BASE + `PLIC_RANGE), PRIV_RW)); void'(rvviRefMemorySetVolatile(`PLIC_BASE, (`PLIC_BASE + `PLIC_RANGE))); end if (`SDC_SUPPORTED) begin - void'(rvviRefMemorySetPrivilege(`SDC_BASE, (`SDC_BASE + `SDC_RANGE), PRIV_RW)); void'(rvviRefMemorySetVolatile(`SDC_BASE, (`SDC_BASE + `SDC_RANGE))); end -*/ if(`XLEN==32) begin void'(rvviRefCsrSetVolatile(0, 32'hC80)); // CYCLEH