CERN Accelerating science

This website is no longer maintained. Its content may be obsolete. Please visit http://home.cern/ for current CERN information.

FEDKIT : Interface from Slink64 to PCI64/66

The readout unit working group (RUWG) defined a connector and protocol that will allow CMS DAQ to read out the data from all the sub-detector's FEDs in a common fashion.

Boards can be shipped to FED developers in order to test the Slink port on their designs.

Useful links

The hardware web page is at : http://cern.ch/dgigi/fed_kit/fed_kit.htm

Software support : Eric Cano <Eric.Cano@cern.ch>

Hardware support : Dominique Gigi <Dominique.Gigi@cern.ch>

To order some hardware : Attila Racz <Attila.Racz@cern.ch>

The RUWG web page is at : http://cmsdoc.cern.ch/cms/TRIDAS/horizontal/

The FEDkit also comes integrated in the XDAQ framework. See http://cern.ch/xdaq

Latest documentation

15/11/2004 - fedkit-0.9.pdf

Added documentation for support of the fed_id feature in the sender board.

Latest news

26/02/2007

Added a new utility: fedkit_link_dump_check contributed by Tim Christiansen

Tag: fedkit_v_1_39

 

Documentation history

16/01/2002 - fedkit-0.2e.pdf

Latest revision of the documentation fully covers hardware and software documentation for the receiver board.

Sender board documentation only partial.

24/01/2002 - fedkit-0.2f.pdf Updated sender board documentation and added preliminary sender API plans.
13/2/2002 - fedkit-0.2g.pdf

Documented the robustness feature.

10/4/2002 - fedkit-0.3a.pdf Merged several corrections. Added API for allocation of blocks by user (noalloc scheme).
30/04/2002 - fedkit-0.3b.pdf Added the API for the master and slave mode of the sender board.
15/05/2002 - fedkit-0.3c.pdf Added API for block handle management (in allocation by user section)
30/05/2002 - fedkit-0.4a.pdf Added an API for fragment analysis (also in the case of several FEDs merged in the same fragment). Reworked the introduction on the software architecture. Fixed the terminology use. Fixed the kernel patch section (now the CERN 2.4.9 kernel is the recommended one).
10/7/2002 - fedkit-0.5a.pdf Added an API and hardware documentation for link selection in merger.
16/9/2002 - fedkit-0.6a.pdf

Added an API for FED block parts.

Added the hardware documentation for soft reset on sender.

21/11/2002 - fedkit-0.7a.pdf

Documented the change in the default fedkit compiled: now the native Linux version is compiled. Xdaq-shell is still used by the test program.

Added labview functions documentation.

Fixed various details.

21/11/2002 - fedkit-0.7b.pdf

Minor updates

8/3/2004 - fedkit-0.8b.pdf

Added documentation for fedkit_frag_get_FED... functions, fedkit_get_FPGA_version.

Documented FPGA versioning in hardware

Documented link-level dump functionnality

Clarified that block number has to be >= 2048 in documentation.

Documented new fedkit_get_error_string function

Convinced framemaker to generate a proper PDF.

22/3/2004 - fedkit-0.8c.pdf

Minor update

7/6/2004 - fedkit-0.8d.pdf

Updated location of i2o headers in the CVS repository (checkout was incomplete before that). See new checkout instructions.

15/11/2004 - fedkit-0.9.pdf

Added documentation for support of the fed_id feature in the sender board.

Project history

16/01/2002

Both software and hardware run at full speed on the link Slink to PCI memory achieved range from 435MB/s to 470MB/s depending on fragment size. More measurements to come...

The receiver board design is finished.

Sender board only operates in generation mode. Slave and master modes are still in development.

13/2/2002 i2ocore and fedkit now handle crashes of the calling software more gracefully. Yet, the user still has to unload/reload the modules fedkit_kernel if the board was not deallocated properly.
10/4/2002

Fixed a synchronization bug between software FIFO and interrupt

Fixed a crash condition when free data blocks are exhausted.

30/4/2002 Added the support for the noalloc scheme. This version is tagged `fedkit_v_1_10`. This version still supports the old version of the sender board (device ID 0xFE01 and not 0xB0AA)
15/5/2002

Added support for the handle management functions. Fixed a bug with header size in blocks. This version is tagged 'fedkit_v_1_11'.

16/5/2002

Fixed a bug (memory leak in no alloc scheme). This version is tagged 'fedkit_v_1_12'.

30/5/2002

Added the functions to handle the fragments from the merger board. Added data checking functions to test the merger board, including pseudo-random patterns. During those test, it turned out that kernel 2.4.16 and 2.4.18 (latest today) were buggy. We get an error in __alloc_page (kernel function) in every process of the system at some point. When init dies, the kernel panics. Not good... Kernel 2.4.9 provided by redhat 7.2 works. The one provided by CERN with cern redhat 7.2.1 has the extra advantage to have the bigphys patch already included. This is our current kernel of choice.

This version is tagged 'fedkit_v_1_14'.

10/7/2002

Added support for link selection in merger.

Major rework was done on the test programs (not much documented) used to test all the run conditions of the fedkit. Now all the tests are in a single program. Test program in progress for sender tests (as master and slave).

Added support for multithreading environment (locking). The fedkit is now thread safe

Fixed a bug that came when user did a fedkit_open without fedkit_start and then fedkit_close .

Added erasing of structures and detection to warn user in case of multiple close/release of fragment.

Major rework in the makefiles so that compiling from the main makefile (in itools) allows the user to choose the compiler (gcc/gcc3/insure) the compiler is forced to gcc for kernel code. The DEB Makefile variable enables profiling compilations (DEB=-pg), and optimized compilations (DEB=-O6). Those Makefile features still have to be documented.

This version is tagged 'fedkit_v_1_15'

17/9/2002

Heavily reworked the test_merge program. This program handles all the situations where the fedkit works. Currently, it handles self sender and receiver, single link or merger, handles the senders, in master, slave and generated mode. The program checks the fragment data fully. We can now check the data up to 200MB/s thanks to assembly check function (used to be 15MB/s). The test_merge program can be used in just send/just receive mode, so that we can send data from one PC to another. The command line parameters can be viewed using test_merge --help.

The fedkit API was slightly revised to have a more uniform use of fixed size types (u32, etc...). The whole API and internal functions rely on the U32 family, defined in the i2o header files located in TriDAS/Auxiliary/i2o.

The new native version of the fedkit now is a full featured driver. This driver doesn't rely anymore on i2ocore and xdaq-shell. This improves the driver behaviour in case of crashes (the receiver or sender is then closed more gracefully). The driver can now be installed and loads on demand automatically. (This feature was also added for the xdaq-shell).

Added in the API the functions for going through the payload of each FED effortlessly. (fedkit_frag_get_FED_block... functions, see documentation).

This version is tagged 'fedkit_v_1_16'

21/11/2002

Using fedkit native, the user has to do "fedkit install" once only and then the driver load automatically after each reboot.

Added support for the interrupt on the sender board, leading to improved performance (only in Linux native version).

Made fedkit native version the default when doing "make fedkit" at top level.

Added software reset of sender to fix a system hang when sending in master mode and closing before send complete (blocked by receiver).

Fixed the errors shown by depmod when doing fedkit-install

Added a threshold scheme in the receiver interrupt, reducing dramatically the interrupt number on receiver side. Minimal number or receiver blocks is now 2000

 

28/02/2003

Fixed compilation issues for the fedkit native driver (some problem were seen whith depmod -a on AMD machines)

Fixed some issues with some rcsid variables in fedkit_sender.h and fedkit-example.c (compilation issue)

Various bugfixes. This version is tagged "fedkit_v_1_21".

8/3/2004

Fixed bugs in fedkitfrag_get_FED... functions

Fixed incrrect fedkit_close (missing mmaps)

Fixed a memory leak in test_merge and decreased memory usage

Added support for FPGA version reading in software

Added options to test_merge

Added support for CRC checking (now reported by hardware)

Added support for link-level dump and corresponding commend-line utility

Fedkit now compiles on Redhat 7.3, 9, and CERN E. Linux 3 (to be released linus distribution)

Various bugfixes. This version is tagged "fedkit_V_1_27".

23/4/2004

Added some version awareness to handle kernel API variations (backporting of 2.6 features into 2.4 by RedHat)

The tag for this version is "fedkit_V_1_29"

4/6/2004

A bug (race condition) leading to a hang of the receiver has been discovered and corrected.

The cvs tag for the new version is "fedkit_v_1_30"

5/7/2004

Fixed a wrong memory allocation leading to strange behaviour of the fedkit in some systems (strangley not all of them)

Various small fixes

The cvs tag is "fedkit_v_1_31"

20/10/2004

Updated the field locations for the fedkit_frad_get_FED_... functions, that were based on old specification of from RUWG. Among others, this fixes the CRC fiedl. Added support for TTS trailer field.

Fixed an out-of-bound index in the fedkit_frag_analyse function that lead to segmentation faults.

Tagged: "fedkit_v_1_34"

15/11/2004

Added support for the FED id field in the sotfware for the fedkit_send... functions. This requires recent sender FPGA version (>= 0x3F200009).

Tagged: fedkit_v_1_35

10/03/2005

Added better timeout support in test_merge

Minor modification in Makefile

Tagged: fedkit_v_1_36

08/07/2005

Changed the Makefile for xdaq shell and generic_pci_access so that both static and dynamic libraries are generated correctly.

Tagged: fedkit_v_1_37 and generic_pci_access_V_1_01 (for generic pci access only).

26/02/2007 Added a new utility: fedkit_link_dump_check contributed by Tim Christiansen

Tag: fedkit_v_1_39

TODO list (as of 30/5/2002)

TODO list (as of 10/7/2002)

TODO list (as of 17/9/2002)

Useful links

Fedkit is based on the i2ocore package

Fedkit requires a Linux kernel with "big physical area" patch installed. The kernel for the CERN redhat 7.2.1 is located in AFS at /afs/cern.ch/project/linux/dev/kernel/2.4-current/build-current. This kernel version works well for us, and already has the bigphys patch applied.

The patch itself can be found on this page : http://www.polyware.nl/~middelink/En/hob-v4l.html