From f9ac7b664c4dd799e12780d484e4f927f9c1b057 Mon Sep 17 00:00:00 2001 From: Kami Date: Mon, 24 Feb 2025 14:49:39 +0800 Subject: [PATCH] vcs: warmup is implemented using the return value of simv_nstp --- src/test/csrc/vcs/vcs_main.cpp | 19 ++----------------- src/test/vsrc/vcs/DifftestEndpoint.sv | 21 +++------------------ 2 files changed, 5 insertions(+), 35 deletions(-) diff --git a/src/test/csrc/vcs/vcs_main.cpp b/src/test/csrc/vcs/vcs_main.cpp index 3088cdaba..d8c6f5657 100644 --- a/src/test/csrc/vcs/vcs_main.cpp +++ b/src/test/csrc/vcs/vcs_main.cpp @@ -43,7 +43,6 @@ static uint64_t max_instrs = 0; static char *workload_list = NULL; static uint32_t overwrite_nbytes = 0xe00; static uint64_t warmup_instr = 0; -static svScope difftest_endpoint_scope; struct core_end_info_t { bool core_trap[NUM_CORES]; double core_cpi[NUM_CORES]; @@ -55,6 +54,7 @@ enum { SIMV_RUN, SIMV_DONE, SIMV_FAIL, + SIMV_WARMUP, } simv_state; extern "C" void set_bin_file(char *s) { @@ -100,10 +100,6 @@ extern "C" void set_max_instrs(uint64_t mc) { max_instrs = mc; } -extern "C" void set_difftest_endpoint_scope() { - difftest_endpoint_scope = svGetScope(); -} - extern "C" uint64_t get_stuck_limit() { #ifdef CONFIG_NO_DIFFTEST return 0; @@ -171,17 +167,6 @@ extern "C" void set_simjtag() { enable_simjtag = true; } -extern "C" void set_perfCtrl_clean(); - -void difftest_perfCtrl_clean() { - if (difftest_endpoint_scope == NULL) { - printf("Error: Could not retrieve DifftestEndpoint scope, set first\n"); - assert(difftest_endpoint_scope); - } - svSetScope(difftest_endpoint_scope); - set_perfCtrl_clean(); -} - extern "C" uint8_t simv_init() { if (workload_list != NULL) { if (switch_workload()) @@ -263,9 +248,9 @@ extern "C" uint8_t simv_step() { for (int i = 0; i < NUM_CORES; i++) { auto trap = difftest[i]->get_trap_event(); if (warmup_instr != 0 && trap->instrCnt > warmup_instr) { - difftest_perfCtrl_clean(); warmup_instr = 0; Info("Warmup finished. The performance counters will be reset.\n"); + return SIMV_WARMUP; } if (max_instrs != 0) { // 0 for no limit diff --git a/src/test/vsrc/vcs/DifftestEndpoint.sv b/src/test/vsrc/vcs/DifftestEndpoint.sv index c0355e300..bfec8ea93 100644 --- a/src/test/vsrc/vcs/DifftestEndpoint.sv +++ b/src/test/vsrc/vcs/DifftestEndpoint.sv @@ -51,7 +51,6 @@ import "DPI-C" function longint get_stuck_limit(); import "DPI-C" function void set_overwrite_nbytes(longint len); import "DPI-C" function void set_overwrite_autoset(); import "DPI-C" function void set_warmup_instr(longint instrs); -import "DPI-C" context function void set_difftest_endpoint_scope(); `ifdef WITH_DRAMSIM3 import "DPI-C" function void simv_tick(); `endif // WITH_DRAMSIM3 @@ -69,9 +68,11 @@ import "DPI-C" function void set_iotrace_name(string name); `define SIMV_DONE 8'h1 `define SIMV_FAIL 8'h2 +`define SIMV_WARMUP 8'h3 reg [63:0] difftest_logCtrl_begin_r; reg [63:0] difftest_logCtrl_end_r; +reg difftest_perfCtrl_clean_r; string bin_file; string flash_bin_file; @@ -103,7 +104,6 @@ initial begin end stuck_limit = 0; `ifndef TB_NO_DPIC - set_difftest_endpoint_scope(); stuck_limit = get_stuck_limit(); // workload: bin file if ($test$plusargs("workload")) begin @@ -362,25 +362,10 @@ end /* * perf/log ctrl */ -reg difftest_perfCtrl_clean_r; assign difftest_logCtrl_begin = difftest_logCtrl_begin_r; assign difftest_logCtrl_end = difftest_logCtrl_end_r; assign difftest_logCtrl_level = 0; -assign difftest_perfCtrl_clean = difftest_perfCtrl_clean_r; - -export "DPI-C" task set_perfCtrl_clean; -task set_perfCtrl_clean(); - difftest_perfCtrl_clean_r <= 1'b1; -endtask - -always @(posedge clock) begin - if (reset) begin - difftest_perfCtrl_clean_r <= 1'b0; - end - else if (difftest_perfCtrl_clean_r) begin - difftest_perfCtrl_clean_r <= 1'b0; - end -end +assign difftest_perfCtrl_clean = (simv_result == `SIMV_WARMUP); `ifndef TB_NO_DPIC assign difftest_perfCtrl_dump = simv_result != 0;