24#include <fairlogger/Logger.h>
53 for (
int iReg = 0; iReg <
kLastReg; iReg++) {
56 LOG(error) <<
"Register address 0x" << hex << std::setw(4) << addr <<
" not handled in register map";
60 LOG(error) <<
"Register address 0x" << hex << setw(4) << addr <<
" not handled in register map";
64 LOG(error) <<
"Register address 0x" << hex << setw(4) << addr <<
" not handled in register map";
69 LOG(error) <<
"Register address 0x" << hex << setw(4) << addr <<
" not handled in register map";
523 for (
int iReg = 0; iReg <
kLastReg; iReg++) {
533 mDmem[iAddr].reset();
542 if ((reg < 0) || (reg >=
kLastReg)) {
543 LOG(error) <<
"Non-existing register requested";
573 if (mcmReg >= 0 && mcmReg <
kLastReg) {
578 LOG(error) <<
"peek for invalid addr: 0x" << hex << setw(4) << addr;
588 LOG(debug1) <<
"DMEM 0x" << hex << setw(8) << addr <<
": " << dec <<
value;
592 if (mcmReg >= 0 && mcmReg <
kLastReg) {
598 LOG(error) <<
"poke for invalid address: 0x" << hex << setw(4) << addr;
627 LOG(error) <<
"Problem writing to DMEM address 0x" << hex << std::setw(4) << addr;
645 LOG(error) <<
"Problem writing to DMEM address 0x" << hex << std::setw(4) << addr;
679 <<
" (currently individual mode)";
681 LOG(error) <<
"Register value is MCM-specific: Invalid detector, ROB or MCM requested";
695 LOG(error) <<
"There is no register at address 0x" << hex << setw(8) << addr <<
" in the simulator";
734 LOG(error) <<
"Invalid DMEM address 0x" << hex << setw(8) << addr;
752 LOG(error) <<
"Invalid register " << dec << reg;
762 os << std::setw(5) << 10
763 << std::setw(8) << addr
764 << std::setw(12) <<
data;
766 os << std::setw(8) << 127;
778 for (
int iReg = 0; iReg <
kLastReg; ++iReg) {
779 os << std::setw(5) << 9
790 os << std::setw(5) << 9
810 int mSize = mgkSize[mAllocMode];
814 mValid.resize(mSize);
815 for (
int i = 0;
i < mSize; ++
i) {
829 int mSize = mgkSize[mAllocMode];
833 mValid.resize(mSize);
834 for (
int i = 0;
i < mSize; ++
i) {
849 switch (mAllocMode) {
860 idx = det + (
rob % 2);
863 idx = 18 * 8 * det + 18 *
rob +
mcm;
869 idx = 18 * 8 * (det % 30) + 18 *
rob +
mcm;
873 LOG(error) <<
"Invalid allocation mode";
875 if (idx < mData.size()) {
879 LOG(warn) <<
"Index too large " << dec << idx <<
" (size " << mData.size() <<
") for "
880 <<
" getIdx : " << det <<
"::" <<
rob <<
"::" <<
mcm <<
"::" << mAllocMode;
889 for (
int i = 0;
i < mData.size(); ++
i) {
901 int idx = getIdx(det, 0, 0);
906 if (mValid[idx] && (mData[idx] !=
value)) {
907 LOG(
debug) <<
"Overwriting previous value " << dec << mData[idx] <<
" of "
908 <<
" with " <<
value <<
" for " << det;
916 idx = getIdx(det,
rob,
mcm);
917 if (mValid[idx] && (mData[idx] !=
value)) {
918 LOG(
debug) <<
"Overwriting previous value " << mData[idx] <<
" of "
919 <<
" with " <<
value <<
" for " << det <<
" " <<
rob <<
":" << setw(2) <<
mcm;
940 int idx = getIdx(det,
rob,
mcm);
943 if (mValid[idx] && (mData[idx] !=
value)) {
944 LOG(
debug) <<
"Overwriting previous value " << mData[idx] <<
" of "
945 <<
" with " <<
value <<
" " << det <<
":" <<
rob << std::setw(2) <<
mcm <<
" (idx: " << idx <<
")";
953 LOG(error) << Form(
"setting failed");
962 int idx = getIdx(det,
rob,
mcm);
965 LOG(debug1) <<
"reading from unwritten address: "
966 <<
" at idx " << idx <<
":" << mValid[idx];
970 LOG(error) <<
"read from invalid address";
990 mResetValue = resetValue;
992 LOG(fatal) <<
"Re-initialising an existing TRAP register ";
1003 mResetValue = resetValue;
1012 for (
int dataarray = 0; dataarray < trapval->
getDataSize(); dataarray++) {
1021 for (
int dataarray = 0; dataarray < trapval->
getDataSize(); dataarray++) {
1029 outfile <<
"Trap Registers : " << std::endl;
1032 <<
" at : 0x " << std::hex <<
mRegisterValue[regvalue].getAddr() << std::dec
1034 <<
" and reset value of : " <<
mRegisterValue[regvalue].getResetValue() << std::endl;
1040 outfile <<
"DMEM Words : " << std::endl;
1045 outfile <<
"Name : " <<
mDmem[dmemwords].getName() <<
" :address : " <<
mDmem[dmemwords].getAddress() << std::endl;
static unsigned int aliToExtAli(int rob, int aliid)
void initfromrun2(const char *name, int addr, int nBits, int resetValue)
void init(const char *name, int addr, int nBits, int resetValue)
unsigned int getValidRaw(int i)
bool allocate(Alloc_t mode)
static const std::array< int, TrapConfig::mlastAlloc > mgkSize
unsigned int getDataRaw(int i)
bool setData(unsigned int value)
unsigned int getDataSize()
unsigned int getData(int det, int rob, int mcm)
int getIdx(int det, int rob, int mcm)
std::array< TrapDmemWord, mgkDmemWords > mDmem
void PrintDmemValue3(TrapConfig::TrapDmemWord *trapval, std::ofstream &output)
bool printTrapAddr(int addr, int det=-1, int rob=-1, int mcm=-1)
unsigned int peek(int addr, int det, int rob, int mcm)
unsigned short getRegNBits(TrapReg_t reg)
void configureOnlineGains()
void printDatx(std::ostream &os, unsigned int addr, unsigned int data, int rob, int mcm)
unsigned short getRegAddress(TrapReg_t reg)
bool poke(int addr, unsigned int value, int det, int rob, int mcm)
bool setDmem(int addr, unsigned int value, int det)
static const int mgkDmemStartAddress
unsigned int getDmemUnsigned(int addr, int det, int rob, int mcm)
std::string getRegName(TrapReg_t reg)
const std::array< int, 3 > mgkRegisterAddressBlockSize
void PrintRegisterValue3(TrapConfig::TrapRegister *trapval, std::ofstream &output)
unsigned int getRegResetValue(TrapReg_t reg)
bool setTrapReg(TrapReg_t reg, int value, int det)
const std::array< int, 3 > mgkRegisterAddressBlockStart
bool setDmemAlloc(int addr, Alloc_t mode)
std::array< TrapRegister, kLastReg > mRegisterValue
int getTrapReg(TrapReg_t reg, int det=-1, int rob=-1, int mcm=-1)
void printMemDatx(std::ostream &os, int addr)
std::array< TrapReg_t, 0x400+0x200+0x4 > mgRegAddressMap
void printVerify(std::ostream &os, int det, int rob, int mcm)
TrapReg_t getRegByAddress(int address)
static const int mgkDmemWords
bool printTrapReg(TrapReg_t reg, int det=-1, int rob=-1, int mcm=-1)
static bool mgRegAddressMapInitialized
void DumpTrapConfig2File(std::string filename)
GLuint GLuint64EXT address
GLuint const GLchar * name
GLsizei const GLfloat * value
constexpr int NROBC1
the number of ROBs per C1 chamber
constexpr int NMCMROB
the number of MCMs per ROB
constexpr int MAXCHAMBER
the maximum number of installed chambers
Defining DataPointCompositeObject explicitly as copiable.
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"