CYNQ  0.3.0
Framework to develop FPGA applications in C++ with the easiness of PYNQ
accelerator.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 
11 #include <cynq/accelerator.hpp>
12 #include <cynq/enums.hpp>
13 #include <cynq/status.hpp>
14 #include <memory>
15 
16 namespace cynq {
22 class MMIOAccelerator : public IAccelerator {
23  public:
27  MMIOAccelerator() = delete;
37  explicit MMIOAccelerator(const uint64_t addr);
42  virtual ~MMIOAccelerator();
57  Status Start(const StartMode mode) override;
58 
70  Status Stop() override;
71 
82  Status Sync() override;
83 
96  int GetMemoryBank(const uint pos) override;
97 
105  DeviceStatus GetStatus() override;
106 
119  Status Attach(const uint64_t index, std::shared_ptr<IMemory> mem) override;
120 
121  protected:
135  Status WriteRegister(const uint64_t address, const uint8_t *data,
136  const size_t size) override;
149  Status ReadRegister(const uint64_t address, uint8_t *data,
150  const size_t size) override;
151 
166  Status AttachRegister(const uint64_t index, uint8_t *data,
167  const RegisterAccess access,
168  const size_t size) override;
169 
170  private:
172  uint64_t addr_;
174  uint64_t addr_space_size_;
176  std::unique_ptr<AcceleratorParameters> accel_params_;
178  Status SyncRegisters(const SyncType type);
179 };
180 } // namespace cynq
Interface for standardising the API for any Accelerator device: XRTAccelerator.
Definition: accelerator.hpp:37
MMIOAccelerator class This class provides the api to operate the accelerator.
Definition: accelerator.hpp:22
DeviceStatus GetStatus() override
GetStatus method This returns the accelerator state by using the DeviceStatus. This reads the control...
Definition: accelerator.cpp:99
Status ReadRegister(const uint64_t address, uint8_t *data, const size_t size) override
Read Register method.
Definition: accelerator.cpp:138
MMIOAccelerator()=delete
Delete the default constructor since address is needed.
virtual ~MMIOAccelerator()
~MMIOAccelerator destructor method Destroy the MMIOAccelerator object
Definition: accelerator.cpp:226
Status Sync() override
Sync method.
Definition: accelerator.cpp:91
int GetMemoryBank(const uint pos) override
Get the memory bank ID (not implemented)
Definition: accelerator.cpp:232
Status AttachRegister(const uint64_t index, uint8_t *data, const RegisterAccess access, const size_t size) override
Implementation of the Attach Register method.
Definition: accelerator.cpp:185
Status Attach(const uint64_t index, std::shared_ptr< IMemory > mem) override
Attach a memory argument.
Definition: accelerator.cpp:206
Status Start(const StartMode mode) override
Start method.
Definition: accelerator.cpp:73
Status Stop() override
Stop method.
Definition: accelerator.cpp:82
Status WriteRegister(const uint64_t address, const uint8_t *data, const size_t size) override
Write Register method Writes to the register of the accelerator.
Definition: accelerator.cpp:123
Structure to define the return characteristics of each function.
Definition: status.hpp:19