diff --git a/Ccs/tools/mod_fpga.py b/Ccs/tools/mod_fpga.py new file mode 100755 index 0000000000000000000000000000000000000000..f5fc2af6636af46cc4735bb7aa7e847a6265fda9 --- /dev/null +++ b/Ccs/tools/mod_fpga.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +""" +Set ADC values in FPGA file read out by SMILE SXI simulator. +""" + +import sys + +FPGA_FILE = 'FPGA.bin' + +ADC_ADDR = {"ADC_P3V3_LVDS": 0x0102, + "ADC_P3V9": 0x0100, + "ADC_P2V5": 0x0106, + "ADC_P3V3": 0x0104, + "ADC_P1V2": 0x010A, + "ADC_P1V8": 0x0108, + "ADC_TEMP_DPU": 0x010E, + "ADC_REF_2V5": 0x010C, + "ADC_TEMP_CCD": 0x0112, + "ADC_TEMP_FEE": 0x0110, + "ADC_I_FFE_DIG": 0x0116, + "ADC_I_FFE_ANA": 0x0114, + "ADC_I_RSE": 0x011A, + "ADC_I_DPU": 0x0118, + "ADC_PSU_TEMP": 0x011E, + "ADC_I_HEATER": 0x011C} + + +def wr_fpga(addr, val, bsize=2): + with open(FPGA_FILE, 'r+b') as fd: + fd.seek(addr) + fd.write(val.to_bytes(bsize, 'little')) + + +if __name__ == '__main__': + + if len(sys.argv) < 3: + print('Usage: sudo ./mod_fpga.py <ADDR|ADC_NAME> <VALUE>') + print('ADC_NAME can be one of the following:\n\t{}'.format('\n\t'.join([k for k in ADC_ADDR]))) + sys.exit() + + addr, val = sys.argv[1:3] + + if addr.strip() in ADC_ADDR: + addr = ADC_ADDR[addr.strip()] + else: + addr = int(addr, 0) + + wr_fpga(addr, int(val, 0)) +