diff --git a/reference_model/src/generate/generate_dot_product.cc b/reference_model/src/generate/generate_dot_product.cc
index c1934dd..0930956 100644
--- a/reference_model/src/generate/generate_dot_product.cc
+++ b/reference_model/src/generate/generate_dot_product.cc
@@ -231,6 +231,102 @@
     }
     return true;
 }
+//---------------------------------------------------------------------------//
+//                              Fully Connected                              //
+//---------------------------------------------------------------------------//
+
+bool generateFullyConnectedInput(const TosaReference::GenerateConfig& cfg,
+                                 TosaReference::IDotProductGenerator& generator,
+                                 void* data,
+                                 size_t size)
+{
+    if (cfg.shape.size() != 2)
+    {
+        WARNING("[Generator][DP][FullyConnected][Input] Tensor shape expected 2 dimensions.");
+        return false;
+    }
+
+    float* input      = reinterpret_cast<float*>(data);
+    const int64_t T   = TosaReference::numElementsFromShape(cfg.shape);
+    const uint32_t IC = cfg.shape[1];
+
+    for (int64_t t = 0; t < T; ++t)
+    {
+        uint32_t k = t % IC;
+
+        input[t] = generator(k);
+    }
+    return true;
+}
+
+bool generateFullyConnectedWeight(const TosaReference::GenerateConfig& cfg,
+                                  TosaReference::IDotProductGenerator& generator,
+                                  void* data,
+                                  size_t size)
+{
+    if (cfg.shape.size() != 2)
+    {
+        WARNING("[Generator][DP][FullyConnected][Weight] Tensor shape expected 2 dimensions.");
+        return false;
+    }
+
+    float* weight     = reinterpret_cast<float*>(data);
+    const int64_t T   = TosaReference::numElementsFromShape(cfg.shape);
+    const uint32_t IC = cfg.shape[1];
+
+    for (int64_t t = 0; t < T; ++t)
+    {
+        uint32_t k = t % IC;
+
+        weight[t] = generator(k);
+    }
+    return true;
+}
+
+bool generateFullyConnectedBias(const TosaReference::GenerateConfig& cfg,
+                                TosaReference::IDotProductGenerator& generator,
+                                void* data,
+                                size_t size)
+{
+    if (cfg.shape.size() != 1)
+    {
+        WARNING("[Generator][DP][FullyConnected][Bias] Tensor shape expected 1 dimension.");
+        return false;
+    }
+
+    float* bias      = reinterpret_cast<float*>(data);
+    const uint32_t T = cfg.shape[0];
+
+    for (uint32_t t = 0; t < T; ++t)
+    {
+        bias[t] = generator(2);
+    }
+    return true;
+}
+
+bool generateFullyConnected(const TosaReference::GenerateConfig& cfg,
+                            TosaReference::IDotProductGenerator& generator,
+                            void* data,
+                            size_t size)
+{
+    if (cfg.dataType != DType::DType_FP32)
+    {
+        WARNING("[Generator][DP][FullyConnected] Only supports FP32.");
+        return false;
+    }
+    switch (cfg.inputPos)
+    {
+        case 0:
+            return generateFullyConnectedInput(cfg, generator, data, size);
+        case 1:
+            return generateFullyConnectedWeight(cfg, generator, data, size);
+        case 2:
+            return generateFullyConnectedBias(cfg, generator, data, size);
+        default:
+            WARNING("[Generator][DP][FullyConnected] Invalid input tensor slot position to operator.");
+            return false;
+    }
+}
 }    // namespace
 
 namespace TosaReference
@@ -254,6 +350,8 @@
             return generateConv2D(cfg, *generator, data, size);
         case tosa::Op_REDUCE_SUM:
             return generateReduceSum(cfg, *generator, data, size);
+        case tosa::Op_FULLY_CONNECTED:
+            return generateFullyConnected(cfg, *generator, data, size);
         default:
             WARNING("[Generator][DP] Unsupported operator.");
             return false;
diff --git a/reference_model/src/generate/generate_utils.cc b/reference_model/src/generate/generate_utils.cc
index e410436..c889f7b 100644
--- a/reference_model/src/generate/generate_utils.cc
+++ b/reference_model/src/generate/generate_utils.cc
@@ -41,6 +41,7 @@
                                  { Op::Op_ADD, "ADD" },
                                  { Op::Op_ARGMAX, "ARGMAX" },
                                  { Op::Op_CONV2D, "CONV2D" },
+                                 { Op::Op_FULLY_CONNECTED, "FULLY_CONNECTED" },
                                  { Op::Op_MATMUL, "MATMUL" },
                                  { Op::Op_MAXIMUM, "MAXIMUM" },
                                  { Op::Op_MAX_POOL2D, "MAX_POOL2D" },
diff --git a/reference_model/test/generate_tests.cpp b/reference_model/test/generate_tests.cpp
index 40dd59f..9249f55 100644
--- a/reference_model/test/generate_tests.cpp
+++ b/reference_model/test/generate_tests.cpp
@@ -509,6 +509,7 @@
         check_not_output<float>(bufferP0, bufferP1);
     }
 }
+
 void reduce_sum_test_FP32(const std::string tosaName,
                           const size_t tosaElements,
                           const std::string templateJsonCfg,
@@ -580,4 +581,173 @@
         reduce_sum_test_FP32(tosaName, tosaElements, templateJsonCfg, "5", expected);
     }
 }
+
+void fully_connected_test_FP32(const std::string tosaName[3],
+                               const size_t tosaElements[3],
+                               const std::string templateJsonCfg,
+                               const std::string setStr,
+                               int32_t param,
+                               const std::vector<uint32_t> lastExpected)
+{
+    std::string jsonCfg = templateJsonCfg;
+    update_json_template(jsonCfg, "_SET_", setStr);
+
+    std::vector<float> buffer(tosaElements[param]);
+    REQUIRE(tgd_generate_data(jsonCfg.c_str(), tosaName[param].c_str(), (void*)buffer.data(), tosaElements[param] * 4));
+    if (param != 2)
+    {
+        // Get values at positions -8, -7 and -6 from the end
+        std::vector<float> last_three_ish(buffer.end() - 8, buffer.end() - 5);
+        check_output<float>(last_three_ish, lastExpected);
+    }
+    else
+    {
+        // Use last three as this buffer is too small
+        std::vector<float> last_three(buffer.end() - std::min<int>(3, buffer.size()), buffer.end());
+        check_output<float>(last_three, lastExpected);
+    }
+}
+TEST_CASE("positive - FP32 fully_connected dot product (values -8, -7 & -6 from the end)")
+{
+    std::string templateJsonCfg = R"({
+        "tensors" : {
+            "input" : {
+                "generator": "DOT_PRODUCT",
+                "data_type": "FP32",
+                "input_type": "VARIABLE",
+                "shape" : [ 6, 9 ],
+                "input_pos": 0,
+                "op" : "FULLY_CONNECTED",
+                "dot_product_info": {
+                    "s": _SET_,
+                    "ks": 9,
+                    "acc_type": "FP32"
+                }
+            },
+            "weight" : {
+                "generator": "DOT_PRODUCT",
+                "data_type": "FP32",
+                "input_type": "CONSTANT",
+                "shape" : [ 4, 9 ],
+                "input_pos": 1,
+                "op" : "FULLY_CONNECTED",
+                "dot_product_info": {
+                    "s": _SET_,
+                    "ks": 9,
+                    "acc_type": "FP32"
+                }
+            },
+            "bias" : {
+                "generator": "DOT_PRODUCT",
+                "data_type": "FP32",
+                "input_type": "CONSTANT",
+                "shape" : [ 4 ],
+                "input_pos": 2,
+                "op" : "FULLY_CONNECTED",
+                "dot_product_info": {
+                    "s": _SET_,
+                    "ks": 9,
+                    "acc_type": "FP32"
+                }
+            }
+
+        }
+    })";
+
+    const std::string tosaName[3] = { "input", "weight", "bias" };
+    const size_t tosaElements[3]  = { (6 * 9), (4 * 9), 4 };
+
+    SUBCASE("fully_connected, set 0, param 0")
+    {
+        std::vector<uint32_t> lastExpected = { 0x3f13876f, 0x0, 0x0 };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "0", 0, lastExpected);
+    }
+    SUBCASE("fully_connected, set 0, param 1")
+    {
+        std::vector<uint32_t> lastExpected = { 0x0, 0x0, 0x3f648dfd };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "0", 1, lastExpected);
+    }
+    SUBCASE("fully_connected, set 0, param 2")
+    {
+        std::vector<uint32_t> lastExpected = { 0x0, 0x0, 0x0 };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "0", 2, lastExpected);
+    }
+    SUBCASE("fully_connected, set 1, param 0")
+    {
+        // NOTE: Python test script produced 0x5e6cc8d7 - so off by 1
+        std::vector<uint32_t> lastExpected = { 0x5e531bbf, 0x5e6cc8d8, 0x5e4e2539 };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "1", 0, lastExpected);
+    }
+    SUBCASE("fully_connected, set 1, param 1")
+    {
+        std::vector<uint32_t> lastExpected = { 0x5e9870df, 0x5e9824c5, 0x5e9a898f };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "1", 1, lastExpected);
+    }
+    SUBCASE("fully_connected, set 1, param 2")
+    {
+        // NOTE: Python test script produced 0x7dc95352 - so off by 1
+        std::vector<uint32_t> lastExpected = { 0x7d9a212a, 0x7dc95351, 0x7db7c1f2 };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "1", 2, lastExpected);
+    }
+    SUBCASE("fully_connected, set 2, param 0")
+    {
+        std::vector<uint32_t> lastExpected = { 0xbcc1e987, 0xbe68efd7, 0x3db90130 };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "2", 0, lastExpected);
+    }
+    SUBCASE("fully_connected, set 2, param 1")
+    {
+        std::vector<uint32_t> lastExpected = { 0x3e069935, 0x3de3a507, 0xbe6a0c0c };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "2", 1, lastExpected);
+    }
+    SUBCASE("fully_connected, set 2, param 2")
+    {
+        std::vector<uint32_t> lastExpected = { 0x0, 0x0, 0x0 };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "2", 2, lastExpected);
+    }
+    SUBCASE("fully_connected, set 3, param 0")
+    {
+        std::vector<uint32_t> lastExpected = { 0x3e57454e, 0x3b48e294, 0x3e889ece };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "3", 0, lastExpected);
+    }
+    SUBCASE("fully_connected, set 3, param 1")
+    {
+        std::vector<uint32_t> lastExpected = { 0xbd20e608, 0x3f91e619, 0x3e9ac66b };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "3", 1, lastExpected);
+    }
+    SUBCASE("fully_connected, set 3, param 2")
+    {
+        std::vector<uint32_t> lastExpected = { 0x0, 0x0, 0x0 };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "3", 2, lastExpected);
+    }
+    SUBCASE("fully_connected, set 4, param 0")
+    {
+        std::vector<uint32_t> lastExpected = { 0x0, 0x5e29ad6d, 0x5e959eac };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "4", 0, lastExpected);
+    }
+    SUBCASE("fully_connected, set 4, param 1")
+    {
+        std::vector<uint32_t> lastExpected = { 0x0, 0x5e6736d7, 0x5e44d571 };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "4", 1, lastExpected);
+    }
+    SUBCASE("fully_connected, set 4, param 2")
+    {
+        std::vector<uint32_t> lastExpected = { 0x0, 0x0, 0x0 };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "4", 2, lastExpected);
+    }
+    SUBCASE("fully_connected, set 5, param 0")
+    {
+        std::vector<uint32_t> lastExpected = { 0xde8b0d70, 0xdd51465a, 0x5e57c772 };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "5", 0, lastExpected);
+    }
+    SUBCASE("fully_connected, set 5, param 1")
+    {
+        std::vector<uint32_t> lastExpected = { 0xddde72f1, 0xde7e31ff, 0x5e0bdb32 };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "5", 1, lastExpected);
+    }
+    SUBCASE("fully_connected, set 5, param 2")
+    {
+        std::vector<uint32_t> lastExpected = { 0x0, 0x0, 0x0 };
+        fully_connected_test_FP32(tosaName, tosaElements, templateJsonCfg, "5", 2, lastExpected);
+    }
+}
 TEST_SUITE_END();    // generate
diff --git a/verif/conformance/tosa_main_profile_ops_info.json b/verif/conformance/tosa_main_profile_ops_info.json
index faccf75..bdfc281 100644
--- a/verif/conformance/tosa_main_profile_ops_info.json
+++ b/verif/conformance/tosa_main_profile_ops_info.json
@@ -995,6 +995,7 @@
         "profile": [
             "tosa-mi"
         ],
+        "support_for": [ "lazy_data_gen" ],
         "generation": {
             "standard": {
                 "negative_dim_range": "1,10",
@@ -1007,13 +1008,19 @@
                         "--target-dtype",
                         "bf16",
                         "--fp-values-range",
-                        "-2.0,2.0"
+                        "-max,max",
+                        "--tensor-dim-range",
+                        "15,64"
                     ],
                     [
                         "--target-dtype",
                         "fp32",
+                        "--fp-values-range",
+                        "-max,max",
+                        "--tensor-dim-range",
+                        "10,15",
                         "--target-shape",
-                        "1,296",
+                        "100,296",
                         "--target-shape",
                         "65540,2"
                     ],
@@ -1025,11 +1032,13 @@
                         "--target-dtype",
                         "bf16",
                         "--fp-values-range",
-                        "-2.0,2.0",
+                        "-max,max",
+                        "--tensor-dim-range",
+                        "35,64",
                         "--target-shape",
-                        "3,16",
+                        "30,16",
                         "--target-shape",
-                        "1,23"
+                        "100,23"
                     ]
                 ]
             }
diff --git a/verif/generator/tosa_arg_gen.py b/verif/generator/tosa_arg_gen.py
index 4014656..1f54851 100644
--- a/verif/generator/tosa_arg_gen.py
+++ b/verif/generator/tosa_arg_gen.py
@@ -1541,9 +1541,7 @@
     @staticmethod
     def agFullyConnected(testGen, opName, shapeList, dtypes, error_name=None):
 
-        assert isinstance(dtypes, list) or isinstance(
-            dtypes, tuple
-        ), f"{dtypes} unexpected"
+        assert isinstance(dtypes, (list, tuple)), f"{dtypes} unexpected"
         input_dtype = dtypes[0]
 
         if error_name == ErrorIf.WrongOutputType:
@@ -1554,7 +1552,25 @@
         else:
             accum_dtype = gtu.get_accum_dtype_from_tgTypes(dtypes)
 
-        return [(f"acc{testGen.typeStr(accum_dtype)}", [accum_dtype])]
+        # Set up compliance info
+        args_dict = {
+            "acc_type": accum_dtype,
+            "ks": int(shapeList[0][1]),  # Set KS = IC, from input A (N,IC)
+            "dot_products": gtu.product((shapeList[0][0], shapeList[1][0])),
+            "shape": shapeList[0],
+        }
+
+        arg_list = [(f"acc{testGen.typeStr(accum_dtype)}", args_dict)]
+
+        arg_list = TosaArgGen._add_data_generators(
+            testGen,
+            opName,
+            input_dtype,
+            arg_list,
+            error_name,
+        )
+        # Return list of tuples: (arg_str, args_dict)
+        return arg_list
 
     @staticmethod
     def agMatMul(testGen, opName, shapeList, dtype, error_name=None):
diff --git a/verif/generator/tosa_test_gen.py b/verif/generator/tosa_test_gen.py
index 3180cf5..d1fe11d 100644
--- a/verif/generator/tosa_test_gen.py
+++ b/verif/generator/tosa_test_gen.py
@@ -1086,21 +1086,23 @@
     def build_fully_connected(
         self,
         op,
-        ifm,
-        filter,
-        bias,
-        accum_dtype,
+        inputs,
+        args_dict,
         validator_fcns=None,
         error_name=None,
         qinfo=None,
     ):
-        result_tens = OutputShaper.fullyConnectedOp(
+        assert len(inputs) == 3
+        ifm, filter, bias = inputs
+        accum_dtype = args_dict["acc_type"]
+
+        result_tensor = OutputShaper.fullyConnectedOp(
             self.ser, self.rng, ifm, filter, accum_dtype, error_name
         )
 
         # Invalidate Input/Output list for error if checks.
         input_list = [ifm.name, filter.name, bias.name]
-        output_list = [result_tens.name]
+        output_list = [result_tensor.name]
         pCount, cCount = op["operands"]
         num_operands = pCount + cCount
         input_list, output_list = TosaErrorIfArgGen.eiInvalidateInputOutputList(
@@ -1115,10 +1117,10 @@
             input_shape=ifm.shape,
             input_dtype=ifm.dtype,
             weight_dtype=filter.dtype,
-            output_shape=result_tens.shape,
-            output_dtype=result_tens.dtype,
+            output_shape=result_tensor.shape,
+            output_dtype=result_tensor.dtype,
             qinfo=qinfo,
-            result_tensors=[result_tens],
+            result_tensors=[result_tensor],
             input_list=input_list,
             output_list=output_list,
             num_operands=num_operands,
@@ -1130,7 +1132,12 @@
         attr.FullyConnectedAttribute(qinfo[0], qinfo[1])
 
         self.ser.addOperator(op["op"], input_list, output_list, attr)
-        return result_tens
+
+        compliance = self.tensorComplianceMetaData(
+            op, ifm.dtype, args_dict, result_tensor, error_name
+        )
+
+        return TosaTestGen.BuildInfo(result_tensor, compliance)
 
     def build_matmul(
         self, op, inputs, args_dict, validator_fcns=None, error_name=None, qinfo=None
@@ -3077,7 +3084,7 @@
             "build_fcn": (
                 build_fully_connected,
                 TosaTensorGen.tgFullyConnected,
-                TosaTensorValuesGen.tvgDefault,
+                TosaTensorValuesGen.tvgLazyGenDefault,
                 TosaArgGen.agFullyConnected,
             ),
             "qgen": TosaQuantGen.qgConv,
@@ -3091,6 +3098,9 @@
                 TosaErrorValidator.evWrongInputList,
                 TosaErrorValidator.evWrongOutputList,
             ),
+            "data_gen": {
+                "fp": (gtu.DataGenType.DOT_PRODUCT,),
+            },
         },
         "matmul": {
             "op": Op.MATMUL,
