diff --git a/cpld/lattice/lattice.hpp b/cpld/lattice/lattice.hpp
new file mode 100644
index 0000000..0bdc2bb
--- /dev/null
+++ b/cpld/lattice/lattice.hpp
@@ -0,0 +1,63 @@
+#pragma once
+#include "common/include/i2c/i2c.hpp"
+
+#include <chrono>
+#include <iostream>
+#include <string_view>
+#include <utility>
+
+struct cpldI2cInfo
+{
+    unsigned long int QF; // Quantity of Fuses
+    unsigned int* UFM;    // User Flash Memory
+    unsigned int version;
+    unsigned int checksum;
+    std::vector<uint8_t> cfgData;
+    std::vector<uint8_t> ufmData;
+};
+
+class CpldLatticeManager
+{
+  public:
+    CpldLatticeManager(sdbusplus::async::context& ctx, const uint16_t bus,
+                       const uint8_t address, const uint8_t* image,
+                       size_t imageSize, const std::string& chip,
+                       const std::string& target, const bool debugMode) :
+        ctx(ctx), image(image), imageSize(imageSize), chip(chip),
+        target(target), debugMode(debugMode),
+        i2cInterface(phosphor::i2c::I2C(bus, address))
+    {}
+    sdbusplus::async::task<bool> updateFirmware(
+        std::function<bool(int)> progressCallBack);
+    sdbusplus::async::task<bool> getVersion(std::string& version);
+
+  private:
+    sdbusplus::async::context& ctx;
+    cpldI2cInfo fwInfo{};
+    const uint8_t* image;
+    size_t imageSize;
+    std::string chip;
+    std::string target;
+    bool isLCMXO3D = false;
+    bool debugMode = false;
+    phosphor::i2c::I2C i2cInterface;
+
+    sdbusplus::async::task<bool> XO2XO3FamilyUpdate(
+        std::function<bool(int)> progressCallBack);
+
+    int indexof(const char* str, const char* ptn);
+    bool jedFileParser();
+    bool verifyChecksum();
+    sdbusplus::async::task<bool> readDeviceId();
+    sdbusplus::async::task<bool> enableProgramMode();
+    sdbusplus::async::task<bool> eraseFlash();
+    sdbusplus::async::task<bool> resetConfigFlash();
+    sdbusplus::async::task<bool> writeProgramPage();
+    sdbusplus::async::task<bool> programUserCode();
+    sdbusplus::async::task<bool> programDone();
+    sdbusplus::async::task<bool> disableConfigInterface();
+    sdbusplus::async::task<bool> readBusyFlag(uint8_t& busyFlag);
+    sdbusplus::async::task<bool> readStatusReg(uint8_t& statusReg);
+    sdbusplus::async::task<bool> waitBusyAndVerify();
+    sdbusplus::async::task<bool> readUserCode(uint32_t& userCode);
+};
