libcaer 2.4.0 released

26 views
Skip to first unread message

Luca Longinotti

unread,
Dec 5, 2017, 11:28:23 AM12/5/17
to dynapse-users

A new version of libcaer has been released, 2.4.0 on 05.12.2017.


This is especially an important update for Dynap-SE users, please read through the ChangeLog below carefully.

Treatment of chips, cores and neuron IDs have been made consistent for easier usage.

See https://inilabs.com/support/hardware/user-guide-dynap-se/#h.tabrnfqg4f55 Figure 2.4.2 for details.

Also several new functions have been added, as well as support for configuring TAU1/2 leakage.


A firmware and/or logic update will be required for DAVIS and Dynap-SE devices.


Other notable news are the availability of packages for Fedora, Ubuntu, Gentoo and MacOS X, the new Python 2/3 bindings, and the addition of Statistics, APS Quad-ROI and DVS ROI/BA/Refractory filters on new FX3-based DAVIS devices.


Release 2.4.0 - 05.12.2017
INCOMPATIBLE CHANGES

  • DAVIS: require new firmware version 4 and logic version 9912.
  • Dynap-SE: require new logic version 5.
  • devices/dynapse.h: the chip IDs are now mapped to be 0,1,2,3 for
    U0,U1,U2,U3 respectively, making them as easy to use and loop over
    as the core IDs. The defines have been updated, so if you've been
    properly using them, no change is needed other than a recompile.
  • src/dynapse.c: spike events coming from a Dynap-SE's chip ID 0 (U0) do
    now have a chip ID of 0, the same as the chip ID used to configure the
    system, removing this small inconsistency. All usages of
    'DYNAPSE_CONFIG_DYNAPSE_U0+1' must now remove the '+1', chip U0 is not
    to be treated differently anymore in regards to its USB output chip ID.
  • events/spike.h: caerSpikeEventGetX() and caerSpikeEventGetY() were
    inverting the meaning of column/row, resulting in inconsistencies
    when using those two functions in comparison to system configuration.
    This has now been corrected, and the functions moved to devices/dynapse.h
    with the new names of caerDynapseSpikeEventGetX/Y(), due to them being
    specific to the architecture of the Dynap-SE neuromorphic processor.
    Now both chips, cores and neurons, as interpreted through these functions,
    are set out in row-major order (similar to computer vision).
  • devices/dynapse.h: the caerDynapseWriteSram() function is being deprecated
    in favour of its newer variant caerDynapseWriteSramN().
  • devices/dynapse.h: removed define DYNAPSE_CONFIG_SRAMROW.
    Use DYNAPSE_CONFIG_NUMNEURONS and DYNAPSE_CONFIG_NUMSRAM_NEU.
  • devices/dynapse.h: removed defines DYNAPSE_MAX_USER_USB_PACKET_SIZE,
    DYNAPSE_CONFIG_MAX_USB_TRANSFER and DYNAPSE_CONFIG_MAX_PARAM_SIZE.
    Those are internal implementation details, and caerDynapseSendDataToUSB()
    now accepts arbitrarily sized data to send, the user does not have to
    divide it in chunks of a particular size anymore.
  • devices/dynapse.h: improved and changed 'struct caer_bias_dynapse' to
    reflect actual biasing of device correctly.
  • devices/device.h: CAER_HOST_CONFIG_PACKETS_MAX_CONTAINER_PACKET_SIZE's
    default value has been changed to zero, disabling the size division of
    packets by default. Packet size is now dictated, by default, only by
    the time interval, with a value of 10 milliseconds.

NEW FEATURES

  • Packaging: packages for Fedora, Debian and Gentoo Linux, as well as
    MacOS X via Homebrew are now available for each new libcaer release.
    For more information please visit:
    https://inilabs.com/support/software/libcaer/#h.qp4tgs7gb5k
  • Python bindings: added bindings for Python 2/3 using SWIG. See
    bindings/python_swig/ and bindings/python_swig/examples/ for examples.
    NOTE: this needs a patched Swig, see 'swig/swig#1166'.
  • CMake: added support for generating RPM/DEB files via CPack, to
    easily be able to package one's own build.
  • DAVIS/Dynap-SE: added support for AER and Multiplexer statistics, to
    examine number of events received, filtered and dropped.
  • DAVIS: added support for hardware DVS Refractory Period filter on
    newer FX3 based devices.
  • DAVIS: added support for DVS ROI filtering.
  • DAVIS: added support for APS Quad-ROI (up to four independent
    regions of interest can be configured and enabled). The number of
    supported ROI regions is defined with DAVIS_APS_ROI_REGIONS_MAX.
  • devices/davis.h: added 'caerDavisROIConfigure()' function to atomically
    and efficiently configure and enable ROI regions.
  • devices/davis.h: expanded 'struct caer_davis_info' to account for the
    above new features: 'dvsHasROIFilter', 'dvsHasStatistics' and 'muxHasStatistics'.
  • devices/dynapse.h: expanded 'struct caer_dynapse_info' to account for
    the above new features: 'aerHasStatistics' and 'muxHasStatistics'.
  • devices/device.h: added 'caerDeviceConfigGet64()' to read 64-bit
    configuration parameters, needed for statistics support.
  • src/dynapse.c: the Dynap-SE caerDeviceSendDefaultConfig() function now
    performs full initialization of the device and its chips. To reliably
    work with the device, make sure to always call this before setting
    your own custom configuration afterwards.
  • devices/dynapse.h: added caerDynapseWriteSramN() function, uses global
    neuron ID [0,1023] instead of core ID/neuron ID syntax. Arguments are
    also directly compatible with caerDynapseGenerateSramBits().
  • devices/dynapse.h: renamed define DYNAPSE_CONFIG_NUMCAM to
    DYNAPSE_CONFIG_NUMCAM_NEU to better explain what it is.
  • devices/dynapse.h: added caerBiasDynapseGenerate() and caerBiasDynapseParse()
    functions to handle the improved 'struct caer_bias_dynapse' and
    transform it to/from the bit-wise bias configuration representation.
  • devices/dynapse.h: added caerDynapseGenerateSramBits() function to
    generate SRAM configuration bits based on input arguments.
  • devices/dynapse.h: added caerDynapseCoreXYToNeuronId() and
    caerDynapseCoreAddrToNeuronId() functions to calculate chip global
    neuron addresses (range [0,1023]).
  • devices/dynapse.h: added caerDynapseSpikeEventFromXY() function to
    have a reverse transformation to caerDynapseSpikeEventGetX/Y().
  • devices/dynapse.h: added DYNAPSE_CONFIG_TAU2_SET, DYNAPSE_CONFIG_TAU1_RESET
    and DYNAPSE_CONFIG_TAU2_RESET defines for caerDeviceConfigSet()
    usage, to allow configuration of which neuron leakage bias to use.
  • events/common.h: added caerGenericEventCopy() function to copy
    events from one place in memory to another.
  • events/*.h: added two new functions 'caerXXXEventPacketFromPacketHeader()'
    and 'caerXXXEventPacketFromPacketHeaderConst()' to transform a packet
    header pointer to the proper event packet pointer. This checks the
    type, and is needed for proper bindings support.
  • ringbuffer.h/hpp: the ring-buffer functions for producer-consumer
    high-performance communication between two threads are now exposed
    as part of the API, to allow re-use in other projects such as cAER.
  • examples/dynapse_simple.c: added simple example for Dynap-SE access.
  • examples/davis_cvgui.cpp: added example for converting frames to OpenCV
    Mat and visualizing them using OpenCV's GUI.
  • src/timestamps.h: added timestamp debugging code, to measure drift
    between host and device. Only enabled in debug builds.
  • src/davis.h: improved APS_DEBUG_FRAME support, now splits signal and
    reset read for debugging over all ROI regions.
  • New device: support for upcoming DAVIS128 Raspberry-Pi integration.
  • events/matrix4x4.h: new event type for 4x4 Matrices.
  • C++ support: added toString() for devices.

BUG FIXES

  • devices/dynapse.h: major API documentation cleanup.
  • devices/dynapse.h: several function parameters of integer type were
    sized more correctly to reflect the range of their arguments.
  • src/dynapse.c: DYNAPSE_CONFIG_CLEAR_CAM now clears all 64 CAMs for
    each neuron in a chip, resulting in all CAMs being fully cleared.
  • Dynap-SE: default low-power biases are now the same across all cores.
  • DAVIS: improved default timings for APS, providing better image quality,
    especially on new chips with internal ADC support.
  • DAVIS/AutoExposure: fixed auto-exposure on FX3 devices, sometimes didn't
    run due to rounding errors when correcting for clock skew between
    parameters sent to the devices and parameters received back.
  • events/frame.h: added documentation that using the assignment operator
    to copy Frame events is not possible, caerGenericEventCopy() should
    be used instead. The C++ variant deletes the assignment operator to
    enforce this. This fixes issue #26.
  • src/usb_utils.c: fixed shutdown callback not being called on MacOS X.
    Also fixed possible dead-lock on USB transfer re-submit on Windows.
    This fixes issue #32.
  • src/date_exchange.h: prevent possible dead-lock inside dataExchangeGet(),
    if signals are delivered always while not sleeping.
  • portable_endian.h, portable_time.h: fixed stand-alone compilation.
  • Fixed many code quality warnings by Sonarcloud.
  • Travis-CI: fixed automatic test build issues on MacOS X.
Reply all
Reply to author
Forward
0 new messages