v2.1 releases

Version 2.1.0

New minor release. Milestone: IPbus software: v2.1.0 release

Backward incompatible change

IPbus 2.0 communication now sent in native-endian by default (previously packets were sent in big-endian; ticket #417)

  • If using a revision of the IPbus2.0 firmware from more recent than the end of June (revisions >= 21147, or ipbus_2_0_v1 tag), then …

    • This will be a transparant change (i.e. no changes to end-user software are needed).

  • If your hardware is running a revision of the IPbus firmware core from before the end of June (revisions < 21147), then …

    • Please update your IPbus firmware to the tagged version (instructions here) at your earliest convenience

      • Along with being endian agnostic, the tagged version also contains a number of bugfixes from the last few months.

    • Until you have time to upgrade your firmware, you can use the new ipbusudp-2.0-bigendian or chtcp-2.0-bigendian URIs (i.e. append -bigendian to the protocol part of the URI).

    • N.B: Since they are only needed with old firmware revisions, these -bigendian URIs are considered immediately deprecated, and will not be supported after 1st May 2014.

New feature

  • uHAL GUI: First iteration of uHAL GUI for HW development (ticket #152)

    • See [wiki:uhalGuiInstructions this wiki] for instructions on usage and customisation

Main improvements

  • uHAL & ControlHub: Substantially improved large block write/read performance (uHAL tickets: #255, #259, #418, #419 & #461; ControlHub tickets: #219, #333, #334 & #346)

    • E.g. In B904 CMS integration facility, for chtcp-2.0 (i.e. IPbus firmware running on board, comminucation via ControlHub, with planned Pt5 PC layout):

      • Single word read/write latency: ~ 290us

      • Write/read bandwidth for 10k 32-bit words ~ 110 Mb/s

      • Write (read) bandwidth for 10M 32-bit words ~ 520 (420) Mb/s

  • uHAL: Added more useful information to string returned by exception::what() method (e.g. URI for timeout/connection-related exceptions), and this information is now automatically copied to uhal log ERROR messages (tickets #124, #254)

  • uHAL: Removed internal dependency on binutils library, and also removed corresponding backtrace information from exception::what() string (ticket #413)

Minor improvements

  • uHAL: Updated PerfTester.exe hardware validation test (i.e. -t Validation mode) so that it is a more rigorous test of the firmware (ticket #370)

  • uHAL: Added “parameters” xml attribute to address file, and corresponding uhal::Node::getParameters() method (ticket #452)

  • uHAL: Moved Node address collision messages from ERROR logs into a dedicated collision report file under /tmp/uhal (tickets #250, #290, #310)

  • uHAL: Improved the “class” attribute derived node mechanism (tickets #445, #452)

  • uHAL, Python: Added native support for many integer-like operations with ValWord_uint32 instances (ticket #265)

    • E.g. +, -, *, /, **, bitwise operations, comparisons (<, >, ==, !=, …) etc. Full list at comment 4 of ticket 265

  • uHAL, Python: Added value() method to ValVector_uint32_t (ticket #420)

  • uHAL: Replaced std::hash_map usage within uhal::ConnectionManager with boost::unordered_map (tickets #226, #244)

  • uHAL: Removed unneccessary inheritance in uhal::ValVector class (ticket #257)

  • uHAL: Added uhal::Node::getModule() method for future development of xml address file --> VHDL decode logic auto-generator (ticket #368)

  • uHAL: Added IPbus 2.0 UDP status packet script ipbus2_udp_status.escript to /opt/cactus/bin/etc/tests/ for debugging purposes (ticket #453)


  • uHAL: Corrected type of exception thrown in various error scenarios, particularly timeouts & network related errors (previously just std::exception was thrown in several error cases; ticket #253)

  • uHAL: Increased maximum IPbus 2.0 packet size to be same as that for IPbus 1.3 (ticket #255)

  • uHAL: Thread safety of ClientInterface/HwInterface/Node read/write/rmw/dispatch methods

    • Added internal locking within uhal::ClientInterface to cope safely with multiple (end-user) threads accessing the read/write/rmw/dispatch methods of the same ClientInterface/HwInterface/Node instance (ticket #297)

  • uHAL: Corrected accidental addition of square brackets to uhal::Node “description” attribute (ticket #325)

  • uHAL: Fixed segfault in attempting 0-word block reads & writes (ticket #343)

  • uHAL: Stopped ClientInterface::dispatch() from sending an IPbus control packet header with no payload when read/write queue is empty - it now just returns immediately when the queue is empty (ticket #355)

  • uHAL: Fixed recovery of chtcp communication after timeouts (previously ValidationError exception was incorrectly thrown 50% of the time after a timeout; ticket #436)

  • uHAL, unit-testing: Increased size of simulated register space in DummyHardware unit test executables in order to avoid “writing to one register modifies values of two” behaviour (ticket #246)

  • ControlHub: Fixed race condition in controlhub_start script, whereby it could occasionally exit before the ControlHub had actually started up; now it waits until the ControlHub has fully started before exiting (ticket #421)

  • Packaging: Added OS string (i.e. slc5/slc6) to RPM “package release” string (ticket #309)