Files
virtual_simulation_midware/midware/bus/cache_handler.py
2026-06-16 15:40:19 +08:00

55 lines
2.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'''
5. 缓存交互模块midware/bus/cache_handler.py
实现与 SJA1000/61580 共享缓存的交互提供WriteDoubleWord/ReadDoubleWord核心操作对接虚拟芯片
'''
from loguru import logger
class CacheHandler:
"""缓存交互层实现sysbus WriteDoubleWord/ReadDoubleWord操作"""
def __init__(self):
# 模拟共享缓存字典实现key=内存地址value=32位无符号整数
self.shared_cache = {}
logger.info("共享缓存初始化完成模拟SJA1000/61580")
def write_double_word(self, mem_addr, data):
"""
写入双字32位数据到共享缓存
:param mem_addr: 内存地址int
:param data: 16/32位数据int自动转为32位无符号整数
"""
if not isinstance(mem_addr, int) or not isinstance(data, int):
logger.error("写入缓存参数错误,地址/数据必须为整数")
return False
# 转为32位无符号整数
##给RENODE的写入的语句未定
self.shared_cache[mem_addr] = data & 0xFFFFFFFF
logger.debug(f"写入缓存:地址{hex(mem_addr)},数据{hex(self.shared_cache[mem_addr])}")
return True
def read_double_word(self, mem_addr):
"""
从共享缓存读取双字32位数据
:param mem_addr: 内存地址int
:return: 32位无符号整数地址不存在返回0
"""
if not isinstance(mem_addr, int):
logger.error("读取缓存参数错误,地址必须为整数")
return 0
data = self.shared_cache.get(mem_addr, 0)
logger.debug(f"读取缓存:地址{hex(mem_addr)},数据{hex(data)}")
return data
def clear_cache(self, mem_addr=None):
"""清空指定地址/全部缓存"""
if mem_addr:
if mem_addr in self.shared_cache:
del self.shared_cache[mem_addr]
logger.debug(f"清空缓存地址:{hex(mem_addr)}")
else:
self.shared_cache.clear()
logger.info("清空全部共享缓存")
return True
# 单例模式,全局唯一缓存实例
cache_handler = CacheHandler()