fix htif interaction with interactive mode
[riscv-isa-sim.git] / riscv / sim.cc
index 27933b7f4aca39e81eae5df2e7629bbab7d979c8..8a56cd975e5433778564adccdada09188bee5b62 100644 (file)
 
 sim_t::sim_t(int _nprocs, htif_t* _htif)
   : htif(_htif),
-    tohost(0),
-    fromhost(0),
     procs(_nprocs),
-    running(false)
+    running(false),
+    steps(0)
 {
   // allocate target machine's memory, shrinking it as necessary
   // until the allocation succeeds
@@ -69,7 +68,7 @@ void sim_t::run(bool debug)
   // word 1 of memory contains the core count
   mmu->store_uint32(4, num_cores());
 
-  //htif->wait_for_start();
+  htif->wait_for_start();
 
   for(running = true; running; )
   {
@@ -82,8 +81,12 @@ void sim_t::run(bool debug)
 
 void sim_t::step_all(size_t n, size_t interleave, bool noisy)
 {
-  htif->wait_for_packet();
   for(size_t j = 0; j < n; j+=interleave)
+  {
+    if (steps % 16384 + interleave >= 16384)
+      htif->wait_for_packet();
+    steps += interleave;
     for(int i = 0; i < (int)num_cores(); i++)
       procs[i]->step(interleave,noisy);
+  }
 }