diff options
| author | Prashanth Mundkur | 2018-09-28 18:37:11 -0700 |
|---|---|---|
| committer | Prashanth Mundkur | 2018-10-23 15:32:15 -0700 |
| commit | 8525e0b26eaec05c2c031279693cd61c544fc12a (patch) | |
| tree | 78f2f2ce1625152b0a3a380b5cdf8b27b5758d95 /riscv | |
| parent | 0bce4fc40f2473e6f9f59e54b3e5061a4752b2d5 (diff) | |
RISC-V: tick the clock in the C platform.
Diffstat (limited to 'riscv')
| -rw-r--r-- | riscv/riscv_platform_impl.c | 1 | ||||
| -rw-r--r-- | riscv/riscv_platform_impl.h | 1 | ||||
| -rw-r--r-- | riscv/riscv_sail.h | 2 | ||||
| -rw-r--r-- | riscv/riscv_sim.c | 18 |
4 files changed, 20 insertions, 2 deletions
diff --git a/riscv/riscv_platform_impl.c b/riscv/riscv_platform_impl.c index 1a1d42a7..3135895d 100644 --- a/riscv/riscv_platform_impl.c +++ b/riscv/riscv_platform_impl.c @@ -15,3 +15,4 @@ uint64_t rv_clint_base = UINT64_C(0x2000000); uint64_t rv_clint_size = UINT64_C(0xc0000); uint64_t rv_htif_tohost = UINT64_C(0x80001000); +uint64_t rv_insns_per_tick = UINT64_C(100); diff --git a/riscv/riscv_platform_impl.h b/riscv/riscv_platform_impl.h index db5ff639..a3ab79f8 100644 --- a/riscv/riscv_platform_impl.h +++ b/riscv/riscv_platform_impl.h @@ -21,3 +21,4 @@ extern uint64_t rv_clint_base; extern uint64_t rv_clint_size; extern uint64_t rv_htif_tohost; +extern uint64_t rv_insns_per_tick; diff --git a/riscv/riscv_sail.h b/riscv/riscv_sail.h index 596a8263..17afedbd 100644 --- a/riscv/riscv_sail.h +++ b/riscv/riscv_sail.h @@ -12,6 +12,8 @@ void model_fini(void); unit zinit_platform(unit); unit zinit_sys(unit); bool zstep(sail_int); +unit ztick_clock(unit); +unit ztick_platform(unit); extern bool zhtif_done; extern mach_bits zhtif_exit_code; diff --git a/riscv/riscv_sim.c b/riscv/riscv_sim.c index 2ac5e800..9e99136d 100644 --- a/riscv/riscv_sim.c +++ b/riscv/riscv_sim.c @@ -111,6 +111,8 @@ void init_spike(const char *f, uint64_t entry) tv_set_dtb_in_rom(s, 1); tv_load_elf(s, f); tv_reset(s); + /* sync the insns per tick */ + rv_insns_per_tick = tv_get_insns_per_tick(s); #else s = NULL; #endif @@ -261,6 +263,7 @@ void run_sail(void) /* initialize the step number */ mach_int step_no = 0; + int insn_cnt = 0; while (!zhtif_done) { { /* run a Sail step */ @@ -271,7 +274,10 @@ void run_sail(void) if (have_exception) goto step_exception; flush_logs(); } - if (stepped) step_no++; + if (stepped) { + step_no++; + insn_cnt++; + } #ifdef SPIKE { /* run a Spike step */ @@ -303,7 +309,15 @@ void run_sail(void) } #endif - /* TODO: update time */ + if (insn_cnt == rv_insns_per_tick) { + insn_cnt = 0; + ztick_clock(UNIT); + ztick_platform(UNIT); +#ifdef SPIKE + tv_tick_clock(s); + tv_step_io(s); +#endif + } } dump_state: |
