1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00
VILLASnode/include/villas/nodes/fpga.hpp
Niklas Eiling 18aa0c8862 rework fpga node type
The various changes in fpga require a rewrite of the fpga node type.
To allow relative paths for the fpga config file, Config and SuperNode
had to be modified so they store the path of the main config file.
The syntax of the fpga node type configuration has changed - the example
config in etc has been modified accordingly.

Signed-off-by: Niklas Eiling <niklas.eiling@eonerc.rwth-aachen.de>
2024-02-08 11:19:51 +01:00

91 lines
2.2 KiB
C++

/* Communicate with VILLASfpga Xilinx FPGA boards.
*
* Author: Steffen Vogel <post@steffenvogel.de>
* Author: Niklas Eiling <niklas.eiling@eonerc.rwth-aachen.de>
* SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University
* SPDX-FileCopyrightText: 2023 Niklas Eiling <niklas.eiling@eonerc.rwth-aachen.de>
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include <villas/format.hpp>
#include <villas/node.hpp>
#include <villas/node/config.hpp>
#include <villas/timing.hpp>
#include <villas/fpga/card.hpp>
#include <villas/fpga/ips/dma.hpp>
#include <villas/fpga/node.hpp>
#include <villas/fpga/pcie_card.hpp>
namespace villas {
namespace node {
class FpgaNode : public Node {
enum InterfaceType { PCIE, PLATFORM };
protected:
// Settings
std::string cardName;
std::list<std::string> connectStrings;
// State
std::shared_ptr<fpga::Card> card;
std::shared_ptr<villas::fpga::ip::Dma> dma;
std::shared_ptr<villas::MemoryBlock> blockRx[2];
std::shared_ptr<villas::MemoryBlock> blockTx;
// Non-public methods
virtual int _read(Sample *smps[], unsigned cnt) override;
virtual int _write(Sample *smps[], unsigned cnt) override;
public:
FpgaNode(const uuid_t &id = {}, const std::string &name = "");
virtual ~FpgaNode();
virtual int prepare() override;
virtual int parse(json_t *json) override;
virtual int check() override;
virtual int start() override;
virtual std::vector<int> getPollFDs() override;
virtual const std::string &getDetails() override;
};
class FpgaNodeFactory : public NodeFactory {
public:
using NodeFactory::NodeFactory;
virtual Node *make(const uuid_t &id = {},
const std::string &nme = "") override {
auto *n = new FpgaNode(id, nme);
init(n);
return n;
}
virtual int getFlags() const override {
return (int)NodeFactory::Flags::SUPPORTS_READ |
(int)NodeFactory::Flags::SUPPORTS_WRITE |
(int)NodeFactory::Flags::SUPPORTS_POLL;
}
virtual std::string getName() const override { return "fpga"; }
virtual std::string getDescription() const override { return "VILLASfpga"; }
virtual int start(SuperNode *sn) override;
};
} // namespace node
} // namespace villas