diff --git a/gen_ipmi_sel.pl b/gen_ipmi_sel.pl
new file mode 100755
index 0000000..dd1fcbd
--- /dev/null
+++ b/gen_ipmi_sel.pl
@@ -0,0 +1,120 @@
+#! /usr/bin/perl
+use strict;
+use warnings;
+
+use mrw::Targets;
+use mrw::Inventory;
+use mrw::Util;
+use Getopt::Long; # For parsing command line arguments
+use YAML::Tiny qw(LoadFile);
+
+# Globals
+my $serverwizFile  = "";
+my $debug          = 0;
+my $outputFile     = "";
+my $metaDataFile   = "";
+
+# Command line argument parsing
+GetOptions(
+"i=s" => \$serverwizFile,    # string
+"m=s" => \$metaDataFile,     # string
+"o=s" => \$outputFile,       # string
+"d"   => \$debug,
+)
+or printUsage();
+
+if (($serverwizFile eq "") or ($outputFile eq "") or ($metaDataFile eq ""))
+{
+    printUsage();
+}
+
+my $targetObj = Targets->new;
+$targetObj->loadXML($serverwizFile);
+
+# Open the MRW xml and the Metadata file for the sensor.
+# Get the IPMI sensor information based on the Entity ID and Sensor Type.
+# Fetch the Sensor ID, Event/Reading Type and Object Path from MRW.
+# Get the Sensor Type and Offset from the metadata file.
+# Merge and generate an output YAML with inventory object path as the key.
+
+open(my $fh, '>', $outputFile) or die "Could not open file '$outputFile' $!";
+my $metaDataConfig = LoadFile($metaDataFile);
+
+my @interestedTypes = keys %{$metaDataConfig};
+my %types;
+
+@types{@interestedTypes} = ();
+
+my @inventory = Inventory::getInventory($targetObj);
+#Process all the targets in the XML
+foreach my $target (sort keys %{$targetObj->getAllTargets()})
+{
+    my $sensorID = '';
+    my $sensorType = '';
+    my $eventReadingType = '';
+    my $path = '';
+    my $obmcPath = '';
+    my $entityID = '';
+    my $base = "/xyz/openbmc_project/inventory";
+
+    if ($targetObj->getTargetType($target) eq "unit-ipmi-sensor") {
+
+        $sensorID = $targetObj->getAttribute($target, "IPMI_SENSOR_ID");
+        $sensorType = $targetObj->getAttribute($target, "IPMI_SENSOR_TYPE");
+        $eventReadingType = $targetObj->getAttribute($target,
+                             "IPMI_SENSOR_READING_TYPE");
+        $path = $targetObj->getAttribute($target, "INSTANCE_PATH");
+        $entityID = $targetObj->getAttribute($target, "IPMI_ENTITY_ID");
+
+        # Look only for the interested Entity ID & Sensor Type
+        next if (not exists $types{$entityID});
+        next if ($sensorType ne $metaDataConfig->{$entityID}->{SensorType});
+
+        #if there is ipmi sensor without sensorid or sensorReadingType or
+        #Instance path then die
+
+        if ($sensorID eq '' or $eventReadingType eq '' or $path eq '') {
+            close $fh;
+            die("sensor without info for target=$target");
+        }
+
+        # Removing the string "instance:" from path
+        $path =~ s/^instance:/\//;
+        $obmcPath = Util::getObmcName(\@inventory, $path);
+
+        # If unable to get the obmc path then die
+        if (not defined $obmcPath) {
+            close $fh;
+            die("Unable to get the obmc path for path=$path");
+        }
+
+        $base .= $obmcPath;
+
+        print $fh $base.":"."\n";
+        print $fh "  sensorID: ".$sensorID."\n";
+        print $fh "  sensorType: ".$sensorType."\n";
+        print $fh "  eventReadingType: ".$eventReadingType."\n";
+        print $fh "  offset: ".$metaDataConfig->{$entityID}->{Offset}."\n";
+
+        printDebug("$sensorID : $sensorType : $eventReadingType : $entityID : $metaDataConfig->{$entityID}->{Offset}")
+    }
+}
+close $fh;
+
+# Usage
+sub printUsage
+{
+    print "
+    $0 -i [MRW filename] -m [SensorMetaData filename] -o [Output filename] [OPTIONS]
+Options:
+    -d = debug mode
+        \n";
+    exit(1);
+}
+
+# Helper function to put debug statements.
+sub printDebug
+{
+    my $str = shift;
+    print "DEBUG: ", $str, "\n" if $debug;
+}
