[#73220] add time offset when opening new files during SAIF trace
This commit is contained in:
parent
8b634440a1
commit
239c264b86
|
|
@ -126,6 +126,7 @@ void VerilatedSaif::open(const char* filename) VL_MT_SAFE_EXCLUDES(m_mutex) {
|
|||
openNextImp(m_rolloverSize != 0);
|
||||
if (!isOpen()) return;
|
||||
|
||||
m_currentTimeOrigin = m_totalTime;
|
||||
initializeSaifFileContents();
|
||||
|
||||
Super::traceInit();
|
||||
|
|
@ -202,7 +203,7 @@ bool VerilatedSaif::preChangeDump() {
|
|||
return isOpen();
|
||||
}
|
||||
|
||||
void VerilatedSaif::emitTimeChange(uint64_t timeui) { m_time = timeui; }
|
||||
void VerilatedSaif::emitTimeChange(uint64_t timeui) { m_totalTime = timeui; }
|
||||
|
||||
VerilatedSaif::~VerilatedSaif() {
|
||||
close();
|
||||
|
|
@ -245,7 +246,7 @@ void VerilatedSaif::close() VL_MT_SAFE_EXCLUDES(m_mutex) {
|
|||
|
||||
void VerilatedSaif::finalizeSaifFileContents() {
|
||||
printStr("(DURATION ");
|
||||
printStr(std::to_string(m_time));
|
||||
printStr(std::to_string(getCurrentTime()));
|
||||
printStr(")\n");
|
||||
|
||||
incrementIndent();
|
||||
|
|
@ -317,7 +318,7 @@ bool VerilatedSaif::printActivityStats(uint32_t activityCode, const char* activi
|
|||
continue;
|
||||
}
|
||||
|
||||
bit.aggregateVal(m_time - activity.getLastUpdateTime(), bit.getBitValue());
|
||||
bit.aggregateVal(getCurrentTime() - activity.getLastUpdateTime(), bit.getBitValue());
|
||||
|
||||
if (!anyNetValid) {
|
||||
openNetScope();
|
||||
|
|
@ -335,7 +336,7 @@ bool VerilatedSaif::printActivityStats(uint32_t activityCode, const char* activi
|
|||
|
||||
// We only have two-value logic so TZ, TX and TB will always be 0
|
||||
printStr(" (T0 ");
|
||||
printStr(std::to_string(m_time - bit.getHighTime()));
|
||||
printStr(std::to_string(getCurrentTime() - bit.getHighTime()));
|
||||
printStr(") (T1 ");
|
||||
printStr(std::to_string(bit.getHighTime()));
|
||||
printStr(") (TZ 0) (TX 0) (TB 0) (TC ");
|
||||
|
|
@ -343,7 +344,7 @@ bool VerilatedSaif::printActivityStats(uint32_t activityCode, const char* activi
|
|||
printStr("))\n");
|
||||
}
|
||||
|
||||
activity.updateLastTime(m_time);
|
||||
activity.updateLastTime(getCurrentTime());
|
||||
|
||||
return anyNetValid;
|
||||
}
|
||||
|
|
@ -354,7 +355,6 @@ void VerilatedSaif::clearCurrentlyCollectedData() {
|
|||
m_topScopes.clear();
|
||||
m_activity.clear();
|
||||
m_activityArena.clear();
|
||||
m_time = 0;
|
||||
}
|
||||
|
||||
void VerilatedSaif::printStr(const char* str) { m_filep->write(str, strlen(str)); }
|
||||
|
|
@ -504,42 +504,42 @@ VL_ATTR_ALWINLINE
|
|||
void VerilatedSaifBuffer::emitBit(uint32_t code, CData newval) {
|
||||
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
||||
ActivityVar& activity = m_owner.m_activity.at(code);
|
||||
activity.emitBit(m_owner.m_time, newval);
|
||||
activity.emitBit(m_owner.getCurrentTime(), newval);
|
||||
}
|
||||
|
||||
VL_ATTR_ALWINLINE
|
||||
void VerilatedSaifBuffer::emitCData(uint32_t code, CData newval, int bits) {
|
||||
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
||||
ActivityVar& activity = m_owner.m_activity.at(code);
|
||||
activity.emitData<CData>(m_owner.m_time, newval, bits);
|
||||
activity.emitData<CData>(m_owner.getCurrentTime(), newval, bits);
|
||||
}
|
||||
|
||||
VL_ATTR_ALWINLINE
|
||||
void VerilatedSaifBuffer::emitSData(uint32_t code, SData newval, int bits) {
|
||||
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
||||
ActivityVar& activity = m_owner.m_activity.at(code);
|
||||
activity.emitData<SData>(m_owner.m_time, newval, bits);
|
||||
activity.emitData<SData>(m_owner.getCurrentTime(), newval, bits);
|
||||
}
|
||||
|
||||
VL_ATTR_ALWINLINE
|
||||
void VerilatedSaifBuffer::emitIData(uint32_t code, IData newval, int bits) {
|
||||
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
||||
ActivityVar& activity = m_owner.m_activity.at(code);
|
||||
activity.emitData<IData>(m_owner.m_time, newval, bits);
|
||||
activity.emitData<IData>(m_owner.getCurrentTime(), newval, bits);
|
||||
}
|
||||
|
||||
VL_ATTR_ALWINLINE
|
||||
void VerilatedSaifBuffer::emitQData(uint32_t code, QData newval, int bits) {
|
||||
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
||||
ActivityVar& activity = m_owner.m_activity.at(code);
|
||||
activity.emitData<QData>(m_owner.m_time, newval, bits);
|
||||
activity.emitData<QData>(m_owner.getCurrentTime(), newval, bits);
|
||||
}
|
||||
|
||||
VL_ATTR_ALWINLINE
|
||||
void VerilatedSaifBuffer::emitWData(uint32_t code, const WData* newvalp, int bits) {
|
||||
assert(m_owner.m_activity.count(code) && "Activity must be declared earlier");
|
||||
ActivityVar& activity = m_owner.m_activity.at(code);
|
||||
activity.emitWData(m_owner.m_time, newvalp, bits);
|
||||
activity.emitWData(m_owner.getCurrentTime(), newvalp, bits);
|
||||
}
|
||||
|
||||
VL_ATTR_ALWINLINE
|
||||
|
|
|
|||
|
|
@ -194,7 +194,11 @@ private:
|
|||
|
||||
std::unordered_map<uint32_t, ActivityVar> m_activity;
|
||||
std::vector<std::vector<ActivityBit>> m_activityArena;
|
||||
uint64_t m_time;
|
||||
|
||||
VL_ATTR_ALWINLINE uint64_t getCurrentTime() const { return m_totalTime - m_currentTimeOrigin; }
|
||||
|
||||
uint64_t m_totalTime{0};
|
||||
uint64_t m_currentTimeOrigin{0};
|
||||
|
||||
std::vector<std::pair<std::string, VerilatedTracePrefixType>> m_prefixStack{
|
||||
{"", VerilatedTracePrefixType::SCOPE_MODULE}};
|
||||
|
|
|
|||
|
|
@ -1,27 +1,29 @@
|
|||
(SAIFILE
|
||||
(SAIFVERSION "2.0")
|
||||
(DIRECTION "backward")
|
||||
(DESIGN "t")
|
||||
(DESIGN "foo")
|
||||
(PROGRAM_NAME "Verilator")
|
||||
(VERSION "5.032")
|
||||
(DIVIDER / )
|
||||
(TIMESCALE 1ps)
|
||||
(DURATION 99)
|
||||
(INSTANCE top
|
||||
(INSTANCE top
|
||||
(NET
|
||||
(clk (T0 49) (T1 50) (TX 0) (TC 100))
|
||||
(clk (T0 49) (T1 50) (TZ 0) (TX 0) (TB 0) (TC 100))
|
||||
)
|
||||
(INSTANCE t
|
||||
(NET
|
||||
(clk (T0 49) (T1 50) (TX 0) (TC 100))
|
||||
(cyc\[0\] (T0 50) (T1 49) (TX 0) (TC 49))
|
||||
(cyc\[1\] (T0 51) (T1 48) (TX 0) (TC 24))
|
||||
(cyc\[2\] (T0 51) (T1 48) (TX 0) (TC 12))
|
||||
(cyc\[3\] (T0 51) (T1 48) (TX 0) (TC 6))
|
||||
(cyc\[4\] (T0 64) (T1 35) (TX 0) (TC 3))
|
||||
(cyc\[5\] (T0 64) (T1 35) (TX 0) (TC 1))
|
||||
(unchanged\[1\] (T0 0) (T1 99) (TX 0) (TC 1))
|
||||
(unchanged\[3\] (T0 0) (T1 99) (TX 0) (TC 1))
|
||||
(unchanged\[5\] (T0 0) (T1 99) (TX 0) (TC 1))
|
||||
)
|
||||
(NET
|
||||
(clk (T0 49) (T1 50) (TZ 0) (TX 0) (TB 0) (TC 100))
|
||||
(cyc\[0\] (T0 50) (T1 49) (TZ 0) (TX 0) (TB 0) (TC 49))
|
||||
(cyc\[1\] (T0 51) (T1 48) (TZ 0) (TX 0) (TB 0) (TC 24))
|
||||
(cyc\[2\] (T0 51) (T1 48) (TZ 0) (TX 0) (TB 0) (TC 12))
|
||||
(cyc\[3\] (T0 51) (T1 48) (TZ 0) (TX 0) (TB 0) (TC 6))
|
||||
(cyc\[4\] (T0 64) (T1 35) (TZ 0) (TX 0) (TB 0) (TC 3))
|
||||
(cyc\[5\] (T0 64) (T1 35) (TZ 0) (TX 0) (TB 0) (TC 1))
|
||||
(unchanged\[1\] (T0 0) (T1 99) (TZ 0) (TX 0) (TB 0) (TC 1))
|
||||
(unchanged\[3\] (T0 0) (T1 99) (TZ 0) (TX 0) (TB 0) (TC 1))
|
||||
(unchanged\[5\] (T0 0) (T1 99) (TZ 0) (TX 0) (TB 0) (TC 1))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,28 +1,30 @@
|
|||
(SAIFILE
|
||||
(SAIFVERSION "2.0")
|
||||
(DIRECTION "backward")
|
||||
(DESIGN "t")
|
||||
(DESIGN "foo")
|
||||
(PROGRAM_NAME "Verilator")
|
||||
(VERSION "5.032")
|
||||
(DIVIDER / )
|
||||
(TIMESCALE 1ps)
|
||||
(DURATION 189)
|
||||
(INSTANCE top
|
||||
(DURATION 90)
|
||||
(INSTANCE top
|
||||
(NET
|
||||
(clk (T0 144) (T1 45) (TX 0) (TC 90))
|
||||
(clk (T0 45) (T1 45) (TZ 0) (TX 0) (TB 0) (TC 90))
|
||||
)
|
||||
(INSTANCE t
|
||||
(NET
|
||||
(clk (T0 144) (T1 45) (TX 0) (TC 90))
|
||||
(cyc\[0\] (T0 145) (T1 44) (TX 0) (TC 44))
|
||||
(cyc\[1\] (T0 144) (T1 45) (TX 0) (TC 23))
|
||||
(cyc\[2\] (T0 144) (T1 45) (TX 0) (TC 11))
|
||||
(cyc\[3\] (T0 144) (T1 45) (TX 0) (TC 5))
|
||||
(cyc\[4\] (T0 132) (T1 57) (TX 0) (TC 3))
|
||||
(cyc\[5\] (T0 161) (T1 28) (TX 0) (TC 2))
|
||||
(cyc\[6\] (T0 128) (T1 61) (TX 0) (TC 1))
|
||||
(unchanged\[1\] (T0 100) (T1 89) (TX 0) (TC 1))
|
||||
(unchanged\[3\] (T0 100) (T1 89) (TX 0) (TC 1))
|
||||
(unchanged\[5\] (T0 100) (T1 89) (TX 0) (TC 1))
|
||||
)
|
||||
(NET
|
||||
(clk (T0 45) (T1 45) (TZ 0) (TX 0) (TB 0) (TC 90))
|
||||
(cyc\[0\] (T0 46) (T1 44) (TZ 0) (TX 0) (TB 0) (TC 44))
|
||||
(cyc\[1\] (T0 45) (T1 45) (TZ 0) (TX 0) (TB 0) (TC 23))
|
||||
(cyc\[2\] (T0 45) (T1 45) (TZ 0) (TX 0) (TB 0) (TC 11))
|
||||
(cyc\[3\] (T0 45) (T1 45) (TZ 0) (TX 0) (TB 0) (TC 5))
|
||||
(cyc\[4\] (T0 33) (T1 57) (TZ 0) (TX 0) (TB 0) (TC 3))
|
||||
(cyc\[5\] (T0 62) (T1 28) (TZ 0) (TX 0) (TB 0) (TC 2))
|
||||
(cyc\[6\] (T0 29) (T1 61) (TZ 0) (TX 0) (TB 0) (TC 1))
|
||||
(unchanged\[1\] (T0 1) (T1 89) (TZ 0) (TX 0) (TB 0) (TC 1))
|
||||
(unchanged\[3\] (T0 1) (T1 89) (TZ 0) (TX 0) (TB 0) (TC 1))
|
||||
(unchanged\[5\] (T0 1) (T1 89) (TZ 0) (TX 0) (TB 0) (TC 1))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in New Issue