From ffe386956d1dce875203becd12fa960ab6b021d7 Mon Sep 17 00:00:00 2001 From: Douglas Araujo <douglas.araujo@ess.eu> Date: Mon, 25 Mar 2024 12:28:49 +0100 Subject: [PATCH] Add configFEN method --- vmmTblApp/src/vmm_config.cpp | 40 ++++++++++++++++++++++++++++++++++++ vmmTblApp/src/vmm_config.h | 5 +++++ 2 files changed, 45 insertions(+) diff --git a/vmmTblApp/src/vmm_config.cpp b/vmmTblApp/src/vmm_config.cpp index 90453fc..d7414c0 100644 --- a/vmmTblApp/src/vmm_config.cpp +++ b/vmmTblApp/src/vmm_config.cpp @@ -17,6 +17,46 @@ FENConfigModule::FENConfigModule(FrontEndBase& frontend) : pFEN(&frontend) { FENConfigModule::~FENConfigModule() { } +void FENConfigModule::configFEN() { + pFEN->user_reg_write("app_debug_data_format", 0); + pFEN->user_reg_write("app_latency_reset", 27); + pFEN->user_reg_write("app_latency_data_max", 1024); + pFEN->user_reg_write("app_latency_data_jitter", 0); + pFEN->user_reg_write("app_tp_offset_first", 100); + pFEN->user_reg_write("app_tp_offset", 1000); + pFEN->user_reg_write("app_tp_latency", 46); + pFEN->user_reg_write("app_tp_number", 1); + pFEN->user_reg_write("app_chmask", getChMap()); + pFEN->user_reg_write("sc_cfg_app", 0x00000000); + pFEN->user_reg_write("sc_cfg_app", 0x00000001); + pFEN->user_reg_write("sc_cfg_app", 0x00000000); +} + +uint16_t FENConfigModule::getChMap() { + std::string chMapString = "0000000000000000"; + for (int hybrid = 0; hybrid < HYBRIDS_PER_FEN; hybrid++) { + if (isHybridEnabled(hybrid)) { + for (int vmm = 0; vmm < VMMS_PER_HYBRID; vmm++) { + chMapString.replace(15 - (hybrid * 2 + vmm), 1, "1"); + } + } + } + uint16_t chMap = std::stoi(chMapString, nullptr, 2); + return chMap; +} + +bool FENConfigModule::enableHybrid(int hybrid, bool onOff) { + if(hybrid < HYBRIDS_PER_FEN) { + enabled_hybrids[hybrid] = onOff; + return true; + } else return false; +} + +bool FENConfigModule::isHybridEnabled(int hybrid) { + if(hybrid < HYBRIDS_PER_FEN) return enabled_hybrids[hybrid]; + else return false; +} + Hybrid& FENConfigModule::getHybrid(int index) { if (index < 0 || index >= HYBRIDS_PER_FEN) throw std::out_of_range("Invalid hybrid index"); diff --git a/vmmTblApp/src/vmm_config.h b/vmmTblApp/src/vmm_config.h index 6e221d2..a6850de 100644 --- a/vmmTblApp/src/vmm_config.h +++ b/vmmTblApp/src/vmm_config.h @@ -14,15 +14,20 @@ class FENConfigModule { public: FENConfigModule(FrontEndBase& frontend); ~FENConfigModule(); + void configFEN(); bool configVMM(int hybrid_index, int vmm_index, bool enableConfigCheck=false); void fillGlobalRegisters(std::vector<std::string>& global, int hybrid_index, int vmm_index); void fillGlobalRegisters2(std::vector<std::string>& global, int hybrid_index, int vmm_index); void fillChRegisters(std::vector<std::string>& registers, int hybrid_index, int vmm_index); int readADC(int hybrid_index, int vmm_index); Hybrid& getHybrid(int index); + bool enableHybrid(int hybrid, bool onOff); + bool isHybridEnabled(int hybrid); private: FrontEndBase *pFEN; Hybrid hybrids[HYBRIDS_PER_FEN]; + bool enabled_hybrids[HYBRIDS_PER_FEN] = {}; uint32_t readWriteRegs(std::string command_reg, int index, std::string read_reg); + uint16_t getChMap(); }; -- GitLab