mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Merge branch 'main' of https://github.com/openhwgroup/cvw into dev
This commit is contained in:
		
						commit
						1beff89b68
					
				@ -414,6 +414,7 @@ if (args.ccov):  # only run RV64GC tests on Questa in code coverage mode
 | 
			
		||||
elif (args.fcov):  # only run RV64GC tests on Questa in lockstep in functional coverage mode
 | 
			
		||||
    addLockstepTestsByDir(WALLY+"/addins/cvw-arch-verif/tests/rv32/", "rv32gc", coveragesim, 1)
 | 
			
		||||
    addLockstepTestsByDir(WALLY+"/addins/cvw-arch-verif/tests/rv64/", "rv64gc", coveragesim, 1)
 | 
			
		||||
    addLockstepTestsByDir(WALLY+"/tests/riscof/work/wally-riscv-arch-test/rv64i_m/privilege/src/", "rv64gc", coveragesim, 0)
 | 
			
		||||
elif (args.fcovrvvi):  # only run RV64GC tests on Questa in rvvi coverage mode
 | 
			
		||||
    addTests(tests64gc_nofp, coveragesim)
 | 
			
		||||
    if (args.fp):
 | 
			
		||||
 | 
			
		||||
@ -8,5 +8,10 @@
 | 
			
		||||
`include "RV64I_coverage.svh"
 | 
			
		||||
`include "RV64M_coverage.svh"
 | 
			
		||||
`include "RV64F_coverage.svh"
 | 
			
		||||
// `include "RV64VM_coverage.svh"
 | 
			
		||||
// `include "RV64VM_PMP_coverage.svh"
 | 
			
		||||
// `include "RV64CBO_VM_coverage.svh"
 | 
			
		||||
// `include "RV64CBO_PMP_coverage.svh"
 | 
			
		||||
// `include "RV64Zicbom_coverage.svh"
 | 
			
		||||
`include "RV64Zicond_coverage.svh"
 | 
			
		||||
`include "RV64Zca_coverage.svh"
 | 
			
		||||
 | 
			
		||||
@ -192,9 +192,9 @@ if {$DEBUG > 0} {
 | 
			
		||||
# suppress spurious warnngs about
 | 
			
		||||
# "Extra checking for conflicts with always_comb done at vopt time"
 | 
			
		||||
# because vsim will run vopt
 | 
			
		||||
set INC_DIRS "+incdir+${CONFIG}/${CFG} +incdir+${CONFIG}/deriv/${CFG} +incdir+${CONFIG}/shared +incdir+${FCRVVI} +incdir+${FCRVVI}/rv32 +incdir+${FCRVVI}/rv64 +incdir+${FCRVVI}/common +incdir+${FCRVVI}"
 | 
			
		||||
set INC_DIRS "+incdir+${CONFIG}/${CFG} +incdir+${CONFIG}/deriv/${CFG} +incdir+${CONFIG}/shared +incdir+${FCRVVI} +incdir+${FCRVVI}/rv32 +incdir+${FCRVVI}/rv64 +incdir+${FCRVVI}/rv64_priv +incdir+${FCRVVI}/common +incdir+${FCRVVI}"
 | 
			
		||||
set SOURCES "${SRC}/cvw.sv ${TB}/${TESTBENCH}.sv ${TB}/common/*.sv ${SRC}/*/*.sv ${SRC}/*/*/*.sv ${WALLY}/addins/verilog-ethernet/*/*.sv ${WALLY}/addins/verilog-ethernet/*/*/*/*.sv"
 | 
			
		||||
vlog -lint +nowarnRDGN -work ${WKDIR} {*}${INC_DIRS} {*}${FCvlog} {*}${FCdefineCOVER_EXTS} {*}${lockstepvlog} ${FCdefineRVVI_COVERAGE} {*}${SOURCES} -suppress 2244 -suppress 2282 -suppress 2583 -suppress 7063,2596,13286
 | 
			
		||||
vlog -permissive -lint -work ${WKDIR} {*}${INC_DIRS} {*}${FCvlog} {*}${FCdefineCOVER_EXTS} {*}${lockstepvlog} ${FCdefineRVVI_COVERAGE} {*}${SOURCES} -suppress 2282,2583,7053,7063,2596,13286
 | 
			
		||||
 | 
			
		||||
# start and run simulation
 | 
			
		||||
# remove +acc flag for faster sim during regressions if there is no need to access internal signals
 | 
			
		||||
 | 
			
		||||
@ -64,6 +64,16 @@ module wallyTracer import cvw::*; #(parameter cvw_t P) (rvviTrace rvvi);
 | 
			
		||||
  logic                          wfiM;
 | 
			
		||||
  logic                          InterruptM, InterruptW;
 | 
			
		||||
 | 
			
		||||
  //For VM Verification
 | 
			
		||||
 | 
			
		||||
  logic [(P.XLEN-1):0]     VAdrIM,VAdrDM,VAdrIW,VAdrDW;
 | 
			
		||||
  logic [(P.XLEN-1):0]     PTE_iM,PTE_dM,PTE_iW,PTE_dW;
 | 
			
		||||
  logic [(P.PA_BITS-1):0]  PAIM,PADM,PAIW,PADW;
 | 
			
		||||
  logic [(P.PPN_BITS-1):0] PPN_iM,PPN_dM,PPN_iW,PPN_dW;
 | 
			
		||||
  logic ReadAccessM,WriteAccessM,ReadAccessW,WriteAccessW;
 | 
			
		||||
  logic ExecuteAccessF,ExecuteAccessD,ExecuteAccessE,ExecuteAccessM,ExecuteAccessW;
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
  assign clk = testbench.dut.clk;
 | 
			
		||||
  //  assign InstrValidF = testbench.dut.core.ieu.InstrValidF;  // not needed yet
 | 
			
		||||
  assign InstrValidD    = testbench.dut.core.ieu.c.InstrValidD;
 | 
			
		||||
@ -93,6 +103,20 @@ module wallyTracer import cvw::*; #(parameter cvw_t P) (rvviTrace rvvi);
 | 
			
		||||
  assign wfiM           = testbench.dut.core.priv.priv.wfiM;
 | 
			
		||||
  assign InterruptM     = testbench.dut.core.priv.priv.InterruptM;
 | 
			
		||||
 | 
			
		||||
  //FOr VM Verification
 | 
			
		||||
  assign VAdrIM         = testbench.dut.core.ifu.immu.immu.tlb.tlb.VAdr;
 | 
			
		||||
  assign VAdrDM         = testbench.dut.core.lsu.dmmu.dmmu.tlb.tlb.VAdr;
 | 
			
		||||
  assign PAIM           = testbench.dut.core.ifu.immu.immu.PhysicalAddress;
 | 
			
		||||
  assign PADM           = testbench.dut.core.lsu.dmmu.dmmu.PhysicalAddress;
 | 
			
		||||
  assign ReadAccessM    = testbench.dut.core.lsu.dmmu.dmmu.ReadAccessM;
 | 
			
		||||
  assign WriteAccessM   = testbench.dut.core.lsu.dmmu.dmmu.WriteAccessM;
 | 
			
		||||
  assign ExecuteAccessF = testbench.dut.core.ifu.immu.immu.ExecuteAccessF;
 | 
			
		||||
  assign PTE_iM         = testbench.dut.core.ifu.immu.immu.PTE;
 | 
			
		||||
  assign PTE_dM         = testbench.dut.core.lsu.dmmu.dmmu.PTE;
 | 
			
		||||
  assign PPN_iM         = testbench.dut.core.ifu.immu.immu.tlb.tlb.PPN;
 | 
			
		||||
  assign PPN_dM         = testbench.dut.core.lsu.dmmu.dmmu.tlb.tlb.PPN; 
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  logic valid;
 | 
			
		||||
  int csrid;
 | 
			
		||||
@ -276,6 +300,22 @@ module wallyTracer import cvw::*; #(parameter cvw_t P) (rvviTrace rvvi);
 | 
			
		||||
  flopenrc #(12)    CSRAdrWReg (clk, reset, FlushW, ~StallW, CSRAdrM, CSRAdrW);
 | 
			
		||||
  flopenrc #(1)     CSRWriteWReg (clk, reset, FlushW, ~StallW, CSRWriteM, CSRWriteW);
 | 
			
		||||
 | 
			
		||||
  //for VM Verification
 | 
			
		||||
  flopenrc #(P.XLEN)     VAdrIWReg (clk, reset, FlushW, ~StallW, VAdrIM, VAdrIW);
 | 
			
		||||
  flopenrc #(P.XLEN)     VAdrDWReg (clk, reset, FlushW, ~StallW, VAdrDM, VAdrDW);
 | 
			
		||||
  flopenrc #(P.PA_BITS)    PAIWReg (clk, reset, FlushW, ~StallW, PAIM, PAIW);
 | 
			
		||||
  flopenrc #(P.PA_BITS)    PADWReg (clk, reset, FlushW, ~StallW, PADM, PADW);
 | 
			
		||||
  flopenrc #(P.XLEN)     PTE_iWReg (clk, reset, FlushW, ~StallW, PTE_iM, PTE_iW);
 | 
			
		||||
  flopenrc #(P.XLEN)     PTE_dWReg (clk, reset, FlushW, ~StallW, PTE_dM, PTE_dW);
 | 
			
		||||
  flopenrc #(P.PPN_BITS) PPN_iWReg (clk, reset, FlushW, ~StallW, PPN_iM, PPN_iW);
 | 
			
		||||
  flopenrc #(P.PPN_BITS) PPN_dWReg (clk, reset, FlushW, ~StallW, PPN_dM, PPN_dW);
 | 
			
		||||
  flopenrc #(1)  ReadAccessWReg    (clk, reset, FlushW, ~StallW, ReadAccessM, ReadAccessW);
 | 
			
		||||
  flopenrc #(1)  WriteAccessWReg   (clk, reset, FlushW, ~StallW, WriteAccessM, WriteAccessW);
 | 
			
		||||
  flopenrc #(1)  ExecuteAccessDReg (clk, reset, FlushE, ~StallE, ExecuteAccessF, ExecuteAccessD);
 | 
			
		||||
  flopenrc #(1)  ExecuteAccessEReg (clk, reset, FlushE, ~StallE, ExecuteAccessD, ExecuteAccessE);
 | 
			
		||||
  flopenrc #(1)  ExecuteAccessMReg (clk, reset, FlushM, ~StallM, ExecuteAccessE, ExecuteAccessM);
 | 
			
		||||
  flopenrc #(1)  ExecuteAccessWReg (clk, reset, FlushW, ~StallW, ExecuteAccessM, ExecuteAccessW);
 | 
			
		||||
 | 
			
		||||
  // Initially connecting the writeback stage signals, but may need to use M stage
 | 
			
		||||
  // and gate on ~FlushW.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user