Skip to content

Commit 5cf011b

Browse files
committed
FEMB test: Added gain measurement code, added to production test script
1 parent 51e0ef8 commit 5cf011b

5 files changed

Lines changed: 1124 additions & 8 deletions

File tree

femb_python/configuration/configs/wib_sbnd_femb_protodune.py

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ def __init__(self):
5555

5656
self.REG_HS_DATA = 9
5757

58+
self.INT_TP_EN = 18
59+
self.EXT_TP_EN = 18
60+
5861
#EXTERNAL CLOCK STUFF HERE
5962

6063
self.REG_SPI_BASE = 512
@@ -231,7 +234,7 @@ def powerOffFemb(self,femb):
231234

232235

233236
def selectChannel(self,asic,chan):
234-
print("Select channel")
237+
#print("Select channel")
235238
asicVal = int(asic)
236239
if (asicVal < 0 ) or (asicVal > self.NASICS):
237240
return
@@ -242,7 +245,7 @@ def selectChannel(self,asic,chan):
242245
self.femb.UDP_PORT_RREGRESP = 32002
243246

244247
#select ASIC
245-
print("Selecting ASIC " + str(asicVal) )
248+
#print("Selecting ASIC " + str(asicVal) )
246249
self.femb.write_reg_bits(self.REG_SEL_ASIC , self.REG_SEL_ASIC_LSB, 0xF, asicVal )
247250

248251
#Note: WIB data format streams all 16 channels, don't need to select specific channel
@@ -533,3 +536,69 @@ def write_reg_SI5338(self,addr,val):
533536

534537
self.femb.write_reg( 10, 1)
535538
self.femb.write_reg( 10, 0)
539+
540+
def setFpgaPulser(self,enable,dac):
541+
enableVal = int(enable)
542+
if (enableVal < 0 ) or (enableVal > 1 ) :
543+
print( "femb_config_femb : setFpgaPulser - invalid enable value")
544+
return
545+
dacVal = int(dac)
546+
if ( dacVal < 0 ) or ( dacVal > 0x3F ) :
547+
print( "femb_config_femb : setFpgaPulser - invalid dac value")
548+
return
549+
550+
#set pulser enable bit
551+
if enableVal == 1 :
552+
self.femb.write_reg( self.EXT_TP_EN, 0x2) #pulser enabled, bit 0 is FPGA pulser NOT enabled
553+
else :
554+
self.femb.write_reg( self.EXT_TP_EN, 0x3) #pulser disabled
555+
556+
#connect channel test input to external pin
557+
for asic in range(0,self.NASICS,1):
558+
baseReg = self.REG_SPI_BASE + int(asic)*9
559+
if enableVal == 1:
560+
self.femb.write_reg_bits( baseReg + 8 , 24, 0x3, 0x2 ) #ASIC gen reg
561+
else:
562+
self.femb.write_reg_bits( baseReg + 8 , 24, 0x3, 0x0 ) #ASIC gen reg
563+
564+
self.doAsicConfig()
565+
566+
self.femb.write_reg_bits( self.REG_FPGA_TP_EN, 0,0x3,0x1) #test pulse enable
567+
self.femb.write_reg_bits( self.REG_FPGA_TP_EN, 8,0x1,1) #test pulse enable
568+
self.femb.write_reg_bits( self.REG_TP , 0, 0x3F, dacVal ) #TP Amplitude
569+
self.femb.write_reg_bits( self.REG_TP , 8, 0xFF, 219 ) #DLY
570+
self.femb.write_reg_bits( self.REG_TP , 16, 0xFFFF, 997 ) #FREQ
571+
572+
def setInternalPulser(self,enable,dac):
573+
enableVal = int(enable)
574+
if (enableVal < 0 ) or (enableVal > 1 ) :
575+
print( "femb_config_femb : setInternalPulser - invalid enable value")
576+
return
577+
dacVal = int(dac)
578+
if ( dacVal < 0 ) or ( dacVal > 0x3F ) :
579+
print( "femb_config_femb : setInternalPulser - invalid dac value")
580+
return
581+
582+
#set pulser enable bit
583+
if enableVal == 1 :
584+
self.femb.write_reg( self.INT_TP_EN, 0x2) #pulser enabled
585+
else :
586+
self.femb.write_reg( self.INT_TP_EN, 0x3) #pulser disabled
587+
588+
dacVal = (dacVal & 0x3F)
589+
newDacVal = int('{:08b}'.format(dacVal)[::-1], 2)
590+
591+
#connect channel test input to external pin
592+
for asic in range(0,self.NASICS,1):
593+
baseReg = self.REG_SPI_BASE + int(asic)*9
594+
if enableVal == 1:
595+
self.femb.write_reg_bits( baseReg + 8 , 24, 0x3, 0x2 ) #ASIC gen reg
596+
else:
597+
self.femb.write_reg_bits( baseReg + 8 , 24, 0x3, 0x0 ) #ASIC gen reg
598+
599+
self.doAsicConfig()
600+
601+
self.femb.write_reg_bits( self.REG_FPGA_TP_EN , 0, 0x3, 0x1 )
602+
self.femb.write_reg_bits( self.REG_TP , 0, 0x3F, dacVal ) #TP Amplitude
603+
self.femb.write_reg_bits( self.REG_TP , 8, 0xFF, 219 ) #DLY
604+
self.femb.write_reg_bits( self.REG_TP , 16, 0xFFFF, 997 ) #FREQ

0 commit comments

Comments
 (0)