[reggen] Define a type to represent an inter-module signal

This is for entries in the inter_signal_list field.

Signed-off-by: Rupert Swarbrick <rswarbrick@lowrisc.org>
diff --git a/util/topgen.py b/util/topgen.py
index 79529b4..2062473 100755
--- a/util/topgen.py
+++ b/util/topgen.py
@@ -20,6 +20,8 @@
 
 import tlgen
 from reggen import access, gen_dv, gen_rtl, validate, window
+from reggen.inter_signal import InterSignal
+from reggen.lib import check_list
 from reggen.reg_block import RegBlock
 from topgen import amend_clocks, get_hjsonobj_xbars
 from topgen import intermodule as im
@@ -95,13 +97,14 @@
                                     use_decimal=True,
                                     object_pairs_hook=OrderedDict)
 
-            # Deepcopy of the inter_signal_list.
-            # As of writing the code, it is not expected to write-back the
-            # read xbar objects into files. Still, as `inter_signal_list` is
-            # modified in the `elab_intermodule()` stage, it is better to keep
-            # the original content.
-            obj["inter_signal_list"] = deepcopy(
-                xbar_ipobj["inter_signal_list"])
+            r_inter_signal_list = check_list(xbar_ipobj.get('inter_signal_list', []),
+                                             'inter_signal_list field')
+            obj['inter_signal_list'] = [
+                InterSignal.from_raw('entry {} of the inter_signal_list field'
+                                     .format(idx + 1),
+                                     entry)
+                for idx, entry in enumerate(r_inter_signal_list)
+            ]
 
 
 def generate_alert_handler(top, out_path):