An EBD file is an ASCII text file that has an informational header, followed by a number of lines, where each line has 32 characters that are either zero (0) or one (1).
Each line represents the classification of 32-bits, or one word of CRAM. Zero means non-essential and one means essential. The Least Significant Bit (LSB) of a word, which is sequentially considered its first bit, is on the far right.
In the 20nm UltraScale family, each CRAM frame is 123 words. As each line in the EBD represents a word, You can visualize it by counting off groups of 123 lines in the EBD file.
Each group of 123 lines of data in the EBD file holds the essential bits data for a configuration frame. It is ordered by incrementing Linear Frame Address, or LA. The initial group of 123 lines is a dummy frame. The next group of 123 lines is for LA = 0, followed by the next group of 123 lines for LA = 1 and so on.
Where is the classification for the CRAM bit located at LA, WD, BT?
The allowed range for LA is from zero to the maximum frame of the device.
WD = Y can range from 0 to 122.
BT = Z can range from 0 to 31.
If in the EBD, you call the first data line "line zero" and the first character on each line "character zero", then:
Seek line = (123 * (LA + 1)) + WD +10
(+10 : For UltraScale devices, there are 10 dummy words on top of a dummy frame (123 words). So there are a total of 133 dummy words in the beginning of the .ebd file.)
Seek character in line = (31 -BT)
It is an index into an array. Based on the file's ASCII text representation of the data, the file is very easy for a person to read. I expressed the "seek line" and "seek character in line" in two steps instead of a single computation to seek a character in the file because potential differences in size between DOS and UNIX line end markers would complicate it.
The downside to ASCII text representation, where one ASCII character represent a one-bit binary value, is that the file is eight times larger on disk than if it were stored in a binary data file.
Xilinx provides a Tcl script with the SEM IP core which is an example of how to transform data represented in ASCII text into binary.
This is what we do when preparing to store the Essential Bits Data in an SPI flash. If the representation is changed, the equation for the index into the file/array must also be adjusted to match.
Below is part of a 1-bit SEU detection and correction report from SEM (see (PG187) for full format):
The CRAM location is LA=00001234, WD=3D, BT=07.
Below are first hundred or so lines of an Essential Bits Data file, or EBD file, for the KU040. EBD files for any monolithic FPGA in the 20nm UltraScale family looks similar, they only differ in the file length.