extending tracing feature for advanced debugging

This commit is contained in:
Blaise Tine
2021-08-15 05:10:46 -07:00
parent 640c98a4e8
commit a60bfc5e01
7 changed files with 100 additions and 36 deletions

View File

@@ -10,8 +10,12 @@
#define ENABLE_MEM_STALLS
#ifndef TRACE_DELAY
#define TRACE_DELAY 0
#ifndef TRACE_START_TIME
#define TRACE_START_TIME 0ull
#endif
#ifndef TRACE_STOP_TIME
#define TRACE_STOP_TIME -1ull
#endif
#ifndef MEM_LATENCY
@@ -30,8 +34,6 @@
#define VERILATOR_RESET_VALUE 2
#endif
uint64_t sim_trace_delay = TRACE_DELAY;
static uint64_t timestamp = 0;
double sc_time_stamp() {
@@ -55,6 +57,23 @@ static void __aligned_free(void *ptr) {
///////////////////////////////////////////////////////////////////////////////
static bool trace_enabled = false;
static uint64_t trace_start_time = TRACE_START_TIME;
static uint64_t trace_stop_time = TRACE_STOP_TIME;
bool sim_trace_enabled() {
if (timestamp >= trace_start_time
&& timestamp < trace_stop_time)
return true;
return trace_enabled;
}
void sim_trace_enable(bool enable) {
trace_enabled = enable;
}
///////////////////////////////////////////////////////////////////////////////
opae_sim::opae_sim()
: stop_(false)
, host_buffer_ids_(0)
@@ -205,7 +224,7 @@ void opae_sim::step() {
void opae_sim::eval() {
vortex_afu_->eval();
#ifdef VCD_OUTPUT
if (timestamp >= sim_trace_delay) {
if (sim_trace_enabled()) {
trace_->dump(timestamp);
}
#endif
@@ -349,7 +368,7 @@ void opae_sim::avs_bus() {
}
/*printf("%0ld: [sim] MEM Wr Req: bank=%d, addr=%x, data=", timestamp, b, base_addr);
for (int i = 0; i < MEM_BLOCK_SIZE; i++) {
printf("%0x", data[(MEM_BLOCK_SIZE-1)-i]);
printf("%02x", data[(MEM_BLOCK_SIZE-1)-i]);
}
printf("\n");*/
}
@@ -360,6 +379,7 @@ void opae_sim::avs_bus() {
mem_req.cycles_left = MEM_LATENCY;
for (auto& rsp : mem_reads_[b]) {
if (mem_req.addr == rsp.addr) {
// duplicate requests receive the same cycle delay
mem_req.cycles_left = rsp.cycles_left;
break;
}