first commit
This commit is contained in:
0
midware/bus/__init__.py
Normal file
0
midware/bus/__init__.py
Normal file
55
midware/bus/cache_handler.py
Normal file
55
midware/bus/cache_handler.py
Normal file
@@ -0,0 +1,55 @@
|
||||
'''
|
||||
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()
|
||||
0
midware/bus/chip_register.py
Normal file
0
midware/bus/chip_register.py
Normal file
Reference in New Issue
Block a user