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
						dd602cae83
					
				
							
								
								
									
										14
									
								
								bin/wsim
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								bin/wsim
									
									
									
									
									
								
							@ -29,8 +29,8 @@ print("Config=" + args.config + " tests=" + args.testsuite + " sim=" + args.sim
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Validate arguments
 | 
					# Validate arguments
 | 
				
			||||||
if (args.gui):
 | 
					if (args.gui):
 | 
				
			||||||
    if (args.sim != "questa"):
 | 
					    if args.sim not in ["questa", "vcs"]:
 | 
				
			||||||
        print("GUI option only supported for Questa")
 | 
					        print("GUI option only supported for Questa and VCS")
 | 
				
			||||||
        exit(1)
 | 
					        exit(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (args.coverage):
 | 
					if (args.coverage):
 | 
				
			||||||
@ -82,9 +82,9 @@ elif (args.sim == "vcs"):
 | 
				
			|||||||
    if (args.coverage):
 | 
					    if (args.coverage):
 | 
				
			||||||
        print("Coverage option not available for VCS")
 | 
					        print("Coverage option not available for VCS")
 | 
				
			||||||
        exit(1)
 | 
					        exit(1)
 | 
				
			||||||
    if (args.gui):
 | 
					    if (args.gui):  
 | 
				
			||||||
        print("GUI option not available for VCS")
 | 
					        cmd = cd + "; ./run_vcs " + args.config + " " + args.testsuite + " " + args.tb + " " + "1"
 | 
				
			||||||
        exit(1)
 | 
					    else:
 | 
				
			||||||
    cmd = cd + "; ./run_vcs " + args.config + " " + "\""+args.testsuite+"\""
 | 
					        cmd = cd + "; ./run_vcs " + args.config + " " + "\""+args.testsuite+"\""
 | 
				
			||||||
    print(cmd)
 | 
					    print(cmd)
 | 
				
			||||||
    os.system(cmd)
 | 
					    os.system(cmd)
 | 
				
			||||||
 | 
				
			|||||||
@ -12,7 +12,26 @@ TB=${WALLY}/testbench
 | 
				
			|||||||
CONFIG_VARIANT=${1}
 | 
					CONFIG_VARIANT=${1}
 | 
				
			||||||
# Set TESTSUITE from the second script argument
 | 
					# Set TESTSUITE from the second script argument
 | 
				
			||||||
TESTSUITE=$2
 | 
					TESTSUITE=$2
 | 
				
			||||||
 | 
					WKDIR=wkdir/${1}_${2}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ ! -d "$WKDIR" ]; then
 | 
				
			||||||
 | 
					    #echo "Directory $WKDIR does not exist. Creating it now..."
 | 
				
			||||||
 | 
					    mkdir -p "$WKDIR"
 | 
				
			||||||
 | 
					    if [ $? -eq 0 ]; then
 | 
				
			||||||
 | 
					        echo "Directory $WKDIR created successfully."
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        echo "Failed to create directory $WKDIR."
 | 
				
			||||||
 | 
					        exit 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					    echo "Directory $WKDIR already exists."
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ -n "$4" ]]; then
 | 
				
			||||||
 | 
					    GUI="-gui"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					    GUI=""
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
INCLUDE_DIRS=$(find ${SRC} -type d | xargs -I {} echo -n "{} ")
 | 
					INCLUDE_DIRS=$(find ${SRC} -type d | xargs -I {} echo -n "{} ")
 | 
				
			||||||
SOURCE_PATH="+incdir+${CFG}/${CONFIG_VARIANT} +incdir+${CFG}/deriv/${CONFIG_VARIANT} +incdir+${CFG}/shared +define+ +define+P.XLEN=64  +define+FPGA=0 +incdir+${TB} ${SRC}/cvw.sv +incdir+${SRC}" 
 | 
					SOURCE_PATH="+incdir+${CFG}/${CONFIG_VARIANT} +incdir+${CFG}/deriv/${CONFIG_VARIANT} +incdir+${CFG}/shared +define+ +define+P.XLEN=64  +define+FPGA=0 +incdir+${TB} ${SRC}/cvw.sv +incdir+${SRC}" 
 | 
				
			||||||
@ -21,14 +40,12 @@ SIMFILES="$INCLUDE_DIRS $(find ${SRC} -name "*.sv" ! -path "${SRC}/generic/clock
 | 
				
			|||||||
OUTPUT="sim_out"
 | 
					OUTPUT="sim_out"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
clean() {
 | 
					clean() {
 | 
				
			||||||
    rm -rf obj_dir work transcript vsim.wlf $OUTPUT *.vcd csrc ucli.key vc_hdrs.h program.out
 | 
					    rm -rf ${WKDIR}/*
 | 
				
			||||||
    rm -rf simv* *.daidir dve *.vpd *.dump DVEfiles/ verdi* novas* *fsdb* *.vg *.rep *.db *.chk *.log *.out profileReport* simprofile_dir*
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Clean and run simulation with VCS
 | 
					# Clean and run simulation with VCS
 | 
				
			||||||
clean
 | 
					clean
 | 
				
			||||||
#vcs +lint=all,noGCWM -simprofile -sverilog +vc -Mupdate -line -full64 -kdb -lca -debug_access+all+reverse -v2k_generate  ${SOURCE_PATH} +define+TEST=$TESTSUITE $SIMFILES -o $OUTPUT -error=NOODV
 | 
					#vcs +lint=all,noGCWM -simprofile -sverilog +vc -Mupdate -line -full64 -kdb -lca -debug_access+all+reverse -v2k_generate  ${SOURCE_PATH} +define+TEST=$TESTSUITE $SIMFILES -o $OUTPUT -error=NOODV
 | 
				
			||||||
# lint ignores Unused Inputs (UI), Unnamed Assertipons (SVA-UA), Dynamic Type Sensitivty [IDTS], Null Statement [NS], Unequal Length in Comparison Operation [ULCO]
 | 
					# lint ignores Unused Inputs (UI), Unnamed Assertipons (SVA-UA), Dynamic Type Sensitivty [IDTS], Null Statement [NS], Unequal Length in Comparison Operation [ULCO]
 | 
				
			||||||
vcs +lint=all,noGCWM,noUI,noSVA-UA,noIDTS,noNS,noULCO,noCAWM-L,noWMIA-L,noSV-PIU -simprofile -sverilog +vc -Mupdate -line -full64 -kdb -lca -debug_access+all+reverse  ${SOURCE_PATH} -pvalue+testbench.TEST=$TESTSUITE $SIMFILES -o $OUTPUT -error=NOODV
 | 
					vcs +lint=all,noGCWM,noUI,noSVA-UA,noIDTS,noNS,noULCO,noCAWM-L,noWMIA-L,noSV-PIU -simprofile -suppress -sverilog +vc -Mupdate -line -full64 -kdb -lca -debug_access+all+reverse  ${SOURCE_PATH} $SIMFILES -o ${WKDIR}/$OUTPUT  -simdir ${WKDIR} -error=NOODV -work ${WKDIR} ${GUI}
 | 
				
			||||||
./$OUTPUT | tee program.out
 | 
					./${WKDIR}/$OUTPUT +TEST=${TESTSUITE}  +fsdb+gate=off  | tee ${WKDIR}/${WKDIR}.out 
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										108
									
								
								testbench/coverage/test_pmp_coverage.sv
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								testbench/coverage/test_pmp_coverage.sv
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,108 @@
 | 
				
			|||||||
 | 
					module test_pmp_coverage import cvw::*; #(parameter cvw_t P) (input clk);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Ensure the covergroup is defined correctly
 | 
				
			||||||
 | 
					covergroup cg_priv_mode @(posedge clk);
 | 
				
			||||||
 | 
					    coverpoint dut.core.ifu.PrivilegeModeW {
 | 
				
			||||||
 | 
					        bins user   = {2'b00};
 | 
				
			||||||
 | 
					        bins superv = {2'b01};
 | 
				
			||||||
 | 
					        bins hyperv = {2'b10};
 | 
				
			||||||
 | 
					        bins mach   = {2'b11};
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					endgroup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					covergroup cg_PMPConfig @(posedge clk);
 | 
				
			||||||
 | 
					    coverpoint dut.core.ifu.PMPCFG_ARRAY_REGW[0][0] {
 | 
				
			||||||
 | 
					        bins ones    = {1};
 | 
				
			||||||
 | 
					        bins zeros = {0};
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					endgroup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function bit [1:0] getPMPConfigSlice(int index);
 | 
				
			||||||
 | 
					    return dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[index][4:3];
 | 
				
			||||||
 | 
					endfunction
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//if (P.PMP_ENTRIES > 0) begin : pmp
 | 
				
			||||||
 | 
					    covergroup cg_pmpcfg_mode @(posedge clk);
 | 
				
			||||||
 | 
					            coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[0][4:3] {
 | 
				
			||||||
 | 
					                bins off   = {2'b00};
 | 
				
			||||||
 | 
					                bins tor   = {2'b01};
 | 
				
			||||||
 | 
					                bins na4   = {2'b10};
 | 
				
			||||||
 | 
					                bins napot = {2'b11};
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[1][4:3] {
 | 
				
			||||||
 | 
					                bins off   = {2'b00};
 | 
				
			||||||
 | 
					                bins tor   = {2'b01};
 | 
				
			||||||
 | 
					                bins na4   = {2'b10};
 | 
				
			||||||
 | 
					                bins napot = {2'b11};
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[2][4:3] {
 | 
				
			||||||
 | 
					                bins off   = {2'b00};
 | 
				
			||||||
 | 
					                bins tor   = {2'b01};
 | 
				
			||||||
 | 
					                bins na4   = {2'b10};
 | 
				
			||||||
 | 
					                bins napot = {2'b11};
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[3][4:3] {
 | 
				
			||||||
 | 
					                bins off   = {2'b00};
 | 
				
			||||||
 | 
					                bins tor   = {2'b01};
 | 
				
			||||||
 | 
					                bins na4   = {2'b10};
 | 
				
			||||||
 | 
					                bins napot = {2'b11};
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[4][4:3] {
 | 
				
			||||||
 | 
					                bins off   = {2'b00};
 | 
				
			||||||
 | 
					                bins tor   = {2'b01};
 | 
				
			||||||
 | 
					                bins na4   = {2'b10};
 | 
				
			||||||
 | 
					                bins napot = {2'b11};
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[5][4:3] {
 | 
				
			||||||
 | 
					                bins off   = {2'b00};
 | 
				
			||||||
 | 
					                bins tor   = {2'b01};
 | 
				
			||||||
 | 
					                bins na4   = {2'b10};
 | 
				
			||||||
 | 
					                bins napot = {2'b11};
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[6][4:3] {
 | 
				
			||||||
 | 
					                bins off   = {2'b00};
 | 
				
			||||||
 | 
					                bins tor   = {2'b01};
 | 
				
			||||||
 | 
					                bins na4   = {2'b10};
 | 
				
			||||||
 | 
					                bins napot = {2'b11};
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[7][4:3] {
 | 
				
			||||||
 | 
					                bins off   = {2'b00};
 | 
				
			||||||
 | 
					                bins tor   = {2'b01};
 | 
				
			||||||
 | 
					                bins na4   = {2'b10};
 | 
				
			||||||
 | 
					                bins napot = {2'b11};
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					    endgroup
 | 
				
			||||||
 | 
					//end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Ensure that the instantiation and sampling of covergroups are within the correct procedural context
 | 
				
			||||||
 | 
					initial begin
 | 
				
			||||||
 | 
					    cg_priv_mode privmodeCG = new();  // Instantiate the privilege mode covergroup
 | 
				
			||||||
 | 
					    cg_PMPConfig pmpconfigCG = new(); // Instantiate the PMP config covergroup
 | 
				
			||||||
 | 
					    cg_pmpcfg_mode pmpcfgmodeCG = new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    forever begin
 | 
				
			||||||
 | 
					        @(posedge clk) begin
 | 
				
			||||||
 | 
					            privmodeCG.sample();  // Sample the privilege mode covergroup
 | 
				
			||||||
 | 
					            pmpconfigCG.sample(); // Sample the PMP config covergroupi
 | 
				
			||||||
 | 
						    pmpcfgmodeCG.sample();
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endmodule
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -168,7 +168,6 @@ module testbench;
 | 
				
			|||||||
        "arch64zknd":    if (P.ZKND_SUPPORTED)    tests = arch64zknd;
 | 
					        "arch64zknd":    if (P.ZKND_SUPPORTED)    tests = arch64zknd;
 | 
				
			||||||
        "arch64zkne":    if (P.ZKNE_SUPPORTED)    tests = arch64zkne;
 | 
					        "arch64zkne":    if (P.ZKNE_SUPPORTED)    tests = arch64zkne;
 | 
				
			||||||
        "arch64zknh":    if (P.ZKNH_SUPPORTED)    tests = arch64zknh;
 | 
					        "arch64zknh":    if (P.ZKNH_SUPPORTED)    tests = arch64zknh;
 | 
				
			||||||
        "wallycov64i":                            tests = wallycov64i;
 | 
					 | 
				
			||||||
      endcase 
 | 
					      endcase 
 | 
				
			||||||
    end else begin // RV32
 | 
					    end else begin // RV32
 | 
				
			||||||
      case (TEST)
 | 
					      case (TEST)
 | 
				
			||||||
@ -882,7 +881,10 @@ end
 | 
				
			|||||||
    if (errors) $display("%s failed with %d errors. :(", TestName, errors);
 | 
					    if (errors) $display("%s failed with %d errors. :(", TestName, errors);
 | 
				
			||||||
    else $display("%s succeeded.  Brilliant!!!", TestName);
 | 
					    else $display("%s succeeded.  Brilliant!!!", TestName);
 | 
				
			||||||
  endtask
 | 
					  endtask
 | 
				
			||||||
  
 | 
					 
 | 
				
			||||||
 | 
					`ifdef PMP_COVERAGE
 | 
				
			||||||
 | 
					test_pmp_coverage #(P) pmp_inst(clk);
 | 
				
			||||||
 | 
					`endif
 | 
				
			||||||
  /* verilator lint_on WIDTHTRUNC */
 | 
					  /* verilator lint_on WIDTHTRUNC */
 | 
				
			||||||
  /* verilator lint_on WIDTHEXPAND */
 | 
					  /* verilator lint_on WIDTHEXPAND */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user