CHI (Coherent Hub Interface) 协议 Wrapper 层实现 - 桥接两个不同的CHI协议实现模块。
本项目提供了一个统一的C++11接口,用于访问和操作两个不同的CHI协议实现模块(Module A 和 Module B)。Wrapper层负责:
- API统一化:将不同的API风格转换为统一的接口
- 协议转换:处理不同模块间的协议差异
- 事务管理:提供同步/异步事务支持
- 错误处理:统一的错误处理和报告机制
- 性能监控:统计和追踪功能
chi_wrapper/
├── include/ # 头文件
│ ├── chi_common.h # 通用类型和定义
│ ├── chi_module_a.h # 模块A接口定义
│ ├── chi_module_b.h # 模块B接口定义
│ ├── chi_wrapper.h # Wrapper公共接口
│ └── chi_wrapper_impl.h # Wrapper实现
├── src/ # 源文件
│ ├── chi_wrapper.cpp # Wrapper实现
│ ├── chi_module_a_impl.cpp # 模块A模拟实现
│ └── chi_module_b_impl.cpp # 模块B模拟实现
├── test/ # 测试文件
│ └── chi_wrapper_test.cpp
├── CMakeLists.txt # CMake构建配置
└── README.md # 本文件
mkdir build
cd build
cmake ..
make./chi_wrapper_test#include "chi_wrapper.h"
// 创建Wrapper实例
chi_wrapper::WrapperConfig config;
config.primary_module = chi_wrapper::CHIModuleType::MODULE_A;
config.enable_fallback = true;
auto wrapper = chi_wrapper::create_wrapper(config);
// 初始化
if (!wrapper->initialize()) {
std::cerr << "初始化失败" << std::endl;
return;
}// 同步读取
chi::TransactionResult result = wrapper->read_no_snp(0x1000, 64);
if (result.is_success()) {
std::vector<uint8_t>& data = result.data;
std::cout << "读取成功,数据大小: " << data.size() << " bytes" << std::endl;
}std::vector<uint8_t> write_data(64, 0xAA);
chi::TransactionResult result = wrapper->write_unique(0x2000, write_data);
if (result.is_success()) {
std::cout << "写入成功" << std::endl;
}// 原子加法
chi::TransactionResult result = wrapper->atomic_add(0x3000, 100);
// 比较并交换
chi::TransactionResult result = wrapper->atomic_cas(0x3000, old_value, new_value);chi::TransactionConfig config;
config.type = chi::TransactionType::READ_NO_SNP;
config.address = 0x4000;
config.size = 64;
config.qos = 15; // 高优先级
// 设置回调
wrapper->set_completion_callback([](const chi::TransactionResult& result) {
if (result.is_success()) {
std::cout << "异步读取完成" << std::endl;
}
});
// 发起异步请求
chi::TransactionID txn_id = wrapper->read_async(config, nullptr);
// 等待结果
chi::TransactionResult result = wrapper->wait_for_completion(txn_id, 1000);// 切换到备用模块
if (wrapper->switch_active_module(chi_wrapper::CHIModuleType::MODULE_B)) {
std::cout << "模块切换成功" << std::endl;
}
// 查询当前模块
chi_wrapper::CHIModuleType current = wrapper->get_active_module();// 获取统计信息
chi_wrapper::WrapperStatistics stats = wrapper->get_statistics();
std::cout << "总事务数: " << stats.total_transactions << std::endl;
std::cout << "成功事务: " << stats.successful_transactions << std::endl;
std::cout << "失败事务: " << stats.failed_transactions << std::endl;
// 导出追踪日志
wrapper->export_traces("traces.csv");ReadNoSnp- 无探查读取ReadShared- 读取共享数据ReadUnique- 读取独占数据ReadOnce- 读取一次ReadClean- 读取干净数据
WriteNoSnp- 无探查写入WriteUnique- 独占写入WriteBack- 回写CopyBack- 拷贝回写
AtomicAdd- 原子加法AtomicCAS- 比较并交换AtomicLoadClr- 原子加载清除AtomicXor- 原子异或
CleanUnique- 清理并唯一化MakeUnique- 使缓存行唯一Evict- 驱逐缓存行CleanShared- 清理共享CleanInvalid- 清理并无效化
StashOnceUnique- Stash一次独占StashOnceShared- Stash一次共享DVMOp- 分布式虚拟内存操作
Wrapper提供了统一的错误处理机制:
try {
wrapper->read_no_snp(invalid_addr, 64);
} catch (const chi_wrapper::ProtocolException& e) {
std::cerr << "协议错误: " << e.what() << std::endl;
} catch (const chi_wrapper::TimeoutException& e) {
std::cerr << "事务超时: " << e.what() << std::endl;
} catch (const std::exception& e) {
std::cerr << "通用错误: " << e.what() << std::endl;
}chi_wrapper::WrapperConfig config;
// 主模块和备份模块
config.primary_module = CHIModuleType::MODULE_A;
config.backup_module = CHIModuleType::MODULE_B;
config.enable_fallback = true;
// 超时和资源限制
config.default_timeout_ms = 1000;
config.max_pending_transactions = 256;
// 诊断选项
config.enable_logging = true;
config.strict_protocol_checking = true;- 异步操作:对于高吞吐量场景,优先使用异步API
- 事务批处理:Module B支持批量读取操作
- 优先级:通过QoS字段设置事务优先级
- 模块选择:根据负载选择合适的底层模块
- 在
chi_common.h的TransactionType枚举中添加新类型 - 在
chi_wrapper_impl.h中实现转换逻辑 - 更新相应的转换函数
- 在
chi_wrapper.h中添加新的模块类型枚举值 - 创建新的模块接口头文件
- 实现模块的具体API
- 在
chi_wrapper_impl.h中添加模块切换和转换逻辑
项目包含完整的单元测试套件,涵盖:
- 所有事务类型的基本功能测试
- 异步操作测试
- 模块切换测试
- 错误处理测试
- 统计和追踪功能测试
运行测试:
cd build
./chi_wrapper_test- C++11 兼容的编译器
- CMake 3.10 或更高版本
- 标准库(
<thread>,<mutex>,<future>等)
本项目仅供演示和学习使用。
如有问题或建议,请提交Issue。
- ARM IHI 0050: AMBA CHI Architecture Specification
- CHI协议规范文档(位于项目根目录)