Source code for m2isar.transforms.validate_behav.validate

# SPDX-License-Identifier: Apache-2.0
#
# This file is part of the M2-ISA-R project: https://github.com/tum-ei-eda/M2-ISA-R
#
# Copyright (C) 2022
# Chair of Electrical Design Automation
# Technical University of Munich

"""validate behavior in M2-ISA-R metamodel."""

import sys
import argparse
import logging
import pathlib

from ...metamodel import patch_model, load_model, dump_model
from ...warnings import WarningsManager, WarningsInfo, add_warnings_flags, KNOWN_WARNINGS
from .visitor import ValidateBehavVisitor

from . import visitor

[docs] class ValidatorContext(WarningsManager): """Track miscellaneous information throughout the validation process.""" def __init__(self, warnings_info: WarningsInfo = None): super().__init__(warnings_info)
[docs] def get_parser(): # read command line args parser = argparse.ArgumentParser() parser.add_argument("top_level", help="A .m2isarmodel file.") parser.add_argument("--log", default="info", choices=["critical", "error", "warning", "info", "debug"]) add_warnings_flags(parser, KNOWN_WARNINGS, KNOWN_WARNINGS) return parser
[docs] def validate_behav(model_obj, warnings_info): logger = logging.getLogger("validate_behav") for _, core_def in model_obj.cores.items(): logger.debug("validating behavior for core %s", core_def.name) context = ValidatorContext(warnings_info) visitor = ValidateBehavVisitor() for _, instr_def in core_def.instructions.items(): logger.debug("validating behavior for instr %s", instr_def.name) visitor.generate(instr_def.operation, context) for _, set_def in model_obj.sets.items(): logger.debug("validating behavior for set %s", set_def.name) context = ValidatorContext(warnings_info) visitor = ValidateBehavVisitor() for _, instr_def in set_def.instructions.items(): logger.debug("validating behavior for instr %s", instr_def.name) visitor.generate(instr_def.operation, context)
# return model_obj
[docs] def run(args): # initialize logging logging.basicConfig(level=getattr(logging, args.log.upper())) # resolve model paths top_level = pathlib.Path(args.top_level) model_obj = load_model(top_level) warnings_info = args.warnings alidate_behav(model_obj, warnings_info)
[docs] def main(argv): parser = get_parser() args = parser.parse_args(argv) run(args)
if __name__ == "__main__": main(sys.argv[1:])