diff --git a/util/topgen.py b/util/topgen.py
index a69d438..8801bd1 100755
--- a/util/topgen.py
+++ b/util/topgen.py
@@ -22,6 +22,7 @@
 from topgen import (amend_clocks, get_hjsonobj_xbars, merge_top, search_ips,
                     validate_top)
 from topgen import intermodule as im
+from topgen.c import TopGenC
 
 # Common header for generated files
 genhdr = '''// Copyright lowRISC contributors.
@@ -1032,6 +1033,7 @@
         # The C file needs some information from when the header is generated,
         # so we keep this in a dictionary here.
         c_gen_info = {}
+        c_helper = TopGenC(completecfg)
 
         # 'clang-format' -> 'sw/autogen/.clang-format'
         cformat_tplpath = tpl_path / 'clang-format'
@@ -1043,14 +1045,15 @@
         # 'top_earlgrey.h.tpl' -> 'sw/autogen/top_earlgrey.h'
         cheader_path = render_template('top_%s.h',
                                        'sw/autogen',
-                                       c_gen_info=c_gen_info).resolve()
+                                       c_gen_info=c_gen_info,
+                                       helper=c_helper).resolve()
 
         # Save the relative header path into `c_gen_info`
         rel_header_path = cheader_path.relative_to(SRCTREE_TOP)
         c_gen_info["header_path"] = str(rel_header_path)
 
         # 'top_earlgrey.c.tpl' -> 'sw/autogen/top_earlgrey.c'
-        render_template('top_%s.c', 'sw/autogen', c_gen_info=c_gen_info)
+        render_template('top_%s.c', 'sw/autogen', c_gen_info=c_gen_info, helper=c_helper)
 
         # 'top_earlgrey_memory.ld.tpl' -> 'sw/autogen/top_earlgrey_memory.ld'
         render_template('top_%s_memory.ld', 'sw/autogen')
diff --git a/util/topgen/c.py b/util/topgen/c.py
new file mode 100644
index 0000000..0175307
--- /dev/null
+++ b/util/topgen/c.py
@@ -0,0 +1,56 @@
+# Copyright lowRISC contributors.
+# Licensed under the Apache License, Version 2.0, see LICENSE for details.
+# SPDX-License-Identifier: Apache-2.0
+"""This contains a class which is used to help generate `top_{name}.h` and
+`top_{name}.h`.
+"""
+
+
+class Name(object):
+    """We often need to format names in specific ways, this class does so."""
+    def __add__(self, other):
+        return Name(self.parts + other.parts)
+
+    @staticmethod
+    def from_snake_case(input):
+        return Name(input.split("_"))
+
+    def __init__(self, parts):
+        self.parts = list(parts)
+
+    def as_snake_case(self):
+        return "_".join([p.lower() for p in self.parts])
+
+    def as_c_define(self):
+        return "_".join([p.upper() for p in self.parts])
+
+
+class MemoryRegion(object):
+    def __init__(self, name, base_addr, size_bytes):
+        self.name = name
+        self.base_addr = base_addr
+        self.size_bytes = size_bytes
+
+    def base_addr_name(self):
+        return self.name + Name(["base", "addr"])
+
+    def size_bytes_name(self):
+        return self.name + Name(["size", "bytes"])
+
+
+class TopGenC(object):
+    def __init__(self, top_info):
+        self._top_name = Name(["top"]) + Name.from_snake_case(top_info["name"])
+        self.top = top_info
+
+    def modules(self):
+        return [(m["name"],
+                 MemoryRegion(self._top_name + Name.from_snake_case(m["name"]),
+                              m["base_addr"], m["size"]))
+                for m in self.top["module"]]
+
+    def memories(self):
+        return [(m["name"],
+                 MemoryRegion(self._top_name + Name.from_snake_case(m["name"]),
+                              m["base_addr"], m["size"]))
+                for m in self.top["memory"]]
