Documenting startup and multi NPU

Adding documentation and sequence diagrams for startup and multi
NPU.

Change-Id: I4a4a43e8bea089b6325f7d8285434017cbda25ec
diff --git a/docs/startup.puml b/docs/startup.puml
new file mode 100644
index 0000000..f9cb528
--- /dev/null
+++ b/docs/startup.puml
@@ -0,0 +1,71 @@
+@startuml
+
+skinparam backgroundColor #EEEBDC
+
+box "Hardware" #FFC700
+participant "Cortex-M" as cortexm
+participant "Ethos-U" as ethosu
+end box
+
+box "CMSIS Device" #0091BD
+participant "__VECTOR_TABLE" as ivec
+participant "Reset_Handler()" as reset
+end box
+
+box "Compiler" #FF6B00
+participant "Runtime" as runtime
+end box
+
+box "Target" #95D600
+participant "common" as common
+participant "corstone-300" as target
+end box
+
+box "Drivers" #00C1DE
+participant "NPU" as driver
+participant "UART" as uart
+participant "MPU" as mpu
+end box
+
+box "Application" #7D868C
+participant "main()" as main
+end box
+
+cortexm -> ivec++:
+    ivec -> reset++: Reset_Handler()
+        reset -> reset++: SystemInit()
+        deactivate reset
+
+        reset -> runtime++: __main()
+        note over runtime
+            Scatter loading
+            Initializing stack and heap
+        end note
+
+        note over runtime
+            Calling constructors
+        end note
+
+        runtime -> common++: init() [constructor]
+            note over common
+                The constructor is called after stack and heap have been initialized,
+                but before the main() function is called
+            end note
+
+            common -> target++: targetSetup()
+                target -> uart++: uart_init()
+                return
+
+                target -> driver++: ethosu_init()
+                return
+
+                target -> mpu++: loadAndEnableConfig()
+                return
+            return
+        return
+
+        runtime -> main++: main()
+            note over main
+                Running application
+            end note
+@enduml