对于 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