CYNQ  0.3.0
Framework to develop FPGA applications in C++ with the easiness of PYNQ
datamover.hpp
1 /*
2  * See LICENSE for more information about licensing
3  *
4  * Copyright 2023
5  * Author: Luis G. Leon-Vega <luis.leon@ieee.org>
6  * Diego Arturo Avila Torres <diego.avila@uned.cr>
7  *
8  */
9 #pragma once
10 #include <xrt/xrt_bo.h>
11 
12 #include <cynq/datamover.hpp>
13 #include <cynq/enums.hpp>
14 #include <cynq/hardware.hpp>
15 #include <cynq/status.hpp>
16 #include <cynq/xrt/memory.hpp>
17 #include <memory>
18 
19 namespace cynq {
25  std::shared_ptr<xrt::bo> bo_;
27  MemoryType type_;
28 };
29 
37 class DMADataMover : public IDataMover {
38  public:
48  DMADataMover(const uint64_t addr,
49  std::shared_ptr<HardwareParameters> hwparams);
50 
57  DMADataMover() = delete;
63  virtual ~DMADataMover();
85  std::shared_ptr<IMemory> GetBuffer(
86  const size_t size, const int memory_bank = 0,
87  const MemoryType type = MemoryType::Dual) override;
106  Status Upload(const std::shared_ptr<IMemory> mem, const size_t size,
107  const size_t offset, const ExecutionType exetype) override;
123  Status Download(const std::shared_ptr<IMemory> mem, const size_t size,
124  const size_t offset, const ExecutionType exetype) override;
132  Status Sync(const SyncType type) override;
139  DeviceStatus GetStatus() override;
140 
141  private:
143  std::unique_ptr<DataMoverParameters> data_mover_params_;
144 };
145 } // namespace cynq
DMADataMover class Provides the api from which to interact with the data buffers responsable for memo...
Definition: datamover.hpp:37
DeviceStatus GetStatus() override
GetStatus method Returns the status of the data mover in terms of transactions.
Definition: datamover.cpp:92
std::shared_ptr< IMemory > GetBuffer(const size_t size, const int memory_bank=0, const MemoryType type=MemoryType::Dual) override
GetBuffer method This method allocates a memory buffer. Depending on the MemoryType,...
Definition: datamover.cpp:53
DMADataMover()=delete
Default constructor.
Status Sync(const SyncType type) override
Sync method Synchronizes data movements in case of asynchronous Upload/Download.
Definition: datamover.cpp:205
virtual ~DMADataMover()
~DMADataMover destructor method Destroy the DMADataMover object.
Definition: datamover.cpp:94
Status Upload(const std::shared_ptr< IMemory > mem, const size_t size, const size_t offset, const ExecutionType exetype) override
Upload method This method moves the data from the host to the device using a DMA engine....
Definition: datamover.cpp:105
Status Download(const std::shared_ptr< IMemory > mem, const size_t size, const size_t offset, const ExecutionType exetype) override
Download method.
Definition: datamover.cpp:156
Interface for standardising the API of DataMover for a specific device: XRTDataMover.
Definition: datamover.hpp:40
Metadata inserted into each XRTMemory instance.
Definition: datamover.hpp:23
MemoryType type_
Definition: datamover.hpp:27
std::shared_ptr< xrt::bo > bo_
Definition: datamover.hpp:25
Structure to define the return characteristics of each function.
Definition: status.hpp:19