MLBEDSW-4978: Cascading of operators requiring full IFM/OFM

Bug fix in cascade builder: tensors produced with operators requiring full OFM
or consumed by operators requiring full IFM could be added as intermediate buffers
to a cascade.

Signed-off-by: Louis Verhaard <louis.verhaard@arm.com>
Change-Id: Id84e9e1940bf85ab4cbc42a03e65f64da16a094c
diff --git a/ethosu/vela/cascade_builder.py b/ethosu/vela/cascade_builder.py
index e4fa67e..0b50eaa 100644
--- a/ethosu/vela/cascade_builder.py
+++ b/ethosu/vela/cascade_builder.py
@@ -174,6 +174,8 @@
                     or current_op not in ref_cost
                     or not self._is_cascadable(current_op, ref_cost[current_op])
                     or producer.ofm.shape != current_op.ifm.shape
+                    or current_op.requires_full_ifm
+                    or producer.requires_full_ofm
                 ):
                     # Current op has already been processed or cannot be cascaded
                     break
diff --git a/ethosu/vela/tensor.py b/ethosu/vela/tensor.py
index 677757c..8304a65 100644
--- a/ethosu/vela/tensor.py
+++ b/ethosu/vela/tensor.py
@@ -478,6 +478,7 @@
 
         if shape_len > 4:
             return
+        assert not (self.needs_linear_format and fmt == TensorFormat.NHCWB16)
         self.storage_rounding_quantum = arch.storage_rounding_quantums[self.format]
         self.storage_rounding_quantum = tuple(self.storage_rounding_quantum[-shape_len:])
         self.brick_size = arch.brick_sizes[self.format]