文章目录
- TrafficGenerator 类详解
- 1 类定义与继承
- 2 构造函数
- 3 主要成员函数
- 4 主要成员变量
- 5 典型用法流程
- 6 设计目的
TrafficGenerator 类详解
1 类定义与继承
class TrafficGenerator : public Initiator
- 继承自
Initiator
说明它是一个仿真流量发生器,负责产生并发起内存访问请求。
2 构造函数
TrafficGenerator(DRAMSys::Config::TrafficGenerator const& config,sc_core::sc_time interfaceClk,uint64_t memorySize,unsigned int defaultDataLength,MemoryManager& memoryManager,std::function<void()> transactionFinished,std::function<void()> terminateInitiator);TrafficGenerator(DRAMSys::Config::TrafficGeneratorStateMachine const& config,sc_core::sc_time interfaceClk,uint64_t memorySize,unsigned int defaultDataLength,MemoryManager& memoryManager,std::function<void()> transactionFinished,std::function<void()> terminateInitiator);
- 支持两种配置类型:普通流量发生器和状态机流量发生器
- 构造参数包括时钟周期、内存大小、默认数据长度、内存管理器、事务完成回调、终止回调。
3 主要成员函数
void bind(tlm_utils::multi_target_base<>& target) override { issuer.iSocket.bind(target); }
- 将内部
RequestIssuer
的 socket
绑定到目标(通常是DRAMSys的tSocket),实现SystemC/TLM 的连接
uint64_t totalRequests() override;
Request nextRequest();
- 产生下一个请求(读/写等),通常由仿真主循环调用。
std::optional<unsigned int> stateTransition(unsigned int from);
- 用于状态机流量发生器,决定状态转移(比如从一个流量状态跳到另一个状态)
4 主要成员变量
requestsInState
: 当前状态下已发出的请求数currentState
: 当前状态编号(用于状态机流量发生器)stateTransistions
: 状态转移表,描述状态机的行为idleStateClks
: 每个状态的空闲周期数(用于模拟等待)generatorPeriod
: 流量发生器的周期(SystemC 时间单位)randomGenerator
: 随机数生成器,用于流量分布等producers
: 每个状态对应的请求生产器(RequestProducers)issuer
: 请求发起器,负责将请求通过TLM socket发出去。
5 典型用法流程
- 构造时根据配置初始化各成员变量
- 通过
bind()
连接到DRAMSys 的 TLM socket - 主循环调用
nextRequest()
产生请求,issuer
负责发出请求 - 如果是状态机流量发生器,使用stateTransasion()控制状态跳转
- 事务完成和终止由回调函数处理
6 设计目的
- 用于仿真中自动产生内存访问流量(如随机读写、特定模式、状态机控制等)。
- 支持多种流量生成方式,配置灵活。
- 通过TLM接口与DRAMSys进行交互。