예제 #1
0
    def test_type_covergroup_two_coverpoints(self):
        db_creator = DbCreator()

        db_creator.dummy_test_data()
        inst = db_creator.dummy_instance()

        db_creator.create_covergroup(
            inst, "cp_t",
            dict(coverpoints=dict(
                a_cp=dict(bins=[
                    ("b1", 1),
                    ("b2", 1),
                    ("b3", 0),
                    ("b4", 0),
                ]),
                b_cp=dict(bins=[
                    ("b1", 0),
                    ("b2", 0),
                    ("b3", 0),
                    ("b4", 0),
                ]),
            )))

        report = CoverageReportBuilder.build(db_creator.db)

        self.assertEqual(1, len(report.covergroups))
        self.assertEqual(2, len(report.covergroups[0].coverpoints))
        self.assertEqual(50.0, report.covergroups[0].coverpoints[0].coverage)
        self.assertEqual(0.0, report.covergroups[0].coverpoints[1].coverage)
        self.assertEqual(25.0, report.covergroups[0].coverage)
예제 #2
0
    def get_ucis_report(self):
        covergroups = CoverageRegistry.inst().covergroup_types()
        db = MemFactory.create()
        cov_visitor = CoverageSaveVisitor(db)
        cov_visitor.save(
            TestData(UCIS_TESTSTATUS_OK, "UCIS:simulator",
                     datetime.now().strftime("%Y%m%d%H%M%S")), covergroups)

        return CoverageReportBuilder.build(cov_visitor.db)
예제 #3
0
def get_coverage_report_model() -> CoverageReport:
    """Returns a coverage report model of all covergroups"""
    covergroups = CoverageRegistry.inst().covergroup_types()

    db = MemFactory.create()
    save_visitor = CoverageSaveVisitor(db)
    now = datetime.now
    save_visitor.save(
        TestData(UCIS_TESTSTATUS_OK, "UCIS:simulator", ucis.ucis_Time()),
        covergroups)

    return CoverageReportBuilder.build(db)
예제 #4
0
    def test_simple_typecov(self):
        ucisdb = "file.ucis"
        db = MemFactory.create()

        testnode = db.createHistoryNode(None, "logicalName", ucisdb,
                                        UCIS_HISTORYNODE_TEST)
        td = TestData(teststatus=UCIS_TESTSTATUS_OK,
                      toolcategory="UCIS:simulator",
                      date="20200202020")
        testnode.setTestData(td)

        file = db.createFileHandle("dummy", os.getcwd())

        srcinfo = SourceInfo(file, 0, 0)
        du = db.createScope(
            "foo.bar",
            srcinfo,
            1,  # weight
            UCIS_OTHER,
            UCIS_DU_MODULE,
            UCIS_ENABLED_STMT | UCIS_ENABLED_BRANCH
            | UCIS_ENABLED_COND | UCIS_ENABLED_EXPR
            | UCIS_ENABLED_FSM | UCIS_ENABLED_TOGGLE
            | UCIS_INST_ONCE | UCIS_SCOPE_UNDER_DU)

        instance = db.createInstance(
            "dummy",
            None,  # sourceinfo
            1,  # weight
            UCIS_OTHER,
            UCIS_INSTANCE,
            du,
            UCIS_INST_ONCE)

        cg = instance.createCovergroup(
            "cg",
            SourceInfo(file, 3, 0),
            1,  # weight
            UCIS_OTHER)

        cp = cg.createCoverpoint(
            "t",
            SourceInfo(file, 4, 0),
            1,  # weight
            UCIS_VLOG)
        cp.setComment("Hello There")

        cp.createBin("auto[a]", SourceInfo(file, 4, 0), 1, 4, "a")

        cov_report = CoverageReportBuilder.build(db)

        print("covergroups: " + str(len(cov_report.covergroups)))
예제 #5
0
    def test_type_covergroup_two_coverpoints_weights_options(self):
        db_creator = DbCreator()

        db_creator.dummy_test_data()
        inst = db_creator.dummy_instance()

        type_cg_1 = db_creator.create_covergroup(
            inst, "cg_t",
            dict(options=dict(weight=1),
                 coverpoints=dict(a_cp=dict(bins=[
                     ("b1", 1),
                     ("b2", 1),
                     ("b3", 0),
                     ("b4", 0),
                 ]),
                                  b_cp=dict(bins=[
                                      ("b1", 0),
                                      ("b2", 0),
                                      ("b3", 0),
                                      ("b4", 0),
                                      ("b5", 1),
                                      ("b6", 1),
                                      ("b7", 1),
                                      ("b8", 1),
                                  ]))))

        type_cg_2 = db_creator.create_covergroup(
            inst, "cg_t",
            dict(options=dict(weight=1),
                 coverpoints=dict(a_cp=dict(bins=[
                     ("b1", 1),
                     ("b2", 1),
                     ("b3", 1),
                     ("b4", 1),
                 ]),
                                  b_cp=dict(bins=[
                                      ("b1", 1),
                                      ("b2", 1),
                                      ("b3", 1),
                                      ("b4", 1),
                                      ("b5", 1),
                                      ("b6", 1),
                                      ("b7", 1),
                                      ("b8", 1),
                                  ]))))

        report = CoverageReportBuilder.build(db_creator.db)

        self.assertEqual(2, len(report.covergroups))
        self.assertEqual(2, len(report.covergroups[0].coverpoints))
        self.assertEqual(2, len(report.covergroups[1].coverpoints))
        self.assertEqual(75.0, report.coverage)
예제 #6
0
    def test_cross(self):
        @vsc.covergroup
        class my_covergroup(object):

            def __init__(self): 
                super().__init__()
                self.a=None
                self.b=None
                self.cp1 = vsc.coverpoint(lambda:self.a,
                    bins=dict(
                        a = vsc.bin_array([], [0,15])
                    ))

                self.cp2 = vsc.coverpoint(lambda:self.b, bins=dict(
                    b = vsc.bin_array([], [0,15])
                    ))
                self.cross = vsc.cross([self.cp1, self.cp2])


            #a = 0;
            #b = 0;

        cg = my_covergroup()

        cg.a = 0 
        cg.b = 0
        print("A: ",str(cg.a), " B: ", str(cg.b))
        cg.sample() # Hit the first bin of cp1 and cp2  

            
        report = vsc.get_coverage_report()
        print("Report:\n" + report)
        out = StringIO()
        vsc.write_coverage_db("cov.xml")
        print(">================== Write XML ========================")
        vsc.write_coverage_db(out)
        print("<================== Write XML ========================")
        db = XmlFactory.read(out)
        print(">================== Build Report =====================")
        report = CoverageReportBuilder.build(db)
        print("<================== Build Report =====================")
        print(">================== Text Reporter ====================")
        reporter = TextCoverageReportFormatter(report, sys.stdout)
        print("<================== Text Reporter ====================")
        reporter.details = True
        print(">================== XML Report =======================")
        reporter.report()
        print("<================== XML Report =======================")        

        
예제 #7
0
    def test_single_type_two_inst_xml(self):
        @vsc.covergroup
        class my_cg(object):
            def __init__(self):
                self.with_sample(dict(a=vsc.uint8_t(), b=vsc.uint8_t()))

                self.a_cp = vsc.coverpoint(self.a,
                                           bins={"a": bin_array([], [0, 15])})

        my_cg_1 = my_cg()
        my_cg_2 = my_cg()

        for i in range(8):
            my_cg_1.sample(2 * i, 0)
            if i % 2 == 0:
                my_cg_1.sample(2 * i, 0)
            my_cg_2.sample(2 * i + 1, 0)
            if i % 3 == 0:
                my_cg_2.sample(2 * i + 1, 0)
                my_cg_2.sample(2 * i + 1, 0)

        print(">================== Text Report ======================")
        print("Report:\n" + vsc.get_coverage_report(True))
        print("<================== Text Report ======================")
        out = StringIO()
        vsc.write_coverage_db("cov.xml")
        print(">================== Write XML ========================")
        vsc.write_coverage_db(out)
        print("<================== Write XML ========================")
        db = XmlFactory.read(out)
        print(">================== Build Report =====================")
        report = CoverageReportBuilder.build(db)
        print("<================== Build Report =====================")
        print(">================== Text Reporter ====================")
        reporter = TextCoverageReportFormatter(report, sys.stdout)
        print("<================== Text Reporter ====================")
        reporter.details = True
        print(">================== XML Report =======================")
        reporter.report()
        print("<================== XML Report =======================")
예제 #8
0
    def test_type_covergroup_two_coverpoints_weights(self):
        db_creator = DbCreator()

        db_creator.dummy_test_data()
        inst = db_creator.dummy_instance()

        db_creator.create_covergroup(
            inst, "cg_t",
            dict(coverpoints=dict(
                a_cp=dict(options=dict(weight=4),
                          bins=[
                              ("b1", 1),
                              ("b2", 1),
                              ("b3", 0),
                              ("b4", 0),
                          ]),
                b_cp=dict(options=dict(weight=8),
                          bins=[
                              ("b1", 0),
                              ("b2", 0),
                              ("b3", 0),
                              ("b4", 0),
                              ("b5", 0),
                              ("b6", 0),
                              ("b7", 1),
                              ("b8", 1),
                          ]),
            )))

        report = CoverageReportBuilder.build(db_creator.db)

        self.assertEqual(1, len(report.covergroups))
        self.assertEqual(2, len(report.covergroups[0].coverpoints))
        self.assertEqual(50.0, report.covergroups[0].coverpoints[0].coverage)
        self.assertEqual(25.0, report.covergroups[0].coverpoints[1].coverage)
        self.assertEqual(round((100 * 4 / 12), 2),
                         report.covergroups[0].coverage)
예제 #9
0
    def merge(self, db):
        report = CoverageReportBuilder.build(db)

        self.apply(report)