diff --git a/.gitignore b/.gitignore
index 82d41a6..d3304ad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
 /build
 /subprojects/googletest
 /cppcheck-temp
+/.cache
diff --git a/chip_data/.gitignore b/chip_data/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/chip_data/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/chip_data/json_list.sh b/chip_data/json_list.sh
new file mode 100755
index 0000000..e59b127
--- /dev/null
+++ b/chip_data/json_list.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+# Verify input.
+if [ ! -d "$1" ]; then
+    echo "Invalid directory: $1" 1>&2
+    exit 1
+fi
+
+# Simply list out all of the JSON files in the given directory.
+for i in "$1"/*.json; do
+    if [ -f "$i" ]; then
+        echo "$i"
+    fi
+done
diff --git a/chip_data/meson.build b/chip_data/meson.build
new file mode 100644
index 0000000..1741447
--- /dev/null
+++ b/chip_data/meson.build
@@ -0,0 +1,51 @@
+#-------------------------------------------------------------------------------
+# Chip Data Files
+#-------------------------------------------------------------------------------
+
+build_cdb = find_program('parse_chip_data.py')
+
+# The key for each entry in this dictionary is a subdirectory containing XML for
+# a chip model. The value for each entry contains the expected output files that
+# will be produced for each chip model. It is important to note that the script
+# will generate all output files, regardless of what is listed, when the script
+# is run. However, this list must be kept in sync with the expected output so
+# that meson will know to run the script when an output file has changed or is
+# missing.
+cdb_files = {}
+
+chip_config = get_option('chip_config')
+
+if 'p10' in chip_config
+    cdb_files += {'p10_10' : ['chip_data_p10_10.cdb']}
+    cdb_files += {'p10_20' : ['chip_data_p10_20.cdb']}
+endif
+
+if 'explorer' in chip_config
+    cdb_files += {'explorer' : ['chip_data_explorer_11.cdb',
+                                'chip_data_explorer_20.cdb']}
+endif
+
+if 'odyssey' in chip_config
+    cdb_files += {'odyssey' : ['chip_data_odyssey_10.cdb']}
+endif
+
+foreach chip_dir, out_files : cdb_files
+
+    source_dir = meson.current_source_dir() + '/' + chip_dir
+    build_dir  = meson.current_build_dir()
+
+    # Get all JSON files in the chip directory. This is a bit of a workaround
+    # because meson does not allow wildcards.
+    json_list = run_command('json_list.sh', source_dir)
+    in_files = json_list.stdout().strip().split('\n')
+
+    custom_target('build_cdb_' + chip_dir, build_by_default : true,
+                  input : in_files, output : out_files,
+                  command : [ build_cdb, 'bin', source_dir, build_dir ],
+                  install : true,
+                  install_dir : join_paths(get_option('prefix'),
+                                           get_option('datadir'),
+                                           meson.project_name()))
+
+endforeach
+
diff --git a/chip_data/pyprd/chip_data/peltool.py b/chip_data/pyprd/chip_data/peltool.py
index 89724d7..814d17c 100644
--- a/chip_data/pyprd/chip_data/peltool.py
+++ b/chip_data/pyprd/chip_data/peltool.py
@@ -8,10 +8,11 @@
 AttnType = namedtuple("AttnType", "id desc")
 
 _attn_types = {
-    "CS": AttnType(1, "checkstop"),
+    "CS": AttnType(1, "chip checkstop"),
     "UCS": AttnType(2, "unit checkstop"),
     "RE": AttnType(3, "recoverable"),
     "SPA": AttnType(4, "special attention"),
+    "HA": AttnType(5, "host attention"),
 }
 
 
diff --git a/chip_data/pyprd/util/model_ec.py b/chip_data/pyprd/util/model_ec.py
index 20b3954..e7ee5f7 100644
--- a/chip_data/pyprd/util/model_ec.py
+++ b/chip_data/pyprd/util/model_ec.py
@@ -3,9 +3,9 @@
 ModelEc = namedtuple("ModelEc", "id type desc")
 
 supported = {
-    "EXPLORER_11": ModelEc(0x60D20011, "ocmb", "Explorer DD1.1"),
-    "EXPLORER_20": ModelEc(0x60D20020, "ocmb", "Explorer DD2.0"),
-    "ODYSSEY_10": ModelEc(0x60C00010, "ocmb", "Odyssey DD1.0"),
+    "EXPLORER_11": ModelEc(0x60D20011, "ocmb", "Explorer 1.1"),
+    "EXPLORER_20": ModelEc(0x60D20020, "ocmb", "Explorer 2.0"),
+    "ODYSSEY_10": ModelEc(0x60C00010, "ocmb", "Odyssey 1.0"),
     "P10_10": ModelEc(0x20DA0010, "proc", "P10 1.0"),
     "P10_20": ModelEc(0x20DA0020, "proc", "P10 2.0"),
 }
diff --git a/chip_data/setup.py b/chip_data/setup.py
new file mode 100644
index 0000000..408c88a
--- /dev/null
+++ b/chip_data/setup.py
@@ -0,0 +1,56 @@
+import os
+
+from parse_chip_data import gen_peltool_json
+from setuptools import setup
+from setuptools.command.build_py import build_py
+
+# Typically in files like this we'd use find_packages() to traverse directories
+# for any static packages. However, we are trying to add data to a package that
+# will actually exist in another repository. Therefore, we have to explicitly
+# list out the package name, directory, and data information.
+
+# We are building data for the following module:
+package_name = "pel.hwdiags"
+
+# Since we are not using find_packages() we have to provide a package directory,
+# but in this case nothing exists because there are no static package
+# directories. Therefore, we will just use the empty string.
+package_dir = ""
+
+# Split the package data directory into its components.
+data_dir_components = [*package_name.split("."), "data"]
+
+# It is important to note that '/' must be used as the path separator, even on
+# Windows. Setuptools will automatically convert the slashes where appropriate.
+package_data_glob = "/".join(data_dir_components)
+
+
+# This is a custom build class that is used to dynamically build the data files.
+class my_build_py(build_py):
+    def run(self):
+        if not self.dry_run:  # honor --dry-run flag
+            # Make sure the build directory for the data exists.
+            # Yes, os.path.join() is necessary in this case, which is different
+            # that what is stated above regarding package_data_glob.
+            data_dir = os.path.join(self.build_lib, *data_dir_components)
+            self.mkpath(data_dir)
+
+            # Generate the PEL parser data JSON from the Chip Data XML.
+            # TODO: The list of data file directories will need to be
+            #       configurable via the package config in the bitbake recipes.
+            for chip in ("p10_10", "p10_20", "explorer", "odyssey"):
+                gen_peltool_json(chip, data_dir)
+
+        # Call the superclass run() to ensure everything else builds.
+        super().run()
+
+
+setup(
+    name="openpower-hw-diags-pel-parser-data",
+    version=os.getenv("PELTOOL_VERSION", "1.0"),
+    classifiers=["License :: OSI Approved :: Apache Software License"],
+    cmdclass={"build_py": my_build_py},  # register custom build class
+    packages=[package_name],
+    package_dir={package_name: package_dir},
+    package_data={package_name: [package_data_glob]},
+)
diff --git a/meson.build b/meson.build
index 426467e..04136e9 100644
--- a/meson.build
+++ b/meson.build
@@ -71,7 +71,7 @@
 # Chip Data Files
 #-------------------------------------------------------------------------------
 
-subdir('xml')
+subdir('chip_data')
 
 #-------------------------------------------------------------------------------
 # Test
diff --git a/test/simulator/simulator.cpp b/test/simulator/simulator.cpp
index bca2b99..408d14a 100644
--- a/test/simulator/simulator.cpp
+++ b/test/simulator/simulator.cpp
@@ -13,10 +13,10 @@
 const std::map<SimulatorData::SimChipType, const char*>
     SimulatorData::cv_chipPath = {
         {SAMPLE, "../test/simulator/sample_data/sample.cdb"},
-        {EXPLORER_11, "xml/chip_data_explorer_11.cdb"},
-        {EXPLORER_20, "xml/chip_data_explorer_20.cdb"},
-        {P10_10, "xml/chip_data_p10_10.cdb"},
-        {P10_20, "xml/chip_data_p10_20.cdb"},
+        {EXPLORER_11, "chip_data/chip_data_explorer_11.cdb"},
+        {EXPLORER_20, "chip_data/chip_data_explorer_20.cdb"},
+        {P10_10, "chip_data/chip_data_p10_10.cdb"},
+        {P10_20, "chip_data/chip_data_p10_20.cdb"},
 };
 
 //------------------------------------------------------------------------------
@@ -73,6 +73,35 @@
 
 //------------------------------------------------------------------------------
 
+const char* __attn(AttentionType_t i_type)
+{
+    const char* str = "";
+    switch (i_type)
+    {
+        case ATTN_TYPE_CHIP_CS:
+            str = "CHIP_CS";
+            break;
+        case ATTN_TYPE_UNIT_CS:
+            str = "UNIT_CS";
+            break;
+        case ATTN_TYPE_RECOVERABLE:
+            str = "RECOVERABLE";
+            break;
+        case ATTN_TYPE_SP_ATTN:
+            str = "SP_ATTN";
+            break;
+        case ATTN_TYPE_HOST_ATTN:
+            str = "HOST_ATTN";
+            break;
+        default:
+            HEI_ERR("Unsupported attention type: %u", i_type);
+            assert(0);
+    }
+    return str;
+}
+
+//------------------------------------------------------------------------------
+
 void SimulatorData::endIteration()
 {
     // Start by calling libhei::isolate().
@@ -95,23 +124,44 @@
     // Get the list of signatures found in isolation.
     std::vector<Signature> givenSigList = isoData.getSignatureList();
 
-    // Verify the expected list and given list are the same.
-    ASSERT_EQ(iv_expSigList.size(), givenSigList.size());
-
-    std::sort(iv_expSigList.begin(), iv_expSigList.end());
-    std::sort(givenSigList.begin(), givenSigList.end());
-
-    /* TODO: Currently used for debug. Eventually, we want this written to file.
-    for (const auto& s : givenSigList)
+    // Print out the expected signature list and verify matches with given list.
+    HEI_INF("Signature summary:")
+    bool mismatch = false;
+    for (const auto& e : iv_expSigList)
     {
-        HEI_INF("Signature: %s 0x%04x %u %u %u",
-                (const char*)s.getChip().getChip(), s.getId(), s.getInstance(),
-                s.getBit(), s.getAttnType());
-    }
-    */
+        auto gItr = std::find(givenSigList.begin(), givenSigList.end(), e);
+        if (givenSigList.end() != gItr)
+        {
+            HEI_INF("  Match:      %s 0x%04x %2u %2u %s",
+                    (const char*)e.getChip().getChip(), e.getId(),
+                    e.getInstance(), e.getBit(), __attn(e.getAttnType()));
 
-    ASSERT_TRUE(std::equal(givenSigList.begin(), givenSigList.end(),
-                           iv_expSigList.begin()));
+            // Remove from given signature list so we can determine if there are
+            // any leftovers at the end.
+            givenSigList.erase(gItr);
+        }
+        else
+        {
+            HEI_INF("  No match:   %s 0x%04x %2u %2u %s",
+                    (const char*)e.getChip().getChip(), e.getId(),
+                    e.getInstance(), e.getBit(), __attn(e.getAttnType()));
+
+            mismatch = true;
+        }
+    }
+
+    // Print out any leftover signatures from the given list.
+    for (const auto& g : givenSigList)
+    {
+        HEI_INF("  Unexpected: %s 0x%04x %2u %2u %s",
+                (const char*)g.getChip().getChip(), g.getId(), g.getInstance(),
+                g.getBit(), __attn(g.getAttnType()));
+
+        mismatch = true;
+    }
+
+    // Final check for mismatches.
+    ASSERT_FALSE(mismatch);
 
     // The iteration is complete so we can flush the data.
     flushIterationData();
diff --git a/test/simulator/testcases/exp20_foxhound7.cpp b/test/simulator/testcases/exp20_foxhound7.cpp
index 65a4966..e75f223 100644
--- a/test/simulator/testcases/exp20_foxhound7.cpp
+++ b/test/simulator/testcases/exp20_foxhound7.cpp
@@ -9,7 +9,7 @@
 REG_SCOM(ocmb0, 0x08040000, 0x1000000000000000) // OCMB_CHIPLET_CS_FIR
 REG_SCOM(ocmb0, 0x0804000a, 0x0000000001000000) // OCMB_LFIR
 
-EXP_SIG(ocmb0, 0xbdcd, 0, 39, UNIT_CS)
+EXP_SIG(ocmb0, 0xbdcd, 0, 39, CHIP_CS)
 
 END_ITERATION
 
diff --git a/test/simulator/testcases/omi_dl_fatal.cpp b/test/simulator/testcases/omi_dl_fatal.cpp
index 1284462..b08f44f 100644
--- a/test/simulator/testcases/omi_dl_fatal.cpp
+++ b/test/simulator/testcases/omi_dl_fatal.cpp
@@ -203,7 +203,7 @@
 REG_SCOM(ocmb1, 0x08012800, 0x8000000000000000) // OMI_DL_FIR[0]
 REG_SCOM(ocmb1, 0x08012813, 0x0000000000000001) // OMI_DL_ERR_RPT[63]
 
-EXP_SIG(ocmb1, 0xbbd3, 0, 63, UNIT_CS)
+EXP_SIG(ocmb1, 0xbbd3, 0, 63, CHIP_CS)
 
 END_ITERATION
 
