MLBEDSW-4223: Full support for PAD operator

- Added full support for PAD operator
- Hardware padding is still used whenever possible
- Bug fix Pad followed by max pool if IFM contains negative values

Change-Id: Ifc64d1943737d94466f5e2821009dab12a49a965
Signed-off-by: Louis Verhaard <louis.verhaard@arm.com>
diff --git a/ethosu/vela/operation_util.py b/ethosu/vela/operation_util.py
index 82a7fb8..417f27e 100644
--- a/ethosu/vela/operation_util.py
+++ b/ethosu/vela/operation_util.py
@@ -40,6 +40,7 @@
     op.attrs["ksize"] = [1, 1, 1, 1]
     op.attrs["skirt"] = [0, 0, 0, 0]
     op.attrs["explicit_padding"] = [0, 0, 0, 0]
+    op.run_on_npu = True
     return op
 
 
@@ -259,3 +260,8 @@
     op.set_output_tensor(ofm)
     op.ofm_shapes.append(ofm_shape)
     return op
+
+
+def get_pad_values_from_input(padding) -> Tuple:
+    """Returns top, left, bottom, right padding from input values in a Pad input tensor"""
+    return (padding[-3][0], padding[-2][0], padding[-3][1], padding[-2][1])