September 15, 2004
Overview
The following changes are introduced in this release:
Items Specific to LightParser:
Items Specific to DPL3:
General Items:
Notes:
Version 0.6.0 is a beta release of the Channelization API for DPL3 and LightParser Boards. This release does not represent the intended final production release. Some aspects of the application program interface (API) are subject to change as the software development continues to meet design requirements and usability issues.
LightParser: Support for Mixed Payload SDH Structures
The support for mixed payloads required a number of changes both in the logic of Virtex FPGA and the API functions for configuring the parser.
The old low-level functions (from prior releases) for configuring the SDH parser have been renamed or replaced. These functions are:
| Old Name | New Name | Note |
| cac_parse_au4_c4 | cac_parse_one_au4_c4 | |
| cac_parse_au4_tug3 | cac_parse_au4_all_tug3 | function arguments differ |
| cac_parse_au4_vc3 | cac_parse_au4_all_vc3 | function arguments differ |
| cac_parse_au3_c3 | cac_parse_one_au3_c3 | |
| cac_parse_vc3_c3 | cac_parse_one_vc3_c3 | |
| cac_parse_tug3_vc12 | cac_parse_tug3_all_vc12_list | |
| cac_parse_au3_vc12 | cac_parse_au3_all_vc12_list | |
| cac_parse_lovc_e4 | cac_parse_lovc_one_e4 | |
| cac_parse_lovc_e3 | cac_parse_lovc_one_e3 | function arguments differ |
| cac_parse_lovc_e1 | cac_parse_lovc_one_e1 | |
| cac_parse_lovc_ds3 | cac_parse_lovc_one_ds3 | function arguments differ |
The old high-level functions for configuring homogeneous parsing structures have not changed except in their actual implementation. These functions are:
| cac_parse_sdh_cfg_au3e1s | cac_parse_sdh_cfg_au3e3s |
| cac_parse_sdh_cfg_au4e1s | cac_parse_sdh_cfg_au4e3s |
| cac_parse_sdh_cfg_au4e4 |
A group of new API functions are added to configure specific containers and branches for mixed payload structures and to improve control over the various parser modules. The list of functions described is not yet be complete; development is continuing.
| Parser module initialization: | |||
| cac_parse_all_au4_init | cac_parse_one_au4_init | ||
| cac_parse_all_au3_init | cac_parse_one_au3_init | ||
| cac_parse_all_tug3_init | cac_parse_one_tug3_init | ||
| cac_parse_all_vc3_init | cac_parse_one_vc3_init | ||
| cac_parse_all_lovc_init | cac_parse_one_lovc_init | ||
| Single container / payload extraction: | |||
| cac_parse_one_au4_c4 | cac_parse_au4_one_tug3 | ||
| cac_parse_au4_one_vc3 | cac_parse_one_au3_c3 | ||
| cac_parse_au3_one_tug2_vc12 | cac_parse_tug3_one_tug2_vc12 | ||
| cac_parse_one_vc3_c3 | cac_parse_lovc_one_c4 | ||
| cac_parse_lovc_one_c3 | cac_parse_lovc_one_e4 | ||
| cac_parse_lovc_one_e3 | cac_parse_lovc_one_e1 | ||
| cac_parse_lovc_one_ds3 | |||
| Complete container / payload extraction: | |||
| cac_parse_all_au4_c4 | cac_parse_au4_all_vc3 | ||
| cac_parse_au4_all_tug3 | cac_parse_all_au3_c3 | ||
| cac_parse_all_vc3_c3 | cac_parse_tug3_all_vc12 | ||
| cac_parse_au3_all_vc12 | cac_parse_lovc_all_c4 | ||
| cac_parse_lovc_all_c3 | cac_parse_lovc_all_e4 | ||
| cac_parse_lovc_all_e3 | cac_parse_lovc_all_e1 | ||
| cac_parse_lovc_all_ds3 | |||
A higher level API function is added for configuring the SDH parser by specifying a parse path and a list (array) of branch indexes. The function is named cac_parse_rcv_path_config.
Several macros are defined in the API for specifying the parse path. The examples below are those for extracting E1 streams:
| PATH_STM1_E4_E3_E2_E1 | Parse STM-1 to VC-4 to 64 E1s |
| PATH_STM1_TUG3_E3_E2_E1 | Parse STM-1 to VC-4 to 3 TUG-3s to 48 E1s |
| PATH_STM1_TUG3_TUG2_E1 | Parse STM-1 to VC-4 to 3 TUG-3s to 7 TUG-2s to 63 E1s |
| PATH_STM1_VC3_E3_E2_E1 | Parse STM-1 to 3 VC-3s to 3 E3s to 48 E1s |
| PATH_STM1_VC3_TUG2_E1 | Parse STM-1 to 3 VC-3s to 7 TUG-2s to 63 E1s |
| PATH_E4_E3_E2_E1 | Parse an E4 signal from the CMI port to 64 E1s |
| PATH_E3_E2_E1 | Parse an E3 signal from the Quad-E3 port to 16 E1s |
The array of indexes specifies which of the branches at each level of the path, ordered from high level to low level. A special index value of -1 may be specified to have the function configure extraction of all the branches below that point in the path.
The method for numbering stream IDs, particularly for E1, E3, C3, DS3 and, eventually DS1, streams has been re-worked to handle cases where stream numbers could overlap for streams derived from different parse paths. This is discussed in the following section.
LightParser: Modified Stream ID Numbering Method
The issue of stream ID overlapping arising from the support of mixed payload structures is resolved by inserting gaps between E1 or DS1 stream IDs coming from parse paths that could have conflicts.
A simple example is the case where VC-3 containers are configured to be extracted through different paths, the first extracting 21 E1 streams from a TUG-2 stream and the second extracting 16 E1 streams from a C3 container. The natural ordering of the streams from the second VC-3 would number the E1 streams starting at 16 which would conflict the stream number from the first VC-3 which are numbered from 0 to 20. The gapping method moves the 16 E1 streams from the second VC-3 so that their stream IDs start at 32, leaving room for the 21 E1 streams or even 28 DS1 streams from the first VC-3.
Two functions are included in the API to determine stream IDs based on a parse path and branch indices or based on a payload type and the natural stream number of the payload. The functions are:
| cac_parse_path_to_streamid | Determine stream ID for a stream based on parse path and branch indexes |
| cac_parse_payload_to_streamid | Determine stream ID for a stream based on payload type and stream number |
For both functions, either one of the parse path types or one of the payload types may be specified. Macros for payload types are defined in the API.
The stream IDs are used as the stream or framer value passed to the channel open functions. They are also used when generating grooming maps and can be used to extract valid status bits from the results of the new stream status function (described below).
Note that the maximum stream ID for level 1 streams has increased to 192 (96 per bank) to allow for the gaps.
For now the stream IDs are still sequential for the VC-4 to E4 SDH path and the purely PDH paths from the electrical E4 input and Quad E3 inputs.
LightParser: Support for Bulk C-11, C-12, C-3 and C-4 Container Streams
Channel types CAC_CHAN_MODE_C11, CAC_CHAN_MODE_C12, CAC_CHAN_MODE_C3 and CAC_CHAN_MODE_C4
Support for these channel types is added to the dplp_chantest, dplp_recv and dplp_alloctest diagnostic programs.
LightParser: New API Functions for Reading Receive Stream Status
The function provides arguments to retrieve and store both current and latched status information, although the latched status information is not yet supported by the hardware.
All of the available status bits for the container type and bank are stored in the array. For level-1 streams, such as E1, the array must be large enough to store 96 bits (12 bytes). The locations of the status for specific streams are based on the stream ID for the current parse path or payload type. The stream ID may be determined using the stream ID functions mentioned above. For example, the byte and bit location for a specific stream number of a specific payload type are determined by the stream ID in the following way:
uint8_t status_array[12];
int stream_id;
int stream_stat;
cac_parse_rcv_stream_status(CAC_HANDLE *, STREAM_STAT_E1,
bank, status_array, NULL);
stream_id = cac_parse_payload_to_streamid (
payload_type, bank, 0, stream_number );
stream_stat = status_array [ stream_id / 8 ] >> ( stream_id % 8 );
/* If stream_stat is 1, the stream is in sync */
LightParser: Hardware Timeout and Freeze Problems Fixed
DPL3: Support for DS3 with C-bit Framing
The new FPGA configuration file name is dpl3b-ds3t1-version (where version is 0-6-0 or similar). The FPGA configuration for DS3 M13-only format is no longer supported. The dpl_flashup program for DPL3 is modified to automatically substitute the new DS3T1 FPGA configuration type when updating boards that are configured for the old DS3M13T1 type.
The dpl_init program initializes the L3 framer for M13 framing when initializing boards with the DS3T1 L3 payload FPGA configuration.
The dpl_framercfg for DPL3 is modified to accept either the M13 or C-bit framing format option for boards with the new DS3T1 L3 format expansion FPGA configuration and to use the current framing format set in the L3 framer if the framing format is not specified on the command line.
Note that DS1 extraction from DS3 input (C-Bit or M13) currently supports only D4 framing. Support for DS1 ESF framing will be included in a future version of the FGPA configuration.
DPL3: Improved Handling of E3 and DS3 Loss of Sync
Loss of sync/signal errors are still provided when framer status interrupt queue entries are enabled. If framer status entries are not enabled, the suppression of data delivery will cause I/O timeout errors.
Implemented Software-Generated Time Stamps for Receive Channels
The device driver gathers the time information based on when interrupts are received from the board, which is the closest known time of data delivery. (The hardware has no concept of "wall time"). The device driver can also extrapolate the time difference between the amount of data available in each channel buffer and the amount of data used for each I/O performed by the application.
Time stamps are reported using the standard timeval structure, used by the standard C-library function, gettimeofday, with a values for seconds and microseconds since 00:00:00, January 1, 1970, UTC. The precision of the time stamps is in microseconds, however, their accuracy is influenced by several factors including interrupt latency and the actual data rate of incoming signal.
The following functions for controlling and reporting time stamps are added to the LightParser and DPL3 API:
| cac_chan_timestamp_mode | Enable, disable and set time stamp modes. |
| cac_chan_iotime | Report time stamp for previous I/O operation |
| cac_chan_read_ts | Read data from channel and report time stamp |
| cac_chan_io_ts | Determine available receive data and report time stamp |
Details of the time stamp mechanism and the API functions are available in the Software Reference Manual.
Implemented Channel Notification as Part of Device Driver Reset
The default notification is the delivery of the SIGKILL software signal. That signal cannot be caught or ignored and causes the processes to terminate which, in turn, will relinquish the open channel resource and free any memory resources used by the channel. Hence, the action is sometimes referred to as "purging".
A new API function, cac_chan_signal, may be used to modify the signal to be delivered or have no signal delivered at all. After a driver reset operation, active I/O operations on channels are terminated with an error condition and the value of errno is set to CAC_ERR_PURGED and the default notification of delivering SIGKILL is reinstated.
Linux Device Driver Uses Bigphysarea Patch by Default
It is no longer necessary to specify --enable-bigphys on the command line for the conifgure program. There is a new option, --disable-bigphys that may be used in case the patch is installed but you do not want the device driver to use it.
Reduced Stack Usage in Linux Device Driver
This was done to prevent stack over flow warnings that started occurring when run with Red Hat Enterprise Linux 3.0 and/or Linux Kernel version 2.4.21.
New and Modified Utility Programs
In addition to the utility program changes described above, the following changes to programs are included:
The dplp_portcfg program for LightParser is modified to allow separate invocations to configure transmit and receive modes.
The new dplp_portstat program for LightParser reads and reports status of the LighParser ports and clock sources.
The dplp_streams program for LightParser is modified to include:
The dplp_groom program for LightParser is modified to allow for stream ID values up to 192.
The dplp_clock program for LightParser now includes support for default DS1, DS2 and DS3 rates.
Bug fixes in the dpl_framercfg program for DPL3 include:
The dplp_info, dplp_find, dpl_info and dpl_find programs have a new -i option to identify the board or boards by blinking LEDs on the front panel and top edge of each board.
The dplp_info program for LightParser is also modified to display the CLK77 status as "OK" if it is both present and locked. The display of CLK39 status of "OK" means it is present, there is no longer a "locked" status for CLK39.
The dmatest and memtest programs for DPL3 and LightParser are modified to be more useful in test scripts:
The dpl_framermon program includes the following modifications:
New and Modified Demonstration Programs
New demo programs for DPL3 and LightParser, dpl3_timestamps and dplp_timestamps demonstrate how to use the new time stamp facility and related API functions. Both programs are compiled from a shared source file, dpl_timestamps.c.
New demo program for LightParser, dplp_streamstat, demonstrates how to use the new receive stream status function in conjunction with the payload stream ID function to read and display stream status for various signal structures.
The various parser configuration demo programs for LightParser are modified to use new API functions.
New demo programs for LightParser, dplp_cfg_au3_ds3s, dplp_cfg_au3_c3s and dplp_cfg_au4_c4, demonstrate how to configure the parser to extract DS3 streams and raw C-3 and C-4 container streams.
New demo program for LightParser, dplp_cfg_au3_mixed, demonstrates a simple example of configuring the parser for a mixed payload.
New demo program for LightParser, dplp_cfg_interactive, is an interactive parser configuration tool.
The dplp_stm1raw program has a new -D option to have it record descrambled data.
The dplp_multirec LightParser demo is fixed to work for E4 input from the electrical (CMI) port by using the CHAN_SOURCE_RAW_CMI macro when selecting the channelization source.
Changes to FPGA Configurations
The LightParser Virtex FPGA includes the following changes:
The DPL3 Main FPGA includes the following changes:
The DPL3 Expansion FPGA for DS3 payloads includes the following changes:
The DPL3 Expansion FPGAs for E3 payloads include the following changes:
Component Versions for This Release
The component versions for DPL3 and LightParser Software Release 0.6.0 are:
| Component: | Version: |
| API Library and Programs | 0.6.0 |
| Solaris Device Driver | 0.6.0 |
| Linux Device Driver | 0.6.0 |
| LightParser Spartan FPGA Configuration | 0.6.1 |
| LightParser Virtex FPGA Configuration | 0.6.0 |
| DPL3 Main FPGA Configuration | 0.6.0 |
| DPL3 Expansion FPGA Configurations | |
| E3 G751 E1 variation | 0.6.0 |
| E3 G832 Bulk variation | 0.6.0 |
| DS3 T1 variation | 0.6.0 |
| Generic variation | 0.6.0 |
Provisions for handling the higher number of level 3 stream IDs has not been completely implemented. When the SDH parser is configured for signal structures requiring gapped level 3 stream IDs, stream IDs may overlap with streams from a different port configured for bank 1.The function cac_parse_rcv_path_config does not work correctly with the path argument PATH_STM1_TUG3_C3. All other supported paths have been tested for a limited range of source, bank, and index arguments.
The functions cac_parse_au3_one_tug2_vc12 and cac_parse_tug3_one_tug2_vc12 are not fully tested.
A problem in the Main FPGA configuration occasionally leaves the board in state which causes transmit channels to timeout on one or or more framers. This situation occurs primarily when the board is initialized and primarily affects the virtual L1 transmit streams. The only work-around is to reinitialize the board using the dpl_init program with its -M option.ESF framing is not yet supported for DS1 extraction from DS3 input.