diff --git a/tests/fpgadataflow/test_fpgadataflow_convinputgenerator_rtl_dynamic.py b/tests/fpgadataflow/test_fpgadataflow_convinputgenerator_rtl_dynamic.py
index 9ca19c6c599bda545081ac18f9ed616924adf36e..3f8743062e8b901af18764b4b5a9078e2df9a9e2 100644
--- a/tests/fpgadataflow/test_fpgadataflow_convinputgenerator_rtl_dynamic.py
+++ b/tests/fpgadataflow/test_fpgadataflow_convinputgenerator_rtl_dynamic.py
@@ -62,8 +62,10 @@ from finn.transformation.fpgadataflow.prepare_ip import PrepareIP
 from finn.util.basic import pyverilate_get_liveness_threshold_cycles
 
 
-def create_conv_model(idim, ifm, k, stride, ofm, idt, wdt, pad_mode):
+def create_conv_model(idim, ifm, k, stride, ofm, idt, wdt, pad_mode, depthwise):
     np.random.seed(0)
+    group = ifm if depthwise else 1
+    group_str = str(group)
     ishp = (1, ifm, idim, idim)
     pad_0 = _auto_pad_to_explicit_padding(pad_mode, idim, idim, k, k, stride, stride, 2)
     int_dim = compute_conv_output_dim(idim, k, stride, total_pad=pad_0[0] + pad_0[2])
@@ -71,9 +73,9 @@ def create_conv_model(idim, ifm, k, stride, ofm, idt, wdt, pad_mode):
         pad_mode, int_dim, int_dim, k, k, stride, stride, 2
     )
     odim = compute_conv_output_dim(int_dim, k, stride, total_pad=pad_1[0] + pad_1[2])
-    oshp = (1, ofm, odim, odim)
-    wshp = (ofm, ifm, k, k)
-    wshp_1 = (ofm, ofm, k, k)
+    oshp = (1, ifm, odim, odim) if depthwise else (1, ofm, odim, odim)
+    wshp = (ifm, 1, k, k) if depthwise else (ofm, ifm, k, k)
+    wshp_1 = (ifm, 1, k, k) if depthwise else (ofm, ofm, k, k)
     ishp_str = str(list(ishp))
     oshp_str = str(list(oshp))
     wshp_str = str(list(wshp))
@@ -96,11 +98,11 @@ def create_conv_model(idim, ifm, k, stride, ofm, idt, wdt, pad_mode):
     >
     {{
         conv0 = Conv<
-                dilations={dil_str},group=1,kernel_shape={kshp_str},pads={pad_0_str},
+                dilations={dil_str},group={group_str},kernel_shape={kshp_str},pads={pad_0_str},
                 strides={stride_str}
             >(in0, param_c0_weight)
         out0 = Conv<
-                dilations={dil_str},group=1,kernel_shape={kshp_str},pads={pad_1_str},
+                dilations={dil_str},group={group_str},kernel_shape={kshp_str},pads={pad_1_str},
                 strides={stride_str}
             >(conv0, param_c1_weight)
     }}
@@ -160,15 +162,37 @@ def config_hook(configs):
     return write_swg_config
 
 
-@pytest.mark.parametrize("pad_mode", ["SAME_UPPER", "VALID"])
+cfg0 = {
+    "idims": [32, 16],
+    "ifm": 4,
+    "k": 4,
+    "stride": 1,
+    "ofm": 8,
+    "depthwise": False,
+    "pad_mode": "SAME_UPPER",
+}
+cfg1 = {
+    "idims": [128, 4],
+    "ifm": 64,
+    "k": 3,
+    "stride": 1,
+    "ofm": 64,
+    "depthwise": True,
+    "pad_mode": "SAME_UPPER",
+}
+
+
+@pytest.mark.parametrize("cfg", [cfg0, cfg1])
 @pytest.mark.slow
 @pytest.mark.vivado
-def test_fpgadataflow_conv_dynamic(pad_mode):
-    idims = [32, 16]
-    ifm = 4
-    k = 4
-    stride = 1
-    ofm = 8
+def test_fpgadataflow_conv_dynamic(cfg):
+    pad_mode = cfg["pad_mode"]
+    depthwise = cfg["depthwise"]
+    idims = cfg["idims"]
+    ifm = cfg["ifm"]
+    k = cfg["k"]
+    stride = cfg["stride"]
+    ofm = cfg["ofm"]
     idt = DataType["UINT8"]
     wdt = DataType["INT2"]
     exp_cfgs = []
@@ -177,7 +201,9 @@ def test_fpgadataflow_conv_dynamic(pad_mode):
         ishp = (1, ifm, idim, idim)
         np.random.seed(0)
         inp = gen_finn_dt_tensor(idt, ishp)
-        model = create_conv_model(idim, ifm, k, stride, ofm, idt, wdt, pad_mode)
+        model = create_conv_model(
+            idim, ifm, k, stride, ofm, idt, wdt, pad_mode, depthwise
+        )
         _, _, int_dim, _ = model.get_tensor_shape("conv0")
         _, _, odim, _ = model.get_tensor_shape("out0")
         pad0 = get_by_name(model.graph.node[0].attribute, "pads").ints
@@ -195,6 +221,7 @@ def test_fpgadataflow_conv_dynamic(pad_mode):
     model = model.transform(
         to_hls.InferQuantizedMatrixVectorActivation(mem_mode="decoupled")
     )
+    model = model.transform(to_hls.InferVectorVectorActivation())
     model = model.transform(absorb.AbsorbConsecutiveTransposes())
     parent_model = model.transform(CreateDataflowPartition())
     sdp_inst = getCustomOp(
@@ -213,6 +240,10 @@ def test_fpgadataflow_conv_dynamic(pad_mode):
         getCustomOp(swg_node).set_nodeattr("dynamic_mode", 1)
         getCustomOp(swg_node).set_nodeattr("inFIFODepths", [16])
         getCustomOp(swg_node).set_nodeattr("outFIFODepths", [16])
+    comp_nodes = model.get_nodes_by_op_type("MatrixVectorActivation")
+    comp_nodes += model.get_nodes_by_op_type("VectorVectorActivation")
+    for comp_node in comp_nodes:
+        getCustomOp(comp_node).set_nodeattr("PE", 1)
     model = model.transform(InsertFIFO())
     model = model.transform(GiveUniqueNodeNames())
     model = model.transform(GiveReadableTensorNames())