Newer
Older
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
\subsection{A More Structured Device}
The following is the output of \texttt{eb-ls}, and \textit{Etherbone}
tool, when run over a complex White Rabbit device. This output
comes from scanning the SDB structures:
\footnotesize
\begin{verbatim}
root@scul007:~# eb-ls dev/pcie_wb0
BusPath VendorID Product Base(Hex) Description
1 000000000000ce42:66cfeb52 0 WB4-BlockRAM
2 0000000000000651:eef0b198 100000 WB4-Bridge-GSI
2.1 0000000000000651:35aa6b95 100000 GSI_GPIO_32
2.2 0000000000000651:8752bf44 140000 GSI_ECA_UNIT
2.3 0000000000000651:10051981 180000 GSI_TM_LATCH
3 0000000000000651:eef0b198 200000 WB4-Bridge-GSI
3.1 000000000000ce42:66cfeb52 200000 WB4-BlockRAM
3.2 0000000000000651:eef0b198 220000 WB4-Bridge-GSI
3.2.1 000000000000ce42:ab28633a 220000 WR-Mini-NIC
3.2.2 000000000000ce42:650c2d4f 220100 WR-Endpoint
3.2.3 000000000000ce42:65158dc0 220200 WR-Soft-PLL
3.2.4 000000000000ce42:de0d8ced 220300 WR-PPS-Generator
3.2.5 000000000000ce42:ff07fc47 220400 WR-Periph-Syscon
3.2.6 000000000000ce42:e2d13d04 220500 WR-Periph-UART
3.2.7 000000000000ce42:779c5443 220600 WR-Periph-1Wire
3.2.8 000000000000ce42:779c5443 220700 WR-Periph-1Wire
\end{verbatim}
\normalsize
\subsection{Endianness Problems}
Please note that the host may have some issues reading the binary
dumps. According to how the bridge between the host and FPGA is
designed you may face one of the following situations:
\begin{itemize}
\item The host is big-endian (data is always correct).
\item The host is little-endian and the bridge is byte-oriented.
\item The host is little-endian and the bridge is word-oriented.
\end{itemize}
If the bridge is byte-oriented, i.e. each and every byte can be
independently addressed as such, then the usual endian conversion
rules apply (e.g. you can \textit{memcpy} the records to host memory
and access fields with endian-aware code).
If the bridge is word-oriented, with 32-bit words in this example, the behaviour is stranger, in
a way. After you copied the data to host memory (whether one byte at
a time or not), you'll find that the bytes are swapped within each word.
This happens because the 32-bit word is transferred as a whole: the least significant
bits remain the the least significant, but they come from offset 3 in the data structure
and are stored at offset 0 in the little-endian host. If this is your case, you need to
byte-swap each 32-bit word before using the structure in a
little-endian host. After such swapping, the data fields live at the correct
offsets and must be accessed as big endian.
\subsection{Existing Tools}
As part of the \textit{Etherbone} project, you already find a number
of tools that work with SDB structures (including \texttt{eb-ls} that
printed the table of devices shown above). The project is at
\texttt{http://www.ohwr.org/projects/etherbone-core} .
% LocalWords: metadata FPGA gateware CERN