QDC/PSD HLS
Charge integration (QDC) with optional Pulse Shape Discrimination (PSD) implemented in HLS. Calculates Qlong, Qshort, and PSD ratio for neutron/gamma discrimination and scintillator spectroscopy.
Introduction
The QDC/PSD HLS block implements digital charge integration (QDC) with optional Pulse Shape Discrimination (PSD) for particle identification.
PSD is used to distinguish different particle types (e.g., neutrons vs. gammas) based on their scintillation pulse shape. Different particles produce different light decay time constants in scintillators, allowing discrimination by comparing charge integrated over different time windows.
The block provides:
- Qlong: Total charge integrated over the long gate
- Qshort: Charge integrated over the short gate (fast component)
- PSD: Ratio of Qshort/Qlong or Qlong/Qshort (selectable)
The core uses Xilinx HLS for efficient FPGA implementation with II=1 throughput.
Pin Description
Properties
Default: False
Select PSD calculation mode
Default: Qlong/Qshort
Options: Qlong/Qshort Qshort/Qlong
PSD calculation mode.
- Qlong/Qshort: PSD = (Qlong / Qshort) * 2^32
- Qshort/Qlong: PSD = (Qshort / Qlong) * 2^32 Available values: Qlong/Qshort, Qshort/Qlong, default Qlong/Qshort.
Usage
PSD Principle
The figure illustrates the pulse shape discrimination principle:
- Qlong integrates the full pulse (PRE_INT to QLONG_TIME after trigger)
- Qshort integrates only the fast component (PRE_INT to QSHORT_TIME after trigger)
- The ratio between these charges discriminates particle types
PSD Calculation Modes
The PSD value can be calculated using two formulas, selectable via the PSD Mode property:
Mode 1: Qlong/Qshort (default)
$$ \text{PSD} = \frac{Q_{\text{long}}}{Q_{\text{short}}} \times 2^{32} $$
Mode 2: Qshort/Qlong
$$ \text{PSD} = \frac{Q_{\text{short}}}{Q_{\text{long}}} \times 2^{32} $$
The choice depends on the application:
- Qlong/Qshort: Larger values for particles with slower decay (e.g., neutrons in organic scintillators)
- Qshort/Qlong: Complementary ratio, may be preferred for some analysis methods
Integration Timing
The charge integration windows are defined as:
Trigger
|
v
|--PRE_INT--|------------------QLONG_TIME-----------------|--POST_INIB--|
|--------QSHORT_TIME--------|
^ ^ ^
| | |
Integration Qshort ends Ready for
starts next event
- PRE_INT: Samples to include before the trigger (captures rising edge)
- QLONG_TIME: Duration of long integration gate after trigger
- QSHORT_TIME: Duration of short integration gate after trigger
- POST_INIB: Additional dead time after Qlong for pile-up rejection
Pile-Up Rejection
The block implements non-paralyzable pile-up rejection:
| Event Timing | Behavior |
|---|---|
| Trigger during QLONG window | Both events rejected (REJ flag) |
| Trigger during POST_INIB | Only second event rejected (DREJ flag) |
| Trigger after POST_INIB | Both events accepted normally |
Rejection counters (REJ_CNT, DREJ_CNT) track discarded events for rate analysis.
Output Formats
The block provides charge values in two formats:
| Output | Bits | Gain Applied | Use Case |
|---|---|---|---|
| QLONG_32 / QSHORT_32 | 32 | No | Full resolution for analysis |
| QLONG_16 / QSHORT_16 | 16 | Yes | Reduced data for histogramming |
The GAIN parameter scales the 32-bit values to fit in 16 bits:
$$ Q_{16} = \frac{Q_{32} \times \text{GAIN}}{65536} $$
Baseline Subtraction
The BASELINE IN input allows real-time baseline subtraction:
$$ Q = \sum_{i=0}^{N} (x[i] - \text{baseline}) $$
Connect a baseline restorer block output to remove DC offset and improve energy resolution.
Timing and Latency
- Processing latency: 13 clock cycles
- Throughput: 1 sample per clock cycle (II=1)
Typical Applications
- Neutron/gamma discrimination with organic scintillators (EJ-301, BC-501A)
- Alpha/beta discrimination in liquid scintillators
- Phoswich detector readout
- PET timing measurements
- General charge integration for PMT/SiPM signals