From 9fb64e0f504e6eeb9fd24a11bb15951cad218022 Mon Sep 17 00:00:00 2001 From: Martin Hierholzer <martin.hierholzer@desy.de> Date: Wed, 27 Nov 2024 11:18:32 +0100 Subject: [PATCH 1/5] feat: support for SEL firmware (#12647) --- llrfctrl6/hostlist | 1 + llrfctrl6/settings/000-makeBoard.py | 7 +- llrfctrl6/settings/FACILITY.AMTF.py | 23 +- llrfctrl6/templates/initSIS.py | 20 +- .../llrfctrl-DoocsVariableConfig.xml | 240 +++--- llrfctrl6/templates/llrfctrl.dmap | 23 +- llrfctrl6/templates/llrfctrl_adc.xlmap | 106 +-- llrfctrl6/templates/llrfctrl_controller.xlmap | 742 ++++++++++-------- 8 files changed, 680 insertions(+), 482 deletions(-) diff --git a/llrfctrl6/hostlist b/llrfctrl6/hostlist index 33bfd1f..ee40a69 100644 --- a/llrfctrl6/hostlist +++ b/llrfctrl6/hostlist @@ -99,6 +99,7 @@ amtfcpullxatb3.desy.de D amtf 3 amtfcpullxatb39.desy.de D amtf 39 amtfcpullxatb39cw.desy.de D amtf 39CW amtfcpullxatb39cwext.desy.de D amtf 39CWEXT +amtfcpullvcts1.desy.de D amtf VCTS1 # CMTB cmtbcpullmcav.desy.de D cmtb MCAV diff --git a/llrfctrl6/settings/000-makeBoard.py b/llrfctrl6/settings/000-makeBoard.py index 2c353e7..0a879d0 100644 --- a/llrfctrl6/settings/000-makeBoard.py +++ b/llrfctrl6/settings/000-makeBoard.py @@ -217,7 +217,7 @@ class boardSincav(boardSISBase): global FIRMWARE_PROJECT_CONTROLLER global CTRLBOARD_SLOT FIRMWARE_TYPE_CONTROLLER = firmwareType - FIRMWARE_PROJECT_CONTROLLER = firmwareProject + "_" + firmwareType + FIRMWARE_PROJECT_CONTROLLER = firmwareProject + (("_" + firmwareType) if firmwareType else "") CTRLBOARD_SLOT = ADCBOARD[self.index]["SLOT"] def withBeamBasedFeedback(self): @@ -231,7 +231,10 @@ class boardSincav(boardSISBase): class boardDWC8VM1(boardSincav): def __init__(self, slot, firmwareType, channelNames, firmwareProject="llrf_scav_sis8300l", skipController=False): boardSincav.__init__(self, slot, firmwareType, channelNames, firmwareProject, skipController) - ADCBOARD[self.index]["RTM_TYPE"] = "DWC8VM1" + if firmwareProject != 'llrf_scav_sel_sis8300ku' : + ADCBOARD[self.index]["RTM_TYPE"] = "DWC8VM1" + else : + ADCBOARD[self.index]["RTM_TYPE"] = "RTM" ######################################################################################################################## diff --git a/llrfctrl6/settings/FACILITY.AMTF.py b/llrfctrl6/settings/FACILITY.AMTF.py index 638407b..54a82fe 100644 --- a/llrfctrl6/settings/FACILITY.AMTF.py +++ b/llrfctrl6/settings/FACILITY.AMTF.py @@ -1,6 +1,9 @@ if ACCELERATOR == "AMTF": - if STATION != "39CWEXT" and STATION != "39CW" and STATION != "2SCAV": + if STATION == "VCTS1": + FIRMWARE_VER_CONTROLLER = "0.1.0-5-g1962f6d4" + + if STATION != "39CWEXT" and STATION != "39CW" and STATION != "2SCAV" and STATION != "VCTS1": isMcav = True if STATION != "2" : multiCavityStation().useDirectClock() @@ -117,6 +120,24 @@ if ACCELERATOR == "AMTF": SVR_LOCATION = HOSTNAME.upper()+"_"+STATION+"._SVR" TIMING_LOCATION = ACCELERATOR+".RF/TIMER/LLXATB2" + if STATION == "VCTS1": + + DOOCS_NAMING_SCHEME = 1 + + rfFrequency = 1300 + QL = 3000000 + + lengthScale = 299792458/(rfFrequency*1000000)*nCellsPerCavity/2 + + channels = [ "CH0", "CH1", "CH2", "CH3", "CH4", "CH5", "CH6", "CH7"] + + RPC_NUMBER = 610489970 + boardDWC8VM1(1, "", channels, firmwareProject="llrf_scav_sel_sis8300ku") + + SERVERNAME = "llrfCtrl_VCTS1_server" + SVR_LOCATION = HOSTNAME.upper()+"_"+STATION+"._SVR" + TIMING_LOCATION = ACCELERATOR+".RF/TIMER/LLXATB2" + if isMcav: CRATE_LOCATION_SUFFIX_A = STATION_LOCATION_SUFFIX CRATE_LOCATION_SUFFIX_B = "M"+CRYOMODULES_NO_SPACE+"."+STATION_LOCATION_SUFFIX diff --git a/llrfctrl6/templates/initSIS.py b/llrfctrl6/templates/initSIS.py index 8d7e563..f68be8c 100644 --- a/llrfctrl6/templates/initSIS.py +++ b/llrfctrl6/templates/initSIS.py @@ -26,6 +26,8 @@ hasULOG = ${HAS_ULOG} pulseLength = ${pulseLength} +isSincavSel = ${FIRMWARE_PROJECT_CONTROLLER == 'llrf_scav_sel_sis8300ku'} + ${"############################################################################################"} @@ -39,13 +41,12 @@ def init(deviceName): (majorExpected, minorExpected, patchExpected) = mapFileVersionExpected.split(".") mapFileVersionParsed = version.parse(mapFileVersionExpected) - # Newer firmware (mcav_fd variant only for now) omits the "WORD_" prefix in most - # places + # Newer firmware (mcav_fd variant only for now) omits the "WORD_" prefix in most places wordPrefix = "WORD_" - if mapFileVersionParsed >= version.parse("2.0.0"): + if mapFileVersionParsed >= version.parse("2.0.0") or isSincavSel: wordPrefix = "" bspWordPrefix = "WORD_" - if mapFileVersionParsed >= version.parse("2.2.0"): + if mapFileVersionParsed >= version.parse("2.2.0") or isSincavSel: bspWordPrefix = "" # Readout the FW type to distinguish single and multi cavity setups (actually @@ -87,6 +88,9 @@ def init(deviceName): if isMultiCavity: # Multi cavity controller slave RTM_type = "DWC10" + elif isSincavSel : + # Self excited loop + RTM_type = "DWC8VM1" else: if cat.hasRegister("DWC8VM1.WORD_ID"): RTM_type = "DWC8VM1" @@ -99,7 +103,7 @@ def init(deviceName): sys.exit(1) RTM_module = RTM_type - if mapFileVersionParsed >= version.parse("2.0.0"): + if mapFileVersionParsed >= version.parse("2.0.0") or isSincavSel: RTM_module = "RTM" # read initialisation status bit @@ -126,7 +130,7 @@ def init(deviceName): "Performing full initialisation for board " + deviceName) # disable double buffering (following reset will switch to buf 0) - if isMultiCavity: + if isMultiCavity or isSincavSel: device.write("DAQ."+wordPrefix+"DOUBLE_BUF_ENA", 0) else: device.write("DAQ."+wordPrefix+"DUB_BUF_ENA", 0) @@ -391,7 +395,7 @@ def init(deviceName): device.write("TIMING."+wordPrefix+"SYNC_SEL", 0, channel) device.write("TIMING."+wordPrefix+"DIVIDER_VALUE", 0, channel) - if mapFileVersionParsed >= version.parse("2.0.0"): + if mapFileVersionParsed >= version.parse("2.0.0") or isSincavSel: # Clear the lower two bits. keep the other bits untouched (they are # configured by the DCM server). This is done through read-modify-write. # Note that this is done while WORD_BOOT_STATUS is still 0, and the DCM init @@ -413,7 +417,7 @@ def init(deviceName): device.write("TIMING."+wordPrefix+"ENABLE", int('11111111', 2)) # Set ch6 for CTABLE strobing (divider value is written by the server) - device.write("TIMING."+wordPrefix+"SOURCE_SEL", 0, 6) + device.write("TIMING."+wordPrefix+"SOURCE_SEL", 0, 6 if not isSincavSel else 2) # Enabling DAC of the Struck Board device.write("BSP."+bspWordPrefix+"DAC_ENA", 1) diff --git a/llrfctrl6/templates/llrfctrl-DoocsVariableConfig.xml b/llrfctrl6/templates/llrfctrl-DoocsVariableConfig.xml index 4e9b1c2..1170561 100644 --- a/llrfctrl6/templates/llrfctrl-DoocsVariableConfig.xml +++ b/llrfctrl6/templates/llrfctrl-DoocsVariableConfig.xml @@ -1,6 +1,9 @@ ##mako <?xml version="1.0" encoding="UTF-8"?> <device_server xmlns="https://github.com/ChimeraTK/ControlSystemAdapter-DoocsAdapter"> + <% + isSincavSel = ( FIRMWARE_PROJECT_CONTROLLER == 'llrf_scav_sel_sis8300ku' ) + %> % if DOOCS_NAMING_SCHEME != "none" : <macro_pulse_number_source>/Server/triggerNumber</macro_pulse_number_source> @@ -269,92 +272,95 @@ <property name="FREQ_MODULATION.ENA" source="/Controller/FrequencyModulation/enable"/> <property name="FREQ_MODULATION.OFFSET" source="/Controller/FrequencyModulation/offset"/> - <property name="MIMO.ENA" source="/Controller/FeedBack/mimoEnable"/> - <property name="COEFF.MIMO_A11.0" source="/Controller/FeedBack/MimoCoefficients/A11_1"/> - <property name="COEFF.MIMO_A11.1" source="/Controller/FeedBack/MimoCoefficients/A11_2"/> - <property name="COEFF.MIMO_B11.0" source="/Controller/FeedBack/MimoCoefficients/B11_0"/> - <property name="COEFF.MIMO_B11.1" source="/Controller/FeedBack/MimoCoefficients/B11_1"/> - <property name="COEFF.MIMO_B11.2" source="/Controller/FeedBack/MimoCoefficients/B11_2"/> - <property name="COEFF.MIMO_A12.0" source="/Controller/FeedBack/MimoCoefficients/A12_1"/> - <property name="COEFF.MIMO_A12.1" source="/Controller/FeedBack/MimoCoefficients/A12_2"/> - <property name="COEFF.MIMO_B12.0" source="/Controller/FeedBack/MimoCoefficients/B12_0"/> - <property name="COEFF.MIMO_B12.1" source="/Controller/FeedBack/MimoCoefficients/B12_1"/> - <property name="COEFF.MIMO_B12.2" source="/Controller/FeedBack/MimoCoefficients/B12_2"/> - <property name="COEFF.MIMO_A21.0" source="/Controller/FeedBack/MimoCoefficients/A21_1"/> - <property name="COEFF.MIMO_A21.1" source="/Controller/FeedBack/MimoCoefficients/A21_2"/> - <property name="COEFF.MIMO_B21.0" source="/Controller/FeedBack/MimoCoefficients/B21_0"/> - <property name="COEFF.MIMO_B21.1" source="/Controller/FeedBack/MimoCoefficients/B21_1"/> - <property name="COEFF.MIMO_B21.2" source="/Controller/FeedBack/MimoCoefficients/B21_2"/> - <property name="COEFF.MIMO_A22.0" source="/Controller/FeedBack/MimoCoefficients/A22_1"/> - <property name="COEFF.MIMO_A22.1" source="/Controller/FeedBack/MimoCoefficients/A22_2"/> - <property name="COEFF.MIMO_B22.0" source="/Controller/FeedBack/MimoCoefficients/B22_0"/> - <property name="COEFF.MIMO_B22.1" source="/Controller/FeedBack/MimoCoefficients/B22_1"/> - <property name="COEFF.MIMO_B22.2" source="/Controller/FeedBack/MimoCoefficients/B22_2"/> - <property name="COEFF_ACTUAL.MIMO_A11.0" source="/Controller/FeedBack/MimoCoefficients/Actual/A11_1"/> - <property name="COEFF_ACTUAL.MIMO_A11.1" source="/Controller/FeedBack/MimoCoefficients/Actual/A11_2"/> - <property name="COEFF_ACTUAL.MIMO_B11.0" source="/Controller/FeedBack/MimoCoefficients/Actual/B11_0"/> - <property name="COEFF_ACTUAL.MIMO_B11.1" source="/Controller/FeedBack/MimoCoefficients/Actual/B11_1"/> - <property name="COEFF_ACTUAL.MIMO_B11.2" source="/Controller/FeedBack/MimoCoefficients/Actual/B11_2"/> - <property name="COEFF_ACTUAL.MIMO_A12.0" source="/Controller/FeedBack/MimoCoefficients/Actual/A12_1"/> - <property name="COEFF_ACTUAL.MIMO_A12.1" source="/Controller/FeedBack/MimoCoefficients/Actual/A12_2"/> - <property name="COEFF_ACTUAL.MIMO_B12.0" source="/Controller/FeedBack/MimoCoefficients/Actual/B12_0"/> - <property name="COEFF_ACTUAL.MIMO_B12.1" source="/Controller/FeedBack/MimoCoefficients/Actual/B12_1"/> - <property name="COEFF_ACTUAL.MIMO_B12.2" source="/Controller/FeedBack/MimoCoefficients/Actual/B12_2"/> - <property name="COEFF_ACTUAL.MIMO_A21.0" source="/Controller/FeedBack/MimoCoefficients/Actual/A21_1"/> - <property name="COEFF_ACTUAL.MIMO_A21.1" source="/Controller/FeedBack/MimoCoefficients/Actual/A21_2"/> - <property name="COEFF_ACTUAL.MIMO_B21.0" source="/Controller/FeedBack/MimoCoefficients/Actual/B21_0"/> - <property name="COEFF_ACTUAL.MIMO_B21.1" source="/Controller/FeedBack/MimoCoefficients/Actual/B21_1"/> - <property name="COEFF_ACTUAL.MIMO_B21.2" source="/Controller/FeedBack/MimoCoefficients/Actual/B21_2"/> - <property name="COEFF_ACTUAL.MIMO_A22.0" source="/Controller/FeedBack/MimoCoefficients/Actual/A22_1"/> - <property name="COEFF_ACTUAL.MIMO_A22.1" source="/Controller/FeedBack/MimoCoefficients/Actual/A22_2"/> - <property name="COEFF_ACTUAL.MIMO_B22.0" source="/Controller/FeedBack/MimoCoefficients/Actual/B22_0"/> - <property name="COEFF_ACTUAL.MIMO_B22.1" source="/Controller/FeedBack/MimoCoefficients/Actual/B22_1"/> - <property name="COEFF_ACTUAL.MIMO_B22.2" source="/Controller/FeedBack/MimoCoefficients/Actual/B22_2"/> - <property name="COEFF.MIMO_APPLY" source="/Controller/FeedBack/MimoCoefficients/apply"/> - - <property name="SMITH.ENA" source="/Controller/FeedBack/smithEnable"/> - <property name="SMITH.DELAY" source="/Controller/FeedBack/smithDelay"/> - <property name="COEFF.SMITH_A11.0" source="/Controller/FeedBack/SmithCoefficients/A11_1"/> - <property name="COEFF.SMITH_A11.1" source="/Controller/FeedBack/SmithCoefficients/A11_2"/> - <property name="COEFF.SMITH_B11.0" source="/Controller/FeedBack/SmithCoefficients/B11_0"/> - <property name="COEFF.SMITH_B11.1" source="/Controller/FeedBack/SmithCoefficients/B11_1"/> - <property name="COEFF.SMITH_B11.2" source="/Controller/FeedBack/SmithCoefficients/B11_2"/> - <property name="COEFF.SMITH_A12.0" source="/Controller/FeedBack/SmithCoefficients/A12_1"/> - <property name="COEFF.SMITH_A12.1" source="/Controller/FeedBack/SmithCoefficients/A12_2"/> - <property name="COEFF.SMITH_B12.0" source="/Controller/FeedBack/SmithCoefficients/B12_0"/> - <property name="COEFF.SMITH_B12.1" source="/Controller/FeedBack/SmithCoefficients/B12_1"/> - <property name="COEFF.SMITH_B12.2" source="/Controller/FeedBack/SmithCoefficients/B12_2"/> - <property name="COEFF.SMITH_A21.0" source="/Controller/FeedBack/SmithCoefficients/A21_1"/> - <property name="COEFF.SMITH_A21.1" source="/Controller/FeedBack/SmithCoefficients/A21_2"/> - <property name="COEFF.SMITH_B21.0" source="/Controller/FeedBack/SmithCoefficients/B21_0"/> - <property name="COEFF.SMITH_B21.1" source="/Controller/FeedBack/SmithCoefficients/B21_1"/> - <property name="COEFF.SMITH_B21.2" source="/Controller/FeedBack/SmithCoefficients/B21_2"/> - <property name="COEFF.SMITH_A22.0" source="/Controller/FeedBack/SmithCoefficients/A22_1"/> - <property name="COEFF.SMITH_A22.1" source="/Controller/FeedBack/SmithCoefficients/A22_2"/> - <property name="COEFF.SMITH_B22.0" source="/Controller/FeedBack/SmithCoefficients/B22_0"/> - <property name="COEFF.SMITH_B22.1" source="/Controller/FeedBack/SmithCoefficients/B22_1"/> - <property name="COEFF.SMITH_B22.2" source="/Controller/FeedBack/SmithCoefficients/B22_2"/> - <property name="COEFF_ACTUAL.SMITH_A11.0" source="/Controller/FeedBack/SmithCoefficients/Actual/A11_1"/> - <property name="COEFF_ACTUAL.SMITH_A11.1" source="/Controller/FeedBack/SmithCoefficients/Actual/A11_2"/> - <property name="COEFF_ACTUAL.SMITH_B11.0" source="/Controller/FeedBack/SmithCoefficients/Actual/B11_0"/> - <property name="COEFF_ACTUAL.SMITH_B11.1" source="/Controller/FeedBack/SmithCoefficients/Actual/B11_1"/> - <property name="COEFF_ACTUAL.SMITH_B11.2" source="/Controller/FeedBack/SmithCoefficients/Actual/B11_2"/> - <property name="COEFF_ACTUAL.SMITH_A12.0" source="/Controller/FeedBack/SmithCoefficients/Actual/A12_1"/> - <property name="COEFF_ACTUAL.SMITH_A12.1" source="/Controller/FeedBack/SmithCoefficients/Actual/A12_2"/> - <property name="COEFF_ACTUAL.SMITH_B12.0" source="/Controller/FeedBack/SmithCoefficients/Actual/B12_0"/> - <property name="COEFF_ACTUAL.SMITH_B12.1" source="/Controller/FeedBack/SmithCoefficients/Actual/B12_1"/> - <property name="COEFF_ACTUAL.SMITH_B12.2" source="/Controller/FeedBack/SmithCoefficients/Actual/B12_2"/> - <property name="COEFF_ACTUAL.SMITH_A21.0" source="/Controller/FeedBack/SmithCoefficients/Actual/A21_1"/> - <property name="COEFF_ACTUAL.SMITH_A21.1" source="/Controller/FeedBack/SmithCoefficients/Actual/A21_2"/> - <property name="COEFF_ACTUAL.SMITH_B21.0" source="/Controller/FeedBack/SmithCoefficients/Actual/B21_0"/> - <property name="COEFF_ACTUAL.SMITH_B21.1" source="/Controller/FeedBack/SmithCoefficients/Actual/B21_1"/> - <property name="COEFF_ACTUAL.SMITH_B21.2" source="/Controller/FeedBack/SmithCoefficients/Actual/B21_2"/> - <property name="COEFF_ACTUAL.SMITH_A22.0" source="/Controller/FeedBack/SmithCoefficients/Actual/A22_1"/> - <property name="COEFF_ACTUAL.SMITH_A22.1" source="/Controller/FeedBack/SmithCoefficients/Actual/A22_2"/> - <property name="COEFF_ACTUAL.SMITH_B22.0" source="/Controller/FeedBack/SmithCoefficients/Actual/B22_0"/> - <property name="COEFF_ACTUAL.SMITH_B22.1" source="/Controller/FeedBack/SmithCoefficients/Actual/B22_1"/> - <property name="COEFF_ACTUAL.SMITH_B22.2" source="/Controller/FeedBack/SmithCoefficients/Actual/B22_2"/> - <property name="COEFF.SMITH_APPLY" source="/Controller/FeedBack/SmithCoefficients/apply"/> + % if not isSincavSel : + <property name="MIMO.ENA" source="/Controller/FeedBack/mimoEnable"/> + <property name="COEFF.MIMO_A11.0" source="/Controller/FeedBack/MimoCoefficients/A11_1"/> + <property name="COEFF.MIMO_A11.1" source="/Controller/FeedBack/MimoCoefficients/A11_2"/> + <property name="COEFF.MIMO_B11.0" source="/Controller/FeedBack/MimoCoefficients/B11_0"/> + <property name="COEFF.MIMO_B11.1" source="/Controller/FeedBack/MimoCoefficients/B11_1"/> + <property name="COEFF.MIMO_B11.2" source="/Controller/FeedBack/MimoCoefficients/B11_2"/> + <property name="COEFF.MIMO_A12.0" source="/Controller/FeedBack/MimoCoefficients/A12_1"/> + <property name="COEFF.MIMO_A12.1" source="/Controller/FeedBack/MimoCoefficients/A12_2"/> + <property name="COEFF.MIMO_B12.0" source="/Controller/FeedBack/MimoCoefficients/B12_0"/> + <property name="COEFF.MIMO_B12.1" source="/Controller/FeedBack/MimoCoefficients/B12_1"/> + <property name="COEFF.MIMO_B12.2" source="/Controller/FeedBack/MimoCoefficients/B12_2"/> + <property name="COEFF.MIMO_A21.0" source="/Controller/FeedBack/MimoCoefficients/A21_1"/> + <property name="COEFF.MIMO_A21.1" source="/Controller/FeedBack/MimoCoefficients/A21_2"/> + <property name="COEFF.MIMO_B21.0" source="/Controller/FeedBack/MimoCoefficients/B21_0"/> + <property name="COEFF.MIMO_B21.1" source="/Controller/FeedBack/MimoCoefficients/B21_1"/> + <property name="COEFF.MIMO_B21.2" source="/Controller/FeedBack/MimoCoefficients/B21_2"/> + <property name="COEFF.MIMO_A22.0" source="/Controller/FeedBack/MimoCoefficients/A22_1"/> + <property name="COEFF.MIMO_A22.1" source="/Controller/FeedBack/MimoCoefficients/A22_2"/> + <property name="COEFF.MIMO_B22.0" source="/Controller/FeedBack/MimoCoefficients/B22_0"/> + <property name="COEFF.MIMO_B22.1" source="/Controller/FeedBack/MimoCoefficients/B22_1"/> + <property name="COEFF.MIMO_B22.2" source="/Controller/FeedBack/MimoCoefficients/B22_2"/> + <property name="COEFF_ACTUAL.MIMO_A11.0" source="/Controller/FeedBack/MimoCoefficients/Actual/A11_1"/> + <property name="COEFF_ACTUAL.MIMO_A11.1" source="/Controller/FeedBack/MimoCoefficients/Actual/A11_2"/> + <property name="COEFF_ACTUAL.MIMO_B11.0" source="/Controller/FeedBack/MimoCoefficients/Actual/B11_0"/> + <property name="COEFF_ACTUAL.MIMO_B11.1" source="/Controller/FeedBack/MimoCoefficients/Actual/B11_1"/> + <property name="COEFF_ACTUAL.MIMO_B11.2" source="/Controller/FeedBack/MimoCoefficients/Actual/B11_2"/> + <property name="COEFF_ACTUAL.MIMO_A12.0" source="/Controller/FeedBack/MimoCoefficients/Actual/A12_1"/> + <property name="COEFF_ACTUAL.MIMO_A12.1" source="/Controller/FeedBack/MimoCoefficients/Actual/A12_2"/> + <property name="COEFF_ACTUAL.MIMO_B12.0" source="/Controller/FeedBack/MimoCoefficients/Actual/B12_0"/> + <property name="COEFF_ACTUAL.MIMO_B12.1" source="/Controller/FeedBack/MimoCoefficients/Actual/B12_1"/> + <property name="COEFF_ACTUAL.MIMO_B12.2" source="/Controller/FeedBack/MimoCoefficients/Actual/B12_2"/> + <property name="COEFF_ACTUAL.MIMO_A21.0" source="/Controller/FeedBack/MimoCoefficients/Actual/A21_1"/> + <property name="COEFF_ACTUAL.MIMO_A21.1" source="/Controller/FeedBack/MimoCoefficients/Actual/A21_2"/> + <property name="COEFF_ACTUAL.MIMO_B21.0" source="/Controller/FeedBack/MimoCoefficients/Actual/B21_0"/> + <property name="COEFF_ACTUAL.MIMO_B21.1" source="/Controller/FeedBack/MimoCoefficients/Actual/B21_1"/> + <property name="COEFF_ACTUAL.MIMO_B21.2" source="/Controller/FeedBack/MimoCoefficients/Actual/B21_2"/> + <property name="COEFF_ACTUAL.MIMO_A22.0" source="/Controller/FeedBack/MimoCoefficients/Actual/A22_1"/> + <property name="COEFF_ACTUAL.MIMO_A22.1" source="/Controller/FeedBack/MimoCoefficients/Actual/A22_2"/> + <property name="COEFF_ACTUAL.MIMO_B22.0" source="/Controller/FeedBack/MimoCoefficients/Actual/B22_0"/> + <property name="COEFF_ACTUAL.MIMO_B22.1" source="/Controller/FeedBack/MimoCoefficients/Actual/B22_1"/> + <property name="COEFF_ACTUAL.MIMO_B22.2" source="/Controller/FeedBack/MimoCoefficients/Actual/B22_2"/> + <property name="COEFF.MIMO_APPLY" source="/Controller/FeedBack/MimoCoefficients/apply"/> + + <property name="SMITH.ENA" source="/Controller/FeedBack/smithEnable"/> + <property name="SMITH.DELAY" source="/Controller/FeedBack/smithDelay"/> + <property name="COEFF.SMITH_A11.0" source="/Controller/FeedBack/SmithCoefficients/A11_1"/> + <property name="COEFF.SMITH_A11.1" source="/Controller/FeedBack/SmithCoefficients/A11_2"/> + <property name="COEFF.SMITH_B11.0" source="/Controller/FeedBack/SmithCoefficients/B11_0"/> + <property name="COEFF.SMITH_B11.1" source="/Controller/FeedBack/SmithCoefficients/B11_1"/> + <property name="COEFF.SMITH_B11.2" source="/Controller/FeedBack/SmithCoefficients/B11_2"/> + <property name="COEFF.SMITH_A12.0" source="/Controller/FeedBack/SmithCoefficients/A12_1"/> + <property name="COEFF.SMITH_A12.1" source="/Controller/FeedBack/SmithCoefficients/A12_2"/> + <property name="COEFF.SMITH_B12.0" source="/Controller/FeedBack/SmithCoefficients/B12_0"/> + <property name="COEFF.SMITH_B12.1" source="/Controller/FeedBack/SmithCoefficients/B12_1"/> + <property name="COEFF.SMITH_B12.2" source="/Controller/FeedBack/SmithCoefficients/B12_2"/> + <property name="COEFF.SMITH_A21.0" source="/Controller/FeedBack/SmithCoefficients/A21_1"/> + <property name="COEFF.SMITH_A21.1" source="/Controller/FeedBack/SmithCoefficients/A21_2"/> + <property name="COEFF.SMITH_B21.0" source="/Controller/FeedBack/SmithCoefficients/B21_0"/> + <property name="COEFF.SMITH_B21.1" source="/Controller/FeedBack/SmithCoefficients/B21_1"/> + <property name="COEFF.SMITH_B21.2" source="/Controller/FeedBack/SmithCoefficients/B21_2"/> + <property name="COEFF.SMITH_A22.0" source="/Controller/FeedBack/SmithCoefficients/A22_1"/> + <property name="COEFF.SMITH_A22.1" source="/Controller/FeedBack/SmithCoefficients/A22_2"/> + <property name="COEFF.SMITH_B22.0" source="/Controller/FeedBack/SmithCoefficients/B22_0"/> + <property name="COEFF.SMITH_B22.1" source="/Controller/FeedBack/SmithCoefficients/B22_1"/> + <property name="COEFF.SMITH_B22.2" source="/Controller/FeedBack/SmithCoefficients/B22_2"/> + <property name="COEFF_ACTUAL.SMITH_A11.0" source="/Controller/FeedBack/SmithCoefficients/Actual/A11_1"/> + <property name="COEFF_ACTUAL.SMITH_A11.1" source="/Controller/FeedBack/SmithCoefficients/Actual/A11_2"/> + <property name="COEFF_ACTUAL.SMITH_B11.0" source="/Controller/FeedBack/SmithCoefficients/Actual/B11_0"/> + <property name="COEFF_ACTUAL.SMITH_B11.1" source="/Controller/FeedBack/SmithCoefficients/Actual/B11_1"/> + <property name="COEFF_ACTUAL.SMITH_B11.2" source="/Controller/FeedBack/SmithCoefficients/Actual/B11_2"/> + <property name="COEFF_ACTUAL.SMITH_A12.0" source="/Controller/FeedBack/SmithCoefficients/Actual/A12_1"/> + <property name="COEFF_ACTUAL.SMITH_A12.1" source="/Controller/FeedBack/SmithCoefficients/Actual/A12_2"/> + <property name="COEFF_ACTUAL.SMITH_B12.0" source="/Controller/FeedBack/SmithCoefficients/Actual/B12_0"/> + <property name="COEFF_ACTUAL.SMITH_B12.1" source="/Controller/FeedBack/SmithCoefficients/Actual/B12_1"/> + <property name="COEFF_ACTUAL.SMITH_B12.2" source="/Controller/FeedBack/SmithCoefficients/Actual/B12_2"/> + <property name="COEFF_ACTUAL.SMITH_A21.0" source="/Controller/FeedBack/SmithCoefficients/Actual/A21_1"/> + <property name="COEFF_ACTUAL.SMITH_A21.1" source="/Controller/FeedBack/SmithCoefficients/Actual/A21_2"/> + <property name="COEFF_ACTUAL.SMITH_B21.0" source="/Controller/FeedBack/SmithCoefficients/Actual/B21_0"/> + <property name="COEFF_ACTUAL.SMITH_B21.1" source="/Controller/FeedBack/SmithCoefficients/Actual/B21_1"/> + <property name="COEFF_ACTUAL.SMITH_B21.2" source="/Controller/FeedBack/SmithCoefficients/Actual/B21_2"/> + <property name="COEFF_ACTUAL.SMITH_A22.0" source="/Controller/FeedBack/SmithCoefficients/Actual/A22_1"/> + <property name="COEFF_ACTUAL.SMITH_A22.1" source="/Controller/FeedBack/SmithCoefficients/Actual/A22_2"/> + <property name="COEFF_ACTUAL.SMITH_B22.0" source="/Controller/FeedBack/SmithCoefficients/Actual/B22_0"/> + <property name="COEFF_ACTUAL.SMITH_B22.1" source="/Controller/FeedBack/SmithCoefficients/Actual/B22_1"/> + <property name="COEFF_ACTUAL.SMITH_B22.2" source="/Controller/FeedBack/SmithCoefficients/Actual/B22_2"/> + <property name="COEFF.SMITH_APPLY" source="/Controller/FeedBack/SmithCoefficients/apply"/> + + % endif <property name="OUT_SATURATION.EARLY.I" source="/Controller/Status/feedForwardSaturationI"/> <property name="OUT_SATURATION.EARLY.Q" source="/Controller/Status/feedForwardSaturationQ"/> @@ -367,12 +373,16 @@ <property name="CTRL_STATUS" source="/Controller/Status/overall"/> - <property name="ACTUAL_PULSE_LENGTH.SAMPLES" source="/Controller/Status/ActualPulseLength/samples"> - <publish_ZMQ>true</publish_ZMQ> - <data_matching>exact</data_matching> - </property> + % if not isSincavSel : - <property name="ACTUAL_PULSE_LENGTH.TIME" source="/Controller/Status/ActualPulseLength/time"/> + <property name="ACTUAL_PULSE_LENGTH.SAMPLES" source="/Controller/Status/ActualPulseLength/samples"> + <publish_ZMQ>true</publish_ZMQ> + <data_matching>exact</data_matching> + </property> + + <property name="ACTUAL_PULSE_LENGTH.TIME" source="/Controller/Status/ActualPulseLength/time"/> + + % endif <import directory="CTRL_STATUS">/Controller/Status</import> @@ -382,23 +392,27 @@ <property name="FFC.FINAL_LIMIT" source="/LearningFeedForward/outputLimit"/> - <D_spectrum name="PROTECT.LEVEL" source="/Controller/FastProtection/LEVEL"> - <incrementSource>/Configuration/samplingTime</incrementSource> - <numberOfBuffers>16</numberOfBuffers> - <publish_ZMQ>true</publish_ZMQ> - <data_matching>exact</data_matching> - </D_spectrum> - <D_spectrum name="PROTECT.VREFL" source="/Controller/FastProtection/VREFL"> - <incrementSource>/Configuration/samplingTime</incrementSource> - <numberOfBuffers>16</numberOfBuffers> - <publish_ZMQ>true</publish_ZMQ> - <data_matching>exact</data_matching> - </D_spectrum> - <property name="PROTECT.ACTIVE" source="/Controller/Status/fastProtectionActive"> - <publish_ZMQ>true</publish_ZMQ> - <data_matching>exact</data_matching> - </property> - <import directory="PROTECT">/Controller/FastProtection</import> + % if not isSincavSel : + + <D_spectrum name="PROTECT.LEVEL" source="/Controller/FastProtection/LEVEL"> + <incrementSource>/Configuration/samplingTime</incrementSource> + <numberOfBuffers>16</numberOfBuffers> + <publish_ZMQ>true</publish_ZMQ> + <data_matching>exact</data_matching> + </D_spectrum> + <D_spectrum name="PROTECT.VREFL" source="/Controller/FastProtection/VREFL"> + <incrementSource>/Configuration/samplingTime</incrementSource> + <numberOfBuffers>16</numberOfBuffers> + <publish_ZMQ>true</publish_ZMQ> + <data_matching>exact</data_matching> + </D_spectrum> + <property name="PROTECT.ACTIVE" source="/Controller/Status/fastProtectionActive"> + <publish_ZMQ>true</publish_ZMQ> + <data_matching>exact</data_matching> + </property> + <import directory="PROTECT">/Controller/FastProtection</import> + + % endif % if ( INSTANCE_TYPE != InstanceType.sincav ) or enableDynamicOVC : <property name="FF.ROTATION_TABLE.ENA" source="/Controller/FeedForward/RotationTable/enable"/> @@ -418,6 +432,10 @@ % endfor % endif + % if isSincavSel : + <import>/Controller/FeedBackSincavSel</import> + % endif + </location> <location name="VM.${STATION_LOCATION_SUFFIX}"> @@ -706,8 +724,10 @@ <property name="LIMIT_DIS" source="/AdcBoard${BOARD}/Channel${CHANNEL}/limiterDisable"/> <property name="AMPL.LIMITER_ACTIVE" source="/AdcBoard${BOARD}/Channel${CHANNEL}/limiterActive"/> <property name="AMPL.PRE_LIMITER_ACTIVE" source="/AdcBoard${BOARD}/Channel${CHANNEL}/prelimiterActive"/> - <property name="ADC_OVERRANGE" source="/AdcBoard${BOARD}/Channel${CHANNEL}/adcOverflow"/> - <property name="ADC_OVERRANGE_TIME" source="/AdcBoard${BOARD}/Channel${CHANNEL}/adcOverflowTime"/> + % if not isSincavSel : + <property name="ADC_OVERRANGE" source="/AdcBoard${BOARD}/Channel${CHANNEL}/adcOverflow"/> + <property name="ADC_OVERRANGE_TIME" source="/AdcBoard${BOARD}/Channel${CHANNEL}/adcOverflowTime"/> + % endif <property name="FILTER_SEL" source="/AdcBoard${BOARD}/Channel${CHANNEL}/Filter/type"/> <property name="FILTER_BW" source="/AdcBoard${BOARD}/Channel${CHANNEL}/Filter/bandwidth"/> <property name="FILTER_CF" source="/AdcBoard${BOARD}/Channel${CHANNEL}/Filter/frequency"/> diff --git a/llrfctrl6/templates/llrfctrl.dmap b/llrfctrl6/templates/llrfctrl.dmap index 25609c1..c1ef3e2 100644 --- a/llrfctrl6/templates/llrfctrl.dmap +++ b/llrfctrl6/templates/llrfctrl.dmap @@ -5,16 +5,23 @@ MAPFILE_ADC=[] for BOARD in ADCBOARD.keys() : - if "_mcav_" in ADCBOARD[BOARD]["FIRMWARE_PROJECT"] : - splitProjectAtUnderscore=3 - else : - splitProjectAtUnderscore=2 + if "_scav_sel_" not in ADCBOARD[BOARD]["FIRMWARE_PROJECT"] : + + if "_mcav_" in ADCBOARD[BOARD]["FIRMWARE_PROJECT"] : + splitProjectAtUnderscore=3 + else : + splitProjectAtUnderscore=2 + + project = '_'.join(ADCBOARD[BOARD]["FIRMWARE_PROJECT"]. \ + split('_',splitProjectAtUnderscore)[:splitProjectAtUnderscore]) + + configuration = '_'.join(ADCBOARD[BOARD]["FIRMWARE_PROJECT"]. \ + split('_',splitProjectAtUnderscore)[splitProjectAtUnderscore:]) - project = '_'.join(ADCBOARD[BOARD]["FIRMWARE_PROJECT"]. \ - split('_',splitProjectAtUnderscore)[:splitProjectAtUnderscore]) + else: # scav_sel + project = 'llrf_scav_sel' + configuration = 'sis8300ku' - configuration = '_'.join(ADCBOARD[BOARD]["FIRMWARE_PROJECT"]. \ - split('_',splitProjectAtUnderscore)[splitProjectAtUnderscore:]) MAPFILE_ADC.append(getMapFile('llrf',project,configuration,ADCBOARD[BOARD]["FIRMWARE_VER"], __output_folder, DYNAMIC)) diff --git a/llrfctrl6/templates/llrfctrl_adc.xlmap b/llrfctrl6/templates/llrfctrl_adc.xlmap index d5b6b3c..9b77faf 100644 --- a/llrfctrl6/templates/llrfctrl_adc.xlmap +++ b/llrfctrl6/templates/llrfctrl_adc.xlmap @@ -8,6 +8,8 @@ else : sincavFirmware = False + isSincavSel = ( sincavFirmware and FIRMWARE_PROJECT_CONTROLLER == 'llrf_scav_sel_sis8300ku' ) + if not sincavFirmware and ( 'FW_VER_ADC' not in locals() or FW_VER_ADC is UNDEFINED ) : raise OmitFileException @@ -18,12 +20,10 @@ # Newer firmware (mcav_fd variant only for now) omits the "WORD_" prefix in most places wordPrefix = "WORD_" - if not sincavFirmware : + if not sincavFirmware or isSincavSel : wordPrefix = "" - wordPrefixBSP = "WORD_" - if not sincavFirmware : - wordPrefixBSP = "" + wordPrefixBSP = wordPrefix rtmModule="<par>rtmType</par>" @@ -38,6 +38,10 @@ elif sincavFirmware and FW_VER_CTRL >= version.parse("1.4.0") : daqbufRegisterAmplPhase="app_daq.DAQ_FD" daqbufRegisterRaw="app_daq_raw.DAQ_RAW_BUF0" + if isSincavSel : + daqbufRegisterAmplPhase="DAQ_MEM.DAQ_FD" + daqbufRegisterRaw="DAQ_MEM_RAW.DAQ1_RAW_BUF0" + %>\ <logicalNameMap> @@ -48,17 +52,19 @@ <targetDevice><par>target</par></targetDevice> <targetRegister>${daqbufRegisterAmplPhase}_BUF0</targetRegister> <numberOfElements>${pulseLength}</numberOfElements> - <plugin name="doubleBuffer"> - <parameter name="secondBuffer">${daqbufRegisterAmplPhase}_BUF1</parameter> - % if not sincavFirmware : - <parameter name="enableDoubleBuffering">DAQ.DOUBLE_BUF_ENA</parameter> - <parameter name="currentBufferNumber">DAQ.ACTIVE_BUF</parameter> - % else : - <parameter name="enableDoubleBuffering">DAQ.WORD_DUB_BUF_ENA</parameter> - <parameter name="currentBufferNumber">DAQ.WORD_DUB_BUF_CURR</parameter> - % endif - <parameter name="daqNumber"><par>amplPhaseDaq</par></parameter> - </plugin> + % if not isSincavSel : + <plugin name="doubleBuffer"> + <parameter name="secondBuffer">${daqbufRegisterAmplPhase}_BUF1</parameter> + % if not sincavFirmware : + <parameter name="enableDoubleBuffering">DAQ.DOUBLE_BUF_ENA</parameter> + <parameter name="currentBufferNumber">DAQ.ACTIVE_BUF</parameter> + % else : + <parameter name="enableDoubleBuffering">DAQ.WORD_DUB_BUF_ENA</parameter> + <parameter name="currentBufferNumber">DAQ.WORD_DUB_BUF_CURR</parameter> + % endif + <parameter name="daqNumber"><par>amplPhaseDaq</par></parameter> + </plugin> + % endif </redirectedRegister> </module> @@ -223,26 +229,28 @@ <targetBit>${c}</targetBit> </redirectedBit> - <redirectedBit name="adcOverflow"> - <targetDevice><par>target</par></targetDevice> - % if not sincavFirmware : - <targetRegister>APP.${wordPrefix}ADC_OV</targetRegister> - % else : - <targetRegister>APP.${wordPrefix}ADC_OV_LATCH</targetRegister> - % endif - <targetBit>${c}</targetBit> - </redirectedBit> + % if not isSincavSel : + <redirectedBit name="adcOverflow"> + <targetDevice><par>target</par></targetDevice> + % if not sincavFirmware : + <targetRegister>APP.${wordPrefix}ADC_OV</targetRegister> + % else : + <targetRegister>APP.${wordPrefix}ADC_OV_LATCH</targetRegister> + % endif + <targetBit>${c}</targetBit> + </redirectedBit> - <redirectedRegister name="adcOverflowTime"> - <targetDevice><par>target</par></targetDevice> - <targetRegister>APP.${wordPrefix}ADC_OV_TIME</targetRegister> - <targetStartIndex>${c}</targetStartIndex> - <numberOfElements>1</numberOfElements> - <plugin name="math"> - <parameter name="formula"> x / samplingFreqAdc </parameter> - <parameter name="samplingFreqAdc">/ToControlSystem/Configuration/samplingFrequency</parameter> - </plugin> - </redirectedRegister> + <redirectedRegister name="adcOverflowTime"> + <targetDevice><par>target</par></targetDevice> + <targetRegister>APP.${wordPrefix}ADC_OV_TIME</targetRegister> + <targetStartIndex>${c}</targetStartIndex> + <numberOfElements>1</numberOfElements> + <plugin name="math"> + <parameter name="formula"> x / samplingFreqAdc </parameter> + <parameter name="samplingFreqAdc">/ToControlSystem/Configuration/samplingFrequency</parameter> + </plugin> + </redirectedRegister> + % endif <redirectedRegister name="attenuation"> <targetDevice>(subdevice?type=3regs&dataDelay=1000&device=<par>target</par>&address=${rtmModule}.${wordPrefix}ATT_SEL&data=${rtmModule}.${wordPrefix}ATT_VAL&status=${rtmModule}.${wordPrefix}ATT_STATUS&map=attenuators.map)</targetDevice> @@ -273,7 +281,7 @@ <redirectedRegister name="coefficients"> <targetDevice><par>target</par></targetDevice> - % if not sincavFirmware : + % if not sincavFirmware or isSincavSel : <targetRegister>FD.${wordPrefix}IIR_COEF</targetRegister> <targetStartIndex>${5*c}</targetStartIndex> <numberOfElements>5</numberOfElements> @@ -285,7 +293,7 @@ </module> <!-- Filter --> - % if not sincavFirmware : + % if not sincavFirmware or isSincavSel : <redirectedRegister name="adcFifoDelay"> <targetDevice><par>target</par></targetDevice> <targetRegister>BSP.ADC_DELAY</targetRegister> @@ -381,7 +389,7 @@ <module name="FirmwareSEUDetection"> - % if not sincavFirmware or FW_VER_CTRL >= version.parse("1.4.0") : + % if not sincavFirmware or FW_VER_CTRL >= version.parse("1.4.0") or isSincavSel : <redirectedRegister name="unrecoverableErrorDetectedRaw"> <targetDevice><par>target</par></targetDevice> @@ -678,16 +686,20 @@ % else : # sincavFirmware ==> - <redirectedRegister name="WORD_DAQ_MUX1"> - <targetDevice><par>target</par></targetDevice> - <targetRegister>DAQ.${wordPrefix}MUX_SEL</targetRegister> - <targetStartIndex>1</targetStartIndex> - <numberOfElements>1</numberOfElements> - <plugin name="math"> - <parameter name="formula">x == 1 ? 1 : 0</parameter> - </plugin> - <plugin name="typeHintModifier"><parameter name="type">uint8</parameter></plugin> - </redirectedRegister> + % if not isSincavSel : + + <redirectedRegister name="WORD_DAQ_MUX1"> + <targetDevice><par>target</par></targetDevice> + <targetRegister>DAQ.${wordPrefix}MUX_SEL</targetRegister> + <targetStartIndex>1</targetStartIndex> + <numberOfElements>1</numberOfElements> + <plugin name="math"> + <parameter name="formula">x == 1 ? 1 : 0</parameter> + </plugin> + <plugin name="typeHintModifier"><parameter name="type">uint8</parameter></plugin> + </redirectedRegister> + + % endif <redirectedRegister name="timingDividerAdc"> <targetDevice><par>target</par></targetDevice> diff --git a/llrfctrl6/templates/llrfctrl_controller.xlmap b/llrfctrl6/templates/llrfctrl_controller.xlmap index e76a24f..bd6eb67 100644 --- a/llrfctrl6/templates/llrfctrl_controller.xlmap +++ b/llrfctrl6/templates/llrfctrl_controller.xlmap @@ -8,6 +8,9 @@ hasMcavVm = ( INSTANCE_TYPE == InstanceType.mulcavStandAlone or INSTANCE_TYPE == # Boolean whether this is single-cavity firmware. isSincav = ( INSTANCE_TYPE == InstanceType.sincav ) +# Boolean whether this is scav self-excited-loop (SEL) firmware +isSincavSel = (FIRMWARE_PROJECT_CONTROLLER == 'llrf_scav_sel_sis8300ku') + # Number of regions for beam based feedback registers if FW_VER_CTRL >= version.parse("1.2.0") : nBbfRegions = 32 @@ -23,6 +26,17 @@ if FW_VER_CTRL >= version.parse("1.4.0") : daqbufModule="app_daq" daqbufName="DAQ_CTRL" +if isSincavSel : + daqbufModule="DAQ_MEM" + daqbufName="DAQ_CTRL" + + +wordPrefix="WORD_" +if isSincavSel: + wordPrefix="" +wordPrefixPredistorter="WORD_" + + %>\ <logicalNameMap> @@ -47,6 +61,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : - Error - FeedForward - FeedBack + - Self excited loop (SEL, only sincav-sel) - Output - LuenbergerObserver (only sincav) - Anomaly Detection (only mcav) @@ -79,8 +94,8 @@ if FW_VER_CTRL >= version.parse("1.4.0") : % if FW_VER_CTRL >= version.parse("1.4.0") : <plugin name="doubleBuffer"> <parameter name="secondBuffer">${daqbufModule}.${daqbufName}_BUF1</parameter> - <parameter name="enableDoubleBuffering">DAQ.WORD_DUB_BUF_ENA</parameter> - <parameter name="currentBufferNumber">DAQ.WORD_DUB_BUF_CURR</parameter> + <parameter name="enableDoubleBuffering">DAQ.${wordPrefix}DUB_BUF_ENA</parameter> + <parameter name="currentBufferNumber">DAQ.${wordPrefix}DUB_BUF_CURR</parameter> <parameter name="daqNumber">0</parameter> </plugin> % endif @@ -93,8 +108,8 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <numberOfElements>${pulseLength}</numberOfElements> <plugin name="doubleBuffer"> <parameter name="secondBuffer">${daqbufModule}.DAQ_ANODET_BUF1</parameter> - <parameter name="enableDoubleBuffering">DAQ.WORD_DUB_BUF_ENA</parameter> - <parameter name="currentBufferNumber">DAQ.WORD_DUB_BUF_CURR</parameter> + <parameter name="enableDoubleBuffering">DAQ.${wordPrefix}DUB_BUF_ENA</parameter> + <parameter name="currentBufferNumber">DAQ.${wordPrefix}DUB_BUF_CURR</parameter> <parameter name="daqNumber">2</parameter> </plugin> </redirectedRegister> @@ -149,18 +164,20 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="timingDividerTables"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>TIMING.WORD_DIVIDER_VALUE</targetRegister> - % if not isSincav : + <targetRegister>TIMING.${wordPrefix}DIVIDER_VALUE</targetRegister> + % if not isSincav and not isSincavSel : <targetStartIndex>5</targetStartIndex> - % else : + % elif not isSincavSel : <targetStartIndex>6</targetStartIndex> + % else : + <targetStartIndex>2</targetStartIndex> % endif <numberOfElements>1</numberOfElements> </redirectedRegister> <redirectedRegister name="timingDividerController"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>DAQ.WORD_STROBE_DIV</targetRegister> + <targetRegister>DAQ.${wordPrefix}STROBE_DIV</targetRegister> <targetStartIndex>0</targetStartIndex> <numberOfElements>1</numberOfElements> </redirectedRegister> @@ -250,16 +267,18 @@ if FW_VER_CTRL >= version.parse("1.4.0") : --> <module name="VectorSum"> - <module name="Calibration"> - <redirectedRegister name="sineTable"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_VS_ROT_IM</targetRegister> - </redirectedRegister> - <redirectedRegister name="cosineTable"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_VS_ROT_RE</targetRegister> - </redirectedRegister> - </module> + % if not isSincavSel: + <module name="Calibration"> + <redirectedRegister name="sineTable"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}VS_ROT_IM</targetRegister> + </redirectedRegister> + <redirectedRegister name="cosineTable"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}VS_ROT_RE</targetRegister> + </redirectedRegister> + </module> + % endif <module name="DAQ"> <redirectedChannel name="Q"> @@ -326,10 +345,12 @@ if FW_VER_CTRL >= version.parse("1.4.0") : ################################################################################################################ --> <module name="FeedForward"> - <redirectedRegister name="enable_actual"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.BIT_FF_ENA</targetRegister> - </redirectedRegister> + % if not isSincavSel : + <redirectedRegister name="enable_actual"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.BIT_FF_ENA</targetRegister> + </redirectedRegister> + % endif <module name="TableTotal"> <redirectedRegister name="Q"> @@ -447,10 +468,12 @@ if FW_VER_CTRL >= version.parse("1.4.0") : --> <module name="FeedBack"> - <redirectedRegister name="enable_actual"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.BIT_FB_ENA</targetRegister> - </redirectedRegister> + % if not isSincavSel : + <redirectedRegister name="enable_actual"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.BIT_FB_ENA</targetRegister> + </redirectedRegister> + % endif % if not isSincav : @@ -458,25 +481,25 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedBit name="outputAmplitudeLimit"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_CTRL_SAT_FB_OFF_EN</targetRegister> + <targetRegister>APP.${wordPrefix}CTRL_SAT_FB_OFF_EN</targetRegister> <targetBit>0</targetBit> </redirectedBit> <redirectedBit name="ovcSaturation"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_CTRL_SAT_FB_OFF_EN</targetRegister> + <targetRegister>APP.${wordPrefix}CTRL_SAT_FB_OFF_EN</targetRegister> <targetBit>1</targetBit> </redirectedBit> <redirectedBit name="ffFbSaturation"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_CTRL_SAT_FB_OFF_EN</targetRegister> + <targetRegister>APP.${wordPrefix}CTRL_SAT_FB_OFF_EN</targetRegister> <targetBit>2</targetBit> </redirectedBit> <redirectedBit name="ffFfcSaturation"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_CTRL_SAT_FB_OFF_EN</targetRegister> + <targetRegister>APP.${wordPrefix}CTRL_SAT_FB_OFF_EN</targetRegister> <targetBit>3</targetBit> </redirectedBit> @@ -484,30 +507,34 @@ if FW_VER_CTRL >= version.parse("1.4.0") : % endif # not isSincav - <redirectedRegister name="mimoEnable"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_MIMO_ENA</targetRegister> - </redirectedRegister> + % if not isSincavSel : - <redirectedRegister name="smithEnable"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_SMITH_ENA</targetRegister> - </redirectedRegister> + <redirectedRegister name="mimoEnable"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}MIMO_ENA</targetRegister> + </redirectedRegister> - <redirectedRegister name="smithDelay"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_SMITH_DELAY</targetRegister> - </redirectedRegister> + <redirectedRegister name="smithEnable"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}SMITH_ENA</targetRegister> + </redirectedRegister> - <redirectedRegister name="limitI"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_CNTRL_I_LIMIT</targetRegister> - </redirectedRegister> + <redirectedRegister name="smithDelay"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}SMITH_DELAY</targetRegister> + </redirectedRegister> - <redirectedRegister name="limitQ"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_CNTRL_Q_LIMIT</targetRegister> - </redirectedRegister> + <redirectedRegister name="limitI"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}CNTRL_I_LIMIT</targetRegister> + </redirectedRegister> + + <redirectedRegister name="limitQ"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}CNTRL_Q_LIMIT</targetRegister> + </redirectedRegister> + + %endif <module name="Gain"> @@ -578,86 +605,185 @@ if FW_VER_CTRL >= version.parse("1.4.0") : </module> <!-- Gain --> - <module name="MimoCoefficients"> - <redirectedRegister name="A11"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_MIMO_A11</targetRegister> - </redirectedRegister> - <redirectedRegister name="B11"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_MIMO_B11</targetRegister> - </redirectedRegister> - <redirectedRegister name="A12"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_MIMO_A12</targetRegister> - </redirectedRegister> - <redirectedRegister name="B12"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_MIMO_B12</targetRegister> - </redirectedRegister> - <redirectedRegister name="A21"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_MIMO_A21</targetRegister> - </redirectedRegister> - <redirectedRegister name="B21"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_MIMO_B21</targetRegister> - </redirectedRegister> - <redirectedRegister name="A22"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_MIMO_A22</targetRegister> - </redirectedRegister> - <redirectedRegister name="B22"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_MIMO_B22</targetRegister> - </redirectedRegister> - <redirectedRegister name="valid"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_MIMO_COEF_VALID</targetRegister> - </redirectedRegister> - </module> <!-- MimoCoefficients --> + % if not isSincavSel : - <module name="SmithCoefficients"> - <redirectedRegister name="A11"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_SMITH_A11</targetRegister> - </redirectedRegister> - <redirectedRegister name="B11"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_SMITH_B11</targetRegister> - </redirectedRegister> - <redirectedRegister name="A12"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_SMITH_A12</targetRegister> - </redirectedRegister> - <redirectedRegister name="B12"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_SMITH_B12</targetRegister> - </redirectedRegister> - <redirectedRegister name="A21"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_SMITH_A21</targetRegister> - </redirectedRegister> - <redirectedRegister name="B21"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_SMITH_B21</targetRegister> - </redirectedRegister> - <redirectedRegister name="A22"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_SMITH_A22</targetRegister> - </redirectedRegister> - <redirectedRegister name="B22"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_SMITH_B22</targetRegister> - </redirectedRegister> - <redirectedRegister name="valid"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>CTRL.WORD_SMITH_COEF_VALID</targetRegister> - </redirectedRegister> - </module> <!-- SmithCoefficients --> + <module name="MimoCoefficients"> + <redirectedRegister name="A11"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}MIMO_A11</targetRegister> + </redirectedRegister> + <redirectedRegister name="B11"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}MIMO_B11</targetRegister> + </redirectedRegister> + <redirectedRegister name="A12"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}MIMO_A12</targetRegister> + </redirectedRegister> + <redirectedRegister name="B12"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}MIMO_B12</targetRegister> + </redirectedRegister> + <redirectedRegister name="A21"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}MIMO_A21</targetRegister> + </redirectedRegister> + <redirectedRegister name="B21"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}MIMO_B21</targetRegister> + </redirectedRegister> + <redirectedRegister name="A22"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}MIMO_A22</targetRegister> + </redirectedRegister> + <redirectedRegister name="B22"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}MIMO_B22</targetRegister> + </redirectedRegister> + <redirectedRegister name="valid"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}MIMO_COEF_VALID</targetRegister> + </redirectedRegister> + </module> <!-- MimoCoefficients --> + + <module name="SmithCoefficients"> + <redirectedRegister name="A11"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}SMITH_A11</targetRegister> + </redirectedRegister> + <redirectedRegister name="B11"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}SMITH_B11</targetRegister> + </redirectedRegister> + <redirectedRegister name="A12"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}SMITH_A12</targetRegister> + </redirectedRegister> + <redirectedRegister name="B12"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}SMITH_B12</targetRegister> + </redirectedRegister> + <redirectedRegister name="A21"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}SMITH_A21</targetRegister> + </redirectedRegister> + <redirectedRegister name="B21"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}SMITH_B21</targetRegister> + </redirectedRegister> + <redirectedRegister name="A22"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}SMITH_A22</targetRegister> + </redirectedRegister> + <redirectedRegister name="B22"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}SMITH_B22</targetRegister> + </redirectedRegister> + <redirectedRegister name="valid"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.${wordPrefix}SMITH_COEF_VALID</targetRegister> + </redirectedRegister> + </module> <!-- SmithCoefficients --> + + % endif </module> <!-- FeedBack --> + <!-- + ################################################################################################################ + --> + % if isSincavSel : + <module name="FeedBackSincavSel"> + + <module name="SEL"> + + <redirectedRegister name="ENA"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.PHA_FB_ENA</targetRegister> + </redirectedRegister> + + <redirectedRegister name="PHASE_OFFSET"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.PHA_FB_OFFSET</targetRegister> + <plugin name="math"> + <parameter name="formula">x*(2^18)/360</parameter> + </plugin> + </redirectedRegister> + + </module> <!-- SEL --> + + <module name="GDR"> + + <module name="AMP"> + + <redirectedRegister name="FF_ENA"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.AMP_FF_ENA</targetRegister> + </redirectedRegister> + + <redirectedRegister name="SET_POINT"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.AMP_SET_POINT</targetRegister> + <plugin name="math"> + <parameter name="formula">x*bitScaling</parameter> + <parameter name="bitScaling">/ToControlSystem/Configuration/bitScaling</parameter> + <parameter name="enable_push_parameters"/> + </plugin> + </redirectedRegister> + + <redirectedRegister name="PID_ENA"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.AMP_PID_ENA</targetRegister> + </redirectedRegister> + <redirectedRegister name="PID_RST"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.AMP_PID_RST</targetRegister> + </redirectedRegister> + <redirectedRegister name="PID_KP"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.AMP_PID_KP</targetRegister> + </redirectedRegister> + <redirectedRegister name="PID_KI"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.AMP_PID_KI</targetRegister> + </redirectedRegister> + + </module> <!-- AMP --> + + <module name="PHA"> + + <redirectedRegister name="SET_POINT"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.PHA_SET_POINT</targetRegister> + <plugin name="math"> + <parameter name="formula">x*(2^18)/360</parameter> + </plugin> + </redirectedRegister> + + <redirectedRegister name="PID_ENA"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.PHA_PID_ENA</targetRegister> + </redirectedRegister> + <redirectedRegister name="PID_RST"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.PHA_PID_RST</targetRegister> + </redirectedRegister> + <redirectedRegister name="PID_KP"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.PHA_PID_KP</targetRegister> + </redirectedRegister> + <redirectedRegister name="PID_KI"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>CTRL.PHA_PID_KI</targetRegister> + </redirectedRegister> + + </module> <!-- PHA --> + + </module> <!-- GDR --> + + </module> <!-- FeedBackSincavSel --> + % endif + <!-- ################################################################################################################ --> @@ -666,11 +792,11 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <module name="Calibration"> <redirectedRegister name="sineTable"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>OVC.WORD_ROT_IM</targetRegister> + <targetRegister>OVC.${wordPrefix}ROT_IM</targetRegister> </redirectedRegister> <redirectedRegister name="cosineTable"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>OVC.WORD_ROT_RE</targetRegister> + <targetRegister>OVC.${wordPrefix}ROT_RE</targetRegister> </redirectedRegister> </module> <!-- (Output) Calibration --> @@ -689,7 +815,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="enable"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>OVC.WORD_DYN_ROT_EN</targetRegister> + <targetRegister>OVC.${wordPrefix}DYN_ROT_EN</targetRegister> </redirectedRegister> <redirectedBit name="bufferSelectI"> @@ -752,12 +878,12 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="limiterEnable"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>OUTPUT.WORD_AMP_LIMIT_ENA</targetRegister> + <targetRegister>OUTPUT.${wordPrefix}AMP_LIMIT_ENA</targetRegister> </redirectedRegister> <redirectedRegister name="limiter"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>OUTPUT.WORD_AMP_LIMIT</targetRegister> + <targetRegister>OUTPUT.${wordPrefix}AMP_LIMIT</targetRegister> <plugin name="math"> <parameter name="formula">x*bitScaling</parameter> <parameter name="bitScaling">/ToControlSystem/Configuration/bitScaling</parameter> @@ -908,9 +1034,9 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="attenuation"> % if hasMcavVm : <targetDevice>VmBoard</targetDevice> - <targetRegister>BSP.WORD_ATT_VAL</targetRegister> + <targetRegister>BSP.${wordPrefix}ATT_VAL</targetRegister> % else : - <targetDevice>(subdevice?type=3regs&dataDelay=1000&device=CtrlBoard&address=${ADCBOARD[0]["RTM_TYPE"]}.WORD_ATT_SEL&data=${ADCBOARD[0]["RTM_TYPE"]}.WORD_ATT_VAL&status=${ADCBOARD[0]["RTM_TYPE"]}.WORD_ATT_STATUS&map=attenuators.map)</targetDevice> + <targetDevice>(subdevice?type=3regs&dataDelay=1000&device=CtrlBoard&address=${ADCBOARD[0]["RTM_TYPE"]}.${wordPrefix}ATT_SEL&data=${ADCBOARD[0]["RTM_TYPE"]}.${wordPrefix}ATT_VAL&status=${ADCBOARD[0]["RTM_TYPE"]}.${wordPrefix}ATT_STATUS&map=attenuators.map)</targetDevice> <targetRegister>CHANNEL8</targetRegister> % endif <plugin name="math"><parameter name="formula">63 - 4*x</parameter></plugin> @@ -920,13 +1046,13 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <module name="DacOffset"> <redirectedRegister name="I"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>OUTPUT.WORD_DAC_OFFSET</targetRegister> + <targetRegister>OUTPUT.${wordPrefix}DAC_OFFSET</targetRegister> <targetStartIndex>0</targetStartIndex> <numberOfElements>1</numberOfElements> </redirectedRegister> <redirectedRegister name="Q"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>OUTPUT.WORD_DAC_OFFSET</targetRegister> + <targetRegister>OUTPUT.${wordPrefix}DAC_OFFSET</targetRegister> <targetStartIndex>1</targetStartIndex> <numberOfElements>1</numberOfElements> </redirectedRegister> @@ -934,20 +1060,20 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="gainCorrection"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>OVC.WORD_GAIN_CORR</targetRegister> + <targetRegister>OVC.${wordPrefix}GAIN_CORR</targetRegister> </redirectedRegister> - % if isSincav and ( ADCBOARD[0]['RTM_TYPE'] == 'DWC8VM1' or ADCBOARD[0]['RTM_TYPE'] == 'DS8VM1' ) : + % if isSincav and ( ADCBOARD[0]['RTM_TYPE'] == 'DWC8VM1' or ADCBOARD[0]['RTM_TYPE'] == 'DS8VM1' or ADCBOARD[0]['RTM_TYPE'] == 'RTM' ) : <module name="DacExtraBias"> % for name, index, AorB in ( ('I',0,'A'), ('Q',1,'B') ) : <redirectedRegister name="${name}"> <targetDevice>CtrlBoard</targetDevice> - % if ADCBOARD[0]['RTM_TYPE'] == 'DWC8VM1' : - <targetRegister>DWC8VM1.WORD_DAC</targetRegister> + % if ADCBOARD[0]['RTM_TYPE'] == 'DWC8VM1' or ADCBOARD[0]['RTM_TYPE'] == 'RTM' : + <targetRegister>${ADCBOARD[0]['RTM_TYPE']}.${wordPrefix}DAC</targetRegister> <targetStartIndex>${index}</targetStartIndex> <numberOfElements>1</numberOfElements> % else : - <targetRegister>DWC8VM1.WORD_DAC_${AorB}</targetRegister> + <targetRegister>${ADCBOARD[0]['RTM_TYPE']}.${wordPrefix}DAC_${AorB}</targetRegister> % endif <plugin name="math"> <parameter name="formula">x + base</parameter> @@ -962,18 +1088,18 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="qSign"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>OUTPUT.WORD_Q_SIGN</targetRegister> + <targetRegister>OUTPUT.${wordPrefix}Q_SIGN</targetRegister> </redirectedRegister> % if hasMcavVm : <redirectedRegister name="delay"> <targetDevice>VmBoard</targetDevice> - <targetRegister>BSP.WORD_DAC_DELAY</targetRegister> + <targetRegister>BSP.${wordPrefix}DAC_DELAY</targetRegister> </redirectedRegister> <redirectedBit name="enableUpsampling"> <targetDevice>VmBoard</targetDevice> - <targetRegister>BSP.WORD_APP_CTRL</targetRegister> + <targetRegister>BSP.${wordPrefix}APP_CTRL</targetRegister> <targetBit>0</targetBit> </redirectedBit> % endif @@ -984,19 +1110,19 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <targetRegister>PREDISTORTER.BIT_PREDISTORTER_ENA</targetRegister> </redirectedRegister> <redirectedRegister name="TABLE_BASE_I"> - <targetDevice>(subdevice?type=2regs&device=CtrlBoard&address=PREDISTORTER.WORD_PREDISTORTER_MEM_SEL&data=PREDISTORTER.AREA_PREDISTORTER_MEM&sleep=10000&map=predistorterTables.map)</targetDevice> + <targetDevice>(subdevice?type=2regs&device=CtrlBoard&address=PREDISTORTER.${wordPrefixPredistorter}PREDISTORTER_MEM_SEL&data=PREDISTORTER.AREA_PREDISTORTER_MEM&sleep=10000&map=predistorterTables.map)</targetDevice> <targetRegister>TABLE_BASE_I</targetRegister> </redirectedRegister> <redirectedRegister name="TABLE_BASE_Q"> - <targetDevice>(subdevice?type=2regs&device=CtrlBoard&address=PREDISTORTER.WORD_PREDISTORTER_MEM_SEL&data=PREDISTORTER.AREA_PREDISTORTER_MEM&sleep=10000&map=predistorterTables.map)</targetDevice> + <targetDevice>(subdevice?type=2regs&device=CtrlBoard&address=PREDISTORTER.${wordPrefixPredistorter}PREDISTORTER_MEM_SEL&data=PREDISTORTER.AREA_PREDISTORTER_MEM&sleep=10000&map=predistorterTables.map)</targetDevice> <targetRegister>TABLE_BASE_Q</targetRegister> </redirectedRegister> <redirectedRegister name="TABLE_DERIVATIVE_I"> - <targetDevice>(subdevice?type=2regs&device=CtrlBoard&address=PREDISTORTER.WORD_PREDISTORTER_MEM_SEL&data=PREDISTORTER.AREA_PREDISTORTER_MEM&sleep=10000&map=predistorterTables.map)</targetDevice> + <targetDevice>(subdevice?type=2regs&device=CtrlBoard&address=PREDISTORTER.${wordPrefixPredistorter}PREDISTORTER_MEM_SEL&data=PREDISTORTER.AREA_PREDISTORTER_MEM&sleep=10000&map=predistorterTables.map)</targetDevice> <targetRegister>TABLE_DERIVATIVE_I</targetRegister> </redirectedRegister> <redirectedRegister name="TABLE_DERIVATIVE_Q"> - <targetDevice>(subdevice?type=2regs&device=CtrlBoard&address=PREDISTORTER.WORD_PREDISTORTER_MEM_SEL&data=PREDISTORTER.AREA_PREDISTORTER_MEM&sleep=10000&map=predistorterTables.map)</targetDevice> + <targetDevice>(subdevice?type=2regs&device=CtrlBoard&address=PREDISTORTER.${wordPrefixPredistorter}PREDISTORTER_MEM_SEL&data=PREDISTORTER.AREA_PREDISTORTER_MEM&sleep=10000&map=predistorterTables.map)</targetDevice> <targetRegister>TABLE_DERIVATIVE_Q</targetRegister> </redirectedRegister> </module> @@ -1033,45 +1159,49 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <module name="Status"> - <!-- Pulse length / cuts reporting --> - <module name="ActualPulseLength"> - <redirectedRegister name="samples"> - <targetDevice>CtrlBoard</targetDevice> - % if not isSincav : - <targetRegister>APP.WORD_PULSE_LENGTH</targetRegister> - % else : - <targetRegister>APP.WORD_RF_OFF_TIME</targetRegister> - % endif - </redirectedRegister> + % if not isSincavSel : - <redirectedRegister name="time"> - <targetDevice>CtrlBoard</targetDevice> - % if not isSincav : - <targetRegister>APP.WORD_PULSE_LENGTH</targetRegister> - % else : - <targetRegister>APP.WORD_RF_OFF_TIME</targetRegister> - % endif - <plugin name="math"> - <parameter name="formula">x/fs</parameter> - <parameter name="fs">/ToControlSystem/Configuration/samplingFrequency</parameter> - </plugin> - </redirectedRegister> - </module> + <!-- Pulse length / cuts reporting --> + <module name="ActualPulseLength"> + <redirectedRegister name="samples"> + <targetDevice>CtrlBoard</targetDevice> + % if not isSincav : + <targetRegister>APP.${wordPrefix}PULSE_LENGTH</targetRegister> + % else : + <targetRegister>APP.${wordPrefix}RF_OFF_TIME</targetRegister> + % endif + </redirectedRegister> + + <redirectedRegister name="time"> + <targetDevice>CtrlBoard</targetDevice> + % if not isSincav : + <targetRegister>APP.${wordPrefix}PULSE_LENGTH</targetRegister> + % else : + <targetRegister>APP.${wordPrefix}RF_OFF_TIME</targetRegister> + % endif + <plugin name="math"> + <parameter name="formula">x/fs</parameter> + <parameter name="fs">/ToControlSystem/Configuration/samplingFrequency</parameter> + </plugin> + </redirectedRegister> + </module> + + % endif <!-- Controller status bit mask --> <redirectedRegister name="controllerStatus"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> </redirectedRegister> <redirectedRegister name="controllerStatusForOVC"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> </redirectedRegister> <redirectedRegister name="controllerStatusForLFF"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> </redirectedRegister> <constant name="bitmaskForInhibitAlgos"> @@ -1088,47 +1218,47 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <!-- Individual status bits --> <redirectedBit name="outputAmplitudeLimit"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>${ 0 if not isSincav else 4 }</targetBit> </redirectedBit> <redirectedBit name="controllerLimitI"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>${ 1 if not isSincav else 2 }</targetBit> </redirectedBit> <redirectedBit name="controllerLimitQ"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>${ 2 if not isSincav else 3 }</targetBit> </redirectedBit> <redirectedBit name="feedForwardSaturationI"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>${ 3 if not isSincav else 5 }</targetBit> </redirectedBit> <redirectedBit name="feedForwardSaturationQ"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>${ 4 if not isSincav else 6 }</targetBit> </redirectedBit> <redirectedBit name="gainSaturationI"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>${ 5 if not isSincav else 9 }</targetBit> </redirectedBit> <redirectedBit name="gainSaturationQ"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>${ 6 if not isSincav else 10 }</targetBit> </redirectedBit> <redirectedBit name="offsetCompensationSaturationI"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>7</targetBit> </redirectedBit> <redirectedBit name="offsetCompensationSaturationQ"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>8</targetBit> </redirectedBit> @@ -1136,102 +1266,102 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedBit name="masterFeedbackLinkNotOK"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>9</targetBit> </redirectedBit> <redirectedBit name="synchronisationNotOK"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>10</targetBit> </redirectedBit> <redirectedBit name="limitersModule1Probe"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>11</targetBit> </redirectedBit> <redirectedBit name="limitersModule2Probe"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>12</targetBit> </redirectedBit> <redirectedBit name="limitersModule1Forward"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>13</targetBit> </redirectedBit> <redirectedBit name="limitersModule2Forward"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>14</targetBit> </redirectedBit> <redirectedBit name="triggerLimitersModule1Probe"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>15</targetBit> </redirectedBit> <redirectedBit name="triggerLimitersModule2Probe"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>16</targetBit> </redirectedBit> <redirectedBit name="triggerLimitersModule1Forward"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>17</targetBit> </redirectedBit> <redirectedBit name="triggerLimitersModule2Forward"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>18</targetBit> </redirectedBit> <redirectedBit name="slaveFeedbackLinkNotOK"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>19</targetBit> </redirectedBit> <redirectedBit name="limitersModule3Probe"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>20</targetBit> </redirectedBit> <redirectedBit name="limitersModule4Probe"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>21</targetBit> </redirectedBit> <redirectedBit name="limitersModule3Forward"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>22</targetBit> </redirectedBit> <redirectedBit name="limitersModule4Forward"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>23</targetBit> </redirectedBit> <redirectedBit name="triggerLimitersModule3Probe"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>24</targetBit> </redirectedBit> <redirectedBit name="triggerLimitersModule4Probe"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>25</targetBit> </redirectedBit> <redirectedBit name="triggerLimitersModule3Forward"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>26</targetBit> </redirectedBit> <redirectedBit name="triggerLimitersModule4Forward"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>27</targetBit> </redirectedBit> <redirectedBit name="backplaneInterlockActive"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>31</targetBit> </redirectedBit> @@ -1239,32 +1369,32 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedBit name="limiters"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>0</targetBit> <plugin name="forceReadOnly"/> </redirectedBit> <redirectedBit name="prelimiters"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>1</targetBit> <plugin name="forceReadOnly"/> </redirectedBit> <redirectedBit name="fastProtectionActive"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>11</targetBit> <plugin name="forceReadOnly"/> </redirectedBit> <redirectedBit name="interlockLatcher"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> <targetBit>12</targetBit> <plugin name="forceReadOnly"/> </redirectedBit> <redirectedRegister name="externalInterlock"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>${ADCBOARD[0]["RTM_TYPE"]}.WORD_EXT_INTERLOCK</targetRegister> + <targetRegister>${ADCBOARD[0]["RTM_TYPE"]}.${wordPrefix}EXT_INTERLOCK</targetRegister> </redirectedRegister> % endif @@ -1289,23 +1419,23 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <!-- ################################################################################################################ --> - % if isSincav : + % if isSincav and not isSincavSel : <module name="InterlockLatcher"> <redirectedRegister name="ilockLatchEnable"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_INTERLOCK_LATCHER_ENA</targetRegister> + <targetRegister>APP.${wordPrefix}INTERLOCK_LATCHER_ENA</targetRegister> </redirectedRegister> <redirectedRegister name="ilockLatchStatus"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_INTERLOCK_LATCHER_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}INTERLOCK_LATCHER_STATUS</targetRegister> </redirectedRegister> <redirectedRegister name="ilockLatchReset"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_INTERLOCK_LATCHER_RESET</targetRegister> + <targetRegister>APP.${wordPrefix}INTERLOCK_LATCHER_RESET</targetRegister> </redirectedRegister> </module> <!-- InterlockLatcher --> @@ -1317,21 +1447,21 @@ if FW_VER_CTRL >= version.parse("1.4.0") : --> <module name="FirmwareSEUDetection"> - % if FW_VER_CTRL >= version.parse("1.4.0") : + % if FW_VER_CTRL >= version.parse("1.4.0") or isSincavSel : <redirectedRegister name="unrecoverableErrorDetectedRaw"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>FCM.WORD_CRC_ERROR</targetRegister> + <targetRegister>FCM.${wordPrefix}CRC_ERROR</targetRegister> <plugin name="typeHintModifier"><parameter name="type">uint32</parameter></plugin> </redirectedRegister> <redirectedRegister name="crcErrorSinceFpgaBoot"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>FCM.WORD_CRC_ERROR_CNT</targetRegister> + <targetRegister>FCM.${wordPrefix}CRC_ERROR_CNT</targetRegister> </redirectedRegister> <redirectedRegister name="eccFixedFramesSinceFpgaBoot"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>FCM.WORD_ECC_ERROR_CNT</targetRegister> + <targetRegister>FCM.${wordPrefix}ECC_ERROR_CNT</targetRegister> </redirectedRegister> % else : <redirectedRegister name="unrecoverableErrorDetectedRaw"> @@ -1367,16 +1497,16 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <module name="RfOffFastRamp"> <redirectedRegister name="enable"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>OUTPUT.WORD_RF_GATE_MODE</targetRegister> + <targetRegister>OUTPUT.${wordPrefix}RF_GATE_MODE</targetRegister> </redirectedRegister> <redirectedRegister name="stepsize"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>OUTPUT.WORD_RF_GATE_STEP</targetRegister> + <targetRegister>OUTPUT.${wordPrefix}RF_GATE_STEP</targetRegister> <plugin name="typeHintModifier"><parameter name="type">float64</parameter></plugin> </redirectedRegister> <redirectedRegister name="useHardwareRfGate"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_RTM_RF_GATE_ENA</targetRegister> + <targetRegister>APP.${wordPrefix}RTM_RF_GATE_ENA</targetRegister> </redirectedRegister> </module> @@ -1409,12 +1539,12 @@ if FW_VER_CTRL >= version.parse("1.4.0") : ################################################################################################################ --> - % if isSincav : + % if isSincav and not isSincavSel: <module name="FastProtection"> <redirectedRegister name="ENA"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_PROT_ENA_N</targetRegister> + <targetRegister>APP.${wordPrefix}PROT_ENA_N</targetRegister> <plugin name="math"> <parameter name="formula">not(x)</parameter> </plugin> @@ -1423,7 +1553,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="LIMIT_HIGH"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_PROT_PLEVA</targetRegister> + <targetRegister>APP.${wordPrefix}PROT_PLEVA</targetRegister> <plugin name="math"> <parameter name="formula">x*65536</parameter> </plugin> @@ -1431,7 +1561,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="LIMIT_LOW"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_PROT_PLEVB</targetRegister> + <targetRegister>APP.${wordPrefix}PROT_PLEVB</targetRegister> <plugin name="math"> <parameter name="formula">x*65536</parameter> </plugin> @@ -1439,7 +1569,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="SLOPE"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_PROT_PLEVS</targetRegister> + <targetRegister>APP.${wordPrefix}PROT_PLEVS</targetRegister> <plugin name="math"> <parameter name="formula">x*65536</parameter> </plugin> @@ -1447,7 +1577,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="START"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_PROT_T0</targetRegister> + <targetRegister>APP.${wordPrefix}PROT_T0</targetRegister> <plugin name="math"> <parameter name="formula">(x + delay + filling) * fs</parameter> <parameter name="delay">/ToControlSystem/Controller/PulseShape/delay</parameter> @@ -1459,7 +1589,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="STOP"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_PROT_T1</targetRegister> + <targetRegister>APP.${wordPrefix}PROT_T1</targetRegister> <plugin name="math"> <parameter name="formula">(x + delay + filling + flattop) * fs</parameter> <parameter name="delay">/ToControlSystem/Controller/PulseShape/delay</parameter> @@ -1472,7 +1602,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="THRESHOLD"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_PROT_FL_ENA</targetRegister> + <targetRegister>APP.${wordPrefix}PROT_FL_ENA</targetRegister> </redirectedRegister> <redirectedChannel name="LEVEL"> @@ -1502,7 +1632,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="FW_BOARD_VER_MAJOR"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BSP.WORD_PRJ_VERSION</targetRegister> + <targetRegister>BSP.${wordPrefix}PRJ_VERSION</targetRegister> <plugin name="math"> <parameter name="formula">floor(x / 2^24) % 256</parameter> </plugin> @@ -1511,7 +1641,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="FW_BOARD_VER_MINOR"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BSP.WORD_PRJ_VERSION</targetRegister> + <targetRegister>BSP.${wordPrefix}PRJ_VERSION</targetRegister> <plugin name="math"> <parameter name="formula">floor(x / 2^16) % 256</parameter> </plugin> @@ -1520,7 +1650,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="FW_BOARD_VER_PATCH"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BSP.WORD_PRJ_VERSION</targetRegister> + <targetRegister>BSP.${wordPrefix}PRJ_VERSION</targetRegister> <plugin name="math"> <parameter name="formula">floor(x / 2^8) % 256</parameter> </plugin> @@ -1529,7 +1659,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="FW_BOARD_VER_COMMIT"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BSP.WORD_PRJ_VERSION</targetRegister> + <targetRegister>BSP.${wordPrefix}PRJ_VERSION</targetRegister> <plugin name="math"> <parameter name="formula">x % 256</parameter> </plugin> @@ -1538,7 +1668,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="fpgaClockError"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BSP.WORD_CLK_ERR</targetRegister> + <targetRegister>BSP.${wordPrefix}CLK_ERR</targetRegister> % if hasMcavVm : <plugin name="math"> <parameter name="formula">x or uvmError</parameter> @@ -1551,19 +1681,19 @@ if FW_VER_CTRL >= version.parse("1.4.0") : % if hasMcavVm : <redirectedRegister name="fpgaClockError_vm"> <targetDevice>VmBoard</targetDevice> - <targetRegister>BSP.WORD_CLK_ERROR</targetRegister> + <targetRegister>BSP.${wordPrefix}CLK_ERROR</targetRegister> </redirectedRegister> % endif % if not isSincav : <redirectedBit name="fpgaClockError_NoExtClock"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BSP.WORD_CLK_ERR</targetRegister> + <targetRegister>BSP.${wordPrefix}CLK_ERR</targetRegister> <targetBit>0</targetBit> </redirectedBit> <redirectedBit name="fpgaClockError_NoPllLock"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BSP.WORD_CLK_ERR</targetRegister> + <targetRegister>BSP.${wordPrefix}CLK_ERR</targetRegister> <targetBit>1</targetBit> </redirectedBit> % endif @@ -1571,7 +1701,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : % if not isSincav : <redirectedBit name="BOARD_CRYO1_ENA"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_CRYO_MODULE_ENA</targetRegister> + <targetRegister>APP.${wordPrefix}CRYO_MODULE_ENA</targetRegister> <targetBit>0</targetBit> <plugin name="forceReadOnly"/> <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> <!-- see #9747 --> @@ -1579,7 +1709,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedBit name="BOARD_CRYO2_ENA"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_CRYO_MODULE_ENA</targetRegister> + <targetRegister>APP.${wordPrefix}CRYO_MODULE_ENA</targetRegister> <targetBit>1</targetBit> <plugin name="forceReadOnly"/> <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> <!-- see #9747 --> @@ -1588,7 +1718,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : % if hasMcavVm : <redirectedRegister name="BOARD_RESET_VMGTP"> <targetDevice>VmBoard</targetDevice> - <targetRegister>BSP.WORD_GTP_RESET</targetRegister> + <targetRegister>BSP.${wordPrefix}GTP_RESET</targetRegister> <plugin name="monostableTrigger"> <parameter name="milliseconds">5</parameter> </plugin> @@ -1598,7 +1728,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="BOARD_RESET_N"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BSP.WORD_RESET_N</targetRegister> + <targetRegister>BSP.${wordPrefix}RESET_N</targetRegister> <plugin name="monostableTrigger"> <parameter name="milliseconds">5</parameter> <parameter name="active">0</parameter> @@ -1609,7 +1739,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="MS_MASTER_MODE"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_MASTER_MODE</targetRegister> + <targetRegister>APP.${wordPrefix}MASTER_MODE</targetRegister> <plugin name="forceReadOnly"/> <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> <!-- see #9747 --> </redirectedRegister> @@ -1617,7 +1747,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedBit name="PVS_NORM_WITHIN_CRATE"> <!-- Note: maybe this register should be removed once the feature is tested and shall be permanently enabled! --> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_PVS_NORM</targetRegister> + <targetRegister>APP.${wordPrefix}PVS_NORM</targetRegister> <targetBit>0</targetBit> <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> <!-- see #9747 --> </redirectedBit> @@ -1625,7 +1755,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedBit name="PVS_NORM_MASTER_SLAVE"> <!-- Note: maybe this register should be removed once the feature is tested and shall be permanently enabled! --> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_PVS_NORM</targetRegister> + <targetRegister>APP.${wordPrefix}PVS_NORM</targetRegister> <targetBit>1</targetBit> <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> <!-- see #9747 --> </redirectedBit> @@ -1634,21 +1764,21 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <module name="WITHIN_CRATE"> <redirectedRegister name="STATUS"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_ALIGN_CAV_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}ALIGN_CAV_STATUS</targetRegister> </redirectedRegister> <redirectedRegister name="ARRIVAL_TIME"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_ALIGN_CAV_ARR_MON</targetRegister> + <targetRegister>APP.${wordPrefix}ALIGN_CAV_ARR_MON</targetRegister> </redirectedRegister> </module> <module name="MASTER_SLAVE"> <redirectedRegister name="STATUS"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_ALIGN_MS_STATUS</targetRegister> + <targetRegister>APP.${wordPrefix}ALIGN_MS_STATUS</targetRegister> </redirectedRegister> <redirectedRegister name="ARRIVAL_TIME"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_ALIGN_MS_ARR_MON</targetRegister> + <targetRegister>APP.${wordPrefix}ALIGN_MS_ARR_MON</targetRegister> </redirectedRegister> </module> </module> @@ -1656,7 +1786,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : % for index in range(0,24) : <redirectedRegister name="LLL_STATUS_${index}"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BSP.WORD_LLL_STATUS</targetRegister> + <targetRegister>BSP.${wordPrefix}LLL_STATUS</targetRegister> <numberOfElements>1</numberOfElements> <targetStartIndex>${index}</targetStartIndex> </redirectedRegister> @@ -1674,7 +1804,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : % if not isSincav : <redirectedBit name="bootStatus"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BSP.WORD_BOOT_STATUS</targetRegister> + <targetRegister>BSP.${wordPrefix}BOOT_STATUS</targetRegister> <targetBit>0</targetBit> <plugin name="typeHintModifier"><parameter name="type">Boolean</parameter></plugin> </redirectedBit> @@ -1713,7 +1843,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <module name="ENABLE"> <redirectedBit name="TRAIN_${train+1}"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_TRAIN_ENA</targetRegister> + <targetRegister>BLC.${wordPrefix}TRAIN_ENA</targetRegister> <targetBit>${train}</targetBit> </redirectedBit> </module> @@ -1721,61 +1851,61 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="X2T_BUNCH_DEST_MASK"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>X2TSDR.WORD_BUNCH_DEST_MASK</targetRegister> + <targetRegister>X2TSDR.${wordPrefix}BUNCH_DEST_MASK</targetRegister> </redirectedRegister> <module name="CHARGE"> <redirectedRegister name="SOURCE"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_CHARGE_SRC</targetRegister> + <targetRegister>BLC.${wordPrefix}CHARGE_SRC</targetRegister> </redirectedRegister> <module name="PRECOMP"> <redirectedRegister name="SOURCE"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_CHARGE_PRED_SRC</targetRegister> + <targetRegister>BLC.${wordPrefix}CHARGE_PRED_SRC</targetRegister> </redirectedRegister> <redirectedRegister name="SELECT"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_CHARGE_PRE_SEL</targetRegister> + <targetRegister>BLC.${wordPrefix}CHARGE_PRE_SEL</targetRegister> <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> </redirectedRegister> </module> <redirectedRegister name="THRESHOLD"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_CHARGE_THR</targetRegister> + <targetRegister>BLC.${wordPrefix}CHARGE_THR</targetRegister> </redirectedRegister> <redirectedRegister name="KEEP_VALUE"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_CHARGE_KEEP_VAL</targetRegister> + <targetRegister>BLC.${wordPrefix}CHARGE_KEEP_VAL</targetRegister> </redirectedRegister> <redirectedRegister name="KEEP_PRE_VALUE"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_CHARGE_KEEP_PRE_VAL</targetRegister> + <targetRegister>BLC.${wordPrefix}CHARGE_KEEP_PRE_VAL</targetRegister> </redirectedRegister> <module name="SCALE"> <redirectedRegister name="SELECT"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_SCALE_SEL</targetRegister> + <targetRegister>BLC.${wordPrefix}SCALE_SEL</targetRegister> <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> </redirectedRegister> <redirectedRegister name="SINGLE_VALUE"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_SCALE_REG</targetRegister> + <targetRegister>BLC.${wordPrefix}SCALE_REG</targetRegister> <plugin name="typeHintModifier"><parameter name="type">float64</parameter></plugin> </redirectedRegister> <redirectedRegister name="PER_BUNCH_SPACING"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_SCALE_TAB</targetRegister> + <targetRegister>BLC.${wordPrefix}SCALE_TAB</targetRegister> </redirectedRegister> </module> % if FW_VER_CTRL >= version.parse("1.7.0") : <redirectedRegister name="NO_KEEP_LAST"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_CHARGE_NO_KEEP_LAST</targetRegister> + <targetRegister>BLC.${wordPrefix}CHARGE_NO_KEEP_LAST</targetRegister> </redirectedRegister> % else : <variable name="NO_KEEP_LAST"> @@ -1792,21 +1922,21 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedBit name="enable"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_LIMIT_EN</targetRegister> + <targetRegister>BLC.${wordPrefix}LIMIT_EN</targetRegister> <targetBit>0</targetBit> <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> <!-- see #9747 --> </redirectedBit> <redirectedBit name="status"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_LIMIT_STATUS</targetRegister> + <targetRegister>BLC.${wordPrefix}LIMIT_STATUS</targetRegister> <targetBit>0</targetBit> <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> </redirectedBit> <redirectedRegister name="max"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_AMP_LIMIT</targetRegister> + <targetRegister>BLC.${wordPrefix}AMP_LIMIT</targetRegister> <plugin name="math"> <parameter name="formula">x*bitScaling</parameter> <parameter name="bitScaling">/ToControlSystem/Configuration/bitScaling</parameter> @@ -1820,41 +1950,41 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedBit name="enable"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_LIMIT_EN</targetRegister> + <targetRegister>BLC.${wordPrefix}LIMIT_EN</targetRegister> <targetBit>1</targetBit> <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> <!-- see #9747 --> </redirectedBit> <redirectedBit name="statusMax"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_LIMIT_STATUS</targetRegister> + <targetRegister>BLC.${wordPrefix}LIMIT_STATUS</targetRegister> <targetBit>1</targetBit> <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> </redirectedBit> <redirectedBit name="statusMin"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_LIMIT_STATUS</targetRegister> + <targetRegister>BLC.${wordPrefix}LIMIT_STATUS</targetRegister> <targetBit>2</targetBit> <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> </redirectedBit> <redirectedRegister name="maxCosine"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_COS_PHA_MAX</targetRegister> + <targetRegister>BLC.${wordPrefix}COS_PHA_MAX</targetRegister> </redirectedRegister> <redirectedRegister name="maxSine"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_SIN_PHA_MAX</targetRegister> + <targetRegister>BLC.${wordPrefix}SIN_PHA_MAX</targetRegister> </redirectedRegister> <redirectedRegister name="minCosine"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_COS_PHA_MIN</targetRegister> + <targetRegister>BLC.${wordPrefix}COS_PHA_MIN</targetRegister> </redirectedRegister> <redirectedRegister name="minSine"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_SIN_PHA_MIN</targetRegister> + <targetRegister>BLC.${wordPrefix}SIN_PHA_MIN</targetRegister> </redirectedRegister> </module> @@ -1864,26 +1994,26 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <module name="PulseShape"> <redirectedRegister name="pulseStopAbsolute"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_PULSE_STOP_TIME</targetRegister> + <targetRegister>APP.${wordPrefix}PULSE_STOP_TIME</targetRegister> </redirectedRegister> <redirectedRegister name="beamStartAbsolute"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_BEAM_START_TIME</targetRegister> + <targetRegister>APP.${wordPrefix}BEAM_START_TIME</targetRegister> </redirectedRegister> <redirectedRegister name="beamStopAbsolute"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_BEAM_STOP_TIME</targetRegister> + <targetRegister>APP.${wordPrefix}BEAM_STOP_TIME</targetRegister> </redirectedRegister> </module> <module name="Rotation"> <redirectedRegister name="cosineTable"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_ROT_I</targetRegister> + <targetRegister>BLC.${wordPrefix}ROT_I</targetRegister> </redirectedRegister> <redirectedRegister name="sineTable"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BLC.WORD_ROT_Q</targetRegister> + <targetRegister>BLC.${wordPrefix}ROT_Q</targetRegister> </redirectedRegister> </module> @@ -1970,29 +2100,29 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="ENA"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_ENABLE</targetRegister> + <targetRegister>BBF.${wordPrefix}ENABLE</targetRegister> </redirectedRegister> <module name="MATRIX"> <redirectedRegister name="A11"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_MAT_A11</targetRegister> + <targetRegister>BBF.${wordPrefix}MAT_A11</targetRegister> <plugin name="typeHintModifier"><parameter name="type">float64</parameter></plugin> </redirectedRegister> <redirectedRegister name="A12"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_MAT_A12</targetRegister> + <targetRegister>BBF.${wordPrefix}MAT_A12</targetRegister> <plugin name="typeHintModifier"><parameter name="type">float64</parameter></plugin> </redirectedRegister> <redirectedRegister name="A21"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_MAT_A21</targetRegister> + <targetRegister>BBF.${wordPrefix}MAT_A21</targetRegister> <plugin name="typeHintModifier"><parameter name="type">float64</parameter></plugin> </redirectedRegister> <redirectedRegister name="A22"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_MAT_A22</targetRegister> + <targetRegister>BBF.${wordPrefix}MAT_A22</targetRegister> <plugin name="typeHintModifier"><parameter name="type">float64</parameter></plugin> </redirectedRegister> @@ -2001,12 +2131,12 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <module name="AMPL"> <redirectedRegister name="LIMIT"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_AMP_LIMIT</targetRegister> + <targetRegister>BBF.${wordPrefix}AMP_LIMIT</targetRegister> </redirectedRegister> % if FW_VER_CTRL >= version.parse("1.7.0") : <redirectedRegister name="LIMIT_ACT"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_AMP_LIMIT_ACT</targetRegister> + <targetRegister>BBF.${wordPrefix}AMP_LIMIT_ACT</targetRegister> <numberOfElements>${16 if enablePerBunchSetpoints else 1}</numberOfElements> <!-- must match nMaxBeamRegions in base config --> </redirectedRegister> % endif @@ -2015,7 +2145,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <module name="PHASE"> <redirectedRegister name="LIMIT"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_PHA_LIMIT</targetRegister> + <targetRegister>BBF.${wordPrefix}PHA_LIMIT</targetRegister> <plugin name="math"> <parameter name="formula"> for ( var i:=0; i < x[]; i+=1 ){ @@ -2028,7 +2158,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : % if FW_VER_CTRL >= version.parse("1.7.0") : <redirectedRegister name="LIMIT_ACT"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_PHA_LIMIT_ACT</targetRegister> + <targetRegister>BBF.${wordPrefix}PHA_LIMIT_ACT</targetRegister> <numberOfElements>${16 if enablePerBunchSetpoints else 1}</numberOfElements> <!-- must match nMaxBeamRegions in base config --> </redirectedRegister> % endif @@ -2037,7 +2167,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : % if FW_VER_CTRL >= version.parse("1.7.0") : <redirectedRegister name="LIMIT_RESET_INTERNAL"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_LIMIT_RST</targetRegister> + <targetRegister>BBF.${wordPrefix}LIMIT_RST</targetRegister> <plugin name="typeHintModifier"><parameter name="type">Void</parameter></plugin> </redirectedRegister> % endif @@ -2045,57 +2175,57 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="BAM_SP"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_BAM_SP</targetRegister> + <targetRegister>BBF.${wordPrefix}BAM_SP</targetRegister> </redirectedRegister> <redirectedRegister name="GAIN"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_GAIN</targetRegister> + <targetRegister>BBF.${wordPrefix}GAIN</targetRegister> <plugin name="typeHintModifier"><parameter name="type">float64</parameter></plugin> </redirectedRegister> <redirectedRegister name="BCM_SP"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_BCM_SP</targetRegister> + <targetRegister>BBF.${wordPrefix}BCM_SP</targetRegister> </redirectedRegister> % if FW_VER_CTRL >= version.parse("1.7.0") : <redirectedRegister name="CHARGE_GATE_DELAY"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_CHARGE_GATE_DELAY</targetRegister> + <targetRegister>BBF.${wordPrefix}CHARGE_GATE_DELAY</targetRegister> </redirectedRegister> <redirectedRegister name="CHARGE_GATE_THRESHOLD"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_CHARGE_GATE_THR</targetRegister> + <targetRegister>BBF.${wordPrefix}CHARGE_GATE_THR</targetRegister> </redirectedRegister> <redirectedRegister name="MIN_CHARGE"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_CHARGE_THR</targetRegister> + <targetRegister>BBF.${wordPrefix}CHARGE_THR</targetRegister> </redirectedRegister> <redirectedRegister name="MIN_CHARGE_SOURCE"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_CHARGE_THR_SRC</targetRegister> + <targetRegister>BBF.${wordPrefix}CHARGE_THR_SRC</targetRegister> </redirectedRegister> <redirectedRegister name="GATE_RAMP_ENA"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_GATE_RAMP_ENA</targetRegister> + <targetRegister>BBF.${wordPrefix}GATE_RAMP_ENA</targetRegister> </redirectedRegister> <redirectedRegister name="GATE_RAMP_STEP"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_GATE_RAMP_STEP</targetRegister> + <targetRegister>BBF.${wordPrefix}GATE_RAMP_STEP</targetRegister> </redirectedRegister> % else : <redirectedRegister name="CHARGE_GATE_DELAY"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_CHARGE_DELAY</targetRegister> + <targetRegister>BBF.${wordPrefix}CHARGE_DELAY</targetRegister> </redirectedRegister> <redirectedRegister name="CHARGE_GATE_THRESHOLD"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_CHARGE_THR</targetRegister> + <targetRegister>BBF.${wordPrefix}CHARGE_THR</targetRegister> <plugin name="typeHintModifier"><parameter name="type">float32</parameter></plugin> </redirectedRegister> % endif <redirectedRegister name="CHARGE_GATE_MODE"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBF.WORD_CHARGE_GATE_MODE</targetRegister> + <targetRegister>BBF.${wordPrefix}CHARGE_GATE_MODE</targetRegister> </redirectedRegister> <module name="OUT"> @@ -2179,32 +2309,32 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="ENA_0"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBFSC.WORD_BBFSC_ENA</targetRegister> + <targetRegister>BBFSC.${wordPrefix}BBFSC_ENA</targetRegister> </redirectedRegister> <redirectedRegister name="BAM_THRESHOLD"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBFSC.WORD_BAM_THR</targetRegister> + <targetRegister>BBFSC.${wordPrefix}BAM_THR</targetRegister> </redirectedRegister> <redirectedRegister name="BAM_SP_0"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBFSC.WORD_BAM_SP</targetRegister> + <targetRegister>BBFSC.${wordPrefix}BAM_SP</targetRegister> </redirectedRegister> <redirectedRegister name="KP_I"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBFSC.WORD_BAM_KP_I</targetRegister> + <targetRegister>BBFSC.${wordPrefix}BAM_KP_I</targetRegister> </redirectedRegister> <redirectedRegister name="KP_Q"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBFSC.WORD_BAM_KP_Q</targetRegister> + <targetRegister>BBFSC.${wordPrefix}BAM_KP_Q</targetRegister> </redirectedRegister> <redirectedRegister name="BUNCH_SPACE"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>BBFSC.WORD_BUNCH_SPACE</targetRegister> + <targetRegister>BBFSC.${wordPrefix}BUNCH_SPACE</targetRegister> </redirectedRegister> </module> <!-- BeamBasedFeedback --> @@ -2225,7 +2355,7 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <module name="${element}"> <redirectedRegister name="${REorIM}"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>FWD_REFL_DECOUPLER.WORD_${element}_${IorQ}</targetRegister> + <targetRegister>FWD_REFL_DECOUPLER.${wordPrefix}${element}_${IorQ}</targetRegister> </redirectedRegister> </module> % endfor @@ -2246,17 +2376,17 @@ if FW_VER_CTRL >= version.parse("1.4.0") : <redirectedRegister name="probeChannel"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_PIEZO_PRO_SEL</targetRegister> + <targetRegister>APP.${wordPrefix}PIEZO_PRO_SEL</targetRegister> </redirectedRegister> <redirectedRegister name="forwardChannel"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_PIEZO_FOR_SEL</targetRegister> + <targetRegister>APP.${wordPrefix}PIEZO_FOR_SEL</targetRegister> </redirectedRegister> <redirectedRegister name="reflectedChannel"> <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.WORD_PIEZO_REF_SEL</targetRegister> + <targetRegister>APP.${wordPrefix}PIEZO_REF_SEL</targetRegister> </redirectedRegister> </module> <!-- SincavChannelAssignment --> -- GitLab From ef166f01202696f122dd3db9a4eecf13c26f77df Mon Sep 17 00:00:00 2001 From: Martin Hierholzer <martin.hierholzer@desy.de> Date: Tue, 3 Dec 2024 11:03:53 +0100 Subject: [PATCH 2/5] feat: publish calibration values via ZMQ (#13746) This is required for the diagnostic server. --- .../llrfctrl-DoocsVariableConfig.xml | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/llrfctrl6/templates/llrfctrl-DoocsVariableConfig.xml b/llrfctrl6/templates/llrfctrl-DoocsVariableConfig.xml index 1170561..664f25a 100644 --- a/llrfctrl6/templates/llrfctrl-DoocsVariableConfig.xml +++ b/llrfctrl6/templates/llrfctrl-DoocsVariableConfig.xml @@ -1557,7 +1557,9 @@ </location> <location name="MAIN.${MAIN_LOCATION_SUFFIX}"> - <property name="QL" source="/Configuration/QLoaded"/> + <property name="QL" source="/Configuration/QLoaded"> + <publish_ZMQ>true</publish_ZMQ> + </property> <property name="QL_SP_FUDGE" source="/Configuration/QLoadedFudge"/> <property name="PHASEMODULATION.SEL" source="/Controller/PhaseModulation/FeedForward/functionSelect"/> @@ -1971,8 +1973,12 @@ </property> <property name="PROBE.PHASE.SAMPLE" source="/AdcBoard${IDX_PROB_CM[M]}/Channel${C}/Samples/phase" type="float"/> - <property name="PROBE.CAL_SCA" source="/AdcBoard${IDX_PROB_CM[M]}/Channel${C}/Calibration/scale" type="float"/> - <property name="PROBE.CAL_ROT" source="/AdcBoard${IDX_PROB_CM[M]}/Channel${C}/Calibration/angle" type="float"/> + <property name="PROBE.CAL_SCA" source="/AdcBoard${IDX_PROB_CM[M]}/Channel${C}/Calibration/scale" type="float"> + <publish_ZMQ>true</publish_ZMQ> + </property> + <property name="PROBE.CAL_ROT" source="/AdcBoard${IDX_PROB_CM[M]}/Channel${C}/Calibration/angle" type="float"> + <publish_ZMQ>true</publish_ZMQ> + </property> <property name="PROBE.AMPL.LIMITER" source="/AdcBoard${IDX_PROB_CM[M]}/Channel${C}/limiter"/> <property name="PROBE.AMPL.PRE_LIMITER" source="/AdcBoard${IDX_PROB_CM[M]}/Channel${C}/prelimiter"/> <property name="PROBE.LIMIT.ENA" source="/AdcBoard${IDX_PROB_CM[M]}/Channel${C}/limiterEnable"/> @@ -2012,8 +2018,12 @@ <property name="PFORW.PEAK" source="/AdcBoard${IDX_FORW_CM[M]}/Channel${C}/peakPowerFlattop" type="float"/> <property name="PFORW.PEAK.FILL" source="/AdcBoard${IDX_FORW_CM[M]}/Channel${C}/peakPowerFilling" type="float"/> - <property name="VFORW.CAL_SCA" source="/AdcBoard${IDX_FORW_CM[M]}/Channel${C}/Calibration/scale" type="float"/> - <property name="VFORW.CAL_ROT" source="/AdcBoard${IDX_FORW_CM[M]}/Channel${C}/Calibration/angle" type="float"/> + <property name="VFORW.CAL_SCA" source="/AdcBoard${IDX_FORW_CM[M]}/Channel${C}/Calibration/scale" type="float"> + <publish_ZMQ>true</publish_ZMQ> + </property> + <property name="VFORW.CAL_ROT" source="/AdcBoard${IDX_FORW_CM[M]}/Channel${C}/Calibration/angle" type="float"> + <publish_ZMQ>true</publish_ZMQ> + </property> <property name="VFORW.AMPL.LIMITER" source="/AdcBoard${IDX_FORW_CM[M]}/Channel${C}/limiter"/> <property name="VFORW.AMPL.PRE_LIMITER" source="/AdcBoard${IDX_FORW_CM[M]}/Channel${C}/prelimiter"/> <property name="VFORW.LIMIT.ENA" source="/AdcBoard${IDX_FORW_CM[M]}/Channel${C}/limiterEnable"/> @@ -2058,8 +2068,12 @@ <property name="PREFL.PEAK" source="/AdcBoard${IDX_REFL_CM[M]}/Channel${C}/peakPowerFlattop" type="float"/> <property name="PREFL.PEAK.FILL" source="/AdcBoard${IDX_REFL_CM[M]}/Channel${C}/peakPowerFilling" type="float"/> - <property name="VREFL.CAL_SCA" source="/AdcBoard${IDX_REFL_CM[M]}/Channel${C}/Calibration/scale" type="float"/> - <property name="VREFL.CAL_ROT" source="/AdcBoard${IDX_REFL_CM[M]}/Channel${C}/Calibration/angle" type="float"/> + <property name="VREFL.CAL_SCA" source="/AdcBoard${IDX_REFL_CM[M]}/Channel${C}/Calibration/scale" type="float"> + <publish_ZMQ>true</publish_ZMQ> + </property> + <property name="VREFL.CAL_ROT" source="/AdcBoard${IDX_REFL_CM[M]}/Channel${C}/Calibration/angle" type="float"> + <publish_ZMQ>true</publish_ZMQ> + </property> <property name="VREFL.AMPL.LIMITER" source="/AdcBoard${IDX_REFL_CM[M]}/Channel${C}/limiter"/> <property name="VREFL.AMPL.PRE_LIMITER" source="/AdcBoard${IDX_REFL_CM[M]}/Channel${C}/prelimiter"/> <property name="VREFL.LIMIT.ENA" source="/AdcBoard${IDX_REFL_CM[M]}/Channel${C}/limiterEnable"/> -- GitLab From c8807fbb463669d0e483e7645124f9900b5bbf4a Mon Sep 17 00:00:00 2001 From: Martin Hierholzer <martin.hierholzer@desy.de> Date: Thu, 5 Dec 2024 09:10:30 +0100 Subject: [PATCH 3/5] chore: eliminate FULL_STATION_NAME (#9432) --- llrfctrl6-opcua/baseconfig.py | 1 - llrfctrl6/baseconfig.py | 13 +--- llrfctrl6/settings/FACILITY.XFEL.py | 3 - llrfctrl6/templates/llrfctrl_controller.xlmap | 2 +- llrfctrl6/tests/Devices.py | 24 +++---- llrfctrl6/tests/Tests.py | 62 ------------------- 6 files changed, 14 insertions(+), 91 deletions(-) delete mode 100644 llrfctrl6/tests/Tests.py diff --git a/llrfctrl6-opcua/baseconfig.py b/llrfctrl6-opcua/baseconfig.py index 4cc5e14..d11f387 100644 --- a/llrfctrl6-opcua/baseconfig.py +++ b/llrfctrl6-opcua/baseconfig.py @@ -4,7 +4,6 @@ global INSTANCE_TYPE INSTANCE_TYPE=InstanceType.sincav (ACCELERATOR,STATION)=INSTANCE_CONFIG -FULL_STATION_NAME=STATION MASTER_OR_SLAVE = "" IS_MASTER_SLAVE=0 diff --git a/llrfctrl6/baseconfig.py b/llrfctrl6/baseconfig.py index 94aa72f..e58e4a6 100644 --- a/llrfctrl6/baseconfig.py +++ b/llrfctrl6/baseconfig.py @@ -12,23 +12,12 @@ if len(INSTANCE_CONFIG) == 3 : INSTANCE_TYPE=InstanceType.mulcavSlave else : raise NameError("Wrong value for 3rd component in INSTANCE_CONFIG: "+str(MASTER_OR_SLAVE)) + del MASTER_OR_SLAVE else : (ACCELERATOR,STATION)=INSTANCE_CONFIG - MASTER_OR_SLAVE="" # Note: This might later be changed into sincav INSTANCE_TYPE=InstanceType.mulcavStandAlone - -# Remove this later... -if ACCELERATOR == 'XFEL' : - FULL_STATION_NAME= 'A' + STATION + MASTER_OR_SLAVE -elif (ACCELERATOR == 'FLASH') and STATION[:1].isnumeric() : - FULL_STATION_NAME= 'ACC' + STATION -else : - FULL_STATION_NAME=STATION - -del MASTER_OR_SLAVE - # Base configuration for all instances EXECUTABLE_IN_PACKAGE="/export/doocs/server/llrfCtrl_server/llrfCtrl_server" MAKE_EXECUTABLE="initHardware.py deploy_firmware.py" diff --git a/llrfctrl6/settings/FACILITY.XFEL.py b/llrfctrl6/settings/FACILITY.XFEL.py index e820ed5..616a7ad 100644 --- a/llrfctrl6/settings/FACILITY.XFEL.py +++ b/llrfctrl6/settings/FACILITY.XFEL.py @@ -164,7 +164,6 @@ if ACCELERATOR == "XFEL": MPS_LOCATION = FACILITY+"/MPS/LL"+CRATE_NAME if STATION == "GUN1": - FULL_STATION_NAME = STATION singleCavityStation().useLOGM() @@ -196,7 +195,6 @@ if ACCELERATOR == "XFEL": MAIN_LOCATION_SUFFIX = CRATE_LOCATION_SUFFIX if STATION == "GUN1SP": - FULL_STATION_NAME = STATION singleCavityStation().useLOGM() @@ -228,7 +226,6 @@ if ACCELERATOR == "XFEL": if STATION in ["LLTDSI1", "LLTDSB2"]: DOOCS_NAMING_SCHEME = 1 - FULL_STATION_NAME = STATION singleCavityStation().useLOGM() diff --git a/llrfctrl6/templates/llrfctrl_controller.xlmap b/llrfctrl6/templates/llrfctrl_controller.xlmap index bd6eb67..6349386 100644 --- a/llrfctrl6/templates/llrfctrl_controller.xlmap +++ b/llrfctrl6/templates/llrfctrl_controller.xlmap @@ -961,7 +961,7 @@ wordPrefixPredistorter="WORD_" <!-- ################################################################################################################ --> - % if not isSincav : + % if not isSincav and FW_VER_CTRL >= version.parse("1.7.0") : <module name="AnomalyDetection"> % for m in range(0,2) : diff --git a/llrfctrl6/tests/Devices.py b/llrfctrl6/tests/Devices.py index ec46f3c..65d5f45 100644 --- a/llrfctrl6/tests/Devices.py +++ b/llrfctrl6/tests/Devices.py @@ -7,36 +7,36 @@ from packaging import version def get(settings): if settings['ACCELERATOR'] == 'XFEL': - if settings['FULL_STATION_NAME'].startswith('A') and settings['FULL_STATION_NAME'] != 'A1' and settings['FULL_STATION_NAME'] != 'AH1': - return TwoModules(settings) - elif settings['FULL_STATION_NAME'] == 'A1' or settings['FULL_STATION_NAME'] == 'AH1': + if settings['STATION'] == '1' or settings['STATION'] == 'H1' : return OneModule(settings) - elif settings['FULL_STATION_NAME'] == "GUN1": + elif settings['STATION'].startswith("GUN1"): return SingleCavity(settings, nExtraAdcDWC10=2) - elif settings['FULL_STATION_NAME'].startswith('LLTDS'): + elif settings['STATION'].startswith('LLTDS'): return SingleCavity(settings) + else : + return TwoModules(settings) if settings['ACCELERATOR'] == 'FLASH': if settings['STATION'] in ['GUN', 'BACCA', 'GUNMON']: return SingleCavity(settings) elif settings['STATION'] == 'POLARIX': return SingleCavity(settings, 1) - elif settings['FULL_STATION_NAME'] in ['ACC1', 'ACC39', 'ACC1MON', 'ACC39MON']: + elif settings['STATION'] in ['1', '39', '1MON', '39MON']: return OneModule(settings) - elif settings['FULL_STATION_NAME'].startswith('ACC') and settings['FULL_STATION_NAME'] != 'ACC1' and settings['FULL_STATION_NAME'] != 'ACC39': + else : return TwoModules(settings) if settings['ACCELERATOR'] == 'TESTFLASH': - if settings['FULL_STATION_NAME'] == '1': + if settings['STATION'] == '1': return TwoModules(settings) - if settings['FULL_STATION_NAME'] == 'RFGUN': + if settings['STATION'] == 'RFGUN': return SingleCavity(settings) if settings['ACCELERATOR'] == 'SINBAD': - if settings['FULL_STATION_NAME'] == 'AR.LI.RSB.G.1': + if settings['STATION'] == 'AR.LI.RSB.G.1': return SingleCavity(settings) return SingleCavity(settings, 1) if settings['ACCELERATOR'] == 'REGAE': return SingleCavity(settings) if settings['ACCELERATOR'] == 'AMTF': - if settings['FULL_STATION_NAME'] != '39CW' and settings['FULL_STATION_NAME'] != '39CWEXT': + if settings['STATION'] != '39CW' and settings['STATION'] != '39CWEXT': return OneModule(settings) else: return SingleCavity(settings) @@ -50,7 +50,7 @@ def get(settings): return SingleCavity(settings, nExtraAdcDWC10=1) if settings['ACCELERATOR'] == 'DEVEL': return SingleCavity(settings) - print("Don't know what to do for this station: "+settings['ACCELERATOR']+"/"+settings['FULL_STATION_NAME']) + print("Don't know what to do for this station: "+settings['ACCELERATOR']+"/"+settings['STATION']) sys.exit(1) diff --git a/llrfctrl6/tests/Tests.py b/llrfctrl6/tests/Tests.py deleted file mode 100644 index 921833a..0000000 --- a/llrfctrl6/tests/Tests.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/python3 -import sys -import mtca4u - -def get(testFacility) : - settings = testFacility.settings - if settings['ACCELERATOR'] == 'XFEL': - if settings['FULL_STATION_NAME'].startswith('A') and settings['FULL_STATION_NAME'] != 'A1' and settings['FULL_STATION_NAME'] != 'AH1' : - return TwoModules(testFacility) - if settings['ACCELERATOR'] == 'FLASH': - if settings['STATION'] in [ 'GUN', 'GUNMON', 'BACCA' ] : - return SingleCavity(settings) - elif settings['STATION'] == 'POLARIX' : - return SingleCavity(settings,1) - elif settings['FULL_STATION_NAME'].startswith('ACC') and settings['FULL_STATION_NAME'] != 'ACC1' and settings['FULL_STATION_NAME'] != 'ACC39' : - return TwoModules(testFacility) - if settings['ACCELERATOR'] == 'TESTFLASH': - if settings['FULL_STATION_NAME'] == '1' : - return TwoModules(testFacility) - if settings['ACCELERATOR'] == 'SINBAD': - if settings['FULL_STATION_NAME'] == 'AR.LI.RSB.G.1' : - return SingleCavity(testFacility) - return SingleCavity(testFacility,1) - if settings['ACCELERATOR'] == 'REGAE': - return SingleCavity(testFacility) - if settings['ACCELERATOR'] == 'TEST' and settings['STATION'] == 'CSI': - return SingleCavity(settings) - if settings['ACCELERATOR'] == 'CMTB': - return SingleCavity(testFacility) - if settings['ACCELERATOR'] == 'DEVEL': - return SingleCavity(testFacility) - print("Don't know what to do for this station: "+settings['ACCELERATOR']+"/"+settings['FULL_STATION_NAME']) - sys.exit(1) - - -######################################################################################################################## -# Generic part -class Tests: - def __init__(self, testFacility): - self.testFacility = testFacility - self.settings = testFacility.settings - - -######################################################################################################################## -# Station dependent part: all multi-cavity stations with two cryo modules, each 8 cavities -class TwoModules(Tests): - def __init__(self, testFacility): - super().__init__(testFacility) - - def run(self): - print("Running tests for two modules...") - - -######################################################################################################################## -# Station dependent part: single cavity systems -class SingleCavity(Tests): - def __init__(self, testFacility, nExtraAdc=0): - super().__init__(testFacility) - - def run(self): - print("Running tests for single cavity setup with "+str(nExtraAdc)+" extra ADC boards...") - -- GitLab From 75b31e3e900ac1e36b2d65e3dae0f05c5e9e1d6f Mon Sep 17 00:00:00 2001 From: Martin Hierholzer <martin.hierholzer@desy.de> Date: Fri, 6 Dec 2024 16:44:38 +0100 Subject: [PATCH 4/5] feat: prepare for FW mcav_ctrl: 1.8.0 scav_ctrl: 1.7.0 (+ status bit change #13798, likely 1.7.1) mcav_fd: 2.4.0 (not yet released) --- .../llrfctrl-DoocsVariableConfig.xml | 75 +-- llrfctrl6/templates/llrfctrl_adc.xlmap | 90 ++- llrfctrl6/templates/llrfctrl_controller.xlmap | 512 ++++++++++++------ 3 files changed, 429 insertions(+), 248 deletions(-) diff --git a/llrfctrl6/templates/llrfctrl-DoocsVariableConfig.xml b/llrfctrl6/templates/llrfctrl-DoocsVariableConfig.xml index 664f25a..4c9e84b 100644 --- a/llrfctrl6/templates/llrfctrl-DoocsVariableConfig.xml +++ b/llrfctrl6/templates/llrfctrl-DoocsVariableConfig.xml @@ -365,8 +365,12 @@ <property name="OUT_SATURATION.EARLY.I" source="/Controller/Status/feedForwardSaturationI"/> <property name="OUT_SATURATION.EARLY.Q" source="/Controller/Status/feedForwardSaturationQ"/> - <property name="OUT_SATURATION.GAIN.I" source="/Controller/Status/gainSaturationI"/> - <property name="OUT_SATURATION.GAIN.Q" source="/Controller/Status/gainSaturationQ"/> + % if ( not isSincav and FW_VER_CTRL < version.parse("1.8.0") ) or ( isSincav and FW_VER_CTRL < version.parse("1.7.0") ) : + <property name="OUT_SATURATION.GAIN.I" source="/Controller/Status/gainSaturationI"/> + <property name="OUT_SATURATION.GAIN.Q" source="/Controller/Status/gainSaturationQ"/> + % else : + <property name="OUT_SATURATION.OVC" source="/Controller/Status/ovcSaturation"/> + % endif <property name="OUT_SATURATION.LATE.I" source="/Controller/Status/offsetCompensationSaturationI"/> <property name="OUT_SATURATION.LATE.Q" source="/Controller/Status/offsetCompensationSaturationQ"/> @@ -1180,41 +1184,14 @@ <property name="OUT_SATURATION.EARLY.I" source="/Controller/Status/feedForwardSaturationI"/> <property name="OUT_SATURATION.EARLY.Q" source="/Controller/Status/feedForwardSaturationQ"/> - <property name="OUT_SATURATION.GAIN.I" source="/Controller/Status/gainSaturationI"/> - <property name="OUT_SATURATION.GAIN.Q" source="/Controller/Status/gainSaturationQ"/> + % if ( not isSincav and FW_VER_CTRL < version.parse("1.8.0") ) or ( isSincav and FW_VER_CTRL < version.parse("1.7.0") ) : + <property name="OUT_SATURATION.GAIN.I" source="/Controller/Status/gainSaturationI"/> + <property name="OUT_SATURATION.GAIN.Q" source="/Controller/Status/gainSaturationQ"/> + % endif <property name="OUT_SATURATION.LATE.I" source="/Controller/Status/offsetCompensationSaturationI"/> <property name="OUT_SATURATION.LATE.Q" source="/Controller/Status/offsetCompensationSaturationQ"/> - % if INSTANCE_TYPE != InstanceType.sincav : - <property name="CTRL_STATUS.masterFeedbackLinkNotOK" source="/Controller/Status/masterFeedbackLinkNotOK"/> - <property name="CTRL_STATUS.synchronisationNotOK" source="/Controller/Status/synchronisationNotOK"/> - <property name="CTRL_STATUS.limitersModule1Probe" source="/Controller/Status/limitersModule1Probe"/> - <property name="CTRL_STATUS.limitersModule2Probe" source="/Controller/Status/limitersModule2Probe"/> - <property name="CTRL_STATUS.limitersModule1Forward" source="/Controller/Status/limitersModule1Forward"/> - <property name="CTRL_STATUS.limitersModule2Forward" source="/Controller/Status/limitersModule2Forward"/> - <property name="CTRL_STATUS.triggerLimitersModule1Probe" source="/Controller/Status/triggerLimitersModule1Probe"/> - <property name="CTRL_STATUS.triggerLimitersModule2Probe" source="/Controller/Status/triggerLimitersModule2Probe"/> - <property name="CTRL_STATUS.triggerLimitersModule1Forward" source="/Controller/Status/triggerLimitersModule1Forward"/> - <property name="CTRL_STATUS.triggerLimitersModule2Forward" source="/Controller/Status/triggerLimitersModule2Forward"/> - <property name="CTRL_STATUS.slaveFeedbackLinkNotOK" source="/Controller/Status/slaveFeedbackLinkNotOK"/> - <property name="CTRL_STATUS.limitersModule3Probe" source="/Controller/Status/limitersModule3Probe"/> - <property name="CTRL_STATUS.limitersModule4Probe" source="/Controller/Status/limitersModule4Probe"/> - <property name="CTRL_STATUS.limitersModule3Forward" source="/Controller/Status/limitersModule3Forward"/> - <property name="CTRL_STATUS.limitersModule4Forward" source="/Controller/Status/limitersModule4Forward"/> - <property name="CTRL_STATUS.triggerLimitersModule3Probe" source="/Controller/Status/triggerLimitersModule3Probe"/> - <property name="CTRL_STATUS.triggerLimitersModule4Probe" source="/Controller/Status/triggerLimitersModule4Probe"/> - <property name="CTRL_STATUS.triggerLimitersModule3Forward" source="/Controller/Status/triggerLimitersModule3Forward"/> - <property name="CTRL_STATUS.triggerLimitersModule4Forward" source="/Controller/Status/triggerLimitersModule4Forward"/> - <property name="CTRL_STATUS.backplaneInterlockActive" source="/Controller/Status/backplaneInterlockActive"/> - % else : # INSTANCE_TYPE == InstanceType.sincav ==> - <property name="CTRL_STATUS.limiters" source="/Controller/Status/limiters"/> - <property name="CTRL_STATUS.prelimiters" source="/Controller/Status/prelimiters"/> - <property name="CTRL_STATUS.fastProtectionActive" source="/Controller/Status/fastProtectionActive"/> - <property name="CTRL_STATUS.interlockLatcher" source="/Controller/Status/interlockLatcher"/> - <property name="CTRL_STATUS.externalInterlock" source="/Controller/Status/externalInterlock"/> - % endif - <property name="CTRL_STATUS" source="/Controller/Status/overall"/> <property name="ACTUAL_PULSE_LENGTH.SAMPLES" source="/Controller/Status/ActualPulseLength/samples"> @@ -2359,24 +2336,20 @@ <property name="VREFL.TRIGGER_LIMITS.ACTIVE" source="/AdcBoard${IDX_REFL_CM[M]}/Status/WORD_AMP_LIMIT_TRG_ACTIVE"/> </location> - <location name="ANOMALY_DETECTION.M${M}.${STATION_LOCATION_SUFFIX}"> - % for c in range(0,8) : - <D_spectrum name="C${c+1}.GLR" source="/Controller/AnomalyDetection/CryoModule${(M-1)%2}/DAQ/Cavity${c}/GLR"> - <incrementSource>/Configuration/samplingTime</incrementSource> - <publish_ZMQ>true</publish_ZMQ> - <data_matching>exact</data_matching> - <numberOfBuffers>16</numberOfBuffers> - </D_spectrum> - <D_spectrum name="C${c+1}.RESIDUAL" source="/Controller/AnomalyDetection/CryoModule${(M-1)%2}/DAQ/Cavity${c}/Residual"> - <incrementSource>/Configuration/samplingTime</incrementSource> - <publish_ZMQ>true</publish_ZMQ> - <data_matching>exact</data_matching> - <numberOfBuffers>16</numberOfBuffers> - </D_spectrum> - % endfor - - <import>/Controller/AnomalyDetection/CryoModule${(M-1)%2}</import> - </location> + % if not isSincav and FW_VER_CTRL >= version.parse("1.8.0") : + <location name="ANOMALY_DETECTION.M${M}.${STATION_LOCATION_SUFFIX}"> + % for c in range(0,8) : + <D_spectrum name="C${c+1}.GLR" source="/Controller/AnomalyDetection/CryoModule${(M-1)%2}/Cavity${c}/DAQ/GLR"> + <incrementSource>/Configuration/samplingTime</incrementSource> + <publish_ZMQ>true</publish_ZMQ> + <data_matching>exact</data_matching> + <numberOfBuffers>16</numberOfBuffers> + </D_spectrum> + % endfor + + <import>/Controller/AnomalyDetection/CryoModule${(M-1)%2}</import> + </location> + % endif % endfor diff --git a/llrfctrl6/templates/llrfctrl_adc.xlmap b/llrfctrl6/templates/llrfctrl_adc.xlmap index 9b77faf..464bb68 100644 --- a/llrfctrl6/templates/llrfctrl_adc.xlmap +++ b/llrfctrl6/templates/llrfctrl_adc.xlmap @@ -443,21 +443,45 @@ <module name="Configuration"> - <redirectedBit name="BOARD_CONFIG_PRIMARY_DAQ_EN"> - <targetDevice><par>target</par></targetDevice> - <targetRegister>DAQ.${wordPrefix}ENABLE</targetRegister> - <targetBit>0</targetBit> - <plugin name="forceReadOnly"/> - <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> <!-- see #9747 --> - </redirectedBit> + % if sincavFirmware or FW_VER_ADC < version.parse("2.4.0") : - <redirectedBit name="BOARD_CONFIG_SECONDARY_DAQ_EN"> - <targetDevice><par>target</par></targetDevice> - <targetRegister>DAQ.${wordPrefix}ENABLE</targetRegister> - <targetBit>1</targetBit> - <plugin name="forceReadOnly"/> - <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> <!-- see #9747 --> - </redirectedBit> + <redirectedBit name="BOARD_CONFIG_PRIMARY_DAQ_EN"> + <targetDevice><par>target</par></targetDevice> + <targetRegister>DAQ.${wordPrefix}ENABLE</targetRegister> + <targetBit>0</targetBit> + <plugin name="forceReadOnly"/> + <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> <!-- see #9747 --> + </redirectedBit> + + <redirectedBit name="BOARD_CONFIG_SECONDARY_DAQ_EN"> + <targetDevice><par>target</par></targetDevice> + <targetRegister>DAQ.${wordPrefix}ENABLE</targetRegister> + <targetBit>1</targetBit> + <plugin name="forceReadOnly"/> + <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> <!-- see #9747 --> + </redirectedBit> + + % else : + + <redirectedRegister name="BOARD_CONFIG_PRIMARY_DAQ_EN"> + <targetDevice><par>target</par></targetDevice> + <targetRegister>DAQ.${wordPrefix}ENABLE</targetRegister> + <targetStartIndex>0</targetStartIndex> + <numberOfElements>1</numberOfElements> + <plugin name="forceReadOnly"/> + <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> <!-- see #9747 --> + </redirectedRegister> + + <redirectedRegister name="BOARD_CONFIG_SECONDARY_DAQ_EN"> + <targetDevice><par>target</par></targetDevice> + <targetRegister>DAQ.${wordPrefix}ENABLE</targetRegister> + <targetStartIndex>1</targetStartIndex> + <numberOfElements>1</numberOfElements> + <plugin name="forceReadOnly"/> + <plugin name="typeHintModifier"><parameter name="type">int32</parameter></plugin> <!-- see #9747 --> + </redirectedRegister> + + % endif <redirectedRegister name="BOARD_TIMING_TRG_SEL"> <targetDevice><par>target</par></targetDevice> @@ -665,11 +689,6 @@ % if not sincavFirmware : - <variable name="WORD_DAQ_MUX1"> - <value>0</value> - <type>uint8</type> - </variable> - <redirectedRegister name="timingDividerAdc"> <targetDevice><par>target</par></targetDevice> <targetRegister>DAQ.${wordPrefix}STROBE_DIV</targetRegister> @@ -677,12 +696,33 @@ <numberOfElements>1</numberOfElements> </redirectedRegister> - <redirectedRegister name="daqEnableForRawMode"> - <targetDevice><par>target</par></targetDevice> - <targetRegister>DAQ.${wordPrefix}ENABLE</targetRegister> - <targetStartIndex>0</targetStartIndex> - <numberOfElements>1</numberOfElements> - </redirectedRegister> + % if not isSincav and FW_VER_ADC >= version.parse("2.4.0") : + <redirectedRegister name="daqEnableAmplPhase"> + <targetDevice><par>target</par></targetDevice> + <targetRegister>DAQ.${wordPrefix}ENABLE</targetRegister> + <targetStartIndex>0</targetStartIndex> + <numberOfElements>1</numberOfElements> + </redirectedRegister> + <redirectedRegister name="daqEnableRaw"> + <targetDevice><par>target</par></targetDevice> + <targetRegister>DAQ.${wordPrefix}ENABLE</targetRegister> + <targetStartIndex>1</targetStartIndex> + <numberOfElements>1</numberOfElements> + </redirectedRegister> + % else : + <redirectedBit name="daqEnableAmplPhase"> + <targetDevice><par>target</par></targetDevice> + <targetRegister>DAQ.${wordPrefix}ENABLE</targetRegister> + <targetBit>0</targetBit> + <plugin name="typeHintModifier"><parameter name="type">Boolean</parameter></plugin> + </redirectedBit> + <redirectedBit name="daqEnableRaw"> + <targetDevice><par>target</par></targetDevice> + <targetRegister>DAQ.${wordPrefix}ENABLE</targetRegister> + <targetBit>1</targetBit> + <plugin name="typeHintModifier"><parameter name="type">Boolean</parameter></plugin> + </redirectedBit> + % endif % else : # sincavFirmware ==> diff --git a/llrfctrl6/templates/llrfctrl_controller.xlmap b/llrfctrl6/templates/llrfctrl_controller.xlmap index 6349386..234f001 100644 --- a/llrfctrl6/templates/llrfctrl_controller.xlmap +++ b/llrfctrl6/templates/llrfctrl_controller.xlmap @@ -101,13 +101,13 @@ wordPrefixPredistorter="WORD_" % endif </redirectedRegister> - % if not isSincav and FW_VER_CTRL >= version.parse("1.7.0") : + % if not isSincav and FW_VER_CTRL >= version.parse("1.8.0") : <redirectedRegister name="AnoDetDaq"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>${daqbufModule}.DAQ_ANODET_BUF0</targetRegister> <numberOfElements>${pulseLength}</numberOfElements> <plugin name="doubleBuffer"> - <parameter name="secondBuffer">${daqbufModule}.DAQ_ANODET_BUF1</parameter> + <parameter name="secondBuffer">${daqbufModule}.DAQ_ANODET_BUF0</parameter> <parameter name="enableDoubleBuffering">DAQ.${wordPrefix}DUB_BUF_ENA</parameter> <parameter name="currentBufferNumber">DAQ.${wordPrefix}DUB_BUF_CURR</parameter> <parameter name="daqNumber">2</parameter> @@ -876,10 +876,11 @@ wordPrefixPredistorter="WORD_" <module name="Total"> - <redirectedRegister name="limiterEnable"> + <redirectedBit name="limiterEnable"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>OUTPUT.${wordPrefix}AMP_LIMIT_ENA</targetRegister> - </redirectedRegister> + <targetBit>0</targetBit> + </redirectedBit> <redirectedRegister name="limiter"> <targetDevice>CtrlBoard</targetDevice> @@ -961,64 +962,54 @@ wordPrefixPredistorter="WORD_" <!-- ################################################################################################################ --> - % if not isSincav and FW_VER_CTRL >= version.parse("1.7.0") : + % if not isSincav and FW_VER_CTRL >= version.parse("1.8.0") : <module name="AnomalyDetection"> % for m in range(0,2) : <module name="CryoModule${m}"> + % for c in range(0,8) : + <module name="Cavity${c}"> - <redirectedRegister name="T_GLR_BW12"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>ANOMALY_CM_${m}.T_GLR_BW12</targetRegister> - </redirectedRegister> - <redirectedRegister name="GLR_BI"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>ANOMALY_CM_${m}.GLR_BI</targetRegister> - </redirectedRegister> - <redirectedRegister name="GLR_BQ"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>ANOMALY_CM_${m}.GLR_BQ</targetRegister> - </redirectedRegister> - <redirectedRegister name="GLR_K"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>ANOMALY_CM_${m}.GLR_K</targetRegister> - </redirectedRegister> - <redirectedRegister name="GLR_SCALE"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>ANOMALY_CM_${m}.GLR_SCALE</targetRegister> - </redirectedRegister> - <redirectedRegister name="GLR_NOM"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>ANOMALY_CM_${m}.GLR_NOM</targetRegister> - </redirectedRegister> - <redirectedRegister name="GRL_THRESHOLD"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>ANOMALY_CM_${m}.GRL_THRESHOLD</targetRegister> - </redirectedRegister> + <redirectedRegister name="COEF_X"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.WORD_ANOMALY_COEF_X</targetRegister> + <targetStartIndex>${8*m + c}</targetStartIndex> + <numberOfElements>1</numberOfElements> + </redirectedRegister> - <module name="DAQ"> - % for c in range(0,8) : - <module name="Cavity${c}"> + <redirectedRegister name="COEF_Y"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.WORD_ANOMALY_COEF_Y</targetRegister> + <targetStartIndex>${8*m + c}</targetStartIndex> + <numberOfElements>1</numberOfElements> + </redirectedRegister> + + <redirectedRegister name="WINDOW"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.WORD_ANOMALY_WINDOW</targetRegister> + <targetStartIndex>${8*m + c}</targetStartIndex> + <numberOfElements>1</numberOfElements> + </redirectedRegister> + + <redirectedRegister name="THRESHOLD"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.WORD_ANOMALY_THRESHOLD</targetRegister> + <targetStartIndex>${8*m + c}</targetStartIndex> + <numberOfElements>1</numberOfElements> + </redirectedRegister> + + <module name="DAQ"> <redirectedChannel name="GLR"> <targetDevice>this</targetDevice> <targetRegister>/InternalHelpers/AnoDetDaq</targetRegister> - <targetChannel>${16*m + 2*c+0}</targetChannel> - <targetStartIndex>0</targetStartIndex> - <numberOfElements>${pulseLength}</numberOfElements> - <plugin name="typeHintModifier"><parameter name="type">float32</parameter></plugin> - </redirectedChannel> - <redirectedChannel name="Residual"> - <targetDevice>this</targetDevice> - <targetRegister>/InternalHelpers/AnoDetDaq</targetRegister> - <targetChannel>${16*m + 2*c+1}</targetChannel> + <targetChannel>${8*m + c}</targetChannel> <targetStartIndex>0</targetStartIndex> <numberOfElements>${pulseLength}</numberOfElements> <plugin name="typeHintModifier"><parameter name="type">float32</parameter></plugin> </redirectedChannel> - </module> - % endfor <!-- c --> - - </module> <!-- DAQ --> + </module> <!-- DAQ --> + </module> <!-- Cavity<n> --> + % endfor <!-- c --> </module> <!-- CryoModule${m} --> % endfor <!-- m --> @@ -1206,213 +1197,390 @@ wordPrefixPredistorter="WORD_" <constant name="bitmaskForInhibitAlgos"> <type>uint32</type> - % if not isSincav : + % if not isSincav and FW_VER_CTRL < version.parse("1.8.0") : <!-- 1+2+4 => ignore outputAmplitudeLimit, controllerLimitI, controllerLimitQ --> <value>7</value> - % else : + % elif isSincav and FW_VER_CTRL < version.parse("1.7.0") : <!-- 2+4+8+16 => ignore FD prelimiter, controller limit I, controller limit Q, output amplitude limit --> <value>30</value> + % elif not isSincav : + <!-- ignore bits: 1 (FB off), 4 (output amplitude limit), 10, 11 (FB limit I and Q) + ==> 2+16+1024+2048 --> + <value>3090</value> + % else : + <!-- ignore bits: 4 (output amplitude limit), 10, 11 (FB limit I and Q), 13 (FD pre-limiter) + ==> 16+1024+2048+8192 --> + <value>11280</value> % endif </constant> <!-- Individual status bits --> - <redirectedBit name="outputAmplitudeLimit"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>${ 0 if not isSincav else 4 }</targetBit> - </redirectedBit> - <redirectedBit name="controllerLimitI"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>${ 1 if not isSincav else 2 }</targetBit> - </redirectedBit> - <redirectedBit name="controllerLimitQ"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>${ 2 if not isSincav else 3 }</targetBit> - </redirectedBit> - <redirectedBit name="feedForwardSaturationI"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>${ 3 if not isSincav else 5 }</targetBit> - </redirectedBit> - <redirectedBit name="feedForwardSaturationQ"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>${ 4 if not isSincav else 6 }</targetBit> - </redirectedBit> - <redirectedBit name="gainSaturationI"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>${ 5 if not isSincav else 9 }</targetBit> - </redirectedBit> - <redirectedBit name="gainSaturationQ"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>${ 6 if not isSincav else 10 }</targetBit> - </redirectedBit> - <redirectedBit name="offsetCompensationSaturationI"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>7</targetBit> - </redirectedBit> - <redirectedBit name="offsetCompensationSaturationQ"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>8</targetBit> - </redirectedBit> - % if not isSincav : + % if ( not isSincav and FW_VER_CTRL < version.parse("1.8.0") ) or ( isSincav and FW_VER_CTRL < version.parse("1.7.0") ) : + <!-- REMOVE THIS OLD VERSION BRANCH IN FAVOUR OF THE NEW VERSION BRANCH BELOW IN FUTURE!!! --> - <redirectedBit name="masterFeedbackLinkNotOK"> + <redirectedBit name="outputAmplitudeLimit"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>9</targetBit> + <targetBit>${ 0 if not isSincav else 4 }</targetBit> </redirectedBit> - <redirectedBit name="synchronisationNotOK"> + <redirectedBit name="controllerLimitI"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>10</targetBit> + <targetBit>${ 1 if not isSincav else 2 }</targetBit> </redirectedBit> - <redirectedBit name="limitersModule1Probe"> + <redirectedBit name="controllerLimitQ"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>11</targetBit> + <targetBit>${ 2 if not isSincav else 3 }</targetBit> </redirectedBit> - <redirectedBit name="limitersModule2Probe"> + <redirectedBit name="feedForwardSaturationI"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>12</targetBit> + <targetBit>${ 3 if not isSincav else 5 }</targetBit> </redirectedBit> - <redirectedBit name="limitersModule1Forward"> + <redirectedBit name="feedForwardSaturationQ"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>13</targetBit> + <targetBit>${ 4 if not isSincav else 6 }</targetBit> </redirectedBit> - <redirectedBit name="limitersModule2Forward"> + <redirectedBit name="gainSaturationI"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>14</targetBit> + <targetBit>${ 5 if not isSincav else 9 }</targetBit> </redirectedBit> - <redirectedBit name="triggerLimitersModule1Probe"> + <redirectedBit name="gainSaturationQ"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>15</targetBit> + <targetBit>${ 6 if not isSincav else 10 }</targetBit> </redirectedBit> - <redirectedBit name="triggerLimitersModule2Probe"> + <redirectedBit name="offsetCompensationSaturationI"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>16</targetBit> + <targetBit>7</targetBit> </redirectedBit> - <redirectedBit name="triggerLimitersModule1Forward"> + <redirectedBit name="offsetCompensationSaturationQ"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>17</targetBit> + <targetBit>8</targetBit> </redirectedBit> - <redirectedBit name="triggerLimitersModule2Forward"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>18</targetBit> - </redirectedBit> - <redirectedBit name="slaveFeedbackLinkNotOK"> + + % if not isSincav : + + <redirectedBit name="masterFeedbackLinkNotOK"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>9</targetBit> + </redirectedBit> + <redirectedBit name="synchronisationNotOK"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>10</targetBit> + </redirectedBit> + <redirectedBit name="limitersModule1Probe"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>11</targetBit> + </redirectedBit> + <redirectedBit name="limitersModule2Probe"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>12</targetBit> + </redirectedBit> + <redirectedBit name="limitersModule1Forward"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>13</targetBit> + </redirectedBit> + <redirectedBit name="limitersModule2Forward"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>14</targetBit> + </redirectedBit> + <redirectedBit name="triggerLimitersModule1Probe"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>15</targetBit> + </redirectedBit> + <redirectedBit name="triggerLimitersModule2Probe"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>16</targetBit> + </redirectedBit> + <redirectedBit name="triggerLimitersModule1Forward"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>17</targetBit> + </redirectedBit> + <redirectedBit name="triggerLimitersModule2Forward"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>18</targetBit> + </redirectedBit> + <redirectedBit name="slaveFeedbackLinkNotOK"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>19</targetBit> + </redirectedBit> + <redirectedBit name="limitersModule3Probe"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>20</targetBit> + </redirectedBit> + <redirectedBit name="limitersModule4Probe"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>21</targetBit> + </redirectedBit> + <redirectedBit name="limitersModule3Forward"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>22</targetBit> + </redirectedBit> + <redirectedBit name="limitersModule4Forward"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>23</targetBit> + </redirectedBit> + <redirectedBit name="triggerLimitersModule3Probe"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>24</targetBit> + </redirectedBit> + <redirectedBit name="triggerLimitersModule4Probe"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>25</targetBit> + </redirectedBit> + <redirectedBit name="triggerLimitersModule3Forward"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>26</targetBit> + </redirectedBit> + <redirectedBit name="triggerLimitersModule4Forward"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>27</targetBit> + </redirectedBit> + <redirectedBit name="backplaneInterlockActive"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>31</targetBit> + </redirectedBit> + + % else : # isSincav ==> + + <redirectedBit name="limiters"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>0</targetBit> + <plugin name="forceReadOnly"/> + </redirectedBit> + <redirectedBit name="prelimiters"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>1</targetBit> + <plugin name="forceReadOnly"/> + </redirectedBit> + <redirectedBit name="fastProtectionActive"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>11</targetBit> + <plugin name="forceReadOnly"/> + </redirectedBit> + <redirectedBit name="interlockLatcher"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>12</targetBit> + <plugin name="forceReadOnly"/> + </redirectedBit> + + <redirectedRegister name="externalInterlock"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>${ADCBOARD[0]["RTM_TYPE"]}.${wordPrefix}EXT_INTERLOCK</targetRegister> + </redirectedRegister> + + % endif + + + <!-- Summarised status bits --> + <redirectedRegister name="saturation"> + <targetDevice>this</targetDevice> + <targetRegister>/ToControlSystem/Controller/Status/feedForwardSaturationI</targetRegister> + <plugin name="math"> + <parameter name="formula">x | FFQ | OCI | OCQ | GCI | GCQ </parameter> + <parameter name="FFQ">/ToControlSystem/Controller/Status/feedForwardSaturationQ</parameter> + <parameter name="OCI">/ToControlSystem/Controller/Status/offsetCompensationSaturationI</parameter> + <parameter name="OCQ">/ToControlSystem/Controller/Status/offsetCompensationSaturationQ</parameter> + <parameter name="GCI">/ToControlSystem/Controller/Status/gainSaturationI</parameter> + <parameter name="GCQ">/ToControlSystem/Controller/Status/gainSaturationQ</parameter> + </plugin> + <plugin name="typeHintModifier"><parameter name="type">Boolean</parameter></plugin> + </redirectedRegister> + + + % else : # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< NEW FIRMWARE VERSIONS WITH UNIFIED INTERFACE + + <redirectedBit name="rfOff"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>19</targetBit> + <targetBit>0</targetBit> </redirectedBit> - <redirectedBit name="limitersModule3Probe"> + <redirectedBit name="fbOff"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>20</targetBit> + <targetBit>1</targetBit> </redirectedBit> - <redirectedBit name="limitersModule4Probe"> + + <redirectedBit name="offsetCompensationSaturationI"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>21</targetBit> + <targetBit>2</targetBit> </redirectedBit> - <redirectedBit name="limitersModule3Forward"> + <redirectedBit name="offsetCompensationSaturationQ"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>22</targetBit> + <targetBit>3</targetBit> </redirectedBit> - <redirectedBit name="limitersModule4Forward"> + + <redirectedBit name="outputAmplitudeLimit"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>23</targetBit> + <targetBit>4</targetBit> </redirectedBit> - <redirectedBit name="triggerLimitersModule3Probe"> + + <redirectedBit name="ovcSaturation"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>24</targetBit> + <targetBit>5</targetBit> </redirectedBit> - <redirectedBit name="triggerLimitersModule4Probe"> + + <redirectedBit name="feedForwardSaturationI"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>25</targetBit> + <targetBit>6</targetBit> </redirectedBit> - <redirectedBit name="triggerLimitersModule3Forward"> + <redirectedBit name="feedForwardSaturationQ"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>26</targetBit> + <targetBit>7</targetBit> </redirectedBit> - <redirectedBit name="triggerLimitersModule4Forward"> + + <redirectedBit name="feedForwardCorrectionSaturationI"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>27</targetBit> + <targetBit>8</targetBit> </redirectedBit> - <redirectedBit name="backplaneInterlockActive"> + <redirectedBit name="feedForwardCorrectionSaturationQ"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>31</targetBit> + <targetBit>9</targetBit> </redirectedBit> - % else : # isSincav ==> - - <redirectedBit name="limiters"> + <redirectedBit name="controllerLimitI"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>0</targetBit> - <plugin name="forceReadOnly"/> + <targetBit>10</targetBit> </redirectedBit> - <redirectedBit name="prelimiters"> + <redirectedBit name="controllerLimitQ"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>1</targetBit> - <plugin name="forceReadOnly"/> + <targetBit>11</targetBit> </redirectedBit> - <redirectedBit name="fastProtectionActive"> + + <redirectedBit name="limitersProbe"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>11</targetBit> - <plugin name="forceReadOnly"/> + <targetBit>12</targetBit> </redirectedBit> - <redirectedBit name="interlockLatcher"> + <redirectedBit name="triggerLimitersProbe"> <targetDevice>CtrlBoard</targetDevice> <targetRegister>APP.${wordPrefix}STATUS</targetRegister> - <targetBit>12</targetBit> - <plugin name="forceReadOnly"/> + <targetBit>13</targetBit> </redirectedBit> - <redirectedRegister name="externalInterlock"> - <targetDevice>CtrlBoard</targetDevice> - <targetRegister>${ADCBOARD[0]["RTM_TYPE"]}.${wordPrefix}EXT_INTERLOCK</targetRegister> + % if not isSincav : + <redirectedBit name="limitersProbeSubordinate"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>14</targetBit> + </redirectedBit> + <redirectedBit name="triggerLimitersProbeSubordinate"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>15</targetBit> + </redirectedBit> + + <redirectedBit name="backplaneInterlockActive"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>16</targetBit> + </redirectedBit> + <redirectedBit name="backplaneInterlockActiveSubordinate"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>17</targetBit> + </redirectedBit> + + <redirectedBit name="masterFeedbackLinkNotOK"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>18</targetBit> + </redirectedBit> + <redirectedBit name="slaveFeedbackLinkNotOK"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>19</targetBit> + </redirectedBit> + <redirectedBit name="synchronisationNotOK"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>20</targetBit> + </redirectedBit> + + % else : # isSincav ==> + + <redirectedBit name="interlockLatcher"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>0</targetBit> + <plugin name="forceReadOnly"/> + </redirectedBit> + + <redirectedBit name="fastProtectionActive"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>APP.${wordPrefix}STATUS</targetRegister> + <targetBit>1</targetBit> + <plugin name="forceReadOnly"/> + </redirectedBit> + + <redirectedRegister name="externalInterlock"> + <targetDevice>CtrlBoard</targetDevice> + <targetRegister>${ADCBOARD[0]["RTM_TYPE"]}.${wordPrefix}EXT_INTERLOCK</targetRegister> + </redirectedRegister> + + % endif + + + <!-- Summarised status bits --> + <redirectedRegister name="saturation"> + <targetDevice>this</targetDevice> + <targetRegister>/ToControlSystem/Controller/Status/feedForwardSaturationI</targetRegister> + <plugin name="math"> + <parameter name="formula">x | FFQ | FFCI | FFCQ | OCI | OCQ | OVC </parameter> + <parameter name="FFQ">/ToControlSystem/Controller/Status/feedForwardSaturationQ</parameter> + <parameter name="FFCI">/ToControlSystem/Controller/Status/feedForwardCorrectionSaturationI</parameter> + <parameter name="FFCQ">/ToControlSystem/Controller/Status/feedForwardCorrectionSaturationQ</parameter> + <parameter name="OCI">/ToControlSystem/Controller/Status/offsetCompensationSaturationI</parameter> + <parameter name="OCQ">/ToControlSystem/Controller/Status/offsetCompensationSaturationQ</parameter> + <parameter name="OVC">/ToControlSystem/Controller/Status/ovcSaturation</parameter> + </plugin> + <plugin name="typeHintModifier"><parameter name="type">Boolean</parameter></plugin> </redirectedRegister> - % endif - <!-- Summarised status bits --> - <redirectedRegister name="saturation"> - <targetDevice>this</targetDevice> - <targetRegister>/ToControlSystem/Controller/Status/feedForwardSaturationI</targetRegister> - <plugin name="math"> - <parameter name="formula">x | FFQ | OCI | OCQ | GCI | GCQ </parameter> - <parameter name="FFQ">/ToControlSystem/Controller/Status/feedForwardSaturationQ</parameter> - <parameter name="OCI">/ToControlSystem/Controller/Status/offsetCompensationSaturationI</parameter> - <parameter name="OCQ">/ToControlSystem/Controller/Status/offsetCompensationSaturationQ</parameter> - <parameter name="GCI">/ToControlSystem/Controller/Status/gainSaturationI</parameter> - <parameter name="GCQ">/ToControlSystem/Controller/Status/gainSaturationQ</parameter> - </plugin> - <plugin name="typeHintModifier"><parameter name="type">Boolean</parameter></plugin> - </redirectedRegister> + % endif # (NEW FIRMWARE VEERSIONS WITH UNIFIED INTERCACE) + </module> <!-- Status --> -- GitLab From 047ee8b451e0b4e233f85ce93991eb0687046634 Mon Sep 17 00:00:00 2001 From: Martin Hierholzer <martin.hierholzer@desy.de> Date: Tue, 10 Dec 2024 08:41:38 +0100 Subject: [PATCH 5/5] chore: increase patch level --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a26699..16a49d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.5) # Note: Always keep MAJOR_VERSION and MINOR_VERSION identical to the server version. Count only the patch separately. set(${PROJECT_NAME}_MAJOR_VERSION 08) set(${PROJECT_NAME}_MINOR_VERSION 08) -set(${PROJECT_NAME}_PATCH_VERSION 09) +set(${PROJECT_NAME}_PATCH_VERSION 10) include(cmake/set_version_numbers.cmake) include(cmake/config_generator_project.cmake) -- GitLab