peary/interfaces/Memory/memory.hpp

Peary Memory Interface. More…

Namespaces

Name
peary
peary::interface

Classes

Name
class peary::interface::iface_mem_config Configuration class for Memory interface.
class peary::interface::iface_mem Peary Memory Interface.

Detailed Description

Peary Memory Interface.

Copyright: Copyright (c) 2016-2025 CERN and the Peary Caribou authors. This software is distributed under the terms of the LGPL-3.0-only License, copied verbatim in the file “LICENSE.md”. SPDX-License-Identifier: LGPL-3.0-only

Source code

  
#pragma once

#include <cstdint>
#include <cstdio>
#include <string>
#include <vector>

#include <fcntl.h>
#include <sys/mman.h>

#include "peary/interfaces/Interface.hpp"
#include "peary/interfaces/InterfaceManager.hpp"
#include "peary/utils/datatypes.hpp"
#include "peary/utils/exceptions.hpp"

namespace peary::interface {

    class iface_mem_config : public InterfaceConfiguration {
    public:
        iface_mem_config(std::string const& devicepath, const utils::memory_map& mem);

        // Memory map
        utils::memory_map _mem;

        using InterfaceConfiguration::operator<;
        virtual bool operator<(const iface_mem_config& rhs) const;
    };

    class iface_mem : public Interface<size_t, uintptr_t, iface_mem_config> {
    public:
        explicit iface_mem(const configuration_type& config);

        ~iface_mem() override;

        // Access to FPGA memory mapped registers
        int _memfd;

        // Buffer
        void* _mappedMemory;

        GENERATE_FRIENDS()

        
        utils::memory_map mem() const { return _mem; }

        iface_mem() = delete;

    protected:
        std::pair<size_t, uintptr_t> write(const std::pair<size_t, uintptr_t>&) override;

        uintptr_t readWord(const size_t) const;

        dataVector_type read(const size_t&, const unsigned int) override;

    private:
        // Memory map
        const utils::memory_map _mem;

        void mapMemory(const utils::memory_map&);

        friend iface_mem& InterfaceManager::getInterface<iface_mem>(const configuration_type&);

        friend void InterfaceManager::deleteInterface<iface_mem>(iface_mem*);
    };

} // namespace peary::interface
  

Updated on 2025-11-14 at 11:31:23 +0100