[verilator] Only control the reset line when necessary The previous code was calling SetReset() and then UnsetReset() for every cycle after the initial reset, which I noticed because I was using a watchpoint to debug something else. This seems a bit unnecessary, so this patch gets rid of that. It also changes the logic to only call SetReset() and UnsetReset() on the "edges". This should be equivalent, but it's a bit more obvious what's going on. Signed-off-by: Rupert Swarbrick <rswarbrick@lowrisc.org>
diff --git a/hw/dv/verilator/simutil_verilator/cpp/verilator_sim_ctrl.cc b/hw/dv/verilator/simutil_verilator/cpp/verilator_sim_ctrl.cc index b5292e1..0721d7c 100644 --- a/hw/dv/verilator/simutil_verilator/cpp/verilator_sim_ctrl.cc +++ b/hw/dv/verilator/simutil_verilator/cpp/verilator_sim_ctrl.cc
@@ -289,11 +289,16 @@ time_begin_ = std::chrono::steady_clock::now(); UnsetReset(); Trace(); + + unsigned long start_reset_cycle_ = initial_reset_delay_cycles_; + unsigned long end_reset_cycle_ = start_reset_cycle_ + reset_duration_cycles_; + while (1) { - if (time_ / 2 >= initial_reset_delay_cycles_) { + unsigned long cycle_ = time_ / 2; + + if (cycle_ == start_reset_cycle_) { SetReset(); - } - if (time_ / 2 >= reset_duration_cycles_ + initial_reset_delay_cycles_) { + } else if (cycle_ == end_reset_cycle_) { UnsetReset(); }