75 lines
2.6 KiB
Python
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 |