HITS
Hardware Impulse Train Synthesizer
HITS is a real-time FPGA simulator of the ATLAS Tile Calorimeter readout. It runs at 40 MHz on a Terasic DE10-Nano and rebuilds the front-end signal chain in synthesizable Verilog: pseudo-random hits following the LHC bunch-train structure, energy amplitudes drawn from measured distributions, electronic noise, analog shaping and an embedded pole-zero cancellation. It lets the group validate online energy-reconstruction without access to the experiment.
A calorimeter readout, rebuilt in silicon
The real detector delivers one digitized sample every 25 nanoseconds, in step with the LHC bunch crossings. HITS produces that same stream on an FPGA: a hit either lands in a given crossing or it does not, and when it does, the pulse carries an energy drawn from the measured minimum-bias distribution, buried in electronic noise and shaped by the front-end electronics.
Because occupancy and pedestal can be changed at runtime from the board's ARM processor, the same hardware can stand in for quiet and busy beam conditions. That makes it a bench for testing energy-estimation and filtering algorithms long before they ever see real data.
The signal chain
The synthesizable core chains four blocks, one sample per clock cycle, ending at the digitized ADC value. Every block is plain Verilog with its lookup memories in .mif files.
Random number generation
A bank of seven LFSRs with a selector produces uncorrelated pseudo-random streams that feed every stochastic step downstream.
Hit generation
A Bernoulli draw decides, per bunch crossing, whether a hit occurs. It is gated by the LHC bunch-train mask and the programmable occupancy.
Amplitude and noise
Inverse-CDF lookup, split across several memories, draws energy amplitudes from a measured distribution and adds Gaussian electronic noise.
Shaping and digitization
An IIR model of the front-end shaper, then pedestal offset and clipping to the ADC range. The output shaper_clip is the readout sample.
pzc_ped_track.v) is not part of the simulator. It is a downstream reconstruction stage, validated against the synthesized pulse train and composed with the core by the FPGA_Simulator_v1_PZC.v test wrapper. The board top wires that wrapper to the ARM processor through Qsys.
What is inside
./change_occupancy over SSH. The effect is visible live in SignalTap.compare_vcd.py catch any unintended change. Deliberate changes regenerate the baseline in the same commit.Run the simulation
# plain Verilog, no board required $ cd projects/aurora $ iverilog -s sim_pulsos_tb -o tb.vvp \ ../../rtl/*.v ../../rtl_test/*.v sim_pulsos_tb.v $ vvp tb.vvp # writes sim_pulsos_tb.vcd # regression: exit 0 means bit-for-bit identical $ python ../../verification/compare_vcd.py \ sim_pulsos_tb.vcd
Or open projects/aurora/sim_pulsos.spf in AURORA and press the wave button. The testbench drives three full LHC orbits with an occupancy step halfway through, from Icarus Verilog straight into GTKWave.
On the DE10-Nano
See it running
Have a capture to add? Drop a PNG at the path shown and it replaces the placeholder automatically.
Published work
HITS grew out of the NIPS-CERN line on digital signal processing for the ATLAS Tile Calorimeter. The random generator, the signal-conditioning stage and the full simulator have each been described in peer-reviewed venues.
All publicationsGet HITS
Clone the repository to simulate on your machine, or download the SD-card image to bring up the DE10-Nano. Everything is on GitHub under the NIPS-CERN License.