From facbc609077c7ad0f5b1b459dbd6f6264189364d Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Tue, 30 Jul 2019 09:32:10 +0200 Subject: [PATCH] jungfrau server: changes for old and new boards --- .../jungfrauDetectorServer/RegisterDefs.h | 15 +-- .../bin/jungfrauDetectorServer_developer | Bin 123568 -> 123348 bytes .../slsDetectorFunctionList.c | 105 +++++++++--------- .../slsDetectorServer_defs.h | 47 ++++---- .../slsDetectorFunctionList.h | 3 + .../slsDetectorServer_funcs.c | 2 +- slsDetectorSoftware/src/slsDetector.cpp | 4 +- slsSupportLib/include/versionAPI.h | 2 +- 8 files changed, 98 insertions(+), 80 deletions(-) diff --git a/slsDetectorServers/jungfrauDetectorServer/RegisterDefs.h b/slsDetectorServers/jungfrauDetectorServer/RegisterDefs.h index 7cf67d78c..d2b7484d4 100755 --- a/slsDetectorServers/jungfrauDetectorServer/RegisterDefs.h +++ b/slsDetectorServers/jungfrauDetectorServer/RegisterDefs.h @@ -6,8 +6,8 @@ /* FPGA Version register */ #define FPGA_VERSION_REG (0x00 << MEM_MAP_SHIFT) -#define BOARD_REVISION_OFST (0) -#define BOARD_REVISION_MSK (0x00FFFFFF << BOARD_REVISION_OFST) +#define FPGA_COMPILATION_DATE_OFST (0) +#define FPGA_COMPILATION_DATE_MSK (0x00FFFFFF << FPGA_COMPILATION_DATE_OFST) #define DETECTOR_TYPE_OFST (24) #define DETECTOR_TYPE_MSK (0x000000FF << DETECTOR_TYPE_OFST) @@ -56,12 +56,13 @@ /* Module Control Board Serial Number Register */ -#define MOD_SERIAL_NUM_REG (0x0A << MEM_MAP_SHIFT) //Not used in software +#define MOD_SERIAL_NUM_REG (0x0A << MEM_MAP_SHIFT) -#define HARDWARE_SERIAL_NUM_OFST (0) //Not used in software -#define HARDWARE_SERIAL_NUM_MSK (0x000000FF << HARDWARE_SERIAL_NUM_OFST) //Not used in software -#define HARDWARE_VERSION_NUM_OFST (16) //Not used in software -#define HARDWARE_VERSION_NUM_MSK (0x0000003F << HARDWARE_VERSION_NUM_OFST) //Not used in software +#define HARDWARE_SERIAL_NUM_OFST (0) +#define HARDWARE_SERIAL_NUM_MSK (0x000000FF << HARDWARE_SERIAL_NUM_OFST) +#define HARDWARE_VERSION_NUM_OFST (16) +#define HARDWARE_VERSION_NUM_MSK (0x0000003F << HARDWARE_VERSION_NUM_OFST) +#define HARDWARE_VERSION_2_VAL ((0x2 << HARDWARE_VERSION_NUM_OFST) & HARDWARE_VERSION_NUM_MSK) /* API Version Register */ diff --git a/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer b/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer index a6fc63786c8fd9f7f69c10932b92b6963779a61d..bed4cebbf728d5b5cada2838ea5c983e09940ca3 100755 GIT binary patch delta 49587 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 a3y2C`ekdGKsEd3qDs_?1HDFQ)eg6v;@H5f? delta 49731 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 diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c index 84b84dca1..cf19332a2 100755 --- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c @@ -91,6 +91,7 @@ void basictests() { int64_t swversion = getDetectorId(DETECTOR_SOFTWARE_VERSION); int64_t sw_fw_apiversion = 0; int64_t client_sw_apiversion = getDetectorId(CLIENT_SOFTWARE_API_VERSION); + uint32_t requiredFirmwareVersion = (isHardwareVersion2() ? REQRD_FRMWRE_VRSN_BOARD2 : REQRD_FRMWRE_VRSN); if (fwversion >= MIN_REQRD_VRSN_T_RD_API) @@ -114,7 +115,7 @@ void basictests() { (long long int)fwversion, (long long int)swversion, (long long int)sw_fw_apiversion, - REQRD_FRMWR_VRSN, + requiredFirmwareVersion, (long long int)client_sw_apiversion )); @@ -137,12 +138,12 @@ void basictests() { } //check for API compatibility - old server - if(sw_fw_apiversion > REQRD_FRMWR_VRSN){ + if(sw_fw_apiversion > requiredFirmwareVersion){ sprintf(firmware_message, "This detector software software version (0x%llx) is incompatible.\n" "Please update detector software (min. 0x%llx) to be compatible with this firmware.\n", (long long int)sw_fw_apiversion, - (long long int)REQRD_FRMWR_VRSN); + (long long int)requiredFirmwareVersion); FILE_LOG(logERROR, (firmware_message)); firmware_compatibility = FAIL; firmware_check_done = 1; @@ -150,12 +151,12 @@ void basictests() { } //check for firmware compatibility - old firmware - if( REQRD_FRMWR_VRSN > fwversion) { + if( requiredFirmwareVersion > fwversion) { sprintf(firmware_message, "This firmware version (0x%llx) is incompatible.\n" "Please update firmware (min. 0x%llx) to be compatible with this server.\n", (long long int)fwversion, - (long long int)REQRD_FRMWR_VRSN); + (long long int)requiredFirmwareVersion); FILE_LOG(logERROR, (firmware_message)); firmware_compatibility = FAIL; firmware_check_done = 1; @@ -275,7 +276,7 @@ u_int64_t getFirmwareVersion() { #ifdef VIRTUAL return 0; #endif - return ((bus_r(FPGA_VERSION_REG) & BOARD_REVISION_MSK) >> BOARD_REVISION_OFST); + return ((bus_r(FPGA_VERSION_REG) & FPGA_COMPILATION_DATE_MSK) >> FPGA_COMPILATION_DATE_OFST); } u_int64_t getFirmwareAPIVersion() { @@ -299,6 +300,10 @@ u_int16_t getHardwareSerialNumber() { return ((bus_r(MOD_SERIAL_NUM_REG) & HARDWARE_SERIAL_NUM_MSK) >> HARDWARE_SERIAL_NUM_OFST); } +int isHardwareVersion2() { + return (((bus_r(MOD_SERIAL_NUM_REG) & HARDWARE_VERSION_NUM_MSK) == HARDWARE_VERSION_2_VAL) ? 1 : 0 ); +} + u_int32_t getDetectorNumber(){ #ifdef VIRTUAL return 0; @@ -424,7 +429,7 @@ void setupDetector() { alignDeserializer(); configureASICTimer(); - bus_w(ADC_PORT_INVERT_REG, ADC_PORT_INVERT_VAL); + bus_w(ADC_PORT_INVERT_REG, (isHardwareVersion2() ? ADC_PORT_INVERT_BOARD2_VAL : ADC_PORT_INVERT_VAL)); initReadoutConfiguration(); @@ -1357,60 +1362,60 @@ void setClockDivider(int val) { if(val >= 0) { // stop state machine if running - if(runBusy()) + if(runBusy()) { stopStateMachine(); + } + + uint32_t adcOfst = 0; + uint32_t sampleAdcSpeed = 0; + uint32_t adcPhase = 0; + uint32_t config = CONFIG_FULL_SPEED_40MHZ_VAL; switch(val) { case FULL_SPEED: - FILE_LOG(logINFO, ("Setting Full Speed (40 MHz):\n")); - - bus_w(SAMPLE_REG, SAMPLE_ADC_FULL_SPEED); - FILE_LOG(logINFO, ("\tSet Sample Reg to 0x%x\n", bus_r(SAMPLE_REG))); - - bus_w(CONFIG_REG, (bus_r(CONFIG_REG) & ~CONFIG_READOUT_SPEED_MSK) | CONFIG_FULL_SPEED_40MHZ_VAL); - FILE_LOG(logINFO, ("\tSet Config Reg to 0x%x\n", bus_r(CONFIG_REG))); - - bus_w(ADC_OFST_REG, ADC_OFST_FULL_SPEED_VAL); - FILE_LOG(logINFO, ("\tSet ADC Ofst Reg to 0x%x\n", bus_r(ADC_OFST_REG))); - - setAdcPhase(ADC_PHASE_FULL_SPEED, 0); - FILE_LOG(logINFO, ("\tSet ADC Phase Reg to %d\n", ADC_PHASE_FULL_SPEED)); - break; - - case HALF_SPEED: + if(isHardwareVersion2()) { + FILE_LOG(logERROR, ("Cannot set full speed. Should not be here\n")); + return; + } + FILE_LOG(logINFO, ("Setting Full Speed (40 MHz):\n")); + adcOfst = ADC_OFST_FULL_SPEED_VAL; + sampleAdcSpeed = SAMPLE_ADC_FULL_SPEED; + adcPhase = ADC_PHASE_FULL_SPEED; + config = CONFIG_FULL_SPEED_40MHZ_VAL; + break; + + case HALF_SPEED: FILE_LOG(logINFO, ("Setting Half Speed (20 MHz):\n")); - - bus_w(SAMPLE_REG, SAMPLE_ADC_HALF_SPEED); - FILE_LOG(logINFO, ("\tSet Sample Reg to 0x%x\n", bus_r(SAMPLE_REG))); - - bus_w(CONFIG_REG, (bus_r(CONFIG_REG) & ~CONFIG_READOUT_SPEED_MSK) | CONFIG_HALF_SPEED_20MHZ_VAL); - FILE_LOG(logINFO, ("\tSet Config Reg to 0x%x\n", bus_r(CONFIG_REG))); - - bus_w(ADC_OFST_REG, ADC_OFST_HALF_SPEED_VAL); - FILE_LOG(logINFO, ("\tSet ADC Ofst Reg to 0x%x\n", bus_r(ADC_OFST_REG))); - - setAdcPhase(ADC_PHASE_HALF_SPEED, 0); - FILE_LOG(logINFO, ("\tSet ADC Phase Reg to %d\n", ADC_PHASE_HALF_SPEED)); - break; - - case QUARTER_SPEED: + adcOfst = isHardwareVersion2() ? ADC_OFST_HALF_SPEED_BOARD2_VAL : ADC_OFST_HALF_SPEED_VAL; + sampleAdcSpeed = isHardwareVersion2() ? SAMPLE_ADC_HALF_SPEED_BOARD2 : SAMPLE_ADC_HALF_SPEED; + adcPhase = isHardwareVersion2() ? ADC_PHASE_HALF_SPEED_BOARD2 : ADC_PHASE_HALF_SPEED; + config = CONFIG_HALF_SPEED_20MHZ_VAL; + break; + + case QUARTER_SPEED: FILE_LOG(logINFO, ("Setting Half Speed (10 MHz):\n")); + adcOfst = isHardwareVersion2() ? ADC_OFST_QUARTER_SPEED_BOARD2_VAL : ADC_OFST_QUARTER_SPEED_VAL; + sampleAdcSpeed = isHardwareVersion2() ? SAMPLE_ADC_QUARTER_SPEED_BOARD2 : SAMPLE_ADC_QUARTER_SPEED; + adcPhase = isHardwareVersion2() ? ADC_PHASE_QUARTER_SPEED_BOARD2 : ADC_PHASE_QUARTER_SPEED; + config = CONFIG_QUARTER_SPEED_10MHZ_VAL; + break; + + default: + break; + } - bus_w(SAMPLE_REG, SAMPLE_ADC_QUARTER_SPEED); - FILE_LOG(logINFO, ("\tSet Sample Reg to 0x%x\n", bus_r(SAMPLE_REG))); + bus_w(CONFIG_REG, (bus_r(CONFIG_REG) & ~CONFIG_READOUT_SPEED_MSK) | config); + FILE_LOG(logINFO, ("\tSet Config Reg to 0x%x\n", bus_r(CONFIG_REG))); - bus_w(CONFIG_REG, (bus_r(CONFIG_REG) & ~CONFIG_READOUT_SPEED_MSK) | CONFIG_QUARTER_SPEED_10MHZ_VAL); - FILE_LOG(logINFO, ("\tSet Config Reg to 0x%x\n", bus_r(CONFIG_REG))); + bus_w(ADC_OFST_REG, adcOfst); + FILE_LOG(logINFO, ("\tSet ADC Ofst Reg to 0x%x\n", bus_r(ADC_OFST_REG))); - bus_w(ADC_OFST_REG, ADC_OFST_QUARTER_SPEED_VAL); - FILE_LOG(logINFO, ("\tSet ADC Ofst Reg to 0x%x\n", bus_r(ADC_OFST_REG))); + bus_w(SAMPLE_REG, sampleAdcSpeed); + FILE_LOG(logINFO, ("\tSet Sample Reg to 0x%x\n", bus_r(SAMPLE_REG))); - setAdcPhase(ADC_PHASE_QUARTER_SPEED, 0); - FILE_LOG(logINFO, ("\tSet ADC Phase Reg to %d\n", ADC_PHASE_QUARTER_SPEED)); - break; - - } + setAdcPhase(adcPhase, 0); + FILE_LOG(logINFO, ("\tSet ADC Phase Reg to %d\n", adcPhase)); } } diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h index e102e6307..09e35a808 100755 --- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h @@ -4,7 +4,8 @@ #define MIN_REQRD_VRSN_T_RD_API 0x171220 -#define REQRD_FRMWR_VRSN 0x190708 +#define REQRD_FRMWRE_VRSN_BOARD2 0x190716 +#define REQRD_FRMWRE_VRSN 0x190708 #define CTRL_SRVR_INIT_TIME_US (300 * 1000) @@ -89,23 +90,31 @@ enum NETWORKINDEX { TXN_FRAME, FLOWCTRL_10G }; #define MAX_STORAGE_CELL_DLY_NS_VAL ((ASIC_CTRL_EXPSRE_TMR_MSK >> ASIC_CTRL_EXPSRE_TMR_OFST) * ASIC_CTRL_EXPSRE_TMR_STEPS) #define ACQ_TIME_MIN_CLOCK (2) -#define BOARD_VERSION_2_VAL (0x3F) - -#define SAMPLE_ADC_FULL_SPEED (SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + SAMPLE_DGTL_SAMPLE_3_VAL + SAMPLE_DECMT_FACTOR_FULL_VAL) // 0x300 -#define SAMPLE_ADC_HALF_SPEED (SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_1_VAL + SAMPLE_DGTL_SAMPLE_6_VAL + SAMPLE_DECMT_FACTOR_HALF_VAL) // 0x1610 -#define SAMPLE_ADC_QUARTER_SPEED (SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_3_VAL + SAMPLE_DGTL_SAMPLE_11_VAL + SAMPLE_DECMT_FACTOR_QUARTER_VAL) // 0x2b30 - -#define ADC_OFST_FULL_SPEED_VAL (0xF) -#define ADC_OFST_HALF_SPEED_VAL (0xB) -#define ADC_OFST_QUARTER_SPEED_VAL (0x7) - -#define ADC_PHASE_FULL_SPEED (0x1E) //30 -#define ADC_PHASE_HALF_SPEED (0x1E) //30 -#define ADC_PHASE_QUARTER_SPEED (0x1E) //30 - -#define ADC_PORT_INVERT_VAL (0x5A5A5A5A)//(0x453b2a9c) #define MAX_PHASE_SHIFTS (160) - - #define BIT16_MASK (0xFFFF) -#define UDP_IP_HEADER_LENGTH_BYTES (28) \ No newline at end of file +#define UDP_IP_HEADER_LENGTH_BYTES (28) + + + +#define ADC_OFST_FULL_SPEED_VAL (0xf) +#define ADC_OFST_HALF_SPEED_VAL (0xb) +#define ADC_OFST_QUARTER_SPEED_VAL (0x7) +#define ADC_OFST_HALF_SPEED_BOARD2_VAL (0x13) +#define ADC_OFST_QUARTER_SPEED_BOARD2_VAL (0x0b) + +#define ADC_PORT_INVERT_VAL (0x5A5A5A5A) +#define ADC_PORT_INVERT_BOARD2_VAL (0x453b2a9c) + +#define SAMPLE_ADC_FULL_SPEED (SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + SAMPLE_DGTL_SAMPLE_3_VAL + SAMPLE_DECMT_FACTOR_FULL_VAL) // 0x300 +#define SAMPLE_ADC_HALF_SPEED (SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_1_VAL + SAMPLE_DGTL_SAMPLE_6_VAL + SAMPLE_DECMT_FACTOR_HALF_VAL) // 0x1610 +#define SAMPLE_ADC_QUARTER_SPEED (SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_3_VAL + SAMPLE_DGTL_SAMPLE_11_VAL + SAMPLE_DECMT_FACTOR_QUARTER_VAL) // 0x2b30 +#define SAMPLE_ADC_HALF_SPEED_BOARD2 (SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + SAMPLE_DGTL_SAMPLE_6_VAL + SAMPLE_DECMT_FACTOR_HALF_VAL) // 0x1600 +#define SAMPLE_ADC_QUARTER_SPEED_BOARD2 (SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_1_VAL + SAMPLE_DGTL_SAMPLE_11_VAL + SAMPLE_DECMT_FACTOR_QUARTER_VAL) // 0x2b10 + +#define ADC_PHASE_FULL_SPEED (0x1E) //30 +#define ADC_PHASE_HALF_SPEED (0x1E) //30 +#define ADC_PHASE_QUARTER_SPEED (0x1E) //30 +#define ADC_PHASE_HALF_SPEED_BOARD2 (0x1E) //30 +#define ADC_PHASE_QUARTER_SPEED_BOARD2 (0x1E) //30 + + diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h b/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h index a420215c2..62df10a67 100755 --- a/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h @@ -39,6 +39,9 @@ u_int64_t getFirmwareAPIVersion(); u_int16_t getHardwareVersionNumber(); u_int16_t getHardwareSerialNumber(); #endif +#ifdef JUNGFRAUD +int isHardwareVersion2(); +#endif u_int32_t getDetectorNumber(); u_int64_t getDetectorMAC(); u_int32_t getDetectorIP(); diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c index 988269bfb..98b56c868 100755 --- a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c @@ -2012,7 +2012,7 @@ int set_speed(int file_des) { } #endif #ifdef JUNGFRAUD - if (ret == OK && ind == CLOCK_DIVIDER && val == FULL_SPEED && getHardwareVersionNumber() != BOARD_VERSION_2_VAL) { + if (ret == OK && ind == CLOCK_DIVIDER && val == FULL_SPEED && isHardwareVersion2()) { ret = FAIL; strcpy(mess, "Full speed not implemented for this board version.\n"); FILE_LOG(logERROR,(mess)); diff --git a/slsDetectorSoftware/src/slsDetector.cpp b/slsDetectorSoftware/src/slsDetector.cpp index 8664bb5b3..dfb68aab5 100755 --- a/slsDetectorSoftware/src/slsDetector.cpp +++ b/slsDetectorSoftware/src/slsDetector.cpp @@ -1925,7 +1925,7 @@ std::string slsDetector::getClientStreamingIP() { return shm()->zmqip.str(); } void slsDetector::setReceiverStreamingIP(std::string sourceIP) { // if empty, give rx_hostname - if (sourceIP.empty()) { + if (sourceIP.empty() || sourceIP == "0.0.0.0") { if (strcmp(shm()->rxHostname, "none") == 0) { throw RuntimeError("Receiver hostname not set yet. Cannot create " "rx_zmqip from none"); @@ -1947,7 +1947,7 @@ void slsDetector::setReceiverStreamingIP(std::string sourceIP) { char retvals[MAX_STR_LENGTH]{}; char args[MAX_STR_LENGTH]{}; sls::strcpy_safe(args, shm()->rxZmqip.str()); // TODO send int - FILE_LOG(logDEBUG1) + FILE_LOG(logINFORED) << "Sending receiver streaming IP to receiver: " << args; sendToReceiver(F_RECEIVER_STREAMING_SRC_IP, args, retvals); FILE_LOG(logDEBUG1) << "Receiver streaming ip: " << retvals; diff --git a/slsSupportLib/include/versionAPI.h b/slsSupportLib/include/versionAPI.h index b7a006b80..4f9d99b0f 100644 --- a/slsSupportLib/include/versionAPI.h +++ b/slsSupportLib/include/versionAPI.h @@ -7,4 +7,4 @@ #define APILIB 0x190723 #define APIRECEIVER 0x190722 #define APIGUI 0x190723 -#define APIJUNGFRAU 0x190724 +#define APIJUNGFRAU 0x190730