diff --git a/ethosu/vela/architecture_features.py b/ethosu/vela/architecture_features.py
index 1eae79a..9ca4304 100644
--- a/ethosu/vela/architecture_features.py
+++ b/ethosu/vela/architecture_features.py
@@ -14,7 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 # Description:
-# Holds a container for Ethos-U55/System architecture parameters.
+# Holds a container for Ethos-U and System architecture parameters.
 import enum
 from collections import namedtuple
 from configparser import ConfigParser
@@ -109,7 +109,7 @@
         self.banks = banks
 
 
-# Area indices must match Ethos-U55 SHRAM layout spec
+# Area indices must match Ethos-U SHRAM layout spec
 class SharedBufferArea(enum.IntEnum):
     OFM = 0
     Weights = 1
@@ -123,8 +123,8 @@
     Ethos_U55_64 = "ethos-u55-64"
     Ethos_U55_128 = "ethos-u55-128"
     Ethos_U55_256 = "ethos-u55-256"
-    Yoda_256 = "yoda-256"
-    Yoda_512 = "yoda-512"
+    Ethos_U65_256 = "ethos-u65-256"
+    Ethos_U65_512 = "ethos-u65-512"
 
     @classmethod
     def member_list(cls):
@@ -132,13 +132,13 @@
 
 
 class ArchitectureFeatures:
-    """This class is a container for various parameters of the Ethos-U55 core
+    """This class is a container for various parameters of the Ethos-U core
     and system configuration that can be tuned, either by command line
-    parameters or by the Ethos-U55 architects. The class is often passed
+    parameters or by the Ethos-U architects. The class is often passed
     around to passes that need to do architecture-dependent actions.
 
     Note the difference between ArchitectureFeatures and CompilerOptions
-    - ArchitectureFeatures is for changing the Ethos-U55 and system architecture
+    - ArchitectureFeatures is for changing the Ethos-U and system architecture
     - CompilerOptions is for changing the behaviour of the compiler
     """
 
@@ -146,10 +146,10 @@
         "ArchitectureConfig", "macs cores ofm_ublock ifm_ublock shram_banks shram_granules elem_units"
     )
     accelerator_configs = {
-        Accelerator.Yoda_512: ArchitectureConfig(
+        Accelerator.Ethos_U65_512: ArchitectureConfig(
             256, 2, Block(2, 2, 8), Block(2, 2, 8), 48, [8, 8, 8, 8, 16, 8, 16, 20], 8
         ),
-        Accelerator.Yoda_256: ArchitectureConfig(
+        Accelerator.Ethos_U65_256: ArchitectureConfig(
             256, 1, Block(2, 2, 8), Block(2, 2, 8), 48, [8, 8, 8, 8, 16, 8, 16, 20], 8
         ),
         Accelerator.Ethos_U55_256: ArchitectureConfig(
@@ -189,9 +189,9 @@
         self.config = accel_config
 
         self.system_config = system_config
-        self.is_yoda_system = self.accelerator_config in (Accelerator.Yoda_256, Accelerator.Yoda_512)
+        self.is_ethos_u65_system = self.accelerator_config in (Accelerator.Ethos_U65_256, Accelerator.Ethos_U65_512)
 
-        self.max_outstanding_dma = 2 if self.is_yoda_system else 1
+        self.max_outstanding_dma = 2 if self.is_ethos_u65_system else 1
         self.max_outstanding_kernels = 3
 
         self.ncores = accel_config.cores
@@ -224,7 +224,7 @@
         self.memory_port_widths = np.zeros(MemArea.Size)
 
         # Get system configuration
-        self.__read_sys_config(self.is_yoda_system)
+        self.__read_sys_config(self.is_ethos_u65_system)
 
         # apply the global memory clock scales to the individual ones from the system config
         for mem in MemArea.all():
@@ -303,7 +303,7 @@
         self.cycles_weight = 40
         self.max_sram_used_weight = 1000
 
-        if self.is_yoda_system and (self.fast_storage_mem_area != self.feature_map_storage_mem_area):
+        if self.is_ethos_u65_system and (self.fast_storage_mem_area != self.feature_map_storage_mem_area):
             self.max_sram_used_weight = 0
 
         # Shared Buffer Block allocations
@@ -383,11 +383,11 @@
         elif accel_config == Accelerator.Ethos_U55_128:
             self.output_cycles_per_elem = (0.75, 1.25, 0.75, 0.75, 1.0, 1.5, 0.25, 0.5)
             self.activation_cycles_per_elem = (1.0, 0.5, 0.0)
-        elif accel_config in (Accelerator.Ethos_U55_256, Accelerator.Yoda_256):
+        elif accel_config in (Accelerator.Ethos_U55_256, Accelerator.Ethos_U65_256):
             self.output_cycles_per_elem = (0.625, 1.125, 0.5, 0.375, 0.5, 0.75, 0.125, 0.25)
             self.activation_cycles_per_elem = (1.0, 0.25, 0.0)
         else:
-            assert accel_config == Accelerator.Yoda_512
+            assert accel_config == Accelerator.Ethos_U65_512
             self.output_cycles_per_elem = (0.3125, 0.5625, 0.25, 0.1875, 0.25, 0.375, 0.0625, 0.125)
             self.activation_cycles_per_elem = (0.5, 0.125, 0.0)
 
@@ -607,7 +607,7 @@
         print("Warning: No configured CPU performance estimate for", op.type)
         return 0
 
-    def __read_sys_config(self, is_yoda_system):
+    def __read_sys_config(self, is_ethos_u65_system):
         """
         Gets the system configuration with the given name from the vela configuration file
         Example configuration snippet:
@@ -646,20 +646,20 @@
             self.feature_map_storage_mem_area = MemArea[self.__sys_config("feature_map_storage_mem_area", "Sram")]
 
             self.permanent_storage_mem_area = MemArea[self.__sys_config("permanent_storage_mem_area", "OffChipFlash")]
-            if is_yoda_system:
+            if is_ethos_u65_system:
                 if self.permanent_storage_mem_area is not MemArea.Dram:
                     raise Exception(
                         "Invalid permanent_storage_mem_area = "
                         + str(self.permanent_storage_mem_area)
-                        + " (must be 'DRAM' for Yoda)."
+                        + " (must be 'DRAM' for Ethos-U65)."
                     )
             else:
                 if self.permanent_storage_mem_area not in set((MemArea.OnChipFlash, MemArea.OffChipFlash)):
                     raise Exception(
                         "Invalid permanent_storage_mem_area = "
                         + str(self.permanent_storage_mem_area)
-                        + " (must be 'OnChipFlash' or 'OffChipFlash' for ethosu-55)."
-                        " To store the weights and other constant data in SRAM on ethosu-55 select 'OnChipFlash'"
+                        + " (must be 'OnChipFlash' or 'OffChipFlash' for Ethos-U55)."
+                        " To store the weights and other constant data in SRAM on Ethos-U55 select 'OnChipFlash'"
                     )
 
             self.sram_size = 1024 * int(self.__sys_config("sram_size_kb", "204800"))
diff --git a/ethosu/vela/compiler_driver.py b/ethosu/vela/compiler_driver.py
index 32eef30..9e1cb3a 100644
--- a/ethosu/vela/compiler_driver.py
+++ b/ethosu/vela/compiler_driver.py
@@ -46,7 +46,7 @@
     """Set of options to change compiler behaviour - verbosity, targets, turning off passes.
 
 Note the difference between ArchitectureFeatures and CompilerOptions
-- ArchitectureFeatures is for changing the Ethos-U55 and system architecture
+- ArchitectureFeatures is for changing the Ethos-U and system architecture
 - CompilerOptions is for changing the behaviour of the compiler
 """
 
diff --git a/ethosu/vela/register_command_stream_generator.py b/ethosu/vela/register_command_stream_generator.py
index 30b5e04..dd63d2e 100644
--- a/ethosu/vela/register_command_stream_generator.py
+++ b/ethosu/vela/register_command_stream_generator.py
@@ -14,9 +14,9 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 # Description:
-# Register level (low-level) command stream generation for Ethos-U55. Takes a list of NPU operations and generates
+# Register level (low-level) command stream generation for Ethos-U. Takes a list of NPU operations and generates
 # all the register settings. Calculates dependencies between commands and inserts wait operations. And generates a bit
-# stream suitable for interpretation by the Ethos-U55 processor.
+# stream suitable for interpretation by the Ethos-U processor.
 from collections import defaultdict
 from collections import namedtuple
 from enum import Enum
@@ -1210,7 +1210,7 @@
             memory_accesses[npu_op] = get_dma_memory_accesses(npu_op)
         else:
             memory_accesses[npu_op] = get_op_memory_accesses(npu_op, arch)
-    if arch.is_yoda_system:
+    if arch.is_ethos_u65_system:
         emit.cmd0_with_param(cmd0.NPU_SET_PARALLEL_MODE, arch.ncores - 1)
     dep_watermark = Watermark(0, 0)
     prev_op = None
@@ -1272,12 +1272,12 @@
 
 def generate_register_command_stream(npu_op_list: List[NpuOperation], accelerator: Accelerator) -> List[int]:
     """
-    Public facing API for generating an ethosu register command stream.
+    Public facing API for generating an Ethos-U register command stream.
     Calculates dependencies between commands and inserts wait operations if needed.
 
     :param npu_op_list: List[NpuOperation] list of high level NPU operations
-    :param accelerator: architecture_features.Accelerator enum to pick the correct ethosu accelerator
-    :return ethosu instructions, as a list of 32-bit integers
+    :param accelerator: architecture_features.Accelerator enum to pick the correct Ethos-U accelerator
+    :return Ethos-U instructions, as a list of 32-bit integers
     """
     emit = CommandStreamEmitter()
     arch = ArchitectureFeatures(
diff --git a/ethosu/vela/shared_buffer_allocation.py b/ethosu/vela/shared_buffer_allocation.py
index c957be8..ee55962 100644
--- a/ethosu/vela/shared_buffer_allocation.py
+++ b/ethosu/vela/shared_buffer_allocation.py
@@ -14,7 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 # Description:
-# Shared buffer allocation works out how to allocate the Ethos-U55 shared buffer for a given pass.
+# Shared buffer allocation works out how to allocate the Ethos-U shared buffer for a given pass.
 from typing import List
 from typing import Tuple
 
diff --git a/ethosu/vela/test/extapi/test_extapi_encode_weights.py b/ethosu/vela/test/extapi/test_extapi_encode_weights.py
index 0459cae..854d14c 100644
--- a/ethosu/vela/test/extapi/test_extapi_encode_weights.py
+++ b/ethosu/vela/test/extapi/test_extapi_encode_weights.py
@@ -30,8 +30,8 @@
         Accelerator.Ethos_U55_64,
         Accelerator.Ethos_U55_128,
         Accelerator.Ethos_U55_256,
-        Accelerator.Yoda_256,
-        Accelerator.Yoda_512,
+        Accelerator.Ethos_U65_256,
+        Accelerator.Ethos_U65_512,
     ],
 )
 @pytest.mark.parametrize("dilation_x", [1, 2])
diff --git a/ethosu/vela/vela.py b/ethosu/vela/vela.py
index 9f5c78c..6835607 100644
--- a/ethosu/vela/vela.py
+++ b/ethosu/vela/vela.py
@@ -188,7 +188,7 @@
     if args is None:
         args = sys.argv[1:]
 
-    parser = argparse.ArgumentParser(prog="vela", description="Neural network model compiler for Ethos-U55")
+    parser = argparse.ArgumentParser(prog="vela", description="Neural network model compiler for Ethos-U")
     parser.add_argument("--version", action="version", version=__version__)
     parser.add_argument(
         "--api-version", action="version", version=api_version, help="Displays the version of the external API."
diff --git a/ethosu/vela/weight_compressor.py b/ethosu/vela/weight_compressor.py
index c07229f..0eab185 100644
--- a/ethosu/vela/weight_compressor.py
+++ b/ethosu/vela/weight_compressor.py
@@ -57,13 +57,13 @@
     block_traversal: NpuBlockTraversal,
 ):
     """
-    Public facing API to use the ethosu weight encoding.
+    Public facing API to use the Ethos-U weight encoding.
 
-    :param accelerator: architecture_features.Accelerator enum to pick the correct ethosu accelerator
+    :param accelerator: architecture_features.Accelerator enum to pick the correct Ethos-U accelerator
     :param weights_volume: numpy.ndarray in OHWI layout with a shape of four
     :param dilation_xy: a two element tuple of dilation attributes in x,y dimension
     :param ifm_bitdepth: the bitdepth of input feature map
-    :param ofm_block_depth: the depth of blocks for ethosu processing
+    :param ofm_block_depth: the depth of blocks for Ethos-U processing
     :param is_depthwise: a boolean indicating these weights are used for a depthwise traversal
     :param block_traversal: indicates how these weights are traversed on sub-kernal basis
     :return: a bytearray of compressed weights
@@ -108,7 +108,8 @@
 
 def encode_bias(bias: np.int64, scale: int, shift: int):
     """
-    Public facing API to pack bias and scale values as required by the hardware
+    Public facing API to pack bias and scale values as required by the Ethos-U
+
     :param bias: 64bit signed number that includes 40bit signed bias
     :param scale: 32bit scale value
     :param shift: 6bit shift value
