mirror of
https://github.com/openhwgroup/cva6.git
synced 2025-06-28 09:16:22 -04:00
80 lines
2.1 KiB
Python
80 lines
2.1 KiB
Python
# Copyright 2023 Thales Silicon Security
|
||
#
|
||
# Licensed under the Solderpad Hardware Licence, Version 2.0 (the "License");
|
||
# you may not use this file except in compliance with the License.
|
||
# SPDX-License-Identifier: Apache-2.0 WITH SHL-2.0
|
||
# You may obtain a copy of the License at https://solderpad.org/licenses/
|
||
#
|
||
# Original Author: Alae Eddine EZ ZEJJARI (alae-eddine.ez-zejjari@external.thalesgroup.com) – sub-contractor MU-Electronics for Thales group
|
||
|
||
import re
|
||
import sys
|
||
import yaml
|
||
import report_builder as rb
|
||
from pprint import pprint
|
||
|
||
log_cc_path = str(sys.argv[1])
|
||
with open(log_cc_path, 'r') as f:
|
||
cc_log = f.read()
|
||
|
||
log_fc_path = str(sys.argv[2])
|
||
with open(log_fc_path, 'r') as f:
|
||
fc_log = f.read()
|
||
|
||
pattern = re.compile(r'\S{2,}')
|
||
|
||
def get_cc_scores(component):
|
||
for l in cc_log.splitlines():
|
||
if re.search(r'\b'+component+r'\b', l):
|
||
line = l
|
||
scores = pattern.findall(line)
|
||
return [float(score) for score in scores[0:4]]
|
||
|
||
def get_fc_scores(component):
|
||
for l in fc_log.splitlines():
|
||
if re.search(r'\b'+component+r'\b', l):
|
||
line = l
|
||
scores = pattern.findall(line)
|
||
return [float(scores[0])]
|
||
|
||
cc_components = [
|
||
"i_cva6",
|
||
"commit_stage_i",
|
||
"controller_i",
|
||
"csr_regfile_i",
|
||
"ex_stage_i",
|
||
"i_frontend",
|
||
"id_stage_i",
|
||
"issue_stage_i",
|
||
]
|
||
|
||
fc_components = [
|
||
"ISA",
|
||
"CSR access",
|
||
"TRAPs",
|
||
]
|
||
|
||
cc_score_metric = rb.TableMetric('Coverage results')
|
||
cc_score_metric.add_value("COMPONENT", "SCORE", "LINE", "COND", "TOGGLE")
|
||
for component in cc_components:
|
||
cc_scores = get_cc_scores(component)
|
||
cc_score_metric.add_value(component, *cc_scores)
|
||
|
||
fc_score_metric = rb.TableMetric('Functional results')
|
||
fc_score_metric.add_value("FEATURE", "SCORE")
|
||
for component in fc_components:
|
||
fc_scores = get_fc_scores(component)
|
||
fc_score_metric.add_value(component, *fc_scores)
|
||
|
||
coverage_score = int(get_cc_scores("i_cva6")[0])
|
||
report = rb.Report(f'{coverage_score}%')
|
||
report.add_metric(cc_score_metric)
|
||
report.add_metric(fc_score_metric)
|
||
|
||
report.dump()
|
||
|
||
print("Code Coverage Results :\n")
|
||
pprint(cc_score_metric.values)
|
||
print("\nFunctional Coverage Results :\n")
|
||
for i in range(0, 4):
|
||
pprint(fc_score_metric.values[i])
|