Release Notes

This page contains release notes for firmware updates. For general information on building and installing firmware, please consult Firmware Upgrades.

There are two kinds of directory in pydfmux/firmware: dated release directories (containing incremental updates to parts of the firmware), and named “aggregation” directories (containing a firmware snapshot that takes its elements from a “known good” set of dated directories.) You should ordinarily be using one of the following aggregation directories:

pydfmux/firmware/mcgill:
This firmware is McGill’s “lab” firmware, and is intended to track a working (but early-release) state.
pydfmux/firmware/latest:
This firmware tracks the latest release build, which should always be the current recommended firmware package.

This page tracks release notes for the date directories. To inspect which date directories make up an aggregation release, please inspect the symlinks in the aggregation directory.

Note

How to upgrade using constituent pieces and building your own image file:

$ cd firmware
$ ./fetch.sh latest
$ ./image.sh -d latest -o dfmux_release8.img
$ sudo dd if=dfmux_release8.img bs=10M of=/dev/YOURCFCARD

Note

How to upgrade using a pre-made image file (example with release 8.0):

$ cd pydfmux
$ git-annex get firmware/2016-09-09/dfmux_release8.img
$ sudo dd if=firmware/2016-09-09/dfmux_release8.img bs=10M of=/dev/YOURCFCARD

February 02, 2020: DfMUX Release R11.4 [EXPERIMENTAL, DO NOT USE]

All files for this release live in pydfmux/firmware/r11.4

This release changes the signal path streaming away from multicast and instead uses a protocol called “SCTP”. It was an experimental build to test a networking fix for the South Pole Telescope.

It is not being used anywhere right now, and should not be used.

January 28, 2020: DfMUX Release R11.3 (128x only)

All files for this release live in pydfmux/firmware/r11.3

This is the first release NOT to use git-annex. The appropriate way to download these files is:

pydfmux/firmware$ git lfs fetch --exclude= --include=r11.3

This update fixes a number of issues that were related to the move to a new linux kernel, and the “ADC Alignment Bug”

All performance improvements are related to operating large numbers of boards in crates, otherwise this looks like R11.2

Changes:

  • Fix to ADC alignment bug, which statistically failed occasionally when boards were first powered on. This failure was mostly hidden in pydfmux previously, but the firmware fix makes this unnecessary.
  • Fix to the problem where boards that boot first sometimes prevent neighboring boards from effectively multicasting their data.

Dec. 5, 2019: DfMUX Release R11.2 (128x only)

All files for this release live in pydfmux/firmware/r11.2 Please do not use r11.1 or r11.0.

This is the first big release after 128x. It represents a substantial upgrade of the ARM kernel to v5.3, and fixes some bugs in netbooting and in the R10 128x release.

This is the first firmware release that is 128x-only. 64x will no longer be updated. For users still operating 64x this upgrade should be drop-in compatible.

This release:

  • Fixes backplane contention on boot-up with NetBoot.
    • Crates should now bring every board up successfully on the first try when using netboot.
    • Requires rewriting the board spi flash. Instructions below.
  • Removes the nyquist line in the downsampled data.
    • 64x used a strong roll-off when downsampling the streamed data, which hid the nyquist line. R10_128x had an FIR that was less resource intensive with a less strong roll-off, consequently users saw the nyquist tone in downsampled data (which was then just filtered offline in the data processing pipeline).
    • R11.2 implements a re-designed FIR stage with better filtering parameters that hide this line again. Downsampled data should now look the same in R11.2 as it did in the original 64x builds.
  • Webpage access can no longer crash boards.
    • This also fixes the rare bug when initializing an already initialized board can give an “ADC Delay” error.
  • ”.clear_all()” methods are now available for ReadoutModule and Mezzanine objects (rmod.clear_all(), mezz.clear_all())
    • This will vastly speed up zero_combs() calls when they are written into the algorithm and when zero_combs() is called on less than an entire iceboard.

Netboot installation is now simplified with included filesystem .tar.bz file.

To set up your netboot environment:

$ cd pydfmux/firmware/r11.2
$ mkdir tempdir
$ cd tempdir
$ tar -xjf ../dfmux_release_11.2_netboot.tar.bz2 .
$ cd ..
$ mv tempdir /srv/iceboardnfs
$ cp u-boot.bin /srv/tftp/u-boot.bin
$ cp uImage /srv/tftp/uImage

You must also add ”,nfsvers=3” suffix to the NFS root path exported by your DHCP daemon (dhcpd.conf). For example:

option root-path "192.168.1.1:/srv/nfs/r11.0,nfsvers=3";

To use this firmware to boot boards in a crate the boards MUST have their SPI flash rewritten. It is easiest to do this before updating your netboot environment.

For a single board:

$ cd pydfmux/firmware/r11.2
$ scp u-boot.min.spieth.spi root@iceboard<SERIAL>.local:/tmp
$ ssh root@iceboard<SERIAL>.local /usr/sbin/flashcp /tmp/u-boot.min.spieth.spi /dev/mtd0

For an entire crate worth of boards:

$ cd pydfmux/firmware/r11.2
$ for i in `seq 1 16`
> do scp u-boot.min.spieth.spi root@slot"$i".icecrate<SERIAL>.local:/tmp
> ssh root@slot"$i".icecrate005.local /usr/sbin/flashcp /tmp/u-boot.min.spieth.spi /dev/mtd0
> done

Nov. 8, 2018: 128x (DfMUX Release 10.0_128x)

This is the first official 128x release. Note that 128x releases are not backwards compatible with 64x builds (those lacking the 128x suffix) without extra work.

Why? Although the Python/Tuber API is interchangeable, the streamed packets necessarily carry more samples and thus are not expected to be compatible until the downstream software has been adjusted to expect them.

Functionally, the two releases are similar with notable exceptions:

  • You can no longer tune a single channel to different frequencies for the carrier, nuller, and demodulator. The target argument (with value CARRIER, NULLER, or DEMOD) is ignored, and affects all three frequencies identically.

Oct. 5, 2018: Cumulative Update (DfMUX Release 10.0)

This release supersedes several unofficial releases that made it “into the wild” but were not present in this repository. There is no new functionality in this release that was not present in the unofficial versions.

All files for this release live in pydfmux/firmware/r10.0. Going forward, we are going to use this kind of structure rather than date-specific identifiers because it’s easier to track.

Buck syncs changed in R10 (128x and 64x) to be 781.25 kHz (motherboard) / 1.5625 MHz (mezzanines) Additionally duty cycle for syncs changed to 20%

Sept 19, 2017: Minor update fixing negative temperature readout in SQCBs and housekeeping typo (DfMUX Release 8.3)

All new files live in pydfmux/firmware/2017-09-19

pydfmux/firmware/latest has been updated and can be used to make an image file.

Additionally, a copy of the dfmux_release8_3.img is provided in git-annex at pydfmux/firmware/2017-09-19/dfmux_release8_3.img

icecore-dfmux commit: 82a639f

Image file md5sum: 900b993b848f09ba5a7d1461b4ea2104

This release rolls in some icecore changes that don’t effect dfmux, and also fixes the IIC read from SQUIDController Board temperature sensors so they properly read out negative numbers. Finally, a typo in the dump_housekeeping() is fixed to report both carrier and nuller channel amplitudes rather than duplicating carrier amplitudes.

June 26, 2017: Minor update extending the receive queue buffer on the C-side of the boards (DfMUX Release 8.2)

All new files live in pydfmux/firmware/2017-06-26.

pydfmux/firmware/latest is updated to reflect this and can be used to make an image file.

Additionally, a copy of the dfmux_release8_2.img is provided in git-annex at pydfmux/firmware/2017-06-26/dfmux_release8_2.img

icecore-dfmux commit f9a5eaa

Image file md5sum: df95a16420ba9df93429ebae68c867b0

This release rolls in some icecore changes that don’t effect dfmux, and also extends the receiving buffer on the iceboard-side tuber interface. This should fix 599 timeouts that users get when running very long asynchronous netanals with only one or two iceboards or modules.

Note that this update already exists at Pole, and thus is only for northern testbeds.

November 08, 2016: Buck Synchronization, website, and DAN gain stepping (DfMUX Release 8.1)

All new files live in pydfmux/firmware/2016-11-08.

pydfmux/firmware/latest is updated to reflect this and can be used to make an image file.

Additionally, a copy of the dfmux_release8.img is provided in git-annex at pydfmux/firmware/2016-11-08/dfmux_release8_1.img

icecore-dfmux commit fd0d10e74810a0580508199f909be5d0dc84291a

Image file md5sum: 7c290e3149396ba707e7e12ca202bad8

This release touches only OPKs, but includes a new bitstream that changes buck regulator synchronization frequencies (1MHz -> 1.25 MHz, 2 MHz -> 2.5 MHz). The backplane buck regulator (if present) is also synchronized to 1.25 MHz. These values share a common multiple with the clock, which is the base frequency we use for our bias frequencies.

Additionally the SQCB section of the website is updated to disable auto-polling (instead making it an option).

Finally the set_dan_gain now accepts the a stepping parameter, which is implemented in C on the board. This speeds up dan tuning considerably, and smooths one of the bigger sources of transients.

September 09, 2016: Streaming and IceCore changes (DfMUX Release 8.0)

This release touches every constituent part of the firmware. This is largely because of the changes to the PLL programming in IceCore. Additionally it includes some changes that anticipate 128x data streaming format changes so spt3g_software can get a head start on preparation. Finally, there are a few feature requests that got addressed.

All files required to generate an image live in pydfmux/firmware/2016-09-09.

icecore-dfmux commit 23c4505039d5ec08dbbfa65441c3b99f62e14e93

cross-repository tag: R8.0

pydfmux/firmware/latest is updated to reflect this.

Additionally, a copy of the dfmux_release8.img is provided in git-annex at pydfmux/firmware/2016-09-09/dfmux_release8.img

Image file md5sum: f23ecfe6e2d521cff41bf0fd578c82ac

There are a few improvements in this update. I’ll divide them by IceCore and Dfmux:

IceCore

New features:

  • PLL programming through the tuber interface for debugging
  • d.get_build_info() now returns a tuber object with firmware build information
  • d.set_fantray_duty_cycle() and d.get_fantray_tachometer() exposes control of the fan controller (requires appropriate setup, not advisable for DfMUX)
  • d.set_power_on_slot() allows one board to reboot any slot in a shared backplane
  • d.reset_arm_on_slot() allows one board to reset the ARM of any other board in a backplane
  • d._reset_all_power() resets power for all boards in the crate
  • print d._get_syslog_buffer() displays the tail of the iceboard syslog buffer in the console (useful for debugging)

DfMux

  • V3 Packet type for streamers (version that is/will be used for 128x, allows DAQ to be ready for switchover)

  • Boards use unicasting on loopback to accumulate their own packets, rather than sniffing the global multicast for them

    • This fixes the problem of 128x boards bringing down 64x boards
    • Removes the need to multicast filter on the ARM (frees up memory and CPU)
    • Fixes the error "Too much time elapsed while waiting for packets! Is the FPGA correctly attached to the network?"
      from DDOSing the boards.
  • d._dump_housekeeping() call now includes state information stored on the board and rail information.

July 11, 2016: 24 Bit DMS / DAN / DMFD throughput (DfMUX Release 7.1)

New dfmux-bitstream.opk and dfmux-runtime.opk which live in pydfmux/firmware/2016-07-11. Commit 85855257ef6e15b999231b61387b0bac9f7610e7

pydfmux/firmware/latest is updated to reflect this. To build image file:

$ cd firmware
$ ./fetch.sh latest
$ ./image.sh -d latest -o dfmux_release7_1.img

Additionally, a copy of the dfmux_release7_1.img is provided in git-annex at pydfmux/firmware/2016-07-11/dfmux_release7_1.img

Image file md5sum: 5fe38796b0f622a646253aea9bd26298

This update extends the logic throughput in the synthesis, demodulation, and DAN data paths from 18 bits to 24 bits.

We already natively used 24 bit numbers for the streamer output, but internally the logic was 18 bits, a holdover from smaller FPGAs.

A consequence of the 18 bit truncation was the addition of a small (64 count) DC bias to modulation and demodulation channels. While ordinarily irrelevant, this bias was a roadblock to the development of a Tau-ETF algorithm.

This update removes the aformentioned bias. It does not effect any of the transferfunctions and should be completely transparent to anybody not developing Tau-ETF.

May 17, 2016: DfMUX Release 7.0

Tagged release uses the R7 tag in all of the relevant repos. This includes many bug-fixes and improvements under the hood on the main icecore repos, which can be read about in the commit logs there.

Relevant improvements to the icecore-dfmux repository include:

  • Fixed mezzanine temperature sensor readout (added important delay and divide-by-two)
  • Mezzanine power down sequence now more gentle (and symmetric with power up)
  • Use kernel-side filtering to make sure we get packets only from the board itself (fixes errors that happened with long netanals)
  • Added DAN Gain to the housekeeping tuber call
  • Added remote state-tracking functionality to the iceboards (to be used with pydfmux functions store_bolo/squid_state(...) and retreive_bolo/squid_state(...))

File Locations:

  • All Release 7 files are in git-annex at pydfmux/firmware/2016-05-17
  • This includes a pre-made image file at pydfmux/firmware/2016-05-17/dfmux_release7.img
    • md5sum for this file is 8024644a54045dcfb4c77396d05bf787
  • Symlinks for use with the fetch.sh script have been updated in the “latest” directory at pydfmux/firmware/latest

For detailed building instructions see Firmware Upgrades

NetBoot:

Warning

The front panel boot-up light sequence has changed!

Successful bootup is indicated by the illumination of the following front panel lights:

  • GP3 (green)
  • FPGA Done (red)
  • PLL Lock 1 (yellow)
  • PLL Lock 2 (green)

Sequence is:

  1. PLL Lock Lights 1 & 2: PLLs are locked (clock is probably good)
  2. GP1-3 flashing in decending order ending with GP3 staying lit: Linux successfully booted
  3. FPGA Done on: FPGA successfully programmed

April 15, 2014: 128x Firmware (mcgill_128x)

SO-called “128x firmware” is a significantly new signal path, using polyphase filter banks for both modulator and demodulator paths. Release notes for PFB firmware can be found at 128x.

Earlier Releases

Please inspect the git logs (git log --stat firmware/) for release information prior to 2014-09-26.