From where exactly does the watchdog timeout in ovm_root.svh derive its setup of timeunit ? I added an ovm_report_info block ( in RED below) to the run_global_phase task as follows ( look for “tick at” ). I intended to see a display line every 1000 nSecs since in my testbench, I have a timeunit 1ns; directive. Instead, I get a display line every picosecond ( 1000 femtoseconds ). We’ve seen other issues with scaling on the watchdog timer scaling that are confusing as well, and are very similar to what is describe in earlier entries in this thread, “ridiculously short . . .”. How/Where should we be specifying the timeunit in our environment? We are running ovm_1.1 on Questa 6.4a presently.
task ovm_root::run_global_phase(ovm_phase phase=null);
time timeout;
if (m_curr_phase != null) begin
ovm_report_fatal(“PHSSTR”, “Global phasing has already started.”);
#0; // forces shutdown because $finish is forked
return;
end
// If we weren’t given a specific phase, run through them all.
if (phase == null) begin
phase = m_last_phase;
end
if (!m_phase_q.exists(phase)) begin
ovm_report_fatal(“PHNTFD”, {“Phase %0s not registered.”,phase.get_name()});
return;
end
if (m_curr_phase == phase || phase.is_done()) begin
ovm_report_warning(“PHDONE”, $psprintf(
“Phase ‘%0s’ already executed. Current phase is ‘%0s’.”,
phase.get_name(), m_curr_phase.get_name()));
return;
end
// MAIN LOOP: Executes all phases from the current phase
// through the phase given in the argument.
while (m_curr_phase != phase) begin
if (m_curr_phase == null)
m_curr_phase = m_first_phase;
else
m_curr_phase = m_phase_q[m_curr_phase];
// Trigger phase's in_progress event.
// The #0 allows any waiting processes to resume before we continue.
m_curr_phase.m_set_in_progress();
#0;
ovm_report_info("STARTPH",
$psprintf("STARTING PHASE %0s",m_curr_phase.get_name()),10001);
// TASK-based phase
if (m_curr_phase.is_task()) begin
event wait_forever;
timeout = (phase_timeout==0) ? `OVM_DEFAULT_TIMEOUT : phase_timeout;
`ifdef INCA
// IUS does not support disabling named fork blocks, so we isolate the
// inner fork block so we can kill it using disable fork
fork // guard process
begin
fork
// Start an independent process that kills the phase, else the killing
// stops prematurely at the component that issued the request.
begin
m_stop_process();
end
begin // guard process
fork
begin
#0; // ensures stop_process active before potential stop_request
m_do_phase_all(this,m_curr_phase);
@wait_forever; // wait for stop or timeout
end
begin
#timeout;
ovm_report_error("TIMOUT",
$psprintf("Watchdog timeout of '%0t' expired.", timeout));
end
join_any
disable fork;
end // end guard process
join_any
disable fork;
end
join // end guard process
`else // QUESTA
fork : task_based_phase
forever begin
#0; // ensures stop_process active before potential stop_request
#1000
ovm_report_info(“ovm_root”,“tick at 1000 units”,0);
end
m_stop_process();
begin
m_do_phase_all(this,m_curr_phase);
wait fork;
end
#timeout ovm_report_error(“TIMOUT”,
$psprintf(“Watchdog timeout of ‘%0t’ expired.”, timeout));
join_any
disable task_based_phase;
`endif // INCA-QUESTA
end // if (is_task)
Sample logfile snippet:
OVM_INFO @ 0.00ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.00ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.00ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.00ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.01ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.01ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.01ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.01ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.01ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.01ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.01ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.01ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.01ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.01ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.01ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.02ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.02ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.02ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.02ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.02ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.02ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.02ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.02ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.02ns [ovm_root] tick at 1000 units
OVM_INFO @ 0.03ns [ovm_root] tick at 1000 units
Thanks for any input here.