sceptic-biomem/ScEpTIC/config/memory_config.py
2026-07-10 10:38:57 +02:00

75 lines
2.6 KiB
Python

from ScEpTIC.config.base_config import ScEpTICBaseConfig
from ScEpTIC.emulator.memory.physical.physical_memory_management_unit import PhysicalMemoryManagementUnit
class BaseMemoryConfig(ScEpTICBaseConfig):
"""
Configuration for volatile / non-volatile memory
"""
_config_domain = {
'enabled': {'class': bool, 'mode': 'set'},
'contains_stack': {'class': bool, 'mode': 'set'},
'contains_heap': {'class': bool, 'mode': 'set'},
'contains_gst': {'class': bool, 'mode': 'set'},
'gst_prefix': {'class': str, 'mode': 'set'},
'gst_base_address': {'class': int, 'mode': 'set'},
'max_size': {'class': int, 'mode': 'set'},
'gst_mmu': {'class': PhysicalMemoryManagementUnit, 'mode': 'set'},
}
def __init__(self, main_config):
super().__init__(main_config)
self.enabled = True
self.contains_stack = False
self.contains_heap = False
self.contains_gst = True
self.gst_prefix = 'GST'
self.gst_base_address = 0
self.max_size = 0
self.gst_mmu = None
class MemoryConfig(ScEpTICBaseConfig):
"""
Memory configuration
"""
_config_domain = {
'stack_base_address': {'class': int, 'mode': 'set'},
'stack_prefix': {'class': str, 'mode': 'set'},
'stack_mmu': {'class': PhysicalMemoryManagementUnit, 'mode': 'set'},
'heap_base_address': {'class': int, 'mode': 'set'},
'heap_prefix': {'class': str, 'mode': 'set'},
'heap_mmu': {'class': PhysicalMemoryManagementUnit, 'mode': 'set'},
'gst_default_memory': {'class': 'specific', 'values': ['volatile', 'non_volatile'], 'mode': 'set'},
'gst_other_memory_section': {'class': str, 'mode': 'set'},
'address_size': {'class': int, 'mode': 'set'},
'check_memory_size': {'class': bool, 'mode': 'set'},
}
def __init__(self, main_config):
super().__init__(main_config)
self.volatile = BaseMemoryConfig(main_config)
self.volatile.set_config('gst_prefix', 'VGST')
self.volatile.set_config('contains_stack', True)
self.volatile.set_config('contains_heap', True)
self.non_volatile = BaseMemoryConfig(main_config)
self.non_volatile.set_config('gst_prefix', 'NGST')
self.stack_base_address = 0
self.stack_prefix = 'S'
self.stack_mmu = None
self.heap_base_address = 0
self.heap_prefix = 'H'
self.heap_mmu = None
self.gst_default_memory = 'volatile'
self.gst_other_memory_section = '.DATA,.NVM'
self.address_size = 32
self.check_memory_size = True