diff --git a/flow/simulators/ivlog_sim.sh b/flow/simulators/ivlog_sim.sh
new file mode 100755
index 0000000000000000000000000000000000000000..149b9ceb0d244481a36a5bfc58923965081b2955
--- /dev/null
+++ b/flow/simulators/ivlog_sim.sh
@@ -0,0 +1,16 @@
+#-----------------------------------------------------------------------------
+# SoC Labs icarus verilog simulation script for engine testbench
+# A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+#
+# Contributors
+#
+# David Mapstone (d.a.mapstone@soton.ac.uk)
+#
+# Copyright  2022, SoC Labs (www.soclabs.org)
+#-----------------------------------------------------------------------------
+
+#!/usr/bin/env bash
+
+mkdir -p $SOC_TOP_DIR/simulate/sim/ 
+iverilog -g2012 -o $SOC_TOP_DIR/simulate/sim/$1.vvp $ACC_WRAPPER_DIR/hdl/verif/tb_$1.sv
+cd $SOC_TOP_DIR/simulate/sim/ && vvp $1.vvp $2
\ No newline at end of file
diff --git a/flow/socsim b/flow/socsim
new file mode 100755
index 0000000000000000000000000000000000000000..4b2d7f1bc9db2453e218a5bc01beaee19b3248c0
--- /dev/null
+++ b/flow/socsim
@@ -0,0 +1,18 @@
+#-----------------------------------------------------------------------------
+# SoC Labs socsim script to run required simulation
+# A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+#
+# Contributors
+#
+# David Mapstone (d.a.mapstone@soton.ac.uk)
+#
+# Copyright  2022, SoC Labs (www.soclabs.org)
+#-----------------------------------------------------------------------------
+
+#!/usr/bin/env bash
+
+DEFAULT_SIMULATOR="ivlog"
+if [[ -z "${SIMULATOR}" ]]; then 
+    SIMULATOR=$DEFAULT_SIMULATOR
+fi
+$SOC_TOP_DIR"/flow/simulators/"$SIMULATOR"_sim.sh" $@
diff --git a/set_env.sh b/set_env.sh
index fcc9c40cd1cf8652b0c2fcce06021c4df1378658..8d0c2c3100aed43376ccc385b87d5b5234a798a1 100755
--- a/set_env.sh
+++ b/set_env.sh
@@ -10,34 +10,40 @@
 #-----------------------------------------------------------------------------
 #!/bin/bash
 
-# Get Root Location of Repository
+# Get Root Location of Design Structure
 if [ -z $DESIGN_ROOT ]; then
     # If $DESIGN_ROOT hasn't been set yet
     DESIGN_ROOT=`git rev-parse --show-superproject-working-tree`
+
     if [ -z $DESIGN_ROOT ]; then
-        # If not in a submodule
+        # If not in a submodule - at root
         DESIGN_ROOT=`git rev-parse --show-toplevel`
     fi
-fi
 
-# Set Environment Variable for this Repository
-export SHA_2_SOC_DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
+    # Source Top-Level Sourceme
+    source $DESIGN_ROOT/set_env.sh
+else
+    # Set Environment Variable for this Repository
+    export SOC_TOP_DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
 
-# If this Repo is root of workspace
-if [ $SHA_2_SOC_DIR = $DESIGN_ROOT ]; then
-    echo "Design Workspace: $SHA_2_SOC_DIR" 
-    export DESIGN_ROOT
-fi
+    # If this Repo is root of workspace
+    if [ $SOC_TOP_DIR = $DESIGN_ROOT ]; then
+        echo "Design Workspace: $DESIGN_ROOT" 
+        export DESIGN_ROOT
+        # Set Default Simulator
+        export SIMULATOR="ivlog"
+    fi
 
-# Source environment variables for all submodules
-for d in $SHA_2_SOC_DIR/* ; do
-    if [ -f "$d/.git" ]; then
-        if [ -f "$d/set_env.sh" ]; then
-        # If .git file exists - submodule
-            source $d/set_env.sh
+    # Source environment variables for all submodules
+    for d in $SOC_TOP_DIR/* ; do
+        if [ -f "$d/.git" ]; then
+            if [ -f "$d/set_env.sh" ]; then
+            # If .git file exists - submodule
+                source $d/set_env.sh
+            fi
         fi
-    fi
-done
+    done
 
-# Add Scripts to PAth
-export PATH="$PATH:/$SHA_2_SOC_DIR/flow"
\ No newline at end of file
+    # Add Scripts to Path
+    export PATH="$PATH:/$SOC_TOP_DIR/flow"
+fi
\ No newline at end of file