diff --git a/flows/makefile.simulate b/flows/makefile.simulate
index ec3faef9c90e48d28571a04ec5605ae6185c46b9..95875fad7e8f2cfad8e6cfdb09fa8481a20c88d4 100644
--- a/flows/makefile.simulate
+++ b/flows/makefile.simulate
@@ -22,7 +22,7 @@ MTI_VC_OPTIONS    += -f $(TBENCH_VC) $(ADP_OPTIONS)
 MTI_RUN_OPTIONS   = -voptargs=+acc
 
 # VCS options
-VCS_OPTIONS    = +vcs+lic+wait +v2k +lint=all,noTMR,noVCDE -debug
+VCS_OPTIONS    = +vcs+lic+wait +v2k -sverilog -override_timescale=1ns/1ps +lint=all,noTMR,noVCDE -debug
 VCS_SIM_OPTION = +vcs+lic+wait +vcs+flush+log -assert nopostproc
 VCS_VC_OPTIONS = -f $(TBENCH_VC) $(ADP_OPTIONS)
 
@@ -73,28 +73,38 @@ compile_mti: NANOSOC_DEFINES += IMEM_0_RAM_PRELOAD
 compile_vcs: NANOSOC_DEFINES += IMEM_0_RAM_PRELOAD
 compile_xm:  NANOSOC_DEFINES += IMEM_0_RAM_PRELOAD
 
+
+# Generate verilog .vc filelist from flists
+flist_vfiles_nanosoc: gen_defs
+	@if [ ! -d $(SIM_DIR) ] ; then \
+	  mkdir -p $(SIM_DIR); \
+	fi
+	@if [ ! -d $(SIM_DIR)/logs ] ; then \
+	  mkdir -p $(SIM_DIR)/logs; \
+	fi
+	@cd $(SIM_DIR); python $(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/filelist_compile.py -f $(TBENCH_VC) -a -v -o tbench.vc
+
+
 # ------- VCS -----------
 
 # Compile RTL
-compile_vcs : gen_defs
-	vcs $(VCS_OPTIONS) $(VCS_VC_OPTIONS) $(DEFINES_VC)  | tee compile_vcs.log
+compile_vcs : gen_defs flist_vfiles_nanosoc
+	cd $(SIM_DIR); vcs $(VCS_OPTIONS) -f tbench.vc  $(DEFINES_VC)  | tee compile_vcs.log
+
 
 # Run simulation in batch mode
-run_vcs : code
-	@if [ ! -d logs ] ; then \
-	  mkdir logs; \
-	fi
-	@echo quit > quit.do
-	./simv $(VCS_SIM_OPTION)                         < quit.do | tee logs/run_$(TESTNAME).log ;
+run_vcs : code compile_vcs
+	@echo quit > $(SIM_DIR)/quit.do
+	cd $(SIM_DIR); ./simv $(VCS_SIM_OPTION) -define ADP_FILE=adp.cmd < quit.do | tee logs/run_$(TESTNAME).log ;
 
 # Run simulation in interactive mode
-sim_vcs : code
-	./simv -gui +vcs+lic+wait +vcs+flush+log &
+sim_vcs : code compile_vcs
+	cd $(SIM_DIR); ./simv -gui +vcs+lic+wait +vcs+flush+log &
 
 # ------- XM -----------
 
 # Compile RTL
-compile_xm : bootrom gen_defs
+compile_xm : bootrom gen_defs flist_vfiles_nanosoc
 	@echo ADP_FILE
 	@echo $(ADP_OPTIONS)
 	cd $(SIM_DIR); xmprep  +overwrite $(XM_VC_OPTIONS) $(DEFINES_VC) +debug -timescale 1ns/1ps -top $(TB_TOP) | tee compile_xm.log
@@ -105,9 +115,6 @@ compile_xm : bootrom gen_defs
 
 # Run simulation in batch mode
 run_xm : code compile_xm
-	@if [ ! -d $(SIM_DIR)/logs ] ; then \
-	  mkdir $(SIM_DIR)/logs; \
-	fi
 	@echo run  >  $(SIM_DIR)/run.tcl.tmp
 	@echo exit >> $(SIM_DIR)/run.tcl.tmp
 	@mv  $(SIM_DIR)/run.tcl.tmp $(SIM_DIR)/run.tcl
@@ -120,21 +127,11 @@ sim_xm : code compile_xm
 # ------- MTI -----------
 
 # Compile RTL
-compile_mti : bootrom gen_defs
-	@mkdir -p $(SIM_DIR)
-	@cd $(SIM_DIR)
-	@if [ -d work ] ; then \
-          true ; \
-	else \
-	  vlib work; \
-	fi
-	cd $(SIM_DIR); vlog -incr -lint +v2k $(MTI_VC_OPTIONS) $(DEFINES_VC) | tee compile_mti.log
+compile_mti : bootrom gen_defs flist_vfiles_nanosoc lib_mti
+	cd $(SIM_DIR); vlog -incr -lint +v2k -f tbench.vc $(ADP_OPTIONS) $(DEFINES_VC) | tee compile_mti.log
 
 # Run simulation in batch mode
 run_mti : code compile_mti
-	@if [ ! -d $(SIM_DIR)/logs ] ; then \
-	  mkdir $(SIM_DIR)/logs; \
-	fi
 	@echo "run -all" > $(SIM_DIR)/run.tcl.tmp
 	@echo "quit -f" >> $(SIM_DIR)/run.tcl.tmp
 	@mv  $(SIM_DIR)/run.tcl.tmp $(SIM_DIR)/run.tcl
@@ -152,7 +149,11 @@ sim_mti : code compile_mti
 
 # Create work directory
 lib_mti :
-	vlib work
+	@if [ -d $(SIM_DIR)/work ] ; then \
+          true ; \
+	else \
+	  vlib  $(SIM_DIR)/work; \
+	fi
 
 # Generate Make filelist from flists
 flist_makefile_nanosoc: gen_defs