diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index d15c4fd..05814ca 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,6 +1,15 @@
 
 vec_cc_generated_test(
   NAME
+    vfadd
+  TEMPLATE
+    opivv_opivf_test.tpl.cpp
+  LINKOPTS
+   -Xlinker --defsym=__itcm_length__=128K
+)
+
+vec_cc_generated_test(
+  NAME
     vsub
   TEMPLATE
     opivv_opivx_test.tpl.cpp
@@ -392,12 +401,3 @@
   LINKOPTS
     -Xlinker --defsym=__itcm_length__=128K
 )
-
-vec_cc_test(
-  NAME
-    vector_vfadd_test
-  SRCS
-    vector_vfadd_test.cpp
-  LINKOPTS
-   -Xlinker --defsym=__itcm_length__=128K
-)
diff --git a/tests/templates/base_opivf_test.tpl.cpp b/tests/templates/base_opivf_test.tpl.cpp
new file mode 100644
index 0000000..c3e7f09
--- /dev/null
+++ b/tests/templates/base_opivf_test.tpl.cpp
@@ -0,0 +1,83 @@
+<%!
+import vec_test_helpers
+%>\
+<%def name="test_opivf(op_code)">
+namespace ${op_code}_vf_test {
+namespace {
+
+using namespace test_v_helpers;
+
+float src_vector_2[MAXVL_BYTES];
+float dest_vector[MAXVL_BYTES];
+float ref_dest_vector[MAXVL_BYTES];
+
+class ${op_code.capitalize()}Test : public ::testing::Test {
+ protected:
+  void SetUp() override { zero_vector_registers(); }
+  void TearDown() override { zero_vector_registers(); }
+};
+<%
+template_helper = vec_test_helpers.VecTemplateHelper(op_code)
+sews = template_helper.get_sews()
+lmuls = template_helper.get_lmuls()
+%>\
+% for sew in sews:
+% for lmul in lmuls:
+<%
+template_helper.sew = sew
+%>\
+${insert_vf_test(template_helper, lmul)}
+%endfor
+%endfor
+
+}  // namespace
+}  // namespace ${op_code}_vf_test
+</%def>
+
+<%def name="insert_vf_test(template_helper, lmul)">
+<%
+# Initialize the variables for a given test config
+op_code = template_helper.op_code
+sew = template_helper.sew
+ref_opcode = template_helper.get_ref_opcode()
+dest_sew, src2_sew, _, __ = template_helper.get_sew_sizes()
+datatypes = template_helper.get_softrvv_template_data_type()
+var_types = template_helper.get_var_types()
+mnemonic = template_helper.get_mnemonic(
+  vec_test_helpers.VecTemplateHelper.OperandType.SCALAR)
+%>\
+TEST_F(${op_code.capitalize()}Test, ${mnemonic.lower().replace(".","_")}${sew}m${lmul}) {
+  for (int i = 0; i < AVL_COUNT; i++) {
+    int32_t avl = AVLS[i];
+    int vlmax;
+    int vl;
+
+    std::tie(vlmax, vl) = vector_test_setup<${var_types.dest_type}>(
+        VLMUL::LMUL_M${lmul}, avl,
+        {dest_vector, ref_dest_vector, src_vector_2});
+
+    if (avl > vlmax) {
+      continue;
+    }
+    ${var_types.src2_type} *ptr_vec_2 = reinterpret_cast<${var_types.src2_type} *>(src_vector_2);
+    ${var_types.imm_type} test_val = static_cast<${var_types.imm_type}>(rand());
+    ${var_types.dest_type} *ptr_dest_vec = reinterpret_cast<${var_types.dest_type} *>(dest_vector);
+    ${var_types.dest_type} *ptr_ref_dest_vec = reinterpret_cast<${var_types.dest_type} *>(ref_dest_vector);
+    // set up values to test up to index of the AVL
+    fill_random_vector<${var_types.src2_type}>(ptr_vec_2, avl);
+
+    // Generate reference vector
+    softrvv::${ref_opcode}_vf(ptr_ref_dest_vec, ptr_vec_2, &test_val, avl);
+    // Load vector registers
+    __asm__ volatile("vle${src2_sew}.v v8, (%0)" : : "r"(ptr_vec_2));
+
+    // Run target instruction
+    __asm__ volatile("${mnemonic} v24, v8, %[RS1]" ::[RS1] "f"(test_val));
+
+    // Store result vector register
+    __asm__ volatile("vse${dest_sew}.v v24, (%0)" : : "r"(ptr_dest_vec));
+    // Check vector elements
+    assert_vec_elem_eq<${var_types.dest_type}>(vlmax, dest_vector, ref_dest_vector);
+  }
+}
+</%def>
diff --git a/tests/templates/base_opivv_test.tpl.cpp b/tests/templates/base_opivv_test.tpl.cpp
index a7aba2f..9acb8a7 100644
--- a/tests/templates/base_opivv_test.tpl.cpp
+++ b/tests/templates/base_opivv_test.tpl.cpp
@@ -7,21 +7,29 @@
 
 using namespace test_v_helpers;
 
-uint8_t src_vector_1[MAXVL_BYTES];
-uint8_t src_vector_2[MAXVL_BYTES];
-uint8_t dest_vector[MAXVL_BYTES];
-uint8_t ref_dest_vector[MAXVL_BYTES];
+<%
+template_helper = vec_test_helpers.VecTemplateHelper(op_code)
+sews = template_helper.get_sews()
+lmuls = template_helper.get_lmuls()
+%>\
+
+% if template_helper.is_floating():
+  float src_vector_1[MAXVL_BYTES];
+  float src_vector_2[MAXVL_BYTES];
+  float dest_vector[MAXVL_BYTES];
+  float ref_dest_vector[MAXVL_BYTES];
+% else:
+  uint8_t src_vector_1[MAXVL_BYTES];
+  uint8_t src_vector_2[MAXVL_BYTES];
+  uint8_t dest_vector[MAXVL_BYTES];
+  uint8_t ref_dest_vector[MAXVL_BYTES];
+% endif
 
 class ${op_code.capitalize()}Test : public ::testing::Test {
  protected:
   void SetUp() override { zero_vector_registers(); }
   void TearDown() override { zero_vector_registers(); }
 };
-<%
-template_helper = vec_test_helpers.VecTemplateHelper(op_code)
-sews = template_helper.get_sews()
-lmuls = template_helper.get_lmuls()
-%>\
 % for sew in sews:
 % for lmul in lmuls:
 <%
@@ -46,15 +54,13 @@
 var_types = template_helper.get_var_types()
 mnemonic = template_helper.get_mnemonic(
   vec_test_helpers.VecTemplateHelper.OperandType.VECTOR)
-is_narrowing = template_helper.is_narrowing()
-is_widening = template_helper.is_widening()
 %>\
 TEST_F(${op_code.capitalize()}Test, ${mnemonic.lower().replace(".","_")}${sew}m${lmul}) {
   for (int i = 0; i < AVL_COUNT; i++) {
     int32_t avl = AVLS[i];
     int vlmax;
     int vl;
-% if is_narrowing:
+% if not template_helper.is_floating() and template_helper.is_narrowing():
     vector_test_setup<${var_types.src2_type}>(
         VLMUL::LMUL_M${lmul}, avl,
         {src_vector_2});
@@ -65,7 +71,7 @@
     std::tie(vlmax, vl) = vector_test_setup<${var_types.dest_type}>(
         VLMUL::LMUL_M${lmul}, avl,
         {dest_vector, ref_dest_vector});
-% elif is_widening:
+% elif not template_helper.is_floating() and template_helper.is_widening():
     /* When a widening instruction is used sew matches src2 size */
     vector_test_setup<${var_types.dest_type}>(
         VLMUL::LMUL_M${lmul}, avl,
@@ -80,7 +86,7 @@
     /* For non narrowing instructions all vectors have same type*/
     std::tie(vlmax, vl) = vector_test_setup<${var_types.dest_type}>(
         VLMUL::LMUL_M${lmul}, avl,
-        {dest_vector, ref_dest_vector, src_vector_1});
+        {dest_vector, ref_dest_vector, src_vector_1, src_vector_2});
 % endif
 
     if (avl > vlmax) {
@@ -98,7 +104,11 @@
     memset(ref_dest_vector, 0, MAXVL_BYTES);
 
     // Generate reference vector
-    softrvv::${ref_opcode}_vv<${datatypes}>(ptr_ref_dest_vec, ptr_vec_2, ptr_vec_1, avl);
+    % if template_helper.is_floating():
+      softrvv::${ref_opcode}_vv(ptr_ref_dest_vec, ptr_vec_2, ptr_vec_1, avl);
+    % else:
+      softrvv::${ref_opcode}_vv<${datatypes}>(ptr_ref_dest_vec, ptr_vec_2, ptr_vec_1, avl);
+    % endif
     // Load vector registers
     __asm__ volatile("vle${src1_sew}.v v8, (%0)" : : "r"(ptr_vec_1));
     __asm__ volatile("vle${src2_sew}.v v16, (%0)" : : "r"(ptr_vec_2));
diff --git a/tests/templates/opivf_test.tpl.cpp b/tests/templates/opivf_test.tpl.cpp
new file mode 100644
index 0000000..7c64120
--- /dev/null
+++ b/tests/templates/opivf_test.tpl.cpp
@@ -0,0 +1,3 @@
+<%inherit file="base.tpl.cpp"/>\
+<%namespace name="tests_vf" file="base_opivf_test.tpl.cpp"/>\
+${tests_vf.test_opivf(op)}
diff --git a/tests/templates/opivv_opivf_test.tpl.cpp b/tests/templates/opivv_opivf_test.tpl.cpp
new file mode 100644
index 0000000..b1bf4c3
--- /dev/null
+++ b/tests/templates/opivv_opivf_test.tpl.cpp
@@ -0,0 +1,5 @@
+<%inherit file="base.tpl.cpp"/>\
+<%namespace name="tests_vv" file="base_opivv_test.tpl.cpp"/>\
+<%namespace name="tests_vf" file="base_opivf_test.tpl.cpp"/>\
+${tests_vv.test_opivv(op)}
+${tests_vf.test_opivf(op)}
diff --git a/tests/templates/opivv_test.tpl.cpp b/tests/templates/opivv_test.tpl.cpp
new file mode 100644
index 0000000..428a65b
--- /dev/null
+++ b/tests/templates/opivv_test.tpl.cpp
@@ -0,0 +1,3 @@
+<%inherit file="base.tpl.cpp"/>\
+<%namespace name="tests_vv" file="base_opivv_test.tpl.cpp"/>\
+${tests_vv.test_opivv(op)}
diff --git a/tests/vector_vfadd_test.cpp b/tests/vector_vfadd_test.cpp
deleted file mode 100644
index 208cb91..0000000
--- a/tests/vector_vfadd_test.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <softrvv.h>
-#include <springbok.h>
-#include <stdio.h>
-
-#include <tuple>
-
-#include "pw_unit_test/framework.h"
-#include "test_v_helpers.h"
-
-namespace vfadd_vv_test
-{
-namespace
-{
-using namespace test_v_helpers;
-
-float src_vector_1[MAXVL_BYTES];
-float src_vector_2[MAXVL_BYTES];
-float dest_vector[MAXVL_BYTES];
-float ref_dest_vector[MAXVL_BYTES];
-
-class VfaddTest : public ::testing::Test {
- protected:
-  void SetUp() override { zero_vector_registers(); }
-  void TearDown() override { zero_vector_registers(); }
-};
-
-TEST_F(VfaddTest, vfadd_vv32m1) {
-  for (int i = 0; i < AVL_COUNT; i++) {
-    int32_t avl = AVLS[i];
-    int vlmax;
-    int vl;
-
-    /* For non narrowing instructions all vectors have same type*/
-    std::tie(vlmax, vl) = vector_test_setup<int32_t>(
-        VLMUL::LMUL_M1, avl,
-        {dest_vector, ref_dest_vector, src_vector_1, src_vector_2});
-
-    if (avl > vlmax) {
-      continue;
-    }
-
-    float *ptr_vec_1 = reinterpret_cast<float *>(src_vector_1);
-    float *ptr_vec_2 = reinterpret_cast<float *>(src_vector_2);
-    float *ptr_dest_vec = reinterpret_cast<float *>(dest_vector);
-    float *ptr_ref_dest_vec = reinterpret_cast<float *>(ref_dest_vector);
-
-    // set up values to test up to index of the AVL
-    fill_random_vector<float>(ptr_vec_1, avl);
-    fill_random_vector<float>(ptr_vec_2, avl);
-
-    // Generate reference vector
-    softrvv::vfadd_vv(ptr_ref_dest_vec, ptr_vec_2, ptr_vec_1, avl);
-    // Load vector registers
-    __asm__ volatile("vle32.v v8, (%0)" : : "r"(ptr_vec_1));
-    __asm__ volatile("vle32.v v16, (%0)" : : "r"(ptr_vec_2));
-
-    // Run target instruction
-    __asm__ volatile("vfadd.vv v24, v16, v8");
-
-    // Store result vector register
-    __asm__ volatile("vse32.v v24, (%0)" : : "r"(ptr_dest_vec));
-    // Check vector elements
-    assert_vec_elem_eq<float>(vlmax, dest_vector, ref_dest_vector);
-  }
-}
-}  // namespace
-}  // namespace vfadd_vv_test
