Belle II Software  release-05-02-19
CDCTrigger2DFinderFirmwareModule.h
1 #pragma once
2 #include <framework/core/Module.h>
3 #include <trg/cdc/Cosim.h>
4 
5 #include <string>
6 #include <cstring>
7 #include <iostream>
8 #include <vector>
9 #include <bitset>
10 #include <array>
11 
12 #include <unistd.h>
13 
14 #include "trg/cdc/modules/houghtracking/xsi_loader.h"
15 
16 namespace Belle2 {
22  class CDCTriggerSegmentHit;
23 
25  using tsOut = std::array<unsigned, 4>;
27  using tsOutArray = std::array<tsOut, 5>;
29  struct TRGFinderTrack {
31  double omega;
33  double phi0;
36  };
37 
44  public:
47 
50 
54  void initialize() override;
55 
68  void event() override;
69 
70  protected:
72  std::string m_hitCollectionName;
73 
76 
78  std::string m_bitstreamNameTo2D;
79 
81  bool m_fromFastSim = false;
82 
84  int m_nClockPerEvent = 32;
85 
87  int m_debugLevel = 0;
88 
90  static const int m_tsVectorWidth = 21;
91 
93  static const int m_nInTSPerClock = 10;
94 
96  static const int m_nOutTracksPerClock = 4;
97 
99  using tsVector = std::array<char, m_tsVectorWidth>;
100 
108  int localSegmentID(int globalID);
109 
118  /* std::bitset<m_tsVectorWidth> encodeTSHit(CDCTriggerSegmentHit const *); */
119  auto encodeTSHit(CDCTriggerSegmentHit const*);
120 
129  auto toTSSLV(const std::bitset<m_tsVectorWidth>);
130 
132  TRGFinderTrack decodeTrack(std::string trackIn);
133 
135  void decodeOutput(short latency);
136 
138  std::string lib_extension = ".so";
140  std::string cwd = getcurrentdir();
142  std::string design_libname = cwd + "/xsim.dir/t2d/xsimk" + lib_extension;
144  std::string simengine_libname = "librdi_simulator_kernel" + lib_extension;
145 
149  s_xsi_setup_info info; // How should this be initialized?
150 
152  static const int width_in = 219;
154  static const int width_out = 732;
155 
157  static constexpr int nAxialSuperLayer = 5;
159  using tsArrayPerSL = std::vector<std::bitset<m_tsVectorWidth> >;
161  using tsArrayPerClock = std::array<tsArrayPerSL, nAxialSuperLayer>;
163  using tsArray = std::vector<tsArrayPerClock>;
164 
167 
169  using inputVector = std::array<char, width_in>;
171  std::array<inputVector, 5> tsfInput;
172 
174  std::array<char, width_out> finderOutput;
175 
177  char t2d_out[width_out] = {};
178 
180  int clk = 0;
182  int tsfPort[5] = {0};
184  int out = 0;
185 
187  void initializeFastSim();
188 
190  void loadFromFirmware(int iclock);
191 
193  void loadFromFastSim(unsigned iclock);
194 
195  };
197 }
Belle2::CDCTrigger2DFinderFirmwareModule::m_nClockPerEvent
int m_nClockPerEvent
how many clocks to simulate per event
Definition: CDCTrigger2DFinderFirmwareModule.h:84
Belle2::CDCTrigger2DFinderFirmwareModule::info
s_xsi_setup_info info
s_xsi_setup_info from Xilinx software
Definition: CDCTrigger2DFinderFirmwareModule.h:149
Belle2::CDCTrigger2DFinderFirmwareModule::tsArrayPerSL
std::vector< std::bitset< m_tsVectorWidth > > tsArrayPerSL
TS array per SL.
Definition: CDCTrigger2DFinderFirmwareModule.h:159
Belle2::CDCTrigger2DFinderFirmwareModule::m_nOutTracksPerClock
static const int m_nOutTracksPerClock
number of output tracks per clock
Definition: CDCTrigger2DFinderFirmwareModule.h:96
Belle2::CDCTrigger2DFinderFirmwareModule::design_libname
std::string design_libname
path to the simulation snapshot
Definition: CDCTrigger2DFinderFirmwareModule.h:142
Belle2::CDCTrigger2DFinderFirmwareModule::out
int out
output signal port handle.
Definition: CDCTrigger2DFinderFirmwareModule.h:184
Belle2::CDCTrigger2DFinderFirmwareModule::m_nInTSPerClock
static const int m_nInTSPerClock
number of input ts hits per clock
Definition: CDCTrigger2DFinderFirmwareModule.h:93
Belle2::CDCTrigger2DFinderFirmwareModule::t2d_out
char t2d_out[width_out]
char array holding 2D output data
Definition: CDCTrigger2DFinderFirmwareModule.h:177
Belle2::CDCTrigger2DFinderFirmwareModule::decodeTrack
TRGFinderTrack decodeTrack(std::string trackIn)
decode the 2D track info
Definition: CDCTrigger2DFinderFirmwareModule.cc:170
Belle2::CDCTrigger2DFinderFirmwareModule::initializeFastSim
void initializeFastSim()
initialize fast TSIM function
Definition: CDCTrigger2DFinderFirmwareModule.cc:241
Belle2::CDCTrigger2DFinderFirmwareModule::lib_extension
std::string lib_extension
extension of lib
Definition: CDCTrigger2DFinderFirmwareModule.h:138
Belle2::CDCTrigger2DFinderFirmwareModule::nAxialSuperLayer
static constexpr int nAxialSuperLayer
number of axial SL
Definition: CDCTrigger2DFinderFirmwareModule.h:157
Belle2::tsOutArray
std::array< tsOut, 5 > tsOutArray
TS array.
Definition: CDCTrigger2DFinderFirmwareModule.h:27
Belle2::CDCTrigger2DFinderFirmwareModule
This class is the interface between the 2D finder fast simulation module and the firmware simulation ...
Definition: CDCTrigger2DFinderFirmwareModule.h:43
Belle2::CDCTrigger2DFinderFirmwareModule::localSegmentID
int localSegmentID(int globalID)
Calculate local segment ID from global ID.
Definition: CDCTrigger2DFinderFirmwareModule.cc:133
Belle2::CDCTrigger2DFinderFirmwareModule::loadFromFirmware
void loadFromFirmware(int iclock)
load data from firmware
Definition: CDCTrigger2DFinderFirmwareModule.cc:216
Belle2::CDCTrigger2DFinderFirmwareModule::toTSSLV
auto toTSSLV(const std::bitset< m_tsVectorWidth >)
Turn TS bitset into char array.
Definition: CDCTrigger2DFinderFirmwareModule.cc:160
Belle2::CDCTrigger2DFinderFirmwareModule::encodeTSHit
auto encodeTSHit(CDCTriggerSegmentHit const *)
Encode a TS hit into std_logic_vector.
Definition: CDCTrigger2DFinderFirmwareModule.cc:147
Belle2::CDCTrigger2DFinderFirmwareModule::cwd
std::string cwd
current diretory
Definition: CDCTrigger2DFinderFirmwareModule.h:140
Belle2::CDCTrigger2DFinderFirmwareModule::m_outputCollectionName
std::string m_outputCollectionName
Name of the StoreArray containing the tracks found by the Hough tracking.
Definition: CDCTrigger2DFinderFirmwareModule.h:75
Belle2::TRGFinderTrack::omega
double omega
omega of a 2D track
Definition: CDCTrigger2DFinderFirmwareModule.h:31
Belle2::CDCTrigger2DFinderFirmwareModule::m_tsHitVector
tsArray m_tsHitVector
TS array.
Definition: CDCTrigger2DFinderFirmwareModule.h:166
Belle2::CDCTrigger2DFinderFirmwareModule::m_tsVectorWidth
static const int m_tsVectorWidth
width of TS hit input signal vector
Definition: CDCTrigger2DFinderFirmwareModule.h:90
Belle2::Module
Base class for Modules.
Definition: Module.h:74
Belle2::CDCTrigger2DFinderFirmwareModule::m_hitCollectionName
std::string m_hitCollectionName
Name of the StoreArray containing the input track segment hits.
Definition: CDCTrigger2DFinderFirmwareModule.h:72
Belle2::CDCTrigger2DFinderFirmwareModule::CDCTrigger2DFinderFirmwareModule
CDCTrigger2DFinderFirmwareModule()
Constructor.
Definition: CDCTrigger2DFinderFirmwareModule.cc:54
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::CDCTrigger2DFinderFirmwareModule::width_in
static const int width_in
width of (half-speed) input data width
Definition: CDCTrigger2DFinderFirmwareModule.h:152
Belle2::CDCTrigger2DFinderFirmwareModule::m_debugLevel
int m_debugLevel
debug level: better description needed.
Definition: CDCTrigger2DFinderFirmwareModule.h:87
Belle2::CDCTrigger2DFinderFirmwareModule::~CDCTrigger2DFinderFirmwareModule
virtual ~CDCTrigger2DFinderFirmwareModule()
Destructor.
Definition: CDCTrigger2DFinderFirmwareModule.cc:80
Belle2::TRGFinderTrack
TRGCDC 2D Finder track.
Definition: CDCTrigger2DFinderFirmwareModule.h:29
Belle2::CDCTrigger2DFinderFirmwareModule::tsArray
std::vector< tsArrayPerClock > tsArray
TS array.
Definition: CDCTrigger2DFinderFirmwareModule.h:163
Belle2::tsOut
std::array< unsigned, 4 > tsOut
TS.
Definition: CDCTrigger2DFinderFirmwareModule.h:25
Belle2::CDCTrigger2DFinderFirmwareModule::m_fromFastSim
bool m_fromFastSim
flag to read TS hits from the output of TSF firmware simulation
Definition: CDCTrigger2DFinderFirmwareModule.h:81
Belle2::CDCTrigger2DFinderFirmwareModule::loadFromFastSim
void loadFromFastSim(unsigned iclock)
load data from fast TSIM function
Definition: CDCTrigger2DFinderFirmwareModule.cc:304
Belle2::CDCTrigger2DFinderFirmwareModule::clk
int clk
clock signal port handle.
Definition: CDCTrigger2DFinderFirmwareModule.h:180
Belle2::CDCTrigger2DFinderFirmwareModule::decodeOutput
void decodeOutput(short latency)
decode the output info
Definition: CDCTrigger2DFinderFirmwareModule.cc:194
t_xsi_setup_info
Note: VHDL std_logic value is stored in a byte (char).
Definition: xsi.h:137
Belle2::CDCTrigger2DFinderFirmwareModule::tsfPort
int tsfPort[5]
input signal port handle.
Definition: CDCTrigger2DFinderFirmwareModule.h:182
Xsi::Loader
Definition: xsi_loader.h:23
Belle2::CDCTrigger2DFinderFirmwareModule::Xsi_Instance
Xsi::Loader * Xsi_Instance
Xsi loader from Xilinx software.
Definition: CDCTrigger2DFinderFirmwareModule.h:147
Belle2::CDCTrigger2DFinderFirmwareModule::inputVector
std::array< char, width_in > inputVector
input array
Definition: CDCTrigger2DFinderFirmwareModule.h:169
Belle2::TRGFinderTrack::ts
tsOutArray ts
TS array of a 2D track.
Definition: CDCTrigger2DFinderFirmwareModule.h:35
Belle2::CDCTrigger2DFinderFirmwareModule::m_bitstreamNameTo2D
std::string m_bitstreamNameTo2D
Name of the StoreArray holding the raw bit content to 2D trackers
Definition: CDCTrigger2DFinderFirmwareModule.h:78
Belle2::CDCTrigger2DFinderFirmwareModule::tsfInput
std::array< inputVector, 5 > tsfInput
array holding 5 axial TSF input data
Definition: CDCTrigger2DFinderFirmwareModule.h:171
Belle2::CDCTrigger2DFinderFirmwareModule::initialize
void initialize() override
Load the design snapshot and register the signal ports.
Definition: CDCTrigger2DFinderFirmwareModule.cc:89
Belle2::CDCTrigger2DFinderFirmwareModule::finderOutput
std::array< char, width_out > finderOutput
array holding 2D output data
Definition: CDCTrigger2DFinderFirmwareModule.h:174
Belle2::CDCTrigger2DFinderFirmwareModule::width_out
static const int width_out
width of output data width, not including the clock counter
Definition: CDCTrigger2DFinderFirmwareModule.h:154
Belle2::TRGFinderTrack::phi0
double phi0
phi0 of a 2D track
Definition: CDCTrigger2DFinderFirmwareModule.h:33
Belle2::CDCTriggerSegmentHit
Combination of several CDCHits to a track segment hit for the trigger.
Definition: CDCTriggerSegmentHit.h:16
Belle2::CDCTrigger2DFinderFirmwareModule::tsArrayPerClock
std::array< tsArrayPerSL, nAxialSuperLayer > tsArrayPerClock
TS array per clock.
Definition: CDCTrigger2DFinderFirmwareModule.h:161
Belle2::CDCTrigger2DFinderFirmwareModule::simengine_libname
std::string simengine_libname
path to the simulation engine
Definition: CDCTrigger2DFinderFirmwareModule.h:144
Belle2::CDCTrigger2DFinderFirmwareModule::tsVector
std::array< char, m_tsVectorWidth > tsVector
array of TS
Definition: CDCTrigger2DFinderFirmwareModule.h:99
Belle2::CDCTrigger2DFinderFirmwareModule::event
void event() override
Things to do for each event.
Definition: CDCTrigger2DFinderFirmwareModule.cc:322