diff --git a/CMakeLists.txt b/CMakeLists.txt
index ab8676e..7f5f1cb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -28,6 +28,7 @@
 
 # Setup paths
 set(CMSIS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmsis" CACHE PATH "Path to CMSIS.")
+set(CMSIS_VIEW_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmsis-view" CACHE PATH "Path to cmsis-view.")
 set(CORE_DRIVER_PATH "${CMAKE_CURRENT_SOURCE_DIR}/core_driver" CACHE PATH "Path to core driver.")
 set(LINUX_DRIVER_STACK_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../linux_driver_stack" CACHE PATH "Path to Linux driver stack for Arm Ethos-U.")
 set(TENSORFLOW_PATH "${CMAKE_CURRENT_SOURCE_DIR}/tensorflow" CACHE PATH "Path to Tensorflow.")
@@ -63,6 +64,9 @@
 # Build RTOS
 add_subdirectory(rtos)
 
+# Build EventRecorder
+include(event_recorder.cmake)
+
 # Build libs
 add_subdirectory(lib)
 
diff --git a/event_recorder.cmake b/event_recorder.cmake
new file mode 100644
index 0000000..3823896
--- /dev/null
+++ b/event_recorder.cmake
@@ -0,0 +1,32 @@
+#
+# Copyright (c) 2021 Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+add_library(event_recorder INTERFACE)
+
+target_include_directories(event_recorder INTERFACE
+    ${CMSIS_VIEW_PATH}/EventRecorder/Include
+    ${CMSIS_VIEW_PATH}/EventRecorder/Config)
+
+target_include_directories(event_recorder INTERFACE
+      ${CMSIS_VIEW_PATH}/EventRecorder/Config)
+
+target_link_libraries(event_recorder INTERFACE cmsis_device)
+target_sources(event_recorder INTERFACE
+      ${CMSIS_VIEW_PATH}/EventRecorder/Source/EventRecorder.c)
+
+target_compile_definitions(event_recorder INTERFACE RTE_Components_CMSIS_device_header=\"${ARM_CPU}${ARM_FEATURES}.h\")
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index abf444f..ae18806 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -21,3 +21,7 @@
 
 # Build arm_profiler
 add_subdirectory(arm_profiler)
+
+# Build ethosu_monitor
+add_subdirectory(ethosu_monitor)
+
diff --git a/lib/ethosu_monitor/CMakeLists.txt b/lib/ethosu_monitor/CMakeLists.txt
new file mode 100644
index 0000000..50f6526
--- /dev/null
+++ b/lib/ethosu_monitor/CMakeLists.txt
@@ -0,0 +1,26 @@
+#
+# Copyright (c) 2021 Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+if (NOT TARGET ethosu_core_driver)
+    return()
+endif()
+add_library(ethosu_monitor INTERFACE)
+
+target_link_libraries(ethosu_monitor INTERFACE ethosu_core_driver event_recorder)
+target_include_directories(ethosu_monitor INTERFACE include)
+target_sources(ethosu_monitor INTERFACE src/ethosu_monitor.cpp)
diff --git a/lib/ethosu_monitor/include/RTE_Components.h b/lib/ethosu_monitor/include/RTE_Components.h
new file mode 100644
index 0000000..97b6624
--- /dev/null
+++ b/lib/ethosu_monitor/include/RTE_Components.h
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2021 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef RTE_COMPONENTS_H
+#define RTE_COMPONENTS_H
+
+#define CMSIS_device_header RTE_Components_CMSIS_device_header
+
+#endif
diff --git a/lib/ethosu_monitor/include/ethosu_monitor.hpp b/lib/ethosu_monitor/include/ethosu_monitor.hpp
new file mode 100644
index 0000000..c1308a5
--- /dev/null
+++ b/lib/ethosu_monitor/include/ethosu_monitor.hpp
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2021 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ETHOSU_MONITOR_H
+#define ETHOSU_MONITOR_H
+
+#include "EventRecorder.h"
+#include "EventRecorderConf.h"
+#include <algorithm>
+#include <ethosu_driver.h>
+#include <pmu_ethosu.h>
+#include <stdint.h>
+
+class EthosUMonitor {
+
+public:
+    enum Backend { PRINTF, EVENT_RECORDER };
+
+    EthosUMonitor(int32_t __id = EventID(EventLevelError, EvtStatistics_No, EventRecordNone), Backend backend = PRINTF);
+
+    template <typename T>
+    void configure(ethosu_driver *drv, const T &eventIds) {
+        // Set event ids
+        numEvents = std::min(static_cast<size_t>(ETHOSU_PMU_NCOUNTERS), eventIds.size());
+        for (size_t i = 0; i < numEvents; i++) {
+            ethosuEventIds[i] = eventIds[i];
+        }
+
+        // config pmu and set driver
+        ETHOSU_PMU_Enable(drv);
+
+        for (size_t i = 0; i < ETHOSU_PMU_NCOUNTERS; i++) {
+            ETHOSU_PMU_Set_EVTYPER(drv, i, static_cast<ethosu_pmu_event_type>(ethosuEventIds[i]));
+            ETHOSU_PMU_CNTR_Enable(drv, 1 << i);
+        }
+
+        ETHOSU_PMU_EVCNTR_ALL_Reset(drv);
+    }
+
+    void release(ethosu_driver *drv);
+
+    void monitorSample(ethosu_driver *drv);
+
+private:
+    ethosu_pmu_event_type ethosuEventIds[ETHOSU_PMU_NCOUNTERS];
+    size_t numEvents;
+    int32_t eventRecordId;
+    Backend backend;
+};
+
+#endif
diff --git a/lib/ethosu_monitor/src/ethosu_monitor.cpp b/lib/ethosu_monitor/src/ethosu_monitor.cpp
new file mode 100644
index 0000000..70a8656
--- /dev/null
+++ b/lib/ethosu_monitor/src/ethosu_monitor.cpp
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2021 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ethosu_monitor.hpp"
+#include <stdio.h>
+
+EthosUMonitor::EthosUMonitor(int32_t __eventRecordId, Backend __backend) :
+    eventRecordId(__eventRecordId), backend(__backend) {}
+
+void EthosUMonitor::monitorSample(ethosu_driver *drv) {
+    // Fetch events
+    uint32_t eventCount[ETHOSU_PMU_NCOUNTERS] = {0};
+    for (size_t i = 0; i < numEvents; i++) {
+        eventCount[i] = ETHOSU_PMU_Get_EVCNTR(drv, i);
+        switch (backend) {
+        case EVENT_RECORDER:
+            EventRecord2(eventRecordId, ethosuEventIds[i], eventCount[i]);
+            break;
+        case PRINTF:
+        default:
+            printf("ethosu_pmu_cntr%d : %u\n", i, eventCount[i]);
+        }
+    }
+}
+
+void EthosUMonitor::release(ethosu_driver *drv) {
+    ETHOSU_PMU_Disable(drv);
+}
