OPAE C++ Core API Reference

The reference documentation for the OPAE C++ Core API is grouped into the following sections:

Overview

The OPAE C++ API enables C++ developers with the means to use FPGA resources by integrating the OPAE software stack into C++ applications.

Goals

Simplicity

Keep the API as small and lightweight as possible. Although features such as system validation and orchestration are beyond the scope of this API, using this API for their development should be relatively easy.

Extensibility and Interoperability

While keeping to the goal of simplicity, the OPAE C++ API is designed to allow for better reuse by either extending the API or by integrating with other languages.

Modern C++ Coding Practices

The OPAE C++ API uses the C++ 11 standard library and makes use of its features whenever practical. The OPAE C++ API is also designed to require the minimum number of third-party libraries/dependencies.

Error Handling

The OPAE C++ API is designed to throw exceptions when appropriate. The structure of OPAE C++ exceptions is similar to the error codes in the OPAE C API. This gives users of the API more freedom on error handling while providing better debug information in cases of failure.

Coding Style

For formatting of the OPAE C++ API complies with most of the recommendations of the Google C++ style. For example, the OPAE C++ API uses:

  • opening braces on the same line as their scope definition

  • spaces instead of tabs for indentation

  • indentation of two spaces

Fundamental Types

Basic types for the OPAE C++ API are found in the opae::fpga::types namespace. They serve as an adapter layer between the OPAE C API and the OPAE C++ layer. Aside from providing a C++ binding to the C fundamental types, these types also:

  • manage the lifetime and scope of the corresponding C struct.

  • For example a C++ destructor will take care of calling the appropriate C function to release the data structure being wrapped.

  • provide a friendly syntax for using the OPAE C type.

Most classes in this namespace have a c_type() method that returns the C data structure being wrapped, making it easy to use the OPAE C++ type with the OPAE C API. Alternatively, most classes in this namespace have implicit conversion operators that enable interoperability with the OPAE C API.

Properties

C++ class properties wraps fpga_properties and uses pvalue and guid_t to get and set properties stored in an instance of an fpga_properties. pvalue and guid_t are designed to call an accessor method in the OPAE C API to either read property values or write them. Most accessor methods in the OPAE C API share a similar signature, so pvalue generalizes them into common operations that translate into calling the corresponding C API function. guid_t follows similar patterns when reading or assigning values.

pvalue.h

namespace opae
namespace fpga
namespace types
struct guid_t
#include <opae/cxx/core/pvalue.h>

Representation of the guid member of a properties object.

Public Functions

inline guid_t(fpga_properties *p)

Construct the guid_t given its containing fpga_properties.

inline void update()

Update the local cached copy of the guid.

inline operator uint8_t*()

Return a raw pointer to the guid.

Return values

nullptr – if the guid could not be queried.

inline const uint8_t *c_type() const

Return a raw pointer to the guid.

inline guid_t &operator=(fpga_guid g)

Assign from fpga_guid Sets the guid field of the associated properties object using the OPAE properties API.

Parameters

g[in] The given fpga_guid.

Returns

a reference to this guid_t.

inline bool operator==(const fpga_guid &g)

Compare contents with an fpga_guid.

Return values

The – result of memcmp of the two objects.

inline void parse(const char *str)

Convert a string representation of a guid to binary.

Parameters

str[in] The guid string.

inline bool is_set() const

Tracks whether the cached local copy of the guid is valid.

inline void invalidate()

Invalidate the cached local copy of the guid.

Private Members

fpga_properties *props_
bool is_set_
std::array<uint8_t, 16> data_

Friends

inline friend std::ostream &operator<<(std::ostream &ostr, const guid_t &g)

Send the string representation of the guid_t to the given stream.

template<typename T>
struct pvalue
#include <opae/cxx/core/pvalue.h>

Wraps OPAE properties defined in the OPAE C API by associating an fpga_properties reference with the getters and setters defined for a property.

Template Parameters

T – The type of the property value being wrapped

Public Types

typedef std::conditional<std::is_same<T, char*>::value, fpga_result (*)(fpga_properties, T), fpga_result (*)(fpga_properties, T*)>::type getter_t

Define getter function as getter_t For char* types, do not use T* as the second argument but instead use T.

typedef fpga_result (*setter_t)(fpga_properties, T)

Define the setter function as setter_t.

typedef std::conditional<std::is_same<T, char*>::value, typename std::string, T>::type copy_t

Define the type of our copy variable For char* types use std::string as the copy.

Public Functions

inline pvalue()
inline pvalue(fpga_properties *p, getter_t g, setter_t s)

pvalue contructor that takes in a reference to fpga_properties and corresponding accessor methods for a property

Parameters
  • p – A reference to an fpga_properties

  • g – The getter function

  • s – The setter function

inline pvalue<T> &operator=(const T &v)

Overload of = operator that calls the wrapped setter.

Parameters

v – The value to set

Returns

A reference to itself

inline bool operator==(const T &other)

Compare a property for equality with a value.

Parameters

other – The value being compared to

Returns

Whether or not the property is equal to the value

inline void update()
inline operator copy_t()

Implicit converter operator - calls the wrapped getter.

Returns

The property value after calling the getter or a default value of the value type

inline fpga_result get_value(T &value) const
inline bool is_set() const

Tracks whether the cached local copy of the pvalue is valid.

inline void invalidate()

Invalidate the cached local copy of the pvalue.

inline void update()

Template specialization of char* type property updater.

Returns

The result of the property getter function.

Private Members

fpga_properties *props_
bool is_set_
getter_t get_
setter_t set_
copy_t copy_

Friends

inline friend std::ostream &operator<<(std::ostream &ostr, const pvalue<T> &p)

Stream overalod operator.

Parameters
  • ostr – The output stream

  • p – A reference to a pvalue<T> object

Returns

The stream operator after streaming the property value

properties.h

namespace opae
namespace fpga
namespace types
class properties
#include <opae/cxx/core/properties.h>

Wraps an OPAE fpga_properties object.

properties are information describing an accelerator resource that is identified by its token. The properties are used during enumeration to narrow the search for an accelerator resource, and after enumeration to provide the configuration of that resource.

Public Types

typedef std::shared_ptr<properties> ptr_t

Public Functions

properties(const properties &p) = delete
properties &operator=(const properties &p) = delete
~properties()
inline fpga_properties c_type() const

Get the underlying fpga_properties object.

inline operator fpga_properties() const

Get the underlying fpga_properties object.

Public Members

pvalue<fpga_objtype> type
pvalue<uint32_t> num_errors
pvalue<uint16_t> segment
pvalue<uint8_t> bus
pvalue<uint8_t> device
pvalue<uint8_t> function
pvalue<uint8_t> socket_id
pvalue<uint32_t> num_slots
pvalue<uint64_t> bbs_id
pvalue<fpga_version> bbs_version
pvalue<uint16_t> vendor_id
pvalue<uint16_t> device_id
pvalue<uint16_t> subsystem_vendor_id
pvalue<uint16_t> subsystem_device_id
pvalue<char*> model
pvalue<uint64_t> local_memory_size
pvalue<uint64_t> capabilities
pvalue<uint32_t> num_mmio
pvalue<uint32_t> num_interrupts
pvalue<fpga_accelerator_state> accelerator_state
pvalue<uint64_t> object_id
pvalue<fpga_token> parent
pvalue<fpga_interface> interface
guid_t guid

Public Static Functions

static properties::ptr_t get()

Create a new properties object.

Returns

A properties smart pointer.

static properties::ptr_t get(fpga_guid guid_in)

Create a new properties object from a guid.

Parameters

guid_in – A guid to set in the properties

Returns

A properties smart pointer with its guid initialized to guid_in

static properties::ptr_t get(fpga_objtype objtype)

Create a new properties object from an fpga_objtype.

Parameters

objtype – An object type to set in the properties

Returns

A properties smart pointer with its object type set to objtype.

static properties::ptr_t get(std::shared_ptr<token> t)

Retrieve the properties for a given token object.

Parameters

t[in] A token identifying the accelerator resource.

Returns

A properties smart pointer for the given token.

static properties::ptr_t get(fpga_token t)

Retrieve the properties for a given fpga_token.

Parameters

t[in] An fpga_token identifying the accelerator resource.

Returns

A properties smart pointer for the given fpga_token.

static properties::ptr_t get(std::shared_ptr<handle> h)

Retrieve the properties for a given handle object.

Parameters

h[in] A handle identifying the accelerator resource.

Returns

A properties smart pointer for the given handle.

Public Static Attributes

static const std::vector<properties::ptr_t> none

An empty vector of properties. Useful for enumerating based on a “match all” criteria.

Private Functions

properties(bool alloc_props = true)

Private Members

fpga_properties props_

Resource Classes

The token, handle, and shared_buffer classes are used to enumerate and access FPGA resources. properties are used to narrow the search space for token’s. Before enumerating the accelerator resources in the system, applications can produce one or more properties objects whose values are set to the desired characteristics for the resource. For example, an application may search for an accelerator resource based on its guid.

Once one or more token’s have been enumerated, the application must choose which token’s to request. The token is then converted to a handle by requesting that a handle object be allocated and opened for it.

Once a handle has been successfully opened, the application can read and write the associated configuration and status space. Additionally, the application may use the handle to allocate shared_buffer’s or to register event’s. The shared_buffer and event objects retain a reference to their owning handle so that the handle does not lose scope before freeing the shared_buffer and event objects.

token.h

namespace opae
namespace fpga
namespace types
class token
#include <opae/cxx/core/token.h>

Wraps the OPAE fpga_token primitive. token’s are created from an enumeration operation that uses properties describing an accelerator resource as search criteria.

Public Types

typedef std::shared_ptr<token> ptr_t

Public Functions

~token()
inline fpga_token c_type() const

Retrieve the underlying fpga_token primitive.

inline operator fpga_token() const

Retrieve the underlying fpga_token primitive.

ptr_t get_parent() const

Retrieve the parent token, or an empty pointer if there is none.

Public Static Functions

static std::vector<token::ptr_t> enumerate(const std::vector<properties::ptr_t> &props)

Obtain a vector of token smart pointers for given search criteria.

Parameters

props[in] The search criteria.

Returns

A set of known tokens that match the search.

Private Functions

token(fpga_token tok)

Private Members

fpga_token token_

Friends

friend class handle

handle.h

namespace opae
namespace fpga
namespace types
class handle
#include <opae/cxx/core/handle.h>

An allocated accelerator resource

Represents an accelerator resource that has been allocated by OPAE. Depending on the type of resource, its register space may be read/written using a handle object.

Public Types

typedef std::shared_ptr<handle> ptr_t

Public Functions

handle(const handle&) = delete
handle &operator=(const handle&) = delete
virtual ~handle()
inline fpga_handle c_type() const

Retrieve the underlying OPAE handle.

inline operator fpga_handle() const

Retrieve the underlying OPAE handle.

void reconfigure(uint32_t slot, const uint8_t *bitstream, size_t size, int flags)

Load a bitstream into an FPGA slot.

Parameters
  • slot – The slot number to program

  • bitstream – The bitstream binary data

  • size – The size of the bitstream

  • flags – Flags that control behavior of reconfiguration. Value of 0 indicates no flags. FPGA_RECONF_FORCE indicates that the bitstream is programmed into the slot without checking if the resource is currently in use.

Throws
  • invalid_param – if the handle is not an FPGA device handle or if the other parameters are not valid.

  • exception – if an internal error is encountered.

  • busy – if the accelerator for the given slot is in use.

  • reconf_error – if errors are reported by the driver (CRC or protocol errors).

uint32_t read_csr32(uint64_t offset, uint32_t csr_space = 0) const

Read 32 bits from a CSR belonging to a resource associated with a handle.

Parameters
  • offset[in] The register offset

  • csr_space[in] The CSR space to read from. Default is 0.

Returns

The 32-bit value read from the CSR

void write_csr32(uint64_t offset, uint32_t value, uint32_t csr_space = 0)

Write 32 bit to a CSR belonging to a resource associated with a handle.

Parameters
  • offset[in] The register offset.

  • value[in] The 32-bit value to write to the register.

  • csr_space[in] The CSR space to read from. Default is 0.

uint64_t read_csr64(uint64_t offset, uint32_t csr_space = 0) const

Read 64 bits from a CSR belonging to a resource associated with a handle.

Parameters
  • offset[in] The register offset

  • csr_space[in] The CSR space to read from. Default is 0.

Returns

The 64-bit value read from the CSR

void write_csr64(uint64_t offset, uint64_t value, uint32_t csr_space = 0)

Write 64 bits to a CSR belonging to a resource associated with a handle.

Parameters
  • offset[in] The register offset.

  • value[in] The 64-bit value to write to the register.

  • csr_space[in] The CSR space to read from. Default is 0.

void write_csr512(uint64_t offset, const void *value, uint32_t csr_space = 0)

Write 512 bits to a CSR belonging to a resource associated with a handle.

Parameters
  • offset[in] The register offset.

  • value[in] Pointer to the 512-bit value to write to the register.

  • csr_space[in] The CSR space to read from. Default is 0.

uint8_t *mmio_ptr(uint64_t offset, uint32_t csr_space = 0) const

Retrieve a pointer to the MMIO region.

Parameters
  • offset[in] The byte offset to add to MMIO base.

  • csr_space[in] The desired CSR space. Default is 0.

Returns

MMIO base + offset

virtual void reset()

Reset the accelerator identified by this handle

fpga_result close()

Close an accelerator resource (if opened)

Note

This is available for explicitly closing a handle. The destructor for handle will call close.

Returns

fpga_result indication the result of closing the handle or FPGA_EXCEPTION if handle is not opened

token::ptr_t get_token() const

Retrieve the token corresponding to this handle object.

Public Static Functions

static handle::ptr_t open(fpga_token token, int flags)

Open an accelerator resource, given a raw fpga_token

Parameters
  • token[in] A token describing the accelerator resource to be allocated.

  • flags[in] The flags parameter to fpgaOpen().

Returns

pointer to the mmio base + offset for the given csr space

static handle::ptr_t open(token::ptr_t token, int flags)

Open an accelerator resource, given a token object

Parameters
  • token[in] A token object describing the accelerator resource to be allocated.

  • flags[in] The flags parameter to fpgaOpen().

Returns

shared ptr to a handle object

Private Functions

handle(fpga_handle h)

Private Members

fpga_handle handle_
fpga_token token_

shared_buffer.h

namespace opae
namespace fpga
namespace types
class shared_buffer
#include <opae/cxx/core/shared_buffer.h>

Host/AFU shared memory blocks

shared_buffer abstracts a memory block that may be shared between the host cpu and an accelerator. The block may be allocated by the shared_buffer class itself (see allocate), or it may be allocated elsewhere and then attached to a shared_buffer object via attach.

Public Types

typedef std::size_t size_t
typedef std::shared_ptr<shared_buffer> ptr_t

Public Functions

shared_buffer(const shared_buffer&) = delete
shared_buffer &operator=(const shared_buffer&) = delete
virtual ~shared_buffer()

shared_buffer destructor.

void release()

Disassociate the shared_buffer object from the resource used to create it. If the buffer was allocated using the allocate function then the buffer is freed.

inline uint8_t *c_type() const

Retrieve the virtual address of the buffer base.

Note

Instances of a shared buffer can only be created using either ‘allocate’ or ‘attach’ static factory function. Because these functions return a shared pointer (std::shared_ptr) to the instance, references to an instance are counted automatically by design of the shared_ptr class. Calling ‘c_type()’ function is provided to get access to the raw data but isn’t used in tracking its reference count. Assigning this to a variable should be done in limited scopes as this variable can be defined in an outer scope and may outlive the shared_buffer object. Once the reference count in the shared_ptr reaches zero, the shared_buffer object will be released and deallocated, turning any variables assigned from a call to ‘c_type()’ into dangling pointers.

inline handle::ptr_t owner() const

Retrieve the handle smart pointer associated with this buffer.

inline size_t size() const

Retrieve the length of the buffer in bytes.

inline uint64_t wsid() const

Retrieve the underlying buffer’s workspace id.

inline uint64_t io_address() const

Retrieve the address of the buffer suitable for programming into the accelerator device.

void fill(int c)

Write c to each byte location in the buffer.

int compare(ptr_t other, size_t len) const

Compare this shared_buffer (the first len bytes) to that held in other, using memcmp().

template<typename T>
inline T read(size_t offset) const

Read a T-sized block of memory at the given location.

Parameters

offset[in] The byte offset from the start of the buffer.

Returns

A T from buffer base + offset.

template<typename T>
inline void write(const T &value, size_t offset)

Write a T-sized block of memory to the given location.

Parameters
  • value[in] The value to write.

  • offset[in] The byte offset from the start of the buffer.

Public Static Functions

static shared_buffer::ptr_t allocate(handle::ptr_t handle, size_t len, bool read_only = false)

shared_buffer factory method - allocate a shared_buffer.

Parameters
  • handle[in] The handle used to allocate the buffer.

  • len[in] The length in bytes of the requested buffer.

Returns

A valid shared_buffer smart pointer on success, or an empty smart pointer on failure.

static shared_buffer::ptr_t attach(handle::ptr_t handle, uint8_t *base, size_t len, bool read_only = false)

Attach a pre-allocated buffer to a shared_buffer object.

Parameters
  • handle[in] The handle used to attach the buffer.

  • base[in] The base of the pre-allocated memory.

  • len[in] The size of the pre-allocated memory, which must be a multiple of the page size.

Returns

A valid shared_buffer smart pointer on success, or an empty smart pointer on failure.

Protected Functions

shared_buffer(handle::ptr_t handle, size_t len, uint8_t *virt, uint64_t wsid, uint64_t io_address)

Protected Attributes

handle::ptr_t handle_
size_t len_
uint8_t *virt_
uint64_t wsid_
uint64_t io_address_

errors.h

namespace opae
namespace fpga
namespace types
class error
#include <opae/cxx/core/errors.h>

An error object represents an error register for a resource. This is used to read out the raw value in the register. No parsing is done by this class.

Public Types

typedef std::shared_ptr<error> ptr_t

Public Functions

error(const error &e) = delete
error &operator=(const error &e) = delete
inline std::string name()

Get the error register name.

Returns

A std::string object set to the error name.

inline bool can_clear()

Indicates whether an error register can be cleared.

Returns

A boolean value indicating if the error register can be cleared.

uint64_t read_value()

Read the raw value contained in the associated error register.

Returns

A 64-bit value (unparsed) read from the error register

inline ~error()
inline fpga_error_info c_type() const

Get the C data structure.

Returns

The fpga_error_info that contains the name and the can_clear boolean.

Public Static Functions

static error::ptr_t get(token::ptr_t tok, uint32_t num)

Factory function for creating an error object.

Parameters
  • tok – The token object representing a resource.

  • num – The index of the error register. This must be lower than the num_errors property of the resource.

Returns

A shared_ptr containing the error object

Private Functions

error(token::ptr_t token, uint32_t num)

Private Members

token::ptr_t token_
fpga_error_info error_info_
uint32_t error_num_

events.h

namespace opae
namespace fpga
namespace types
class event
#include <opae/cxx/core/events.h>

Wraps fpga event routines in OPAE C.

Public Types

typedef std::shared_ptr<event> ptr_t

Public Functions

virtual ~event()

Destroy event and associated resources.

inline fpga_event_handle get()

Get the fpga_event_handle contained in this object.

Returns

The fpga_event_handle contained in this object

operator fpga_event_handle()

Coversion operator for converting to fpga_event_handle objects.

Returns

The fpga_event_handle contained in this object

int os_object() const

Get OS Object from the event object.

Get an OS specific object from the event which can be used to subscribe for events. On Linux, the object corresponds to a file descriptor that can be used with select/poll/epoll calls.

Returns

An integer object representing the OS object

Public Static Functions

static event::ptr_t register_event(handle::ptr_t h, event::type_t t, int flags = 0)

Factory function to create event objects.

Parameters
  • h – A shared ptr of a resource handle

  • t – The resource type

  • flags – Event registration flags passed on to fpgaRegisterEvent

Returns

A shared ptr to an event object

Private Functions

event(handle::ptr_t h, event::type_t t, fpga_event_handle event_h)

Private Members

handle::ptr_t handle_
event::type_t type_
fpga_event_handle event_handle_
int os_object_
struct type_t
#include <opae/cxx/core/events.h>

C++ struct that is interchangeable with fpga_event_type enum.

Public Functions

inline type_t(fpga_event_type c_type)
inline operator fpga_event_type()

Public Static Attributes

static constexpr fpga_event_type interrupt = FPGA_EVENT_INTERRUPT
static constexpr fpga_event_type error = FPGA_EVENT_ERROR
static constexpr fpga_event_type power_thermal = FPGA_EVENT_POWER_THERMAL

Private Members

fpga_event_type type_

sysobject.h

namespace opae
namespace fpga
namespace types
class sysobject
#include <opae/cxx/core/sysobject.h>

Wraps the OPAE fpga_object primitive. sysobject’s are created from a call to fpgaTokenGetObject, fpgaHandleGetObject, or fpgaObjectGetObject

Public Types

typedef std::shared_ptr<sysobject> ptr_t

Public Functions

sysobject() = delete
sysobject(const sysobject &o) = delete
sysobject &operator=(const sysobject &o) = delete
sysobject::ptr_t get(const std::string &name, int flags = 0)

Get a sysobject from an object. This will be read-write if its parent was created from a handle..

Parameters
  • name[in] An identifier representing an object belonging to this object.

  • flags[in] Control behavior of object identification and creation. FPGA_OBJECT_GLOB is used to indicate that the name should be treated as a globbing expression. FPGA_OBJECT_RECURSE_ONE indicates that subobjects be created for objects one level down from the object identified by name. FPGA_OBJECT_RECURSE_ALL indicates that subobjects be created for all objects. Flags are defaulted to 0 meaning no flags.

Returns

A shared_ptr to a sysobject instance.

sysobject::ptr_t get(int index)

Get a sysobject from a container object. This will be read-write if its parent was created from a handle..

Parameters

index[in] An index number to get.

Returns

A shared_ptr to a sysobject instance.

virtual ~sysobject()
uint32_t size() const

Get the size (in bytes) of the object.

Returns

The number of bytes that the object occupies in memory.

uint64_t read64(int flags = 0) const

Read a 64-bit value from an FPGA object. The value is assumed to be in string format and will be parsed. See flags below for changing that behavior.

Parameters

flags[in] Flags that control how the object is read If FPGA_OBJECT_SYNC is used then object will update its buffered copy before retrieving the data. If FPGA_OBJECT_RAW is used, then the data will be read as raw bytes into the uint64_t pointer variable. Flags are defaulted to 0 meaning no flags.

Returns

A 64-bit value from the object.

void write64(uint64_t value, int flags = 0) const

Write 64-bit value to an FPGA object. The value will be converted to string before writing. See flags below for changing that behavior.

Note

This operation will force a sync operation to update its cached buffer

Parameters
  • value[in] The value to write to the object.

  • flags[in] Flags that control how the object is written If FPGA_OBJECT_RAW is used, then the value will be written as raw bytes. Flags are defaulted to 0 meaning no flags.

std::vector<uint8_t> bytes(int flags = 0) const

Get all raw bytes from the object.

Parameters

flags[in] Flags that control how object is read If FPGA_OBJECT_SYNC is used then object will update its buffered copy before retrieving the data.

Returns

A vector of all bytes in the object.

std::vector<uint8_t> bytes(uint32_t offset, uint32_t size, int flags = 0) const

Get a subset of raw bytes from the object.

Parameters
  • offset[in] The bytes offset for the start of the returned vector.

  • size[in] The number of bytes for the returned vector.

  • flags[in] Flags that control how object is read If FPGA_OBJECT_SYNC is used then object will update its buffered copy before retrieving the data.

Returns

A vector of size bytes in the object starting at offset.

enum fpga_sysobject_type type() const

Get the object type (attribute or container)

inline fpga_object c_type() const

Retrieve the underlying fpga_object primitive.

inline operator fpga_object() const

Retrieve the underlying fpga_object primitive.

Public Static Functions

static sysobject::ptr_t get(token::ptr_t t, const std::string &name, int flags = 0)

Get a sysobject from a token. This will be read-only.

Parameters
  • t[in] Token object representing a resource.

  • name[in] An identifier representing an object belonging to a resource represented by the token.

  • flags[in] Control behavior of object identification and creation. FPGA_OBJECT_GLOB is used to indicate that the name should be treated as a globbing expression. FPGA_OBJECT_RECURSE_ONE indicates that subobjects be created for objects one level down from the object identified by name. FPGA_OBJECT_RECURSE_ALL indicates that subobjects be created for all objects below the current object identified by name.

Returns

A shared_ptr to a sysobject instance.

static sysobject::ptr_t get(handle::ptr_t h, const std::string &name, int flags = 0)

Get a sysobject from a handle. This will be read-write.

Parameters
  • h[in] Handle object representing an open resource.

  • name[in] An identifier representing an object belonging to a resource represented by the handle.

  • flags[in] Control behavior of object identification and creation. FPGA_OBJECT_GLOB is used to indicate that the name should be treated as a globbing expression. FPGA_OBJECT_RECURSE_ONE indicates that subobjects be created for objects one level down from the object identified by name. FPGA_OBJECT_RECURSE_ALL indicates that subobjects be created for all objects below the current object identified by name.

Returns

A shared_ptr to a sysobject instance.

Private Functions

sysobject(fpga_object sysobj, token::ptr_t token, handle::ptr_t hnd)

Private Members

fpga_object sysobject_
token::ptr_t token_
handle::ptr_t handle_

Exceptions

When the OPAE C++ API encounters an error from the OPAE C API, it captures the current source code location and the error code into an object of type except, then throws the except. Applications should implement the appropriate catch blocks required to respond to runtime exceptions.

except.h

Defines

OPAECXX_HERE

Construct a src_location object for the current source line.

ASSERT_FPGA_OK(r)

Macro to check of result is FPGA_OK If not, throw exception that corresponds to the result code.

namespace opae
namespace fpga
namespace types
class busy : public opae::fpga::types::except
#include <opae/cxx/core/except.h>

busy exception

busy tracks the source line of origin for exceptions thrown when the error code FPGA_BUSY is returned from a call to an OPAE C API function

Public Functions

inline busy(src_location loc) noexcept

busy constructor

Parameters

loc[in] Location where the exception was constructed.

class except : public std::exception
#include <opae/cxx/core/except.h>

Generic OPAE exception

An except tracks the source line of origin and an optional fpga_result. If no fpga_result is given, then FPGA_EXCEPTION is used.

Subclassed by opae::fpga::types::busy, opae::fpga::types::exception, opae::fpga::types::invalid_param, opae::fpga::types::no_access, opae::fpga::types::no_daemon, opae::fpga::types::no_driver, opae::fpga::types::no_memory, opae::fpga::types::not_found, opae::fpga::types::not_supported, opae::fpga::types::reconf_error

Public Functions

except(src_location loc) noexcept

except constructor The fpga_result value is FPGA_EXCEPTION.

Parameters

loc[in] Location where the exception was constructed.

except(fpga_result res, src_location loc) noexcept

except constructor

Parameters
  • res[in] The fpga_result value associated with this exception.

  • loc[in] Location where the exception was constructed.

except(fpga_result res, const char *msg, src_location loc) noexcept

except constructor

Parameters
  • res[in] The fpga_result value associated with this exception.

  • msg[in] The error message as a string

  • loc[in] Location where the exception was constructed.

virtual const char *what() const noexcept override

Convert this except to an informative string.

inline operator fpga_result() const noexcept

Convert this except to its fpga_result.

Public Static Attributes

static const std::size_t MAX_EXCEPT = 256

Protected Attributes

fpga_result res_
const char *msg_
src_location loc_
mutable char buf_[MAX_EXCEPT]
class exception : public opae::fpga::types::except
#include <opae/cxx/core/except.h>

exception exception

exception tracks the source line of origin for exceptions thrown when the error code FPGA_EXCEPTION is returned from a call to an OPAE C API function

Public Functions

inline exception(src_location loc) noexcept

exception constructor

Parameters

loc[in] Location where the exception was constructed.

class invalid_param : public opae::fpga::types::except
#include <opae/cxx/core/except.h>

invalid_param exception

invalid_param tracks the source line of origin for exceptions thrown when the error code FPGA_INVALID_PARAM is returned from a call to an OPAE C API function

Public Functions

inline invalid_param(src_location loc) noexcept

invalid_param constructor

Parameters

loc[in] Location where the exception was constructed.

class no_access : public opae::fpga::types::except
#include <opae/cxx/core/except.h>

no_access exception

no_access tracks the source line of origin for exceptions thrown when the error code FPGA_NO_ACCESS is returned from a call to an OPAE C API function

Public Functions

inline no_access(src_location loc) noexcept

no_access constructor

Parameters

loc[in] Location where the exception was constructed.

class no_daemon : public opae::fpga::types::except
#include <opae/cxx/core/except.h>

no_daemon exception

no_daemon tracks the source line of origin for exceptions thrown when the error code FPGA_NO_DAEMON is returned from a call to an OPAE C API function

Public Functions

inline no_daemon(src_location loc) noexcept

no_daemon constructor

Parameters

loc[in] Location where the exception was constructed.

class no_driver : public opae::fpga::types::except
#include <opae/cxx/core/except.h>

no_driver exception

no_driver tracks the source line of origin for exceptions thrown when the error code FPGA_NO_DRIVER is returned from a call to an OPAE C API function

Public Functions

inline no_driver(src_location loc) noexcept

no_driver constructor

Parameters

loc[in] Location where the exception was constructed.

class no_memory : public opae::fpga::types::except
#include <opae/cxx/core/except.h>

no_memory exception

no_memory tracks the source line of origin for exceptions thrown when the error code FPGA_NO_MEMORY is returned from a call to an OPAE C API function

Public Functions

inline no_memory(src_location loc) noexcept

no_memory constructor

Parameters

loc[in] Location where the exception was constructed.

class not_found : public opae::fpga::types::except
#include <opae/cxx/core/except.h>

not_found exception

not_found tracks the source line of origin for exceptions thrown when the error code FPGA_NOT_FOUND is returned from a call to an OPAE C API function

Public Functions

inline not_found(src_location loc) noexcept

not_found constructor

Parameters

loc[in] Location where the exception was constructed.

class not_supported : public opae::fpga::types::except
#include <opae/cxx/core/except.h>

not_supported exception

not_supported tracks the source line of origin for exceptions thrown when the error code FPGA_NOT_SUPPORTED is returned from a call to an OPAE C API function

Public Functions

inline not_supported(src_location loc) noexcept

not_supported constructor

Parameters

loc[in] Location where the exception was constructed.

class reconf_error : public opae::fpga::types::except
#include <opae/cxx/core/except.h>

reconf_error exception

reconf_error tracks the source line of origin for exceptions thrown when the error code FPGA_RECONF_ERROR is returned from a call to an OPAE C API function

Public Functions

inline reconf_error(src_location loc) noexcept

reconf_error constructor

Parameters

loc[in] Location where the exception was constructed.

class src_location
#include <opae/cxx/core/except.h>

Identify a particular line in a source file.

Public Functions

src_location(const char *file, const char *fn, int line) noexcept

src_location constructor

Parameters
  • file[in] The source file name, typically FILE.

  • fn[in] The current function, typically func.

  • line[in] The current line number, typically LINE.

src_location(const src_location &other) noexcept
src_location &operator=(const src_location &other) noexcept
const char *file() const noexcept

Retrieve the file name component of the location.

inline const char *fn() const noexcept

Retrieve the function name component of the location.

inline int line() const noexcept

Retrieve the line number component of the location.

Private Members

const char *file_
const char *fn_
int line_
namespace detail

Typedefs

typedef bool (*exception_fn)(fpga_result, const opae::fpga::types::src_location &loc)

typedef function pointer that returns bool if result is FPGA_OK

Functions

template<typename T>
constexpr bool is_ok(fpga_result result, const opae::fpga::types::src_location &loc)

is_ok is a template function that throws an excpetion of its template argument type if the result code is not FPGA_OK. Otherwise it returns true.

static inline void assert_fpga_ok(fpga_result result, const opae::fpga::types::src_location &loc)

Misc

The version class wraps the OPAE C version API.

version.h

namespace opae
namespace fpga
namespace types
class version
#include <opae/cxx/core/version.h>

Public Static Functions

static fpga_version as_struct()

Get the package version information as a struct.

Returns

The package version as an fpga_version struct

static std::string as_string()

Get the package version information as a string.

Returns

The package version as an std::string object

static std::string build()

Get the package build information as a string.

Returns

The package build as an std::string object