[reggen] Delete duplicate Register/MultiRegister types in data.py

We've recently moved to representing registers, fields etc. in
classes, rather than dicts. This duplicated some work done in
gen_rtl.py and data.py and this commit removes the duplicated Register
and MultiRegister types.

There's a certain amount of tidying up in reg_pkg.sv.tpl, which I
think makes the implementation a bit easier to read (as much as is
possible for template code like this).

Signed-off-by: Rupert Swarbrick <rswarbrick@lowrisc.org>
diff --git a/util/reggen/reg_top.sv.tpl b/util/reggen/reg_top.sv.tpl
index 75bafaf..2fbdf9b 100644
--- a/util/reggen/reg_top.sv.tpl
+++ b/util/reggen/reg_top.sv.tpl
@@ -5,6 +5,8 @@
 // Register Top module auto-generated by `reggen`
 <%
   from reggen.data import get_basename
+  from reggen.register import Register
+  from reggen.multi_register import MultiRegister
 
   num_wins = len(block.wins)
   num_wins_width = ((num_wins+1).bit_length()) - 1
@@ -146,10 +148,10 @@
   //        or <reg>_{wd|we|qs} if field == 1 or 0
   % for r in regs_flat:
     % if len(r.fields) == 1:
-${sig_gen(r.fields[0], r.name, r.hwext, r.shadowed)}\
+${sig_gen(r.fields[0], r.name.lower(), r.hwext, r.shadowed)}\
     % else:
       % for f in r.fields:
-${sig_gen(f, r.name + "_" + f.name.lower(), r.hwext, r.shadowed)}\
+${sig_gen(f, r.name.lower() + "_" + f.name.lower(), r.hwext, r.shadowed)}\
       % endfor
     % endif
   % endfor
@@ -157,37 +159,36 @@
   // Register instances
   % for r in block.regs:
   ######################## multiregister ###########################
-    % if r.is_multi_reg():
+    % if isinstance(r, MultiRegister):
 <%
-      mreg_flat = r.get_regs_flat()
       k = 0
 %>
-      % for sr in mreg_flat:
-  // Subregister ${k} of Multireg ${r.name}
-  // R[${sr.name}]: V(${str(sr.hwext)})
+      % for sr in r.regs:
+  // Subregister ${k} of Multireg ${r.reg.name.lower()}
+  // R[${sr.name.lower()}]: V(${str(sr.hwext)})
         % if len(sr.fields) == 1:
 <%
           f = sr.fields[0]
-          finst_name = sr.name
-          fsig_name = r.name + "[%d]" % k
+          finst_name = sr.name.lower()
+          fsig_name = r.reg.name.lower() + "[%d]" % k
           k = k + 1
 %>
 ${finst_gen(f, finst_name, fsig_name, sr.hwext, sr.regwen, sr.shadowed)}
         % else:
           % for f in sr.fields:
 <%
-            finst_name = sr.name + "_" + f.name.lower()
-            if r.ishomog:
-              fsig_name = r.name + "[%d]" % k
+            finst_name = sr.name.lower() + "_" + f.name.lower()
+            if r.is_homogeneous():
+              fsig_name = r.reg.name.lower() + "[%d]" % k
               k = k + 1
             else:
-              fsig_name = r.name + "[%d]" % k + "." + get_basename(f.name.lower())
+              fsig_name = r.reg.name.lower() + "[%d]" % k + "." + get_basename(f.name.lower())
 %>
   // F[${f.name.lower()}]: ${f.bits.msb}:${f.bits.lsb}
 ${finst_gen(f, finst_name, fsig_name, sr.hwext, sr.regwen, sr.shadowed)}
           % endfor
 <%
-          if not r.ishomog:
+          if not r.is_homogeneous():
             k += 1
 %>
         % endif
@@ -195,20 +196,20 @@
       % endfor
 ######################## register with single field ###########################
     % elif len(r.fields) == 1:
-  // R[${r.name}]: V(${str(r.hwext)})
+  // R[${r.name.lower()}]: V(${str(r.hwext)})
 <%
         f = r.fields[0]
-        finst_name = r.name
-        fsig_name = r.name
+        finst_name = r.name.lower()
+        fsig_name = r.name.lower()
 %>
 ${finst_gen(f, finst_name, fsig_name, r.hwext, r.regwen, r.shadowed)}
 ######################## register with multiple fields ###########################
     % else:
-  // R[${r.name}]: V(${str(r.hwext)})
+  // R[${r.name.lower()}]: V(${str(r.hwext)})
       % for f in r.fields:
 <%
-        finst_name = r.name + "_" + f.name.lower()
-        fsig_name = r.name + "." + f.name.lower()
+        finst_name = r.name.lower() + "_" + f.name.lower()
+        fsig_name = r.name.lower() + "." + f.name.lower()
 %>
   //   F[${f.name.lower()}]: ${f.bits.msb}:${f.bits.lsb}
 ${finst_gen(f, finst_name, fsig_name, r.hwext, r.regwen, r.shadowed)}
@@ -239,10 +240,10 @@
   end
   % for i, r in enumerate(regs_flat):
     % if len(r.fields) == 1:
-${we_gen(r.fields[0], r.name, r.hwext, r.shadowed, i)}\
+${we_gen(r.fields[0], r.name.lower(), r.hwext, r.shadowed, i)}\
     % else:
       % for f in r.fields:
-${we_gen(f, r.name + "_" + f.name.lower(), r.hwext, r.shadowed, i)}\
+${we_gen(f, r.name.lower() + "_" + f.name.lower(), r.hwext, r.shadowed, i)}\
       % endfor
     % endif
   % endfor
@@ -254,13 +255,13 @@
       % for i, r in enumerate(regs_flat):
         % if len(r.fields) == 1:
       addr_hit[${i}]: begin
-${rdata_gen(r.fields[0], r.name)}\
+${rdata_gen(r.fields[0], r.name.lower())}\
       end
 
         % else:
       addr_hit[${i}]: begin
           % for f in r.fields:
-${rdata_gen(f, r.name + "_" + f.name.lower())}\
+${rdata_gen(f, r.name.lower() + "_" + f.name.lower())}\
           % endfor
       end
 
@@ -322,7 +323,7 @@
     % if field.swaccess.allows_write():
       % if regwen:
     // qualified with register enable
-    .we     (${finst_name}_we & ${regwen}_qs),
+    .we     (${finst_name}_we & ${regwen.lower()}_qs),
       % else:
     .we     (${finst_name}_we),
       % endif
@@ -384,7 +385,7 @@
       % if field.swaccess.allows_write(): ## non-RO types
         % if regwen:
     // from register interface (qualified with register enable)
-    .we     (${finst_name}_we & ${regwen}_qs),
+    .we     (${finst_name}_we & ${regwen.lower()}_qs),
         % else:
     // from register interface
     .we     (${finst_name}_we),