[topgen] Add Module Name When Prefixing Signals

This commit adds the module name into the signal information when
generating top_earlgrey.gen.hjson. This makes it much easier to, for
example, map a PLIC interrupt signal back to the module it
corresponds to, without having to split the signal name again.

Signed-off-by: Sam Elliott <selliott@lowrisc.org>
diff --git a/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson b/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
index 2abd6af..6b4c58f 100644
--- a/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
+++ b/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
@@ -1232,241 +1232,289 @@
       name: gpio_gpio
       width: 32
       type: interrupt
+      module_name: gpio
     }
     {
       name: uart_tx_watermark
       width: 1
       type: interrupt
+      module_name: uart
     }
     {
       name: uart_rx_watermark
       width: 1
       type: interrupt
+      module_name: uart
     }
     {
       name: uart_tx_empty
       width: 1
       type: interrupt
+      module_name: uart
     }
     {
       name: uart_rx_overflow
       width: 1
       type: interrupt
+      module_name: uart
     }
     {
       name: uart_rx_frame_err
       width: 1
       type: interrupt
+      module_name: uart
     }
     {
       name: uart_rx_break_err
       width: 1
       type: interrupt
+      module_name: uart
     }
     {
       name: uart_rx_timeout
       width: 1
       type: interrupt
+      module_name: uart
     }
     {
       name: uart_rx_parity_err
       width: 1
       type: interrupt
+      module_name: uart
     }
     {
       name: spi_device_rxf
       width: 1
       type: interrupt
+      module_name: spi_device
     }
     {
       name: spi_device_rxlvl
       width: 1
       type: interrupt
+      module_name: spi_device
     }
     {
       name: spi_device_txlvl
       width: 1
       type: interrupt
+      module_name: spi_device
     }
     {
       name: spi_device_rxerr
       width: 1
       type: interrupt
+      module_name: spi_device
     }
     {
       name: spi_device_rxoverflow
       width: 1
       type: interrupt
+      module_name: spi_device
     }
     {
       name: spi_device_txunderflow
       width: 1
       type: interrupt
+      module_name: spi_device
     }
     {
       name: flash_ctrl_prog_empty
       width: 1
       type: interrupt
+      module_name: flash_ctrl
     }
     {
       name: flash_ctrl_prog_lvl
       width: 1
       type: interrupt
+      module_name: flash_ctrl
     }
     {
       name: flash_ctrl_rd_full
       width: 1
       type: interrupt
+      module_name: flash_ctrl
     }
     {
       name: flash_ctrl_rd_lvl
       width: 1
       type: interrupt
+      module_name: flash_ctrl
     }
     {
       name: flash_ctrl_op_done
       width: 1
       type: interrupt
+      module_name: flash_ctrl
     }
     {
       name: flash_ctrl_op_error
       width: 1
       type: interrupt
+      module_name: flash_ctrl
     }
     {
       name: hmac_hmac_done
       width: 1
       type: interrupt
+      module_name: hmac
     }
     {
       name: hmac_fifo_empty
       width: 1
       type: interrupt
+      module_name: hmac
     }
     {
       name: hmac_hmac_err
       width: 1
       type: interrupt
+      module_name: hmac
     }
     {
       name: alert_handler_classa
       width: 1
       type: interrupt
+      module_name: alert_handler
     }
     {
       name: alert_handler_classb
       width: 1
       type: interrupt
+      module_name: alert_handler
     }
     {
       name: alert_handler_classc
       width: 1
       type: interrupt
+      module_name: alert_handler
     }
     {
       name: alert_handler_classd
       width: 1
       type: interrupt
+      module_name: alert_handler
     }
     {
       name: nmi_gen_esc0
       width: 1
       type: interrupt
+      module_name: nmi_gen
     }
     {
       name: nmi_gen_esc1
       width: 1
       type: interrupt
+      module_name: nmi_gen
     }
     {
       name: nmi_gen_esc2
       width: 1
       type: interrupt
+      module_name: nmi_gen
     }
     {
       name: nmi_gen_esc3
       width: 1
       type: interrupt
+      module_name: nmi_gen
     }
     {
       name: usbdev_pkt_received
       width: 1
       type: interrupt
+      module_name: usbdev
     }
     {
       name: usbdev_pkt_sent
       width: 1
       type: interrupt
+      module_name: usbdev
     }
     {
       name: usbdev_disconnected
       width: 1
       type: interrupt
+      module_name: usbdev
     }
     {
       name: usbdev_host_lost
       width: 1
       type: interrupt
+      module_name: usbdev
     }
     {
       name: usbdev_link_reset
       width: 1
       type: interrupt
+      module_name: usbdev
     }
     {
       name: usbdev_link_suspend
       width: 1
       type: interrupt
+      module_name: usbdev
     }
     {
       name: usbdev_link_resume
       width: 1
       type: interrupt
+      module_name: usbdev
     }
     {
       name: usbdev_av_empty
       width: 1
       type: interrupt
+      module_name: usbdev
     }
     {
       name: usbdev_rx_full
       width: 1
       type: interrupt
+      module_name: usbdev
     }
     {
       name: usbdev_av_overflow
       width: 1
       type: interrupt
+      module_name: usbdev
     }
     {
       name: usbdev_link_in_err
       width: 1
       type: interrupt
+      module_name: usbdev
     }
     {
       name: usbdev_rx_crc_err
       width: 1
       type: interrupt
+      module_name: usbdev
     }
     {
       name: usbdev_rx_pid_err
       width: 1
       type: interrupt
+      module_name: usbdev
     }
     {
       name: usbdev_rx_bitstuff_err
       width: 1
       type: interrupt
+      module_name: usbdev
     }
     {
       name: usbdev_frame
       width: 1
       type: interrupt
+      module_name: usbdev
     }
     {
       name: usbdev_connected
       width: 1
       type: interrupt
+      module_name: usbdev
     }
   ]
   alert_module:
@@ -1480,6 +1528,7 @@
       width: 1
       type: alert
       async: 0
+      module_name: hmac
     }
   ]
   pinmux:
@@ -1525,6 +1574,7 @@
         name: spi_device_sck
         width: 1
         type: input
+        module_name: spi_device
         pad:
         [
           {
@@ -1537,6 +1587,7 @@
         name: spi_device_csb
         width: 1
         type: input
+        module_name: spi_device
         pad:
         [
           {
@@ -1549,6 +1600,7 @@
         name: spi_device_mosi
         width: 1
         type: input
+        module_name: spi_device
         pad:
         [
           {
@@ -1561,6 +1613,7 @@
         name: spi_device_miso
         width: 1
         type: output
+        module_name: spi_device
         pad:
         [
           {
@@ -1573,6 +1626,7 @@
         name: uart_rx
         width: 1
         type: input
+        module_name: uart
         pad:
         [
           {
@@ -1585,6 +1639,7 @@
         name: uart_tx
         width: 1
         type: output
+        module_name: uart
         pad:
         [
           {
@@ -1597,6 +1652,7 @@
         name: usbdev_sense
         width: 1
         type: input
+        module_name: usbdev
         pad:
         [
           {
@@ -1609,6 +1665,7 @@
         name: usbdev_se0
         width: 1
         type: output
+        module_name: usbdev
         pad:
         [
           {
@@ -1621,6 +1678,7 @@
         name: usbdev_pullup
         width: 1
         type: output
+        module_name: usbdev
         pad:
         [
           {
@@ -1633,6 +1691,7 @@
         name: usbdev_tx_mode_se
         width: 1
         type: output
+        module_name: usbdev
         pad:
         [
           {
@@ -1645,6 +1704,7 @@
         name: usbdev_suspend
         width: 1
         type: output
+        module_name: usbdev
         pad:
         [
           {
@@ -1657,6 +1717,7 @@
         name: usbdev_d
         width: 1
         type: inout
+        module_name: usbdev
         pad:
         [
           {
@@ -1669,6 +1730,7 @@
         name: usbdev_dp
         width: 1
         type: inout
+        module_name: usbdev
         pad:
         [
           {
@@ -1681,6 +1743,7 @@
         name: usbdev_dn
         width: 1
         type: inout
+        module_name: usbdev
         pad:
         [
           {
@@ -1698,6 +1761,7 @@
         name: gpio_gpio
         width: 32
         type: inout
+        module_name: gpio
       }
     ]
   }
diff --git a/util/topgen/lib.py b/util/topgen/lib.py
index b33d31f..6ee4fc7 100644
--- a/util/topgen/lib.py
+++ b/util/topgen/lib.py
@@ -117,15 +117,16 @@
     return result
 
 
-def add_prefix_to_signal(signal, prefix):
-    """Add prefix to module signal format { name: "sig_name", width: NN }
+def add_module_prefix_to_signal(signal, module):
+    """Add module prefix to module signal format { name: "sig_name", width: NN }
     """
     result = deepcopy(signal)
 
     if "name" not in signal:
         raise SystemExit("signal {} doesn't have name field".format(signal))
 
-    result["name"] = prefix + "_" + signal["name"]
+    result["name"] = module + "_" + signal["name"]
+    result["module_name"] = module
 
     return result
 
diff --git a/util/topgen/merge.py b/util/topgen/merge.py
index 5c1babc..2543b5d 100644
--- a/util/topgen/merge.py
+++ b/util/topgen/merge.py
@@ -458,7 +458,7 @@
 
         log.info("Adding interrupts from module %s" % ip[0]["name"])
         top["interrupt"] += list(
-            map(partial(add_prefix_to_signal, prefix=m.lower()),
+            map(partial(add_module_prefix_to_signal, module=m.lower()),
                 ip[0]["interrupt_list"]))
 
 
@@ -480,7 +480,7 @@
 
         log.info("Adding alert from module %s" % ip[0]["name"])
         top["alert"] += list(
-            map(partial(add_prefix_to_signal, prefix=m.lower()),
+            map(partial(add_module_prefix_to_signal, module=m.lower()),
                 ip[0]["alert_list"]))
 
 
@@ -513,7 +513,7 @@
 
         # convert signal with module name
         signals = list(
-            map(partial(add_prefix_to_signal, prefix=mname), signals))
+            map(partial(add_module_prefix_to_signal, module=mname), signals))
         # Parse how many pads are assigned
         if not "pad" in e:
             raise SystemExit("Should catch pad field in validate.py!")
@@ -577,22 +577,22 @@
                 filter(
                     lambda x: x["name"] not in dio_names,
                     map(
-                        partial(add_prefix_to_signal,
-                                prefix=m["name"].lower()),
+                        partial(add_module_prefix_to_signal,
+                                module=m["name"].lower()),
                         m["available_input_list"])))
             pinmux["outputs"] += list(
                 filter(
                     lambda x: x["name"] not in dio_names,
                     map(
-                        partial(add_prefix_to_signal,
-                                prefix=m["name"].lower()),
+                        partial(add_module_prefix_to_signal,
+                                module=m["name"].lower()),
                         m["available_output_list"])))
             pinmux["inouts"] += list(
                 filter(
                     lambda x: x["name"] not in dio_names,
                     map(
-                        partial(add_prefix_to_signal,
-                                prefix=m["name"].lower()),
+                        partial(add_module_prefix_to_signal,
+                                module=m["name"].lower()),
                         m["available_inout_list"])))
 
         elif len(tokens) == 2: