DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
RegMap.hpp
Go to the documentation of this file.
1
8#ifndef SSPMODULES_SRC_ANLBOARD_REGMAP_HPP_
9#define SSPMODULES_SRC_ANLBOARD_REGMAP_HPP_
10
11#include "anlExceptions.hpp"
12
13#include <iostream>
14// #include "dune-artdaq/DAQLogger/DAQLogger.hh"
15#include <map>
16#include <string>
17
18namespace dunedaq {
19namespace sspmodules {
20
21// Singleton containing human-readable names for SSP registers.
22// Note that Zynq registers are in camelCase, and Artix registers
23// are spaced_with_underscores.
24class RegMap
25{
26public:
27 // Get a reference to the instance of RegMap
28 static RegMap& Get();
29
31 {
32 public:
33 Register(unsigned int address,
34 unsigned int readMask,
35 unsigned int writeMask,
36 unsigned int size = 1,
37 unsigned int offset = 0,
38 unsigned int bits = 32)
40 , fReadMask(readMask)
41 , fWriteMask(writeMask)
42 , fSize(size)
44 , fBits(bits)
45 {
46 }
47
49
50 // Allow implicit conversion to unsigned int for scalar registers
51 operator unsigned int()
52 {
53 if (fSize > 1) {
54 // dune::DAQLogger::LogError("SSP_RegMap")<<"Attempt to access SSP register array at "
55 // <<std::hex<<fAddress<<std::dec<<" as scalar!"<<std::endl;
56 throw(std::invalid_argument(""));
57 }
58 return fAddress;
59 }
60
61 // Indexing returns another register with correct address offset and size 1
62 Register operator[](unsigned int i) const
63 {
64 if (i >= fSize) {
65 // dune::DAQLogger::LogError("SSP_RegMap")<<"Attempt to access SSP register at "
66 // <<std::hex<<fAddress<<std::dec<<" index "<<i
67 //<<", beyond end of array (size is "<<fSize<<")"<<std::endl;
68 }
69 return Register(fAddress + 0x4 * i, fReadMask, fWriteMask, fOffset, 1);
70 }
71
72 // Getters and setters
73
74 inline unsigned int ReadMask() const { return fReadMask; }
75
76 inline unsigned int WriteMask() const { return fWriteMask; }
77
78 inline unsigned int Offset() const { return fOffset; }
79
80 inline unsigned int Bits() const { return fBits; }
81
82 inline unsigned int Size() const { return fSize; }
83
84 private:
85 // Address of register in SSP space
86 unsigned int fAddress{ 0x00000000 };
87
88 // Readable/writable bits in this register for calling code to check
89 // that read/write requests make sense
90 unsigned int fReadMask{ 0xFFFFFFFF };
91 unsigned int fWriteMask{ 0xFFFFFFFF };
92
93 unsigned int fSize{ 1 };
94
95 // Bit offset of relevant quantity relative to start of addressed word.
96 // Not currently used but we could use this to "virtually" address logical quantities
97 // which are assigned only part of a 32-bit word
98 unsigned int fOffset{ 0 };
99
100 // Number of bits assigned to relevant quantity. Not currently used (see above)
101 unsigned int fBits{ 32 };
102 };
103
104 // Get registers using variable names...
105 Register operator[](std::string name)
106 {
107 if (fNamed.find(name) == fNamed.end()) {
108 // dune::DAQLogger::LogError("SSP_RegMap")<<"Attempt to access named SSP register "<<name
109 //<<", which does not exist!"<<std::endl;
110 throw(std::invalid_argument(""));
111 }
112 return fNamed[name];
113 }
114
115 // Registers in the ARM Processor
116 unsigned int armStatus;
117 unsigned int armError;
118 unsigned int armCommand;
119 unsigned int armVersion;
120 unsigned int armTest[4];
121 unsigned int armRxAddress; // 0x00000020
122 unsigned int armRxCommand; // 0x00000024
123 unsigned int armRxSize; // 0x00000028
124 unsigned int armRxStatus; // 0x0000002C
125 unsigned int armTxAddress; // 0x00000030
126 unsigned int armTxCommand; // 0x00000034
127 unsigned int armTxSize; // 0x00000038
128 unsigned int armTxStatus; // 0x0000003C
129 unsigned int armPackets; // 0x00000040
130 unsigned int armOperMode; // 0x00000044
131 unsigned int armOptions; // 0x00000048
132 unsigned int armModemStatus; // 0x0000004C
133 unsigned int PurgeDDR; // 0x00000300
134
135 // Registers in the Zynq FPGA
136 unsigned int zynqTest[6];
138 unsigned int fakeNumEvents;
139 unsigned int fakeEventSize;
140 unsigned int fakeBaseline;
141 unsigned int fakePeakSum;
142 unsigned int fakePrerise;
143 unsigned int timestamp[2];
144 unsigned int codeErrCounts[5];
145 unsigned int dispErrCounts[5];
146 unsigned int link_rx_status;
147 unsigned int eventDataControl;
150 unsigned int c2c_master_status;
151 unsigned int c2c_control;
153 unsigned int dspStatus;
154 unsigned int comm_clock_status;
155 unsigned int comm_clock_control;
156 unsigned int comm_led_config;
157 unsigned int comm_led_input;
158 unsigned int eventDataStatus;
159 unsigned int qi_dac_control;
160 unsigned int qi_dac_config;
161
162 unsigned int bias_control;
163 unsigned int bias_status;
164 unsigned int bias_config[12];
165 unsigned int bias_readback[12];
166
167 unsigned int vmon_config;
168 unsigned int vmon_select;
169 unsigned int vmon_gpio;
172 unsigned int vmon_gpio_readback;
173 unsigned int vmon_id_readback;
174 unsigned int vmon_control;
175 unsigned int vmon_status;
176 unsigned int vmon_bias[12];
177 unsigned int vmon_value[9];
178
179 unsigned int imon_config;
180 unsigned int imon_select;
181 unsigned int imon_gpio;
184 unsigned int imon_gpio_readback;
185 unsigned int imon_id_readback;
186 unsigned int imon_control;
187 unsigned int imon_status;
188 unsigned int imon_bias[12];
189 unsigned int imon_value[9];
190
191 // Registers in the Artix FPGA
192 unsigned int board_id;
193 unsigned int fifo_control;
194 unsigned int dp_fpga_fw_build;
195 unsigned int calib_build;
196 unsigned int dp_clock_status;
197 unsigned int module_id;
198 unsigned int c2c_slave_status;
200
201 unsigned int channel_control[12];
202 unsigned int led_threshold[12];
203 unsigned int cfd_parameters[12];
204 unsigned int readout_pretrigger[12];
205 unsigned int readout_window[12];
206
207 unsigned int p_window[12];
208 unsigned int i2_window[12];
209 unsigned int m1_window[12];
210 unsigned int m2_window[12];
211 unsigned int d_window[12];
212 unsigned int i1_window[12];
213 unsigned int disc_width[12];
214 unsigned int baseline_start[12];
215 unsigned int c_window[12];
216
218 unsigned int gpio_output_width;
219 unsigned int front_panel_config;
221 unsigned int dsp_led_config;
222 unsigned int dsp_led_input;
223 unsigned int baseline_delay;
224 unsigned int diag_channel_input;
225 unsigned int event_data_control;
226 unsigned int adc_config;
227 unsigned int adc_config_load;
228 unsigned int qi_config;
229 unsigned int qi_delay;
230 unsigned int qi_pulse_width;
231 unsigned int qi_pulsed;
233 unsigned int pdts_cmd_control[3];
234 unsigned int lat_timestamp_lsb;
235 unsigned int lat_timestamp_msb;
236 unsigned int live_timestamp_lsb;
237 unsigned int live_timestamp_msb;
238 unsigned int sync_period;
239 unsigned int sync_delay;
240 unsigned int sync_count;
241 unsigned int pdts_control;
242 unsigned int pdts_status;
243 unsigned int pdts_ts_preset[2];
246 unsigned int overflow_status;
247 unsigned int phase_value;
248 unsigned int link_tx_status;
249 unsigned int dsp_clock_control;
251
252 unsigned int code_revision;
253 unsigned int code_date;
254
255 unsigned int dropped_event_count[12];
256 unsigned int accepted_event_count[12];
257 unsigned int ahit_count[12];
258 unsigned int disc_count[12];
259 unsigned int idelay_count[12];
260 unsigned int adc_data_monitor[12];
261 unsigned int adc_status[12];
262
263private:
266 RegMap(RegMap const&) = delete; // Don't implement
267 void operator=(RegMap const&) = delete; // Don't implement
268 RegMap(RegMap&&) = delete;
269 RegMap& operator=(RegMap&&) = delete;
270 std::map<std::string, Register> fNamed;
271};
272
273} // namespace sspmodules
274} // namespace dunedaq
275
276#endif // SSPMODULES_SRC_ANLBOARD_REGMAP_HPP_
unsigned int ReadMask() const
Definition RegMap.hpp:74
Register(unsigned int address, unsigned int readMask, unsigned int writeMask, unsigned int size=1, unsigned int offset=0, unsigned int bits=32)
Definition RegMap.hpp:33
unsigned int WriteMask() const
Definition RegMap.hpp:76
Register operator[](unsigned int i) const
Definition RegMap.hpp:62
unsigned int c2c_slave_intr_control
Definition RegMap.hpp:199
unsigned int d_window[12]
Definition RegMap.hpp:211
unsigned int baseline_start[12]
Definition RegMap.hpp:214
unsigned int ahit_count[12]
Definition RegMap.hpp:257
unsigned int imon_select_readback
Definition RegMap.hpp:183
unsigned int qi_dac_control
Definition RegMap.hpp:159
unsigned int eventDataInterfaceSelect
Definition RegMap.hpp:137
unsigned int front_panel_config
Definition RegMap.hpp:219
unsigned int i2_window[12]
Definition RegMap.hpp:208
unsigned int dp_clock_status
Definition RegMap.hpp:196
unsigned int vmon_bias[12]
Definition RegMap.hpp:176
unsigned int armModemStatus
Definition RegMap.hpp:132
RegMap & operator=(RegMap &&)=delete
unsigned int master_logic_control
Definition RegMap.hpp:244
unsigned int live_timestamp_msb
Definition RegMap.hpp:237
unsigned int dsp_clock_control
Definition RegMap.hpp:249
unsigned int eventDataControl
Definition RegMap.hpp:147
unsigned int vmon_value[9]
Definition RegMap.hpp:177
unsigned int disc_count[12]
Definition RegMap.hpp:258
unsigned int lat_timestamp_lsb
Definition RegMap.hpp:234
unsigned int master_logic_status
Definition RegMap.hpp:245
unsigned int vmon_config_readback
Definition RegMap.hpp:170
unsigned int c_window[12]
Definition RegMap.hpp:215
unsigned int dsp_clock_phase_control
Definition RegMap.hpp:250
unsigned int comm_led_config
Definition RegMap.hpp:156
unsigned int codeErrCounts[5]
Definition RegMap.hpp:144
unsigned int dsp_led_config
Definition RegMap.hpp:221
unsigned int imon_value[9]
Definition RegMap.hpp:189
unsigned int pdts_cmd_control[3]
Definition RegMap.hpp:233
unsigned int c2c_master_intr_control
Definition RegMap.hpp:152
unsigned int armTest[4]
Definition RegMap.hpp:120
unsigned int vmon_gpio_readback
Definition RegMap.hpp:172
unsigned int channel_control[12]
Definition RegMap.hpp:201
unsigned int imon_id_readback
Definition RegMap.hpp:185
unsigned int qi_pulse_width
Definition RegMap.hpp:230
unsigned int c2c_master_status
Definition RegMap.hpp:150
unsigned int event_data_control
Definition RegMap.hpp:225
void operator=(RegMap const &)=delete
unsigned int accepted_event_count[12]
Definition RegMap.hpp:256
std::map< std::string, Register > fNamed
Definition RegMap.hpp:270
unsigned int m2_window[12]
Definition RegMap.hpp:210
unsigned int i1_window[12]
Definition RegMap.hpp:212
unsigned int c2c_slave_status
Definition RegMap.hpp:198
unsigned int adc_config_load
Definition RegMap.hpp:227
unsigned int trigger_input_delay
Definition RegMap.hpp:217
unsigned int timestamp[2]
Definition RegMap.hpp:143
unsigned int eventDataPhaseControl
Definition RegMap.hpp:148
unsigned int lat_timestamp_msb
Definition RegMap.hpp:235
unsigned int external_gate_width
Definition RegMap.hpp:232
unsigned int cfd_parameters[12]
Definition RegMap.hpp:203
unsigned int dispErrCounts[5]
Definition RegMap.hpp:145
unsigned int comm_clock_control
Definition RegMap.hpp:155
unsigned int comm_led_input
Definition RegMap.hpp:157
unsigned int bias_readback[12]
Definition RegMap.hpp:165
unsigned int diag_channel_input
Definition RegMap.hpp:224
unsigned int comm_clock_status
Definition RegMap.hpp:154
unsigned int imon_bias[12]
Definition RegMap.hpp:188
unsigned int adc_status[12]
Definition RegMap.hpp:261
unsigned int link_rx_status
Definition RegMap.hpp:146
unsigned int eventDataStatus
Definition RegMap.hpp:158
unsigned int led_threshold[12]
Definition RegMap.hpp:202
unsigned int p_window[12]
Definition RegMap.hpp:207
unsigned int adc_data_monitor[12]
Definition RegMap.hpp:260
unsigned int gpio_output_width
Definition RegMap.hpp:218
unsigned int link_tx_status
Definition RegMap.hpp:248
unsigned int vmon_id_readback
Definition RegMap.hpp:173
RegMap(RegMap const &)=delete
unsigned int zynqTest[6]
Definition RegMap.hpp:136
unsigned int idelay_count[12]
Definition RegMap.hpp:259
unsigned int channel_pulsed_control
Definition RegMap.hpp:220
unsigned int vmon_select_readback
Definition RegMap.hpp:171
unsigned int eventDataPhaseStatus
Definition RegMap.hpp:149
unsigned int readout_pretrigger[12]
Definition RegMap.hpp:204
unsigned int overflow_status
Definition RegMap.hpp:246
unsigned int dp_fpga_fw_build
Definition RegMap.hpp:194
unsigned int pdts_ts_preset[2]
Definition RegMap.hpp:243
unsigned int disc_width[12]
Definition RegMap.hpp:213
RegMap(RegMap &&)=delete
unsigned int bias_config[12]
Definition RegMap.hpp:164
unsigned int imon_gpio_readback
Definition RegMap.hpp:184
static RegMap & Get()
Definition RegMap.cxx:14
unsigned int imon_config_readback
Definition RegMap.hpp:182
unsigned int baseline_delay
Definition RegMap.hpp:223
Register operator[](std::string name)
Definition RegMap.hpp:105
unsigned int readout_window[12]
Definition RegMap.hpp:205
unsigned int m1_window[12]
Definition RegMap.hpp:209
unsigned int dropped_event_count[12]
Definition RegMap.hpp:255
unsigned int live_timestamp_lsb
Definition RegMap.hpp:236
double offset
The DUNE-DAQ namespace.
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size
Invalid address