以 C++ 编写流量生成器 - 2023.2 简体中文

Vitis 统一软件平台文档 应用加速开发 (UG1393)

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 简体中文

对于 API/伪代码,将 AXI4 存储器映射传输事务的单个实例用于整个传输事务。这与 AMD SystemC 模块中有效载荷的使用方式相符。对于 AXI4 主接口,可使用 b_transport(aximm_packet) API。完成调用后,将以 AXI4 从接口提供的响应来更新 aximm_packet。对于 AXI4 从接口,可使用 sample_transaction()send_response(aximm_packet) API。

以下代码片段显示了 C++ 关联环境中的 API 使用方式。

  • C++ 主机的代码片段:
    auto payload = generate_random_transaction(); //Custom Random transaction generator. Users can configure AXI propeties on the payload.
    /* Or User can set the AXI transaction properties as follows
    payload->set_addr(std::rand() * 4);
    payload->set_len(1 + (std::rand() % 255));
    payload->set_size(1 << (std::rand() % 3));
    */
     
    master_uti.b_transport(*payload.get(), std::rand() % 0x10); //A blocking call. Response will be updated in the same payload. Each AXI MM transaction will use same payload for whole transaction
    std::cout << "-----------Transaction Response------------" << std::endl;
    std::cout << *payload << std::endl; //Prints AXI transaction info
  • C++ 从机的代码片段:
    auto& payload = slave_util.sample_transaction(); // Sample the transaction
     
    //If it is read transaction, give read data
    if(payload.cmd() == xtlm_ipc::aximm_packet_command_READ)
    {
        rd_resp.resize(payload.len()*payload.size());
        std::generate(rd_resp.begin(), rd_resp.end(), []()
        {   return std::rand()%0x100;});
    }
     
    //Set AXI response (for Read & Write)
    payload.set_resp(std::rand()%4);
    slave_util.send_response(payload); //Send the response to the master