[#73220] move emitting functions to ActivityVar and remove duplicate code
This commit is contained in:
parent
40bfe54ebc
commit
6ebc4fae7f
|
|
@ -64,6 +64,25 @@
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
// ActivityVar
|
// ActivityVar
|
||||||
|
|
||||||
|
VL_ATTR_ALWINLINE
|
||||||
|
void ActivityVar::emitBit(uint64_t time, CData newval) {
|
||||||
|
assert(m_lastTime <= time);
|
||||||
|
m_bits[0].aggregateVal(time - m_lastTime, newval);
|
||||||
|
updateLastTime(time);
|
||||||
|
}
|
||||||
|
|
||||||
|
VL_ATTR_ALWINLINE
|
||||||
|
void ActivityVar::emitWData(uint64_t time, const WData* newvalp, uint32_t bits) {
|
||||||
|
assert(m_lastTime <= time);
|
||||||
|
uint64_t dt = time - m_lastTime;
|
||||||
|
for (std::size_t i = 0; i < std::min(m_width, bits); ++i) {
|
||||||
|
size_t wordIndex = i / VL_EDATASIZE;
|
||||||
|
m_bits[i].aggregateVal(dt, (newvalp[wordIndex] >> VL_BITBIT_E(i)) & 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
updateLastTime(time);
|
||||||
|
}
|
||||||
|
|
||||||
ActivityBit& ActivityVar::getBit(std::size_t index)
|
ActivityBit& ActivityVar::getBit(std::size_t index)
|
||||||
{
|
{
|
||||||
assert(index < m_width);
|
assert(index < m_width);
|
||||||
|
|
@ -327,6 +346,8 @@ bool VerilatedSaif::printActivityStats(uint32_t activityCode, const char* activi
|
||||||
printStr("))\n");
|
printStr("))\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
activity.updateLastTime(m_time);
|
||||||
|
|
||||||
return anyNetValid;
|
return anyNetValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -501,72 +522,42 @@ VL_ATTR_ALWINLINE
|
||||||
void VerilatedSaifBuffer::emitBit(uint32_t code, CData newval) {
|
void VerilatedSaifBuffer::emitBit(uint32_t code, CData newval) {
|
||||||
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
||||||
ActivityVar& activity = m_owner.m_activity.at(code);
|
ActivityVar& activity = m_owner.m_activity.at(code);
|
||||||
|
activity.emitBit(m_owner.m_time, newval);
|
||||||
ActivityBit& bit = activity.getBit(0);
|
|
||||||
bit.aggregateVal(m_owner.m_time - activity.getLastUpdateTime(), newval);
|
|
||||||
activity.updateLastTime(m_owner.m_time);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VL_ATTR_ALWINLINE
|
VL_ATTR_ALWINLINE
|
||||||
void VerilatedSaifBuffer::emitCData(uint32_t code, CData newval, int bits) {
|
void VerilatedSaifBuffer::emitCData(uint32_t code, CData newval, int bits) {
|
||||||
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
||||||
ActivityVar& activity = m_owner.m_activity.at(code);
|
ActivityVar& activity = m_owner.m_activity.at(code);
|
||||||
|
activity.emitData<CData>(m_owner.m_time, newval, bits);
|
||||||
uint64_t dt = m_owner.m_time - activity.getLastUpdateTime();
|
|
||||||
for (size_t i = 0; i < activity.getWidth(); i++) {
|
|
||||||
activity.getBit(i).aggregateVal(dt, (newval >> i) & 1);
|
|
||||||
}
|
|
||||||
activity.updateLastTime(m_owner.m_time);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VL_ATTR_ALWINLINE
|
VL_ATTR_ALWINLINE
|
||||||
void VerilatedSaifBuffer::emitSData(uint32_t code, SData newval, int bits) {
|
void VerilatedSaifBuffer::emitSData(uint32_t code, SData newval, int bits) {
|
||||||
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
||||||
ActivityVar& activity = m_owner.m_activity.at(code);
|
ActivityVar& activity = m_owner.m_activity.at(code);
|
||||||
|
activity.emitData<SData>(m_owner.m_time, newval, bits);
|
||||||
uint64_t dt = m_owner.m_time - activity.getLastUpdateTime();
|
|
||||||
for (size_t i = 0; i < activity.getWidth(); i++) {
|
|
||||||
activity.getBit(i).aggregateVal(dt, (newval >> i) & 1);
|
|
||||||
}
|
|
||||||
activity.updateLastTime(m_owner.m_time);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VL_ATTR_ALWINLINE
|
VL_ATTR_ALWINLINE
|
||||||
void VerilatedSaifBuffer::emitIData(uint32_t code, IData newval, int bits) {
|
void VerilatedSaifBuffer::emitIData(uint32_t code, IData newval, int bits) {
|
||||||
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
||||||
ActivityVar& activity = m_owner.m_activity.at(code);
|
ActivityVar& activity = m_owner.m_activity.at(code);
|
||||||
|
activity.emitData<IData>(m_owner.m_time, newval, bits);
|
||||||
uint64_t dt = m_owner.m_time - activity.getLastUpdateTime();
|
|
||||||
for (size_t i = 0; i < activity.getWidth(); i++) {
|
|
||||||
activity.getBit(i).aggregateVal(dt, (newval >> i) & 1);
|
|
||||||
}
|
|
||||||
activity.updateLastTime(m_owner.m_time);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VL_ATTR_ALWINLINE
|
VL_ATTR_ALWINLINE
|
||||||
void VerilatedSaifBuffer::emitQData(uint32_t code, QData newval, int bits) {
|
void VerilatedSaifBuffer::emitQData(uint32_t code, QData newval, int bits) {
|
||||||
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
||||||
ActivityVar& activity = m_owner.m_activity.at(code);
|
ActivityVar& activity = m_owner.m_activity.at(code);
|
||||||
|
activity.emitData<QData>(m_owner.m_time, newval, bits);
|
||||||
uint64_t dt = m_owner.m_time - activity.getLastUpdateTime();
|
|
||||||
for (size_t i = 0; i < activity.getWidth(); i++) {
|
|
||||||
activity.getBit(i).aggregateVal(dt, (newval >> i) & 1);
|
|
||||||
}
|
|
||||||
activity.updateLastTime(m_owner.m_time);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VL_ATTR_ALWINLINE
|
VL_ATTR_ALWINLINE
|
||||||
void VerilatedSaifBuffer::emitWData(uint32_t code, const WData* newvalp, int bits) {
|
void VerilatedSaifBuffer::emitWData(uint32_t code, const WData* newvalp, int bits) {
|
||||||
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
||||||
ActivityVar& activity = m_owner.m_activity.at(code);
|
ActivityVar& activity = m_owner.m_activity.at(code);
|
||||||
|
activity.emitWData(m_owner.m_time, newvalp, bits);
|
||||||
uint64_t dt = m_owner.m_time - activity.getLastUpdateTime();
|
|
||||||
for (std::size_t i = 0; i < activity.getWidth(); ++i) {
|
|
||||||
size_t wordIndex = i / VL_EDATASIZE;
|
|
||||||
activity.getBit(i).aggregateVal(dt, (newvalp[wordIndex] >> VL_BITBIT_E(i)) & 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
activity.updateLastTime(m_owner.m_time);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VL_ATTR_ALWINLINE
|
VL_ATTR_ALWINLINE
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ public:
|
||||||
VL_ATTR_ALWINLINE
|
VL_ATTR_ALWINLINE
|
||||||
void aggregateVal(uint64_t dt, bool newVal) {
|
void aggregateVal(uint64_t dt, bool newVal) {
|
||||||
m_transitions += newVal != m_lastVal ? 1 : 0;
|
m_transitions += newVal != m_lastVal ? 1 : 0;
|
||||||
|
assert(dt < 10000);
|
||||||
m_highTime += m_lastVal ? dt : 0;
|
m_highTime += m_lastVal ? dt : 0;
|
||||||
m_lastVal = newVal;
|
m_lastVal = newVal;
|
||||||
}
|
}
|
||||||
|
|
@ -69,6 +70,21 @@ public:
|
||||||
ActivityVar& operator=(ActivityVar&&) = default;
|
ActivityVar& operator=(ActivityVar&&) = default;
|
||||||
|
|
||||||
// METHODS
|
// METHODS
|
||||||
|
VL_ATTR_ALWINLINE void emitBit(uint64_t time, CData newval);
|
||||||
|
|
||||||
|
template <typename DataType>
|
||||||
|
VL_ATTR_ALWINLINE
|
||||||
|
void emitData(uint64_t time, DataType newval, uint32_t bits) {
|
||||||
|
static_assert(std::is_integral<DataType>::value);
|
||||||
|
|
||||||
|
uint64_t dt = time - m_lastTime;
|
||||||
|
for (size_t i = 0; i < std::min(m_width, bits); i++) {
|
||||||
|
m_bits[i].aggregateVal(dt, (newval >> i) & 1);
|
||||||
|
}
|
||||||
|
updateLastTime(time);
|
||||||
|
}
|
||||||
|
|
||||||
|
VL_ATTR_ALWINLINE void emitWData(uint64_t time, const WData* newvalp, uint32_t bits);
|
||||||
VL_ATTR_ALWINLINE void updateLastTime(uint64_t val) { m_lastTime = val; }
|
VL_ATTR_ALWINLINE void updateLastTime(uint64_t val) { m_lastTime = val; }
|
||||||
|
|
||||||
// ACCESSORS
|
// ACCESSORS
|
||||||
|
|
@ -156,7 +172,7 @@ private:
|
||||||
void decrementIndent();
|
void decrementIndent();
|
||||||
void printIndent();
|
void printIndent();
|
||||||
|
|
||||||
int m_indent = 0; // Indentation depth
|
int m_indent = 0;
|
||||||
|
|
||||||
void printStr(const char* str);
|
void printStr(const char* str);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue