Calling single function multiple times with different arguments

I have written a module which contains a simple function which indeed is a counter which increments based on condition and start being true. I am planning to use the same function with different arguments. But the problem I am facing is the pre_count value is getting overlapped with the first function call value.

Expected results when I run this
counter value from first loop will be 30
counter value from second loop will be 24
but I see both loops counter value will be same always as pre_count is getting over ridden by first function call.
Attaching the log at the end.
Thanks in advance for you time and help.

module main;


logic        rtc_clk;
logic        tb_rtc_clk;
logic        tb_ish_clk;
logic        rtc_clk_rst;
logic [7:0]  forced_val;
logic        force_en;  
logic        start_main_clk_cg_count;
logic        stop_main_clk_cg_count;
logic        clear_main_clk_cg_count;
logic        main_clk_condition; 
logic        func_clk_condition;
logic [31:0] main_clk_cg_count;	
logic [31:0] main2_clk_cg_count;	
bit          first_loop;


function counter(input string name,input force_en,input [10:0] forced_val,input condition,input start,input stop,input clear,input [31:0] pre_count_val,output [31:0] count_val);
   
   if(first_loop) begin
     if(force_en) count_val = forced_val;
     else count_val = 0;
     $display("[%s] First-Loop val:%d ***** counter_val:%d force_en:%d forced_val:%d",name,first_loop,count_val,force_en,forced_val);
   end  
   if(clear | !rtc_clk_rst)  begin 
     count_val = 0;
     $display("[%s] check clear and reset check passed....counter val:%d",name,count_val);
   end else if(stop) begin
     $psprintf("[%s] saw stop",name);
      start = 0;  
   end else begin
      if(condition && start) begin
         if(first_loop & force_en) count_val = forced_val;
         $display("[%s] counter incrementing....counter val:%d force_val:%d pre_count_val:%d",name,count_val,forced_val,pre_count_val);

         count_val = pre_count_val+1;
         first_loop = 0;
      end
   end

endfunction 

initial rtc_clk = 0;
always #2 rtc_clk = ~rtc_clk;

assign tb_clk = rtc_clk;

initial begin
clear_main_clk_cg_count = 0;
stop_main_clk_cg_count = 0;
rtc_clk_rst = 0;
func_clk_condition = 0;
main_clk_cg_count = 0;
main2_clk_cg_count = 0;
first_loop =1;
#10; 
rtc_clk_rst = 1;
main_clk_condition = 1;
#2; 
start_main_clk_cg_count = 1;
#25;
func_clk_condition = 1;
#100; $finish;
end



  initial 
    begin
         forever begin
           @(posedge tb_clk) begin                    
counter("first_loop",force_en,forced_val,main_clk_condition,start_main_clk_cg_count,stop_main_clk_cg_count,clear_main_clk_cg_count,main_clk_cg_count,main_clk_cg_count);
           counter("second_loop",0,100,func_clk_condition,start_main_clk_cg_count,stop_main_clk_cg_count,clear_main_clk_cg_count,main2_clk_cg_count,main2_clk_cg_count);
           end
         end
    end
endmodule


Log:
[first_loop] First-Loop val:1 ***** counter_val: 0 force_en:x forced_val: X
[first_loop] check clear and reset check passed…counter val: 0
[second_loop] First-Loop val:1 ***** counter_val: 0 force_en:0 forced_val: 100
[second_loop] check clear and reset check passed…counter val: 0
[first_loop] First-Loop val:1 ***** counter_val: 0 force_en:x forced_val: X
[first_loop] check clear and reset check passed…counter val: 0
[second_loop] First-Loop val:1 ***** counter_val: 0 force_en:0 forced_val: 100
[second_loop] check clear and reset check passed…counter val: 0
[first_loop] First-Loop val:1 ***** counter_val: 0 force_en:x forced_val: X
[second_loop] First-Loop val:1 ***** counter_val: 0 force_en:0 forced_val: 100
[first_loop] First-Loop val:1 ***** counter_val: 0 force_en:x forced_val: X
[first_loop] counter incrementing…counter val: 0 force_val: X pre_count_val: 0
[first_loop] counter incrementing…counter val: 1 force_val: X pre_count_val: 1
[first_loop] counter incrementing…counter val: 2 force_val: X pre_count_val: 2
[first_loop] counter incrementing…counter val: 3 force_val: X pre_count_val: 3
[first_loop] counter incrementing…counter val: 4 force_val: X pre_count_val: 4
[first_loop] counter incrementing…counter val: 5 force_val: X pre_count_val: 5
[first_loop] counter incrementing…counter val: 6 force_val: X pre_count_val: 6
[second_loop] counter incrementing…counter val: 7 force_val: 100 pre_count_val: 6
[first_loop] counter incrementing…counter val: 7 force_val: X pre_count_val: 7
[second_loop] counter incrementing…counter val: 8 force_val: 100 pre_count_val: 7
[first_loop] counter incrementing…counter val: 8 force_val: X pre_count_val: 8
[second_loop] counter incrementing…counter val: 9 force_val: 100 pre_count_val: 8
[first_loop] counter incrementing…counter val: 9 force_val: X pre_count_val: 9
[second_loop] counter incrementing…counter val: 10 force_val: 100 pre_count_val: 9
[first_loop] counter incrementing…counter val: 10 force_val: X pre_count_val: 10
[second_loop] counter incrementing…counter val: 11 force_val: 100 pre_count_val: 10
[first_loop] counter incrementing…counter val: 11 force_val: X pre_count_val: 11
[second_loop] counter incrementing…counter val: 12 force_val: 100 pre_count_val: 11
[first_loop] counter incrementing…counter val: 12 force_val: X pre_count_val: 12
[second_loop] counter incrementing…counter val: 13 force_val: 100 pre_count_val: 12
[first_loop] counter incrementing…counter val: 13 force_val: X pre_count_val: 13
[second_loop] counter incrementing…counter val: 14 force_val: 100 pre_count_val: 13
[first_loop] counter incrementing…counter val: 14 force_val: X pre_count_val: 14
[second_loop] counter incrementing…counter val: 15 force_val: 100 pre_count_val: 14
[first_loop] counter incrementing…counter val: 15 force_val: X pre_count_val: 15
[second_loop] counter incrementing…counter val: 16 force_val: 100 pre_count_val: 15
[first_loop] counter incrementing…counter val: 16 force_val: X pre_count_val: 16
[second_loop] counter incrementing…counter val: 17 force_val: 100 pre_count_val: 16
[first_loop] counter incrementing…counter val: 17 force_val: X pre_count_val: 17
[second_loop] counter incrementing…counter val: 18 force_val: 100 pre_count_val: 17
[first_loop] counter incrementing…counter val: 18 force_val: X pre_count_val: 18
[second_loop] counter incrementing…counter val: 19 force_val: 100 pre_count_val: 18
[first_loop] counter incrementing…counter val: 19 force_val: X pre_count_val: 19
[second_loop] counter incrementing…counter val: 20 force_val: 100 pre_count_val: 19
[first_loop] counter incrementing…counter val: 20 force_val: X pre_count_val: 20
[second_loop] counter incrementing…counter val: 21 force_val: 100 pre_count_val: 20
[first_loop] counter incrementing…counter val: 21 force_val: X pre_count_val: 21
[second_loop] counter incrementing…counter val: 22 force_val: 100 pre_count_val: 21
[first_loop] counter incrementing…counter val: 22 force_val: X pre_count_val: 22
[second_loop] counter incrementing…counter val: 23 force_val: 100 pre_count_val: 22
[first_loop] counter incrementing…counter val: 23 force_val: X pre_count_val: 23
[second_loop] counter incrementing…counter val: 24 force_val: 100 pre_count_val: 23
[first_loop] counter incrementing…counter val: 24 force_val: X pre_count_val: 24
[second_loop] counter incrementing…counter val: 25 force_val: 100 pre_count_val: 24
[first_loop] counter incrementing…counter val: 25 force_val: X pre_count_val: 25
[second_loop] counter incrementing…counter val: 26 force_val: 100 pre_count_val: 25
[first_loop] counter incrementing…counter val: 26 force_val: X pre_count_val: 26
[second_loop] counter incrementing…counter val: 27 force_val: 100 pre_count_val: 26
[first_loop] counter incrementing…counter val: 27 force_val: X pre_count_val: 27
[second_loop] counter incrementing…counter val: 28 force_val: 100 pre_count_val: 27
[first_loop] counter incrementing…counter val: 28 force_val: X pre_count_val: 28
[second_loop] counter incrementing…counter val: 29 force_val: 100 pre_count_val: 28
[first_loop] counter incrementing…counter val: 29 force_val: X pre_count_val: 29
[second_loop] counter incrementing…counter val: 30 force_val: 100 pre_count_val: 29
[first_loop] counter incrementing…counter val: 30 force_val: X pre_count_val: 30
[second_loop] counter incrementing…counter val: 31 force_val: 100 pre_count_val: 30
$finish called from file “main_final.sv”, line 124.
$finish at simulation time 137

Declare the function automatic. value for each function will go to stack and hence you will see new copy of variable

In reply to nitin62goel:

Making the lifetime of the function automatic won’t solve this problem. The function count depends on the count_val argument being static, but that means there can only be one copy of it.

Functions are normally written completely dependent on inputs from their arguments and not any static variables within or outside the scope of the function. The count_val argument should be fedd back in as an input, you can change it to an inout.