From 42cbf10dc1f6c6ce0a9591a53be2555f75da6c87 Mon Sep 17 00:00:00 2001 From: liweiwei Date: Mon, 27 Dec 2021 11:00:27 +0800 Subject: add blocksz parameter to specify the cache block size for CBO operations --- spike_main/spike.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'spike_main') diff --git a/spike_main/spike.cc b/spike_main/spike.cc index e2680cc..05619a7 100644 --- a/spike_main/spike.cc +++ b/spike_main/spike.cc @@ -72,6 +72,7 @@ static void help(int exit_code = 1) fprintf(stderr, " --dm-no-abstract-csr Debug module won't support abstract to authenticate\n"); fprintf(stderr, " --dm-no-halt-groups Debug module won't support halt groups\n"); fprintf(stderr, " --dm-no-impebreak Debug module won't support implicit ebreak in program buffer\n"); + fprintf(stderr, " --blocksz= Cache block size (B) for CMO operations(powers of 2) [default 16]\n"); exit(exit_code); } @@ -241,6 +242,7 @@ int main(int argc, char** argv) uint16_t rbb_port = 0; bool use_rbb = false; unsigned dmi_rti = 0; + reg_t blocksz = 64; debug_module_config_t dm_config = { .progbufsize = 2, .max_sba_data_width = 0, @@ -376,6 +378,13 @@ int main(int argc, char** argv) exit(-1); } }); + parser.option(0, "blocksz", 1, [&](const char* s){ + blocksz = strtoull(s, 0, 0); + if (((blocksz & (blocksz - 1))) != 0) { + fprintf(stderr, "--blocksz should be power of 2\n"); + exit(-1); + } + }); auto argv1 = parser.parse(argv); std::vector htif_args(argv1, (const char*const*)argv + argc); @@ -464,6 +473,7 @@ int main(int argc, char** argv) if (dc) s.get_core(i)->get_mmu()->register_memtracer(&*dc); for (auto e : extensions) s.get_core(i)->register_extension(e()); + s.get_core(i)->get_mmu()->set_cache_blocksz(blocksz); } s.set_debug(debug); -- cgit v1.1