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
// 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; )
{
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);
+ }
}
private:
htif_t* htif;
- // global registers for communication with host machine
- reg_t tohost;
- reg_t fromhost;
-
// main memory, shared between processors
char* mem;
size_t memsz; // memory size in bytes
// terminate the simulation loop after the current iteration
void stop() { running = false; }
bool running;
+ size_t steps;
// run each processor for n instructions; interleave instructions are
// run on a processor before moving on to the next processor.