User Tools

Firmware Versioning evolution

FX3 Version Info

The version id is also encoded into the firmware image file name as:

<VendorID>_<HardwareID>_<ProductID>_<ReleaseType>_<BuildNumber>

FX3 version info C/C++-struct

The FX3 version structure is as follows (little-endian memory layout):

firmware-version.h
struct FwVersion{
    unsigned vendorId    : 3;
    unsigned hwCfgId     : 5;
    unsigned productId   : 8;
#ifdef OLD_VER_FMT
    unsigned releaseType : 5;
    unsigned buildNo     : 11;
#else
    unsigned releaseType : 3;
    unsigned buildNo     : 13;
#endif
};
static_assert(sizeof(FwVersion) == 4);

Prior to FPGA v. 89 there was no standard-compliant way of representing the version info in a C struct though (which is exactly what prompted the rework in the first place).

Bit layout

The bits are laid out in 4 sequential bytes as follows (depending on the version):

version 3 2 1 0
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
fx3<102
fpga<77
buildNo[7:0] releaseType buildNo[10:8] productId vendorId hwCfgId
fx3<103 buildNo[10:3] buildNo[2:0] releaseType productId hwCfgId vendorId
fx3>=103
fpga>=77
buildNo[12:5] buildNo[4:0] releaseType productId hwCfgId vendorId

Because of the change in bit layout different byte sequences shown below are needed to produce the same result (exact same component values for the sake of simplicity and only as an illustration):

version byte sequence (API return buffer)
.vendorId = 1
.hwCfgId = 1
.productId = 5
.releaseType = 3
.buildNo = 0x67
fx3>=102
fpga<77
0x21 0x05 0x18 0x67
fx3<103 0x09 0x05 0xE3 0x0C
fx3>=103
fpga>=77
0x09 0x05 0x3B 0x03

Vendor ID

Code Value
1Cypress

Hardware ID

Code Value
1FX3

Product ID

Code Value
1reserved for Gen 1 camera, a.k.a. “Moon landing”
2reserved for Gen 2 camera, a.k.a. “Piggy”
3Gen 3 camera (Alpha), a.k.a. “Frankie” (from Frankenstein's Monster)
4Gen 3 camera, Production
5Gen 4 camera, a.k.a. “Vitreledonella”
6Gen 5 camera, either “Square One” or “Studio”

Release type

Code Name Meaning
0Private build Private build for debugging and similar purposes
1Alpha feature-incomplete early development cycle “somewhat stable” build
2Beta feature-complete, but not very stable build (lots of bugs)
3Evaluation Tech preview
4Release candidate feature complete and stable
5Release general availability
6Backport backport of a feature from next gen camera
7Emergency bug fix a critical post-release bugfix

Build number

Code Value
#Increments on each build

FPGA Version Info

The version id is also encoded into the firmware image file name as:

<VendorID>_<HardwareID>_<ProductID>_<ReleaseType>_<BuildNumber>

Vendor ID

A 3-bit number that represents a vendor of the main computation unit

Code Value
1Xilinx (AMD)
2Altera (Intel)

Hardware ID

A 5-bit number that represents a model from the list in the following table:

VendorIdCode Value
11Artix-7 100T
12Artix-7 200T
13Artix UltraScale+ XCAU25P
21Cyclone 10 GX

Product ID

An 8-bit number, unique to each product type from the table below:

Code Value
1reserved
2reserved
3Gen 3 camera (Alpha), a.k.a. “Frankie”
4Gen 3 camera, Production
5Gen 4 camera, a.k.a. “Vitreledonella”
6Gen 5 camera, prosumer grade “Square One”
7Gen 5 camera, professional grade “Studio”

Release type

Lower 3 bits of this 5-bit value map to a type of build below, the upper 2 bits are reserved for future use and must be b00

Code Value
0Private build
1Alpha
2Beta
3Eval/Tech preview
4Release candidate
5Release
6Backport
7Emergency bug fix

Build number

11 bits of a build number (the range is 1..2047)

Code Value
#Increments on each build

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information