mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Added QuestaFunctCoverage to merge functional coverage reports
This commit is contained in:
		
							parent
							
								
									c4400dfeb0
								
							
						
					
					
						commit
						757cc8a5f7
					
				| @ -282,6 +282,22 @@ def addTests(tests, sim): | ||||
|                     grepfile = grepfile) | ||||
|             configs.append(tc) | ||||
| 
 | ||||
| def addLockstepTestsByDir(dir, config, sim): | ||||
|     sim_logdir = WALLY+ "/sim/" + sim + "/logs/" | ||||
|     cmdPrefix="wsim --sim " + sim + " " + coverStr + " " + config | ||||
|     for file in os.listdir(dir): | ||||
|         if file.endswith(".elf"): | ||||
|             fullfile = os.path.join(dir, file) | ||||
|             sim_log = sim_logdir + config + "_" + file | ||||
|             grepstring = "" | ||||
|             tc = TestCase( | ||||
|                     name=file, | ||||
|                     variant=config, | ||||
|                     cmd=cmdPrefix + " " + fullfile + " > " + sim_log, | ||||
|                     grepstr="Mismatches            : 0", | ||||
|                     grepfile = sim_log) | ||||
|             configs.append(tc) | ||||
| 
 | ||||
| def search_log_for_text(text, grepfile): | ||||
|     """Search through the given log file for text, returning True if it is found or False if it is not""" | ||||
|     grepwarn = "grep -H Warning: " + grepfile | ||||
| @ -332,14 +348,15 @@ args = parser.parse_args() | ||||
| 
 | ||||
| if (args.nightly): | ||||
|     nightMode = "--nightly"; | ||||
| #    sims = [defaultsim]                    # uncomment to use only the default simulator | ||||
|     sims = ["questa", "verilator", "vcs"] # uncomment to exercise all simulators | ||||
|     sims = ["questa", "verilator", "vcs"] # exercise all simulators; can omit a sim if no license is available | ||||
| else: | ||||
|     nightMode = "" | ||||
|     sims = [defaultsim] | ||||
| 
 | ||||
| if (args.ccov):  # only run RV64GC tests in coverage mode | ||||
|     coverStr = '--ccov' | ||||
| elif (args.fcov):  # only run RV64GC tests in lockstep in coverage mode | ||||
|     coverStr = '--fcov' | ||||
| else: | ||||
|    coverStr = '' | ||||
| 
 | ||||
| @ -362,10 +379,20 @@ if (args.buildroot): | ||||
|     addTests(tests_buildrootbootlockstep, "questa") # lockstep with Questa and ImperasDV runs overnight | ||||
| 
 | ||||
| if (args.ccov):  # only run RV64GC tests on Questa in code coverage mode | ||||
|     addTests(tests64gc_nofp, "questa") | ||||
|     addTests(tests64gc_nofp, coveragesim) | ||||
|     if (args.fp): | ||||
|         addTests(tests64gc_fp, "questa") | ||||
| else: | ||||
|         addTests(tests64gc_fp, coveragesim) | ||||
| elif (args.fcov):  # only run RV64GC tests on Questa in lockstep in functional coverage mode | ||||
|     addLockstepTestsByDir(WALLY+"/tests/functcov/rv64/I", "rv64gc", coveragesim) | ||||
|     #sim_log = WALLY + "/sim/questa/logs/fcov.log"  | ||||
|     #tc = TestCase( | ||||
|     #        name="lockstep_functcov", | ||||
|     #        variant="rv64gc", | ||||
|     #        cmd="iterelf " + WALLY + "/tests/functcov/rv64/I > " + sim_log, | ||||
|     #        grepstr="SUCCESS! All tests ran without failures", | ||||
|     #        grepfile = sim_log) | ||||
|     #configs.append(tc) | ||||
| else:  | ||||
|     for sim in sims: | ||||
|         if (not (args.buildroot and sim == defaultsim)):  # skip short buildroot sim if running long one | ||||
|             addTests(tests_buildrootshort, sim) | ||||
| @ -375,7 +402,6 @@ else: | ||||
| 
 | ||||
| # run derivative configurations and lockstep tests in nightly regression | ||||
| if (args.nightly): | ||||
|     addTests(derivconfigtests, defaultsim) | ||||
|     sim_log = WALLY + "/sim/questa/logs/lockstep_coverage.log"  | ||||
|     tc = TestCase( | ||||
|             name="lockstep_coverage", | ||||
| @ -393,6 +419,7 @@ if (args.nightly): | ||||
|             grepstr="SUCCESS! All tests ran without failures", | ||||
|             grepfile = sim_log) | ||||
|     configs.append(tc) | ||||
|     addTests(derivconfigtests, defaultsim) | ||||
| 
 | ||||
| # testfloat tests | ||||
| if (args.testfloat): # for testfloat alone, just run testfloat tests | ||||
| @ -474,16 +501,23 @@ def main(): | ||||
|     if args.ccov: | ||||
|         TIMEOUT_DUR = 20*60 # seconds | ||||
|         os.system('rm -f questa/cov/*.ucdb') | ||||
|     elif args.nightly in sys.argv: | ||||
|     elif args.fcov: | ||||
|         TIMEOUT_DUR = 1*60 | ||||
|         os.system('rm -f questa/fcov_ucdb/* questa/fcov_logs/* questa/fcov/*') | ||||
|     elif args.nightly: | ||||
|         TIMEOUT_DUR = 60*1440 # 1 day | ||||
|     elif args.testfloat in sys.argv: | ||||
|     elif args.testfloat: | ||||
|         TIMEOUT_DUR = 30*60 # seconds | ||||
|     else: | ||||
|         TIMEOUT_DUR = 10*60 # seconds | ||||
| 
 | ||||
|     # Scale the number of concurrent processes to the number of test cases, but | ||||
|     # max out at a limited number of concurrent processes to not overwhelm the system | ||||
|     with Pool(processes=min(len(configs),multiprocessing.cpu_count())) as pool: | ||||
|     if (args.lockstep or args.fcov): | ||||
|         ImperasDVLicenseCount = 8 # limit number of concurrent processes to avoid overloading ImperasDV licenses | ||||
|     else: | ||||
|         ImperasDVLicenseCount = 10000 # effectively no license limit for non-lockstep tests | ||||
|     with Pool(processes=min(len(configs),multiprocessing.cpu_count(), ImperasDVLicenseCount)) as pool: | ||||
|        num_fail = 0 | ||||
|        results = {} | ||||
|        for config in configs: | ||||
| @ -498,6 +532,8 @@ def main(): | ||||
|     # Coverage report | ||||
|     if args.ccov: | ||||
|        os.system('make QuestaCodeCoverage') | ||||
|     if args.fcov: | ||||
|        os.system('make QuestaFunctCoverage') | ||||
|     # Count the number of failures | ||||
|     if num_fail: | ||||
|         print(f"{bcolors.FAIL}Regression failed with %s failed configurations{bcolors.ENDC}" % num_fail) | ||||
|  | ||||
| @ -30,6 +30,13 @@ QuestaCodeCoverage: questa/ucdb/rv64gc_arch64i.ucdb | ||||
| #	vcover report -recursive questa/ucdb/cov.ucdb > questa/cov/rv64gc_recursive.rpt
 | ||||
| 	vcover report -details -threshH 100 -html questa/ucdb/cov.ucdb | ||||
| 
 | ||||
| QuestaFunctCoverage: ${SIM}/questa/fcov_ucdb/rv64gc_WALLY-COV-add.elf.ucdb  | ||||
| 	vcover merge -out ${SIM}/questa/fcov_ucdb/fcov.ucdb ${SIM}/questa/fcov_ucdb/rv64gc_WALLY-COV-add.elf.ucdb ${SIM}/questa/fcov_ucdb/rv64gc_WALLY*.ucdb -logfile ${SIM}/questa/fcov_logs/log | ||||
| 	vcover report -details -html ${SIM}/questa/fcov_ucdb/fcov.ucdb | ||||
| 	vcover report ${SIM}/questa/fcov_ucdb/fcov.ucdb -details -cvg > ${SIM}/questa/fcov/fcov.log | ||||
| 	vcover report ${SIM}/questa/fcov_ucdb/fcov.ucdb -testdetails -cvg > ${SIM}/questa/fcov/fcov.testdetails.log | ||||
| 	vcover report ${SIM}/questa/fcov_ucdb/fcov.ucdb -details -cvg | egrep "Coverpoint|Covergroup|Cross|TYPE"  > ${SIM}/questa/fcov/fcov.summary.log | ||||
| 	grep "TOTAL COVERGROUP COVERAGE" ${SIM}/questa/fcov/fcov.log | ||||
| 
 | ||||
| imperasdv_cov: | ||||
| 	touch ${SIM}/seed0.txt | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user