46 lines
1.7 KiB
Python
46 lines
1.7 KiB
Python
from ScEpTIC.config.base_config import ScEpTICBaseConfig
|
|
from ScEpTIC.emulator.energy.system_energy_model import SystemEnergyModel
|
|
|
|
|
|
class EnergyAnalysisConfig(ScEpTICBaseConfig):
|
|
"""
|
|
Configuration for the energy analysis
|
|
"""
|
|
|
|
_config_domain = {
|
|
'system_model': {'class': SystemEnergyModel, 'mode': 'set'},
|
|
'ignore_power_failures_during_state_save': {'class': bool, 'mode': 'set'},
|
|
'calculate_cache_only': {'class': bool, 'mode': 'set'},
|
|
'max_simulation_time': {'class': int, 'mode': 'set'},
|
|
}
|
|
|
|
|
|
def __init__(self, main_config):
|
|
super().__init__(main_config)
|
|
|
|
self.system_model = None
|
|
self.ignore_power_failures_during_state_save = False
|
|
self.calculate_cache_only = False
|
|
self.max_simulation_time = 0
|
|
|
|
self._register_config_callback("system_model", self._system_model_callback)
|
|
|
|
|
|
def _system_model_callback(self, config_name, config_value):
|
|
"""
|
|
Callback to configure all the parameters given the system model (ensures consistency)
|
|
:param config_name: the configuration name
|
|
:param config_value: the configuration value
|
|
"""
|
|
if not self.system_model.mcu.has_nvm:
|
|
self._main_config.memory.non_volatile.set_config("enabled", False)
|
|
|
|
self._main_config.register_file.set_config("n_physical_registers", self.system_model.mcu.registers)
|
|
self._main_config.memory.volatile.set_config("max_size", self.system_model.mcu.volatile_memory_size)
|
|
self._main_config.memory.non_volatile.set_config("max_size", self.system_model.mcu.non_volatile_memory_size)
|
|
|
|
|
|
# Returns the configuration
|
|
def get_config(main_config):
|
|
return EnergyAnalysisConfig(main_config)
|