79 for (
int i = 0; i<3; ++i){
97 for (
int ch=0; ch<32; ++ch){
125 debug(
"Reading fifo 0",
"FEB_v1::readFifoSpyFE");
127 debug(
"Reading fifo 1",
"FEB_v1::readFifoSpyFE");
129 debug(
"Reading fifo 2",
"FEB_v1::readFifoSpyFE");
135 for (
int ch=0; ch<4; ++ch){
139 for (
int d=0; d<depth; ++d){
144 for (
int ch=0; ch<4; ++ch){
148 sprintf(buffer,
"%5d : %5d %5d %5d %5d | %5d %5d %5d", d,
151 info(buffer,
"FEB_v1::readFifoSpyFE");
163 info(
"Reading fifo 0",
"FEB_v1::readFifoLLTFE");
165 info(
"Reading fifo 1",
"FEB_v1::readFifoLLTFE");
167 info(
"Reading fifo 2",
"FEB_v1::readFifoLLTFE");
174 for (
int ch=0; ch<4; ++ch){
178 for (
int d=0; d<depth; ++d){
183 for (
int ch=0; ch<4; ++ch){
187 sprintf(buffer,
"%5d : %5d %5d %5d %5d | %5d %5d %5d", d,
190 info(buffer,
"FEB_v1::readFifoLLTFE");
203 info(
"Reading fifo 0",
"FEB_v1::readFifoLLT");
205 info(
"Reading fifo 1",
"FEB_v1::readFifoLLT");
207 info(
"Reading fifo 2",
"FEB_v1::readFifoLLT");
216 for (
int d=0; d<depth; ++d){
221 "%5d : ETtot=%4d ETmax=%4d [%2d] Mult=%2d Bx=%4d (%4d) | %5d %5d %5d",
227 info(buffer,
"FEB_v1::readFifoLLT");
239 info(
"Reading fifo 0",
"FEB_v1::readFifoInjectFE");
241 info(
"Reading fifo 1",
"FEB_v1::readFifoInjectFE");
243 info(
"Reading fifo 2",
"FEB_v1::readFifoInjectFE");
248 for (
int d=0; d<depth; ++d){
254 sprintf(buffer,
"%5d : %5d %5d %5d %5d | %5d %5d %5d", d,
257 info(buffer,
"FEB_v1::readFifoInjectFE");
269 for (
int d=0; d<depth; ++d){
287 for (
int d=0; d<depth; ++d){
302 unsigned int buffer[depth];
303 warning(
"Spi write mode block disabled !!!",
"FEB_v1::writeFifoInjectFE");
305 default:
info (
"Incremented pattern injection",
"FEB_v1::writeFifoInjectFE");
break;
306 case 1:
info (
"ZERO pattern injection",
"FEB_v1::writeFifoInjectFE");
break;
307 case 2:
info (
"ZERO and ONE pattern injection",
"FEB_v1::writeFifoInjectFE");
break;
308 case 10:
info (
"Channel 0 - Static ONE pattern injection",
"FEB_v1::writeFifoInjectFE");
break;
309 case 11:
info (
"Channel 1 - Static ONE pattern injection",
"FEB_v1::writeFifoInjectFE");
break;
310 case 12:
info (
"Channel 2 - Static ONE pattern injection",
"FEB_v1::writeFifoInjectFE");
break;
311 case 13:
info (
"Channel 3 - Static ONE pattern injection",
"FEB_v1::writeFifoInjectFE");
break;
312 case 20:
info (
"Channel 0 - 1/3 ONE pattern injection",
"FEB_v1::writeFifoInjectFE");
break;
313 case 21:
info (
"Channel 1 - 1/3 ONE pattern injection",
"FEB_v1::writeFifoInjectFE");
break;
314 case 22:
info (
"Channel 2 - 1/3 ONE pattern injection",
"FEB_v1::writeFifoInjectFE");
break;
315 case 23:
info (
"Channel 3 - 1/3 ONE pattern injection",
"FEB_v1::writeFifoInjectFE");
break;
316 case 30:
info (
"Channel 0 - 1/3 0xAAA pattern injection",
"FEB_v1::writeFifoInjectFE");
break;
317 case 31:
info (
"Channel 1 - 1/3 0xAAA pattern injection",
"FEB_v1::writeFifoInjectFE");
break;
318 case 32:
info (
"Channel 2 - 1/3 0xAAA pattern injection",
"FEB_v1::writeFifoInjectFE");
break;
319 case 33:
info (
"Channel 3 - 1/3 0xAAA pattern injection",
"FEB_v1::writeFifoInjectFE");
break;
320 case 40:
info (
"Channel 0 - pow(2,i), i being the word index modulo 12",
"FEB_v1::writeFifoInjectFE");
break;
321 case 41:
info (
"Channel 1 - pow(2,i), i being the word index modulo 12",
"FEB_v1::writeFifoInjectFE");
break;
322 case 42:
info (
"Channel 2 - pow(2,i), i being the word index modulo 12",
"FEB_v1::writeFifoInjectFE");
break;
323 case 43:
info (
"Channel 3 - pow(2,i), i being the word index modulo 12",
"FEB_v1::writeFifoInjectFE");
break;
324 case 100:
info (
"Pulse mode - clock running at 40/16 MHz",
"FEB_v1::writeFifoInjectFE");
break;
327 info(
"Injection FIFO 0",
"FEB_v1::writeFifoInjectFE");
328 for (
int i=0; i<depth; ++i){
330 default: buffer[i]=(i+((i+1)<<12))&0xFFFF;
break;
331 case 1: buffer[i]=(0)&0xFFFF;
break;
332 case 2: buffer[i]=0xFFFF*(i&1);
break;
333 case 10: buffer[i]=0x0FFF;
break;
334 case 11: buffer[i]=0xF000;
break;
335 case 12: buffer[i]=0;
break;
336 case 13: buffer[i]=0;
break;
337 case 20: i%4==0?buffer[i]=0x0FFF:buffer[i]=0;
break;
338 case 21: i%4==0?buffer[i]=0xF000:buffer[i]=0;
break;
339 case 22: buffer[i]=0;
break;
340 case 23: buffer[i]=0;
break;
341 case 30: i%4==0?buffer[i]=0x0AAA:buffer[i]=0;
break;
342 case 31: i%4==0?buffer[i]=0xA000:buffer[i]=0;
break;
343 case 32: buffer[i]=0;
break;
344 case 33: buffer[i]=0;
break;
345 case 40: buffer[i]=int(pow(2,i%12));
break;
346 case 41: buffer[i]=(int(pow(2,i%12))<<12)&0xFFFF;
break;
347 case 42: buffer[i]=0;
break;
348 case 43: buffer[i]=0;
break;
349 case 50: buffer[i]=1;
break;
350 case 51: buffer[i]=2;
break;
351 case 52: buffer[i]=2048;
break;
352 case 100: ((i>>4)&0x1)==0 ? buffer[i]=1 : buffer[i]=0;
break;
355 for (
int i=0; i<depth; ++i){
359 info(
"Injection FIFO 1",
"FEB_v1::writeFifoInjectFE");
360 for (
int i=0; i<depth; ++i){
362 default: buffer[i]=((((i+1)>>4)&0xFF)+((i+2)<<8))&0xFFFF;
break;
363 case 1: buffer[i]=(0)&0xFFFF;
break;
364 case 2: buffer[i]=0xFFFF*(i&1);
break;
365 case 10: buffer[i]=0;
break;
366 case 11: buffer[i]=0x00FF;
break;
367 case 12: buffer[i]=0xFF00;
break;
368 case 13: buffer[i]=0;
break;
369 case 20: buffer[i]=0;
break;
370 case 21: i%4==0?buffer[i]=0x00FF:buffer[i]=0;
break;
371 case 22: i%4==0?buffer[i]=0xFF00:buffer[i]=0;
break;
372 case 23: buffer[i]=0;
break;
373 case 30: buffer[i]=0;
break;
374 case 31: i%4==0?buffer[i]=0x00AA:buffer[i]=0;
break;
375 case 32: i%4==0?buffer[i]=0xAA00:buffer[i]=0;
break;
376 case 33: buffer[i]=0;
break;
377 case 40: buffer[i]=0;
break;
378 case 41: buffer[i]=(int(pow(2,i%12))>>4)&0xFF;
break;
379 case 42: buffer[i]=(int(pow(2,i%12))<<8)&0xFFFF;
break;
380 case 43: buffer[i]=0;
break;
381 case 50: buffer[i]=0;
break;
382 case 51: buffer[i]=0;
break;
383 case 52: buffer[i]=0;
break;
384 case 100: buffer[i]=0;
break;
387 for (
int i=0; i<depth; ++i){
391 info(
"Injection FIFO 2",
"FEB_v1::writeFifoInjectFE");
392 for (
int i=0; i<depth; ++i){
394 default: buffer[i]=((((i+2)>>8)&0xF)+((i+3)<<4))&0xFFFF;
break;
395 case 1: buffer[i]=(0)&0xFFFF;
break;
396 case 2: buffer[i]=0xFFFF*(i&1);
break;
397 case 10: buffer[i]=0;
break;
398 case 11: buffer[i]=0;
break;
399 case 12: buffer[i]=0x000F;
break;
400 case 13: buffer[i]=0xFFF0;
break;
401 case 20: buffer[i]=0;
break;
402 case 21: buffer[i]=0;
break;
403 case 22: i%4==0?buffer[i]=0x000F:buffer[i]=0;
break;
404 case 23: i%4==0?buffer[i]=0xFFF0:buffer[i]=0;
break;
405 case 30: buffer[i]=0;
break;
406 case 31: buffer[i]=0;
break;
407 case 32: i%4==0?buffer[i]=0x000A:buffer[i]=0;
break;
408 case 33: i%4==0?buffer[i]=0xAAA0:buffer[i]=0;
break;
409 case 40: buffer[i]=0;
break;
410 case 41: buffer[i]=0;
break;
411 case 42: buffer[i]=(int(pow(2,i%12))>>8)&0xF;
break;
412 case 43: buffer[i]=(int(pow(2,i%12))<<4)&0xFFFF;
break;
413 case 50: buffer[i]=0;
break;
414 case 51: buffer[i]=0;
break;
415 case 52: buffer[i]=0;
break;
416 case 100: buffer[i]=0;
break;
419 for (
int i=0; i<depth; ++i){
430 info(
"Injection FIFO 0",
"FEB_v1::readFifoInjectFE");
431 for (
int i=0; i<depth; ++i){
m_fifo[0][i]=(ch0[i]&0xFFF)+((ch1[i]<<12)&0xF000);}
433 info(
"Injection FIFO 1",
"FEB_v1::readFifoInjectFE");
434 for (
int i=0; i<depth; ++i){
m_fifo[1][i]=((ch1[i]>>4)&0xFF)+((ch2[i]<<8)&0xFF00);}
436 info(
"Injection FIFO 2",
"FEB_v1::readFifoInjectFE");
437 for (
int i=0; i<depth; ++i){
m_fifo[2][i]=((ch2[i]>>8)&0xF)+((ch3[i]<<4)&0xFFF0);}
445 warning(
"This function is commented.");
474 debug(
"Reset FIFO Spy FE "+
itos(fe),
"FEB_v1::resetFifoSpyFE");
484 info(
"Reset FIFO Inject FE "+
itos(fe),
"FEB_v1::resetFifoInjectFE");
494 info(
"Reset FE "+
itos(fe),
"FEB_v1::resetFE");
504 info(
"Status register FE "+
itos(fe)+
": "+
itos(val),
"FEB_v1::statusRegister");
515 data |= (duration&0x3FF);
517 warning(
"Cannot write test sequence duration for Seq pga ",
"FEB_v1::setTestDuration");
520 for (
int fe=0; fe<8; ++fe){
524 data |= (duration&0x3FF);
526 warning(
"Cannot write test sequence duration for FE pga "+
itos(fe),
527 "FEB_v1::setTestDuration");
542 debug(
"Test Length Seq: "+
itos(val),
"FEB_v1::testDuration");
549 debug(
"Test Length FE: "+
itos(fpga)+
" "+
itos(val),
"FEB_v1::testDuration");
562 data |= (stoploop<<12);
564 warning(
"Cannot write test sequence loop for Seq pga ",
"FEB_v1::setStopInjLoop");
567 for (
int fe=0; fe<8; ++fe){
571 data |= (stoploop<<12);
573 warning(
"Cannot write test loop for FE pga "+
itos(fe),
574 "FEB_v1::setStopInjLoop");
589 info(
"Test Length Seq stop Loop: "+
itos(val),
"FEB_v1::stopInjLoop");
595 info(
"Test Length FE stop Loop : "+
itos(fpga)+
" "+
itos(val),
"FEB_v1::stopInjLoop");
607 info(
"Enabling Seq PGA probes",
"FEB_v1::setProbeEnable");
611 info(
"Disabling Seq PGA probes",
"FEB_v1::setProbeEnable");
621 for (
int fe = 0; fe<8; ++fe){
624 info(
"Probe Enable FE "+
itos(fe)+
": "+
itos(val),
"FEB_v1::probeEnable");
634 info(
"SetSpareForTrig FE "+
itos(fe)+
" : "+
itos(enable),
"FEB_v1::setSpareForTrigEnable");
635 val |= (enable<<4)&0xF0;
645 info(
"spareForTrigEnable for FE "+
itos(fe)+
" : "+
itos(val),
"FEB_v1::probeEnable");
656 if (value) data |= 32 ;
664 info(
"Spy Mode Seq: "+
itos(val),
"FEB_v1::spyModeSeq");
675 if (value) data |= 1 << 14 ;
676 else data &= ~(1<<14) ;
680 info(
"set Spy Mode FE "+
itos(fe)+
" : "+
itos(value)+
" setup0="+
itos(data),
"FEB_v1::spyModeFE");
687 info(
"Spy Mode FE "+
itos(fe)+
": "+
itos(val),
"FEB_v1::spyModeFE");
698 data = data & 0xc7FF;
704 info(
"set Threshold "+
itos(fe)+
": "+
itos(value),
"FEB_v1::setThreshold");
711 info(
"threshold FE"+
itos(fe)+
": "+
itos(val),
"FEB_v1::threshold");
722 data = data & 0xFF00;
727 info(
"set Latency "+
itos(fe)+
": "+
itos(value),
"FEB_v1::setLatency");
734 info(
"latency FE "+
itos(fe)+
": "+
itos(val),
"FEB_v1::latency");
745 data = data & 0xFDFF;
750 info(
"set Disable Subtraction "+
itos(fe)+
": "+
itos(value),
"FEB_v1::setDisableSubtract");
757 info(
"Disable Subtraction FE "+
itos(fe)+
": "+
itos(val),
"FEB_v1::disableSubtract");
768 if (value) data |= 2048 ;
776 return ( data >>11 ) & 1;
786 data = data & 0xFEFF;
791 info(
"set Old Subtraction mode "+
itos(fe)+
": "+
itos(value),
"FEB_v1::setOldSubtract");
798 info(
"Old Subtract "+
itos(fe)+
": "+
itos(val),
"FEB_v1::oldSubtract");
809 if (value) data |= 1 << 10 ;
810 else data &= ~(1<<10) ;
814 info(
"set Inject Mode FE "+
itos(fe)+
": "+
itos(value),
"FEB_v1::injectModeFE");
821 info(
"Inject Mode FE "+
itos(fe)+
": "+
itos(val),
"FEB_v1::injectModeFE");
831 warning(
"try to configure a channel that does not exist.",
"FEB_v1::setGain4");
836 if (value) data |= 1 << 11 ;
837 else data &= ~(1<<11) ;
841 info(
"set Gain4 FE "+
itos(fe)+
" - Ch "+
itos(ch)+
" : "+
itos(value),
"FEB_v1::setGain4");
848 info(
"Gain4 FE "+
itos(fe)+
" - Ch "+
itos(ch)+
" : "+
itos(val),
"FEB_v1::gain4");
858 warning(
"try to configure a channel that does not exist.",
"FEB_v1::setPseudoADCEnable");
863 if (value) data |= 1 << 10 ;
864 else data &= ~(1<<10) ;
868 info(
"set PseudoADCEnable "+
itos(fe)+
" - Ch "+
itos(ch)+
" : "+
itos(value),
"FEB_v1::setPseudoADCEnable");
875 info(
"Pseudo ADC Enable FE "+
itos(fe)+
" - Ch "+
itos(ch)+
" : "+
itos(val),
"FEB_v1::pseudoADCEnable");
885 warning(
"try to configure a channel that does not exist.",
"FEB_v1::setPseudoPMEnable");
890 if (value) data |= 1 << 9 ;
891 else data &= ~(1<<9) ;
895 info(
"set PseudoPMEnable FE "+
itos(fe)+
" - Ch "+
itos(ch)+
" : "+
itos(value),
"FEB_v1::setPseudoPMEnable");
902 info(
"Pseudo PM Enable FE "+
itos(fe)+
" - Ch "+
itos(ch)+
" : "+
itos(val),
"FEB_v1::pseudoPMEnable");
913 if (value) data |= 1 << 10 ;
914 else data &= ~(1<<10) ;
918 info(
"set GlobalPseudoPMEnable FE "+
itos(fe)+
" : "+
itos(value),
"FEB_v1::setGlobalPseudoPMEnable");
925 info(
"Global Pseudo PM Enable FE "+
itos(fe)+
" : "+
itos(val),
"FEB_v1::globalPseudoPMEnable");
935 warning(
"try to configure a channel that does not exist.",
"FEB_v1::setClockFallingEdge");
940 if (value) data |= 1 << 8 ;
941 else data &= ~(1<<8) ;
945 info(
"set Clock Falling Edge FPGA "+
itos(fe)+
" - Ch "+
itos(ch)+
" : "+
itos(value),
"FEB_v1::setClockFallingEdge");
952 info(
"clock Falling Edge FE "+
itos(fe)+
" - Ch "+
itos(ch)+
" : "+
itos(val),
"FEB_v1::clockFallingEdge");
963 data |= (value<<4) & 0x10;
967 info(
"set Clock 80MHz Falling Edge : "+
itos(value),
"FEB_v1::setClock80MzFallingEdge");
974 info(
"clock 80MHz Falling Edge : "+
itos(val),
"FEB_v1::clock80MHzFallingEdge");
984 warning(
"try to configure a channel that does not exist.",
"FEB_v1::setClockFallingEdge");
989 data = data & (0xFF00);
994 info(
"set Calibration constant "+
itos(fe)+
" - Ch "+
itos(fe)+
" : "+
itos(value),
"FEB_v1::setCalibCte");
1001 info(
"Calib Constante FE "+
itos(fe)+
" - Ch "+
itos(ch)+
" : "+
itos(val),
"FEB_v1::calibCte");
1030 latency |=((val&0xF)<<12);
1046 latency |=((val&0xF)<<8);
1062 latency |=((val&0xF)<<4);
1096 for (
int i = 0; i<16; ++i){
1099 for (
int i = 0; i<16; ++i){
1102 for (
int i = 0; i<4; ++i){
1105 for (
int i = 0; i<8; ++i){
1128 if (val)
m_mask1 |= 1 << (ch-16) ;
1129 else m_mask1 &= ~(1<<(ch-16)) ;
1144 if (val)
m_mask2 |= (1 << 3) ;
1158 if (val)
m_mask2 |= (1 << (12+ch)) ;
1159 else m_mask2 &= ~(1<< (12+ch)) ;
1172 if (val)
m_mask2 |= (1 << (4+ch)) ;
1173 else m_mask2 &= ~(1<< (4+ch)) ;
1185 std::string modes[4] = {
1186 "Normal operating mode",
1187 "Fixed pattern mode",
1189 "7 bit shift register" 1193 warning(
"Cannot set Tx mode of the GBT "+
itos(gbt)+
1194 " to "+modes[mode]+
" ["+
itos(mode)+
"]");
1197 info(
"Setting Tx mode of the GBT "+
itos(gbt)+
1198 " to "+modes[mode]+
" ["+
itos(mode)+
"]");
1203 std::string modes[4] = {
1204 "Normal operating mode",
1205 "Fixed pattern mode",
1207 "7 bit shift register" 1211 info(
"Tx mode of the GBT "+
itos(gbt)+
1212 " is : "+modes[mode]+
" ["+
itos(mode)+
"]");
1222 int wd = (tx2<<4)+(tx1<<2)+tx0;
1224 warning(
"Cannot set data path (A) of the GBT "+
itos(gbt));
1228 warning(
"Cannot set data path (B) of the GBT "+
itos(gbt));
1232 warning(
"Cannot set data path (C) of the GBT "+
itos(gbt));
1235 info(
"Setting data path of the GBT "+
itos(gbt)+
" to "+
itos(wd));
1242 info(
"Data Path (A) of the GBT "+
itos(gbt)+
" is "+
itos(mode));
1253 std::string str_mode[3]={
1254 "Static phase selection",
1256 "Automatic phase tracking" 1259 int wd = (mode<<4)+(mode<<2)+mode;
1261 warning(
"Cannot set GBT track mode of the GBT "+
itos(gbt));
1264 info(
"Setting track mode of the GBT "+
itos(gbt)+
" to "+
itos(wd)+
" -> "+str_mode[mode&0b11]);
1269 std::string str_mode[3]={
1270 "Static phase selection",
1272 "Automatic phase tracking" 1276 info(
"Track mode of the GBT "+
itos(gbt)+
" is : "+
itos(mode)+
" -> "+str_mode[mode&0b11]);
1291 warning(
"Cannot set GBT Term Eport 320 of the GBT "+
itos(gbt));
1295 warning(
"Cannot set GBT Term Eport 320 of the GBT "+
itos(gbt));
1299 warning(
"Cannot set GBT Term Eport 320 of the GBT "+
itos(gbt));
1303 warning(
"Cannot set GBT Term Eport 320 of the GBT "+
itos(gbt));
1307 warning(
"Cannot set GBT Term Eport 320 of the GBT "+
itos(gbt));
1311 warning(
"Cannot set GBT Term Eport 320 of the GBT "+
itos(gbt));
1315 warning(
"Cannot set GBT Term Eport 320 of the GBT "+
itos(gbt));
1318 info(
"Setting Eport Termination of the GBT "+
itos(gbt)+
" to "+
itos(wd&1));
1340 int wd = (1<<4)+(1<<2)+1;
1342 warning(
"Cannot set GBT Eport clock at 80MHz for GBT "+
itos(gbt));
1346 warning(
"Cannot set GBT Eport clock at 80MHz for GBT "+
itos(gbt));
1350 warning(
"Cannot set GBT Eport clock at 80MHz for GBT "+
itos(gbt));
1354 warning(
"Cannot set GBT Eport clock at 80MHz for GBT "+
itos(gbt));
1358 warning(
"Cannot set GBT Eport clock at 80MHz for GBT "+
itos(gbt));
1362 warning(
"Cannot set GBT Eport clock at 80MHz for GBT "+
itos(gbt));
1366 warning(
"Cannot set GBT Eport clock at 80MHz for GBT "+
itos(gbt));
1369 info(
"Setting Eport clock at 80MHz for the GBT "+
itos(gbt));
1393 int wd0 = (wd1<<4)+wd1;
1395 warning(
"Cannot set DLL charge pump (64) for GBT "+
itos(gbt));
1399 warning(
"Cannot set DLL charge pump (65) for GBT "+
itos(gbt));
1403 warning(
"Cannot set DLL charge pump (88) for GBT "+
itos(gbt));
1407 warning(
"Cannot set DLL charge pump (89) for GBT "+
itos(gbt));
1411 warning(
"Cannot set DLL charge pump (112) for GBT "+
itos(gbt));
1415 warning(
"Cannot set DLL charge pump (113) for GBT "+
itos(gbt));
1419 warning(
"Cannot set DLL charge pump (136) for GBT "+
itos(gbt));
1423 warning(
"Cannot set DLL charge pump (137) for GBT "+
itos(gbt));
1427 warning(
"Cannot set DLL charge pump (160) for GBT "+
itos(gbt));
1431 warning(
"Cannot set DLL charge pump (161) for GBT "+
itos(gbt));
1435 warning(
"Cannot set DLL charge pump (184) for GBT "+
itos(gbt));
1439 warning(
"Cannot set DLL charge pump (185) for GBT "+
itos(gbt));
1443 warning(
"Cannot set DLL charge pump (208) for GBT "+
itos(gbt));
1447 warning(
"Cannot set DLL charge pump (209) for GBT "+
itos(gbt));
1451 warning(
"Cannot set DLL charge pump (231) for GBT "+
itos(gbt));
1455 warning(
"Cannot set DLL charge pump (232) for GBT "+
itos(gbt));
1459 warning(
"Cannot set DLL charge pump (232) for GBT "+
itos(gbt));
1462 info(
"Setting DLL Eport for the GBT "+
itos(gbt));
1463 info(
"Setting Phase aligner lock detection mode for GBT "+
itos(gbt));
1497 int ports[21]={81, 82, 83, 105, 106, 107, 129, 130, 131, 153, 154,
1498 155, 177, 178, 179, 201, 202, 203, 225, 226, 227};
1499 for (
int i=0; i<21; ++i){
1501 warning(
"Cannot set (en)able eport ("+
itos(ports[i])+
") of GBT "+
itos(gbt));
1506 info(
"Enabling Eports for the GBT "+
itos(gbt));
1510 info(
"Disabling Eports for the GBT "+
itos(gbt));
1516 int ports[21]={81, 82, 83, 105, 106, 107, 129, 130, 131, 153, 154,
1517 155, 177, 178, 179, 201, 202, 203, 225, 226, 227};
1519 for (
int i = 0; i<21; ++i){
1529 info(
"Setting the gbt "+
itos(gbt)+
" output clock strength to "+
itos(strength));
1531 int wd = ((strength&0xF)<<4)+(strength&0xF);
1532 int ports[4]={ 269, 270, 271, 272 };
1533 for (
int i=0; i<4; ++i){
1535 warning(
"Cannot set gbt output clock strength ("+
itos(ports[i])+
") of GBT "+
itos(gbt));
1543 int ports[4]={ 269, 270, 271, 272 };
1549 if ( val1 != val0 || val2 != val0 || val3 != val0 ){
1550 warning(
"Output clock strength registers are not identical");
1553 if ( (val0&0xF) != ((val0&0xF0)>>4)){
1554 warning(
"Output clock strength registers are not identical");
1566 unsigned int data=(clock&0xFF)+((latency&0xFF)<<8);
1568 warning(
"Cannot set Output EPort phase FPGA Seq - GBT "+
itos(gbt)+
" : "+
itos(data),
"FEB_v1::setOutputEPort");
1571 info(
"set Output EPort phase FPGA Seq - GBT "+
itos(gbt)+
" : "+
itos(data),
"FEB_v1::setOutputEPort");
1591 unsigned int data=(clock&0x3F)+((latency&0x3F)<<6);
1593 warning(
"Cannot set Output EPort phase FPGA"+
itos(fe)+
" - Ch "+
itos(ch)+
" : "+
itos(data),
"FEB_v1::setOutputEPort");
1596 info(
"set Output EPort phase FPGA "+
itos(fe)+
" - Ch "+
itos(ch)+
" : "+
itos(data),
"FEB_v1::setOutputEPort");
1617 65, 89, 113, 137, 161, 185, 209, 232
1621 for (
int i =0; i<8; ++i){
1623 int val0 = val & (0b10001111);
1624 int val1 = val | (0b1110000);
1628 warning(
"Could not reset DLL register "+
itos(registers[i])+
" of GBT "+
itos(gbt));
1632 info(
"Reset of the DLL of GBT "+
itos(gbt));
1643 if (status_gbt==24){
1644 info(
"GBT status is 0d"+
itos(status_gbt),
"GBT Config");
1647 error(
"GBT status is 0d"+
itos(status_gbt),
"GBT Config");
1659 warning(
"Cannot acknowledge configuration of GBT "+
itos(gbt));
void info(std::string mymsg)
StatusCode setThreshold(int, int)
StatusCode setGbtTermEport(int, bool)
void readFifoLLTFE(int fe, int dump)
void addDataStream(std::string, std::string)
StatusCode setLatencyLLTUpNb(int)
StatusCode setTestDuration(int)
StatusCode setMaskLLTCorner(bool)
void writeFifoSpyFE(int fe)
StatusCode setSpyModeSeq(bool)
StatusCode resetFifoSpyFE(int)
StatusCode setPseudoADCEnable(int, int, bool)
bool clock80MHzFallingEdge()
bool disableSubtract(int)
StatusCode dataFill(int, double)
StatusCode setSize(unsigned int, unsigned int)
int gbtClockStrength(int)
StatusCode setGbtEnableEport(int, bool)
StatusCode gbtAcknowledgeConfig(int)
StatusCode setSpiAdd(unsigned long int)
StatusCode setMaskLLTSideNb(int, bool)
void setName(std::string name)
void readFifoLLT(int dump)
int m_fifoInjectAddress[3]
FEB_v1()
Standard constructor.
StatusCode setGain4(int, int, bool)
virtual ~FEB_v1()
Destructor.
StatusCode setGbt80MHzClkEport(int)
bool globalPseudoPMEnable(int)
void setType(std::string type)
void error(std::string mymsg)
StatusCode setOldSubtract(int, bool)
int testDuration(int fpga)
void debug(std::string mymsg)
StatusCode setGbtClockStrength(int, int)
StatusCode setEnableBXIDReset(bool)
StatusCode setI2cAdd(unsigned long int)
StatusCode setSpareForTrigEnable(int, int)
StatusCode setInjectModeFE(int, bool)
bool clockFallingEdge(int, int)
StatusCode setGbtDLLEport(int)
StatusCode resetFifoInjectFE(int)
void writeFifoLLTFE(int fe)
StatusCode spiWrite(unsigned int, unsigned int, unsigned int *)
StatusCode setClock80MHzFallingEdge(bool)
void writeDataFifoInjectFE(int, int *, int *, int *, int *)
StatusCode setOutputEport(int, int, int)
bool pseudoPMEnable(int, int)
StatusCode setProbeEnable(int, bool)
void setAddress(U32 address)
StatusCode setGbtTrackMode(int, int)
StatusCode setMaskLLT(int, bool)
StatusCode setGbtMode(int, int)
StatusCode setPseudoPMEnable(int, int, bool)
void readFifoSpyFE(int fe, int dump)
StatusCode setLatencyLLTSideNb(int)
virtual void addChild(Hierarchy *element)
StatusCode setGlobalPseudoPMEnable(int, bool)
StatusCode setLatencyLLTCorner(int)
StatusCode setCalibCte(int, int, int)
void readFifoInjectFE(int fe, int dump)
StatusCode setLatency(int, int)
StatusCode setDisableSubtract(int, bool)
StatusCode gbtDLLReset(int)
bool pseudoADCEnable(int, int)
StatusCode setGbtDataPath(int, int, int, int)
StatusCode setMaskLLTUpNb(int, bool)
void readFifo(int, int, unsigned int *)
void warning(std::string mymsg)
StatusCode spiRead(unsigned int, unsigned int, unsigned int *)
StatusCode setClockFallingEdge(int, int, bool)
StatusCode setSpyModeFE(int, bool)
bool gbt80MHzClkEport(int)
int spareForTrigEnable(int)
StatusCode setLatencyLLT(int)
void writeFifoInjectFE(int fe, int pattern)
StatusCode setSpiGBTSCA(bool)
StatusCode setStopInjLoop(bool)