The Front-End Readout Control Software for the CODA Data Acquisition Toolkit

Paper: 385
Session: B (poster)
Presenter: Abbott, David, SURA/Jefferson Lab, Newport News
Keywords: data acquisition systems, object-oriented methods, software tools, free software

The Front-End Readout Control Software for the CODA
Data Acquisition Toolkit

D.J. Abbott, P. Banta, J. Chen, W.G. Heyes, E. Jastrzembski, C. Timmer
Thomas Jefferson National Accelerator Facility (TJNAF)
12000 Jefferson Avenue
Newport News, Virginia 23606, U.S.A.


The TJNAF (formerly CEBAF) Data Acquisition System, CODA (Version 2),
consists of a set of software objects which communicate via a network-based,
distributed, cross-platform environment. With this flexibility, one is able to
build an extensible acquisition system capable of aggregate bandwidth's in excess
of 10's of megabytes/sec. The limitations being largely due to network bandwidth
and/or CPU speed. At the Front-end of this system is the CODA Readout Controller
(ROC). The ROC was primarily designed to run on a real-time system (i.e. VxWorks)
where it can be interrupt driven and have direct access to the Front-End hardware;
however, it can also be run on a variety of UNIX based platforms (Solaris, LINUX,
At its core the ROC component is built on an interpreter for the Tcl
scripting language. The Tcl interpreter is extended by the Itcl package which
allows for an object oriented approach to Tcl scripting. More importantly the Itcl
package allows Tcl methods to be directly linked to C functions, thus providing the
speed and optimization necessary for certain critical ROC functions. In our
implementation the Tcl core handles standard file and database access as well as
inter-process "control" communication while embedded C procedures handle high speed
data transport and buffer management.
By itself the CODA ROC software can be used as a stand-alone data
acquisition system. Two separate readout "lists" can be dynamically loaded into the
ROC as part of its configuration. The primary list contains routines necessary to
access the Front-end hardware as well as interrupt service routines that can be
driven by multiple external trigger sources. The optional secondary readout list
contains routines that asynchronously take events from the primary list and perform
some user specified analysis (e.g. compression, sparsification, histogramming etc.).
The modified events are finally passed to the third stage of the ROC where they are
output to a user specified option such as a disk file (local or nfs) or a network
data link to a CODA Event Builder component.
In this talk we will present details on the software architecture of the ROC
and it's real-time performance in several supported hardware platforms including
both 680X0 and PowerPC 60X VME single-board CPU's (from Motorola and Radstone).
Readout performance from FASTBUS (via the Struck SFI/340) and CAMAC (via the Kinetic
Systems 3922/2917) will also be presented.