diff --git a/docs/finn/source_code/finn.transformation.fpgadataflow.rst b/docs/finn/source_code/finn.transformation.fpgadataflow.rst
index c4afa056f7ca6ce7f8fa8f454939b2b2534f170f..5a6acbe3989e70a1926c02c8384ab99d42f8421b 100644
--- a/docs/finn/source_code/finn.transformation.fpgadataflow.rst
+++ b/docs/finn/source_code/finn.transformation.fpgadataflow.rst
@@ -32,7 +32,7 @@ finn.transformation.fpgadataflow.codegen\_ipstitch
 finn.transformation.fpgadataflow.codegen\_npysim
 ------------------------------------------------
 
-.. automodule:: finn.transformation.fpgadataflow.codegen_npysim
+.. automodule:: finn.transformation.fpgadataflow.prepare_cppsim
    :members:
    :undoc-members:
    :show-inheritance:
diff --git a/notebooks/advanced/1_custom_transformation_pass.ipynb b/notebooks/advanced/1_custom_transformation_pass.ipynb
index f79ea9fc18883fc4b1333092cfd8ad07805b2882..a35786a859c004269bbf01f6139251cb7d2cb035 100644
--- a/notebooks/advanced/1_custom_transformation_pass.ipynb
+++ b/notebooks/advanced/1_custom_transformation_pass.ipynb
@@ -404,7 +404,7 @@
       "                    inst.get_nodeattr(\"code_gen_dir_npysim\") != \"\"\n",
       "                ), \"\"\"Node\n",
       "                attribute \"code_gen_dir_npysim\" is not set. Please run\n",
-      "                Transformation CodeGen_npysim first.\"\"\"\n",
+      "                Transformation PrepareCppSim first.\"\"\"\n",
       "                # call the compilation function for this node\n",
       "                inst.compile_singlenode_code()\n",
       "                # ensure that executable path is now set\n",
diff --git a/notebooks/end2end_example/tfc_end2end_verification.ipynb b/notebooks/end2end_example/tfc_end2end_verification.ipynb
index f03add2da37f1c7d0b33824fb0d1b9d19ba8f7fa..4b6f98678c14c5231cecb51df244065e352b399d 100644
--- a/notebooks/end2end_example/tfc_end2end_verification.ipynb
+++ b/notebooks/end2end_example/tfc_end2end_verification.ipynb
@@ -219,7 +219,7 @@
    "metadata": {},
    "source": [
     "To generate the code for this simulation and to generate the executable two transformations are used:\n",
-    "* `CodeGen_npysim` which generates the C++ code for the corresponding hls layer\n",
+    "* `PrepareCppSim` which generates the C++ code for the corresponding hls layer\n",
     "* `Compile` which compules the C++ code and stores the path to the executable"
    ]
   },
@@ -229,10 +229,10 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "from finn.transformation.fpgadataflow.codegen_npysim import CodeGen_npysim\n",
+    "from finn.transformation.fpgadataflow.prepare_cppsim import PrepareCppSim\n",
     "from finn.transformation.fpgadataflow.compile import Compile\n",
     "\n",
-    "model_for_npysim = model_for_npysim.transform(CodeGen_npysim())\n",
+    "model_for_npysim = model_for_npysim.transform(PrepareCppSim())\n",
     "model_for_npysim = model_for_npysim.transform(Compile())"
    ]
   },
diff --git a/src/finn/custom_op/fpgadataflow/__init__.py b/src/finn/custom_op/fpgadataflow/__init__.py
index 8430a56bc2688627f82da6ae92140f5cff82cb60..8e61b362d41a0e3ebbeb1ec3564465b0abee958a 100644
--- a/src/finn/custom_op/fpgadataflow/__init__.py
+++ b/src/finn/custom_op/fpgadataflow/__init__.py
@@ -288,7 +288,7 @@ class HLSCustomOp(CustomOp):
         if code_gen_dir == "":
             raise Exception(
                 """
-Found no codegen dir for this node, did you run the codegen_npysim transformation?
+Found no codegen dir for this node, did you run the prepare_cppsim transformation?
             """
             )
         # create a npy file for each input of the node (in_ind is input index)
diff --git a/src/finn/transformation/fpgadataflow/compile.py b/src/finn/transformation/fpgadataflow/compile.py
index 40c7da8f77efeaa655459402699a401b642b776c..512c9562c53136eb8f28b898b8a63ed727320b54 100644
--- a/src/finn/transformation/fpgadataflow/compile.py
+++ b/src/finn/transformation/fpgadataflow/compile.py
@@ -58,7 +58,7 @@ class Compile(NodeLocalTransformation):
                     inst.get_nodeattr("code_gen_dir_npysim") != ""
                 ), """Node
                 attribute "code_gen_dir_npysim" is not set. Please run
-                Transformation CodeGen_npysim first."""
+                Transformation PrepareCppSim first."""
                 # call the compilation function for this node
                 inst.compile_singlenode_code()
                 # ensure that executable path is now set
diff --git a/src/finn/transformation/fpgadataflow/codegen_npysim.py b/src/finn/transformation/fpgadataflow/prepare_cppsim.py
similarity index 98%
rename from src/finn/transformation/fpgadataflow/codegen_npysim.py
rename to src/finn/transformation/fpgadataflow/prepare_cppsim.py
index 02200e76db3f9c8207605bb93c4b07f0ebc76cab..a68e37bc35891e5f5cb0a7ac4258972090367f06 100644
--- a/src/finn/transformation/fpgadataflow/codegen_npysim.py
+++ b/src/finn/transformation/fpgadataflow/prepare_cppsim.py
@@ -57,7 +57,7 @@ def _codegen_single_node(node, model):
         raise Exception("Custom op_type %s is currently not supported." % op_type)
 
 
-class CodeGen_npysim(Transformation):
+class PrepareCppSim(Transformation):
     """Call custom implementation to generate code for single custom node
     and create folder that contains all the generated files.
     All nodes in the graph must have the fpgadataflow backend attribute.
diff --git a/tests/end2end/test_end2end_cnv_w1a1.py b/tests/end2end/test_end2end_cnv_w1a1.py
index f6b4d8990ebb74b4f799795a96105a9bab0d0db1..536b1bb6b589f6646cc3fd792ab3ed1d6174ab44 100644
--- a/tests/end2end/test_end2end_cnv_w1a1.py
+++ b/tests/end2end/test_end2end_cnv_w1a1.py
@@ -62,7 +62,7 @@ from finn.transformation.fpgadataflow.replace_verilog_relpaths import (
 )
 from finn.transformation.fpgadataflow.create_stitched_ip import CreateStitchedIP
 from finn.transformation.fpgadataflow.set_exec_mode import SetExecMode
-from finn.transformation.fpgadataflow.codegen_npysim import CodeGen_npysim
+from finn.transformation.fpgadataflow.prepare_cppsim import PrepareCppSim
 from finn.transformation.fpgadataflow.compile import Compile
 from finn.transformation.fpgadataflow.make_pynq_driver import MakePYNQDriver
 from finn.transformation.fpgadataflow.make_pynq_proj import MakePYNQProject
@@ -189,7 +189,7 @@ def test_end2end_cnv_w1a1_verify_dataflow_part():
     out_name = model.graph.output[0].name
     inp_dict = {inp_name: x}
     # npysim
-    model = model.transform(CodeGen_npysim())
+    model = model.transform(PrepareCppSim())
     model = model.transform(Compile())
     model = model.transform(SetExecMode("npysim"))
     model.save(build_dir + "/end2end_cnv_w1a1_ipgen_npysim.onnx")
diff --git a/tests/end2end/test_end2end_tfc_w1a1_throughput_test.py b/tests/end2end/test_end2end_tfc_w1a1_throughput_test.py
index 1cce1c55ae01dd54ec5c0142dd29df207e93e504..d73f796788ce48b0c345821b53211f3282e51baf 100644
--- a/tests/end2end/test_end2end_tfc_w1a1_throughput_test.py
+++ b/tests/end2end/test_end2end_tfc_w1a1_throughput_test.py
@@ -48,7 +48,7 @@ from finn.transformation.bipolar_to_xnor import ConvertBipolarMatMulToXnorPopcou
 from finn.transformation.fold_constants import FoldConstants
 from finn.transformation.fpgadataflow.codegen_ipgen import CodeGen_ipgen
 from finn.transformation.fpgadataflow.create_stitched_ip import CreateStitchedIP
-from finn.transformation.fpgadataflow.codegen_npysim import CodeGen_npysim
+from finn.transformation.fpgadataflow.prepare_cppsim import PrepareCppSim
 from finn.transformation.fpgadataflow.compile import Compile
 from finn.transformation.fpgadataflow.create_dataflow_partition import (
     CreateDataflowPartition,
@@ -175,7 +175,7 @@ def test_end2end_tfc_w1a1_verify_dataflow_part():
     out_name = model.graph.output[0].name
     inp_dict = {inp_name: x}
     # npysim
-    model = model.transform(CodeGen_npysim())
+    model = model.transform(PrepareCppSim())
     model = model.transform(Compile())
     model = model.transform(SetExecMode("npysim"))
     model.save(build_dir + "/end2end_tfc_w1a1_ipstitch_npysim.onnx")
diff --git a/tests/end2end/test_end2end_tfc_w1a2.py b/tests/end2end/test_end2end_tfc_w1a2.py
index a6516b8eae2f8a90014c5d5a6d6b277ebd104ef5..e04c2866cb516809136bd782102b4b5d81cec8a0 100644
--- a/tests/end2end/test_end2end_tfc_w1a2.py
+++ b/tests/end2end/test_end2end_tfc_w1a2.py
@@ -45,7 +45,7 @@ from finn.custom_op.registry import getCustomOp
 from finn.transformation.fold_constants import FoldConstants
 from finn.transformation.fpgadataflow.codegen_ipgen import CodeGen_ipgen
 from finn.transformation.fpgadataflow.create_stitched_ip import CreateStitchedIP
-from finn.transformation.fpgadataflow.codegen_npysim import CodeGen_npysim
+from finn.transformation.fpgadataflow.prepare_cppsim import PrepareCppSim
 from finn.transformation.fpgadataflow.compile import Compile
 from finn.transformation.fpgadataflow.create_dataflow_partition import (
     CreateDataflowPartition,
@@ -167,7 +167,7 @@ def test_end2end_tfc_w1a2_verify_dataflow_part():
     out_name = model.graph.output[0].name
     inp_dict = {inp_name: x}
     # npysim
-    model = model.transform(CodeGen_npysim())
+    model = model.transform(PrepareCppSim())
     model = model.transform(Compile())
     model = model.transform(SetExecMode("npysim"))
     model.save(build_dir + "/end2end_tfc_w1a2_ipstitch_npysim.onnx")
diff --git a/tests/end2end/test_end2end_tfc_w2a2.py b/tests/end2end/test_end2end_tfc_w2a2.py
index c33525428741350dbb92eae288d06fa9d832212b..07ea53569585174fd574d08305dc140c48bb6d60 100644
--- a/tests/end2end/test_end2end_tfc_w2a2.py
+++ b/tests/end2end/test_end2end_tfc_w2a2.py
@@ -45,7 +45,7 @@ from finn.custom_op.registry import getCustomOp
 from finn.transformation.fold_constants import FoldConstants
 from finn.transformation.fpgadataflow.codegen_ipgen import CodeGen_ipgen
 from finn.transformation.fpgadataflow.create_stitched_ip import CreateStitchedIP
-from finn.transformation.fpgadataflow.codegen_npysim import CodeGen_npysim
+from finn.transformation.fpgadataflow.prepare_cppsim import PrepareCppSim
 from finn.transformation.fpgadataflow.compile import Compile
 from finn.transformation.fpgadataflow.create_dataflow_partition import (
     CreateDataflowPartition,
@@ -167,7 +167,7 @@ def test_end2end_tfc_w2a2_verify_dataflow_part():
     out_name = model.graph.output[0].name
     inp_dict = {inp_name: x}
     # npysim
-    model = model.transform(CodeGen_npysim())
+    model = model.transform(PrepareCppSim())
     model = model.transform(Compile())
     model = model.transform(SetExecMode("npysim"))
     model.save(build_dir + "/end2end_tfc_w2a2_ipstitch_npysim.onnx")
diff --git a/tests/fpgadataflow/test_code_gen_trafo.py b/tests/fpgadataflow/test_code_gen_trafo.py
index a9b9cd84de77d3393ff76760528ea53780482bfb..129d9ae162f1a170037ddd0dfa2b06361cc9be94 100644
--- a/tests/fpgadataflow/test_code_gen_trafo.py
+++ b/tests/fpgadataflow/test_code_gen_trafo.py
@@ -33,7 +33,7 @@ from onnx import TensorProto, helper
 import finn.util.basic as util
 from finn.core.datatype import DataType
 from finn.core.modelwrapper import ModelWrapper
-from finn.transformation.fpgadataflow.codegen_npysim import CodeGen_npysim
+from finn.transformation.fpgadataflow.prepare_cppsim import PrepareCppSim
 
 
 def test_code_gen_trafo():
@@ -77,7 +77,7 @@ def test_code_gen_trafo():
     W = util.gen_finn_dt_tensor(wdt, (mw, mh))
     model.set_initializer("weights", W)
 
-    model = model.transform(CodeGen_npysim())
+    model = model.transform(PrepareCppSim())
     for node in model.graph.node:
         code_gen_attribute = util.get_by_name(node.attribute, "code_gen_dir_npysim")
         tmp_dir = code_gen_attribute.s.decode("UTF-8")
diff --git a/tests/fpgadataflow/test_compilation_trafo.py b/tests/fpgadataflow/test_compilation_trafo.py
index 7a50888545b7c464d187f77122f89b255e9063da..42f4bfc8445cfc2f8b82db20546f0f573b5a776c 100644
--- a/tests/fpgadataflow/test_compilation_trafo.py
+++ b/tests/fpgadataflow/test_compilation_trafo.py
@@ -33,7 +33,7 @@ from onnx import TensorProto, helper
 import finn.util.basic as util
 from finn.core.datatype import DataType
 from finn.core.modelwrapper import ModelWrapper
-from finn.transformation.fpgadataflow.codegen_npysim import CodeGen_npysim
+from finn.transformation.fpgadataflow.prepare_cppsim import PrepareCppSim
 from finn.transformation.fpgadataflow.compile import Compile
 
 
@@ -78,7 +78,7 @@ def test_compilation_trafo():
     W = util.gen_finn_dt_tensor(wdt, (mw, mh))
     model.set_initializer("weights", W)
 
-    model = model.transform(CodeGen_npysim())
+    model = model.transform(PrepareCppSim())
     model = model.transform(Compile())
     for node in model.graph.node:
         compilation_attribute = util.get_by_name(node.attribute, "executable_path")
diff --git a/tests/fpgadataflow/test_convert_to_hls_layers_cnv.py b/tests/fpgadataflow/test_convert_to_hls_layers_cnv.py
index 46c39e45abe88c0a980228655eed7f2e31833a81..273ebc9528fa676c85b01476894353e34241c68b 100644
--- a/tests/fpgadataflow/test_convert_to_hls_layers_cnv.py
+++ b/tests/fpgadataflow/test_convert_to_hls_layers_cnv.py
@@ -45,7 +45,7 @@ from finn.transformation.double_to_single_float import DoubleToSingleFloat
 from finn.transformation.lower_convs_to_matmul import LowerConvsToMatMul
 from finn.transformation.bipolar_to_xnor import ConvertBipolarMatMulToXnorPopcount
 import finn.transformation.fpgadataflow.convert_to_hls_layers as to_hls
-from finn.transformation.fpgadataflow.codegen_npysim import CodeGen_npysim
+from finn.transformation.fpgadataflow.prepare_cppsim import PrepareCppSim
 from finn.transformation.fpgadataflow.compile import Compile
 from finn.transformation.fpgadataflow.set_exec_mode import SetExecMode
 from finn.custom_op.registry import getCustomOp
@@ -113,7 +113,7 @@ def test_convert_to_hls_layers_cnv_w1a1():
     mp_nodes = model.get_nodes_by_op_type("StreamingMaxPool_Batch")
     assert len(mp_nodes) == 2
     # model.save("cnv-pre-compile.onnx")
-    model = model.transform(CodeGen_npysim())
+    model = model.transform(PrepareCppSim())
     model = model.transform(Compile())
     model = model.transform(SetExecMode("npysim"))
     # model.save("cnv-post-compile.onnx")
diff --git a/tests/fpgadataflow/test_convert_to_hls_layers_fc.py b/tests/fpgadataflow/test_convert_to_hls_layers_fc.py
index 1a2d65de001a484fc41dbe63a38194a254ac8490..7b18e8585ad7213718957f1172438c518c8cc524 100644
--- a/tests/fpgadataflow/test_convert_to_hls_layers_fc.py
+++ b/tests/fpgadataflow/test_convert_to_hls_layers_fc.py
@@ -42,7 +42,7 @@ from finn.core.modelwrapper import ModelWrapper
 from finn.custom_op.registry import getCustomOp
 from finn.transformation.bipolar_to_xnor import ConvertBipolarMatMulToXnorPopcount
 from finn.transformation.fold_constants import FoldConstants
-from finn.transformation.fpgadataflow.codegen_npysim import CodeGen_npysim
+from finn.transformation.fpgadataflow.prepare_cppsim import PrepareCppSim
 from finn.transformation.fpgadataflow.compile import Compile
 from finn.transformation.fpgadataflow.set_exec_mode import SetExecMode
 from finn.transformation.general import GiveReadableTensorNames, GiveUniqueNodeNames
@@ -107,7 +107,7 @@ def test_convert_to_hls_layers_tfc_w1a1():
     fc3w.set_nodeattr("SIMD", 16)
     fc3w.set_nodeattr("PE", 10)
 
-    model = model.transform(CodeGen_npysim())
+    model = model.transform(PrepareCppSim())
     model = model.transform(Compile())
     model = model.transform(SetExecMode("npysim"))
 
@@ -171,7 +171,7 @@ def test_convert_to_hls_layers_tfc_w1a2():
     fc3w = getCustomOp(fc3)
     fc3w.set_nodeattr("SIMD", 16)
     fc3w.set_nodeattr("PE", 10)
-    model = model.transform(CodeGen_npysim())
+    model = model.transform(PrepareCppSim())
     model = model.transform(Compile())
     model = model.transform(SetExecMode("npysim"))
     raw_i = get_data("finn", "data/onnx/mnist-conv/test_data_set_0/input_0.pb")
diff --git a/tests/fpgadataflow/test_fpgadataflow_convinputgenerator.py b/tests/fpgadataflow/test_fpgadataflow_convinputgenerator.py
index 7c19ebbfaeed09cb1e367cf6567e5b149aa4236c..68421d67df3e3295b5618cdf7e53fbacbe41d129 100644
--- a/tests/fpgadataflow/test_fpgadataflow_convinputgenerator.py
+++ b/tests/fpgadataflow/test_fpgadataflow_convinputgenerator.py
@@ -34,7 +34,7 @@ import finn.core.onnx_exec as oxe
 from finn.core.datatype import DataType
 from finn.core.modelwrapper import ModelWrapper
 from finn.transformation.fpgadataflow.codegen_ipgen import CodeGen_ipgen
-from finn.transformation.fpgadataflow.codegen_npysim import CodeGen_npysim
+from finn.transformation.fpgadataflow.prepare_cppsim import PrepareCppSim
 from finn.transformation.fpgadataflow.compile import Compile
 from finn.transformation.fpgadataflow.hlssynth_ipgen import HLSSynth_IPGen
 from finn.transformation.fpgadataflow.set_exec_mode import SetExecMode
@@ -147,7 +147,7 @@ def test_fpgadataflow_slidingwindow(idt, k, ifm_dim, ifm_ch, stride, exec_mode,
 
     if exec_mode == "npysim":
         model = model.transform(SetExecMode("npysim"))
-        model = model.transform(CodeGen_npysim())
+        model = model.transform(PrepareCppSim())
         model = model.transform(Compile())
     elif exec_mode == "rtlsim":
         model = model.transform(SetExecMode("rtlsim"))
diff --git a/tests/fpgadataflow/test_fpgadataflow_fclayer.py b/tests/fpgadataflow/test_fpgadataflow_fclayer.py
index 7552fecd85ee0e36216f6c934d454f057a2a41ce..75ebf80e218a5bba132370f717c40691ce80e5af 100644
--- a/tests/fpgadataflow/test_fpgadataflow_fclayer.py
+++ b/tests/fpgadataflow/test_fpgadataflow_fclayer.py
@@ -39,7 +39,7 @@ from finn.core.datatype import DataType
 from finn.core.modelwrapper import ModelWrapper
 from finn.custom_op.multithreshold import multithreshold
 from finn.transformation.fpgadataflow.codegen_ipgen import CodeGen_ipgen
-from finn.transformation.fpgadataflow.codegen_npysim import CodeGen_npysim
+from finn.transformation.fpgadataflow.prepare_cppsim import PrepareCppSim
 from finn.transformation.fpgadataflow.compile import Compile
 from finn.transformation.fpgadataflow.hlssynth_ipgen import HLSSynth_IPGen
 from finn.transformation.fpgadataflow.set_exec_mode import SetExecMode
@@ -191,7 +191,7 @@ def test_fpgadataflow_fclayer_npysim(mem_mode, idt, wdt, act, nf, sf, mw, mh):
         inst = getCustomOp(node)
         inst.set_nodeattr("mem_mode", mem_mode)
     model = model.transform(SetExecMode("npysim"))
-    model = model.transform(CodeGen_npysim())
+    model = model.transform(PrepareCppSim())
     model = model.transform(Compile())
     # prepare input data
     input_dict = prepare_inputs(x, idt, wdt)
diff --git a/tests/fpgadataflow/test_layer_streaming_maxpool_batch.py b/tests/fpgadataflow/test_layer_streaming_maxpool_batch.py
index a7a731aaa5593a9fd680061d2b8ad3fc47e9f490..0e470a751eb05d4527e4e5ae278aaa4e1948af2a 100644
--- a/tests/fpgadataflow/test_layer_streaming_maxpool_batch.py
+++ b/tests/fpgadataflow/test_layer_streaming_maxpool_batch.py
@@ -34,7 +34,7 @@ import finn.core.onnx_exec as oxe
 from finn.core.datatype import DataType
 from finn.core.modelwrapper import ModelWrapper
 from finn.transformation.fpgadataflow.codegen_ipgen import CodeGen_ipgen
-from finn.transformation.fpgadataflow.codegen_npysim import CodeGen_npysim
+from finn.transformation.fpgadataflow.prepare_cppsim import PrepareCppSim
 from finn.transformation.fpgadataflow.compile import Compile
 from finn.transformation.fpgadataflow.hlssynth_ipgen import HLSSynth_IPGen
 from finn.transformation.fpgadataflow.set_exec_mode import SetExecMode
@@ -138,7 +138,7 @@ def test_fpgadataflow_streamingmaxpool(idt, k, ifm_dim, ifm_ch, exec_mode):
 
     if exec_mode == "npysim":
         model = model.transform(SetExecMode("npysim"))
-        model = model.transform(CodeGen_npysim())
+        model = model.transform(PrepareCppSim())
         model = model.transform(Compile())
     elif exec_mode == "rtlsim":
         model = model.transform(SetExecMode("rtlsim"))