in src/dpi/module.cc [243:272]
void MemDevice::WriteData(svOpenArrayHandle value, uint64_t wr_strb) {
int lftIdx = svLeft(value, 1);
int rgtIdx = svRight(value, 1);
int blkNb = lftIdx - rgtIdx + 1;
assert(lftIdx >= 0);
assert(rgtIdx >= 0);
assert(lftIdx >= rgtIdx);
assert(blkNb > 0);
// supported up to 64bit strb
assert(blkNb <= 8);
std::lock_guard<std::mutex> lock(mutex_);
int strbMask = 0xff;
if (wlen_ > 0) {
for (int idx = 0 ; idx < blkNb; ++idx) {
int strbFlags = (wr_strb >> (idx * 8)) & strbMask;
if (!(strbFlags == 0 || strbFlags == strbMask)) {
LOG(FATAL) << "Unexpected strb data " << (void*)wr_strb;
}
if (strbFlags != 0) {
uint64_t* elemPtr = (uint64_t*)svGetArrElemPtr1(value, rgtIdx + idx);
assert(elemPtr != NULL);
waddr_[idx] = (*elemPtr);
}
}
waddr_ += blkNb;
wlen_ -= 1;
}
}