proc create_project {projectname project_path} {
  #Switch to the modelsim folder to create the project
  set libname $projectname
  set initfile /uusoc/facility/cad_tools/Mentor/modelsim10.7b/modeltech/modelsim.ini
  project new $project_path/$projectname $projectname $libname $initfile 0
}

proc create_project_with_close {projectname modelsim_path} {
  #Get the current project name
  set project_env [project env]
  if {$project_env eq ""} {
      #If string empty (no project)
      create_project $projectname $modelsim_path
    } else {
      #If string not empty (a project is loaded so clsoe it first)
      project close
      create_project $projectname $modelsim_path
    }
  }

proc add_files_project {verilog_files} {
  #Get the length of the list
  set listlength [llength $verilog_files]
  #Add the verilog files one by one
  for {set x 0} {$x<$listlength} {incr x} {
    project addfile [lindex $verilog_files $x]
  }
}

proc add_waves {top_tb} {
  add wave -position insertpoint sim:/$top_tb/*
}
proc runsim {simtime unit} {
  run $simtime $unit
}
#Top procedure to create enw project
proc top_create_new_project {projectname verilog_files modelsim_path simtime unit top_tb} {
  #Create the project
  create_project_with_close $projectname $modelsim_path
  #Add the verilog files
  add_files_project $verilog_files
  #Compile all the files
  set myFiles [project filenames]
  foreach x $myFiles {
    vlog +define+ENABLE_TIMING +define+ENABLE_SIGNAL_INITIALIZATION $x
  }
  #Start the simulation
  vsim $projectname.$top_tb -voptargs=+acc
  #Add the waves
  add_waves $top_tb
  #run the simulation
  runsim $simtime $unit
  #Fit the window view
  wave zoom full
}
#Top proc to recompile files and re run the simulation
proc top_rerun_sim {simtime unit top_tb} {
  #Save actual format
  set myLoc [pwd]
  write format wave -window .main_pane.wave.interior.cs.body.pw.wf $myLoc/relaunch.do
  quit -sim
  #Compile updated verilog files
  set myFiles [project filenames]
  foreach x $myFiles {
    vlog +define+ENABLE_TIMING +define+ENABLE_SIGNAL_INITIALIZATION $x
  }
  set projectname K4n4_test_fpga_msim
  vsim $projectname.$top_tb -voptargs=+acc -do relaunch.do
  #run the simulation
  run $simtime $unit
}