[topgen] Improve matching of prefix when renaming parameters

Topgen moves parameter prefixes like `Sec`, `RndCnst` and `MemSize` to
the beginning when generating the top-level parameter names. This messed
up the parameter `SecureIbex` which became `SecRvCoreIbexureIbex` in the
top level. With this commit, prefixes are only moved if they are
followed by an upper case letter. The parameter in the top level thus
becomes `RvCoreIbexSecureIbex`.

Signed-off-by: Pirmin Vogel <vogelpi@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 238033b..5fe50a9 100644
--- a/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
+++ b/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
@@ -5859,7 +5859,7 @@
           type: bit
           default: "1"
           expose: "true"
-          name_top: SecRvCoreIbexureIbex
+          name_top: RvCoreIbexSecureIbex
         }
         {
           name: DmHaltAddr
diff --git a/hw/top_earlgrey/rtl/autogen/chip_earlgrey_cw310.sv b/hw/top_earlgrey/rtl/autogen/chip_earlgrey_cw310.sv
index 974b01f..6fb96dc 100644
--- a/hw/top_earlgrey/rtl/autogen/chip_earlgrey_cw310.sv
+++ b/hw/top_earlgrey/rtl/autogen/chip_earlgrey_cw310.sv
@@ -758,7 +758,7 @@
     .RomCtrlBootRomInitFile(BootRomInitFile),
     .RvCoreIbexRegFile(ibex_pkg::RegFileFPGA),
     .RvCoreIbexPipeLine(1),
-    .SecRvCoreIbexureIbex(0),
+    .RvCoreIbexSecureIbex(0),
     .SramCtrlRetAonInstrExec(0),
     .SramCtrlMainInstrExec(1),
     .PinmuxAonTargetCfg(PinmuxTargetCfg)
diff --git a/hw/top_earlgrey/rtl/autogen/chip_earlgrey_nexysvideo.sv b/hw/top_earlgrey/rtl/autogen/chip_earlgrey_nexysvideo.sv
index 1950931..c5e834c 100644
--- a/hw/top_earlgrey/rtl/autogen/chip_earlgrey_nexysvideo.sv
+++ b/hw/top_earlgrey/rtl/autogen/chip_earlgrey_nexysvideo.sv
@@ -742,7 +742,7 @@
     .RomCtrlBootRomInitFile(BootRomInitFile),
     .RvCoreIbexRegFile(ibex_pkg::RegFileFPGA),
     .RvCoreIbexPipeLine(1),
-    .SecRvCoreIbexureIbex(0),
+    .RvCoreIbexSecureIbex(0),
     .SramCtrlRetAonInstrExec(0),
     .SramCtrlMainInstrExec(1),
     .PinmuxAonTargetCfg(PinmuxTargetCfg)
diff --git a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
index a12318d..95977c4 100644
--- a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
+++ b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
@@ -88,7 +88,7 @@
   parameter bit RvCoreIbexICacheECC = 1,
   parameter bit RvCoreIbexBranchPredictor = 0,
   parameter bit RvCoreIbexDbgTriggerEn = 1,
-  parameter bit SecRvCoreIbexureIbex = 1,
+  parameter bit RvCoreIbexSecureIbex = 1,
   parameter int unsigned RvCoreIbexDmHaltAddr =
       tl_main_pkg::ADDR_SPACE_RV_DM__ROM + dm::HaltAddress[31:0],
   parameter int unsigned RvCoreIbexDmExceptionAddr =
@@ -2389,7 +2389,7 @@
     .ICacheECC(RvCoreIbexICacheECC),
     .BranchPredictor(RvCoreIbexBranchPredictor),
     .DbgTriggerEn(RvCoreIbexDbgTriggerEn),
-    .SecureIbex(SecRvCoreIbexureIbex),
+    .SecureIbex(RvCoreIbexSecureIbex),
     .DmHaltAddr(RvCoreIbexDmHaltAddr),
     .DmExceptionAddr(RvCoreIbexDmExceptionAddr),
     .PipeLine(RvCoreIbexPipeLine)
diff --git a/util/topgen/merge.py b/util/topgen/merge.py
index c3a69bf..c28ae05 100644
--- a/util/topgen/merge.py
+++ b/util/topgen/merge.py
@@ -4,6 +4,7 @@
 
 import logging as log
 import random
+import re
 from collections import OrderedDict
 from copy import deepcopy
 from math import ceil, log2
@@ -107,9 +108,17 @@
         param_prefixes = ["Sec", "RndCnst", "MemSize"]
         name_top = cc_mod_name + param.name
         for prefix in param_prefixes:
-            if param.name.lower().startswith(prefix.lower()):
-                name_top = (prefix + cc_mod_name +
-                            param.name[len(prefix):])
+            if not param.name.startswith(prefix):
+                continue
+            else:
+                if param.name == prefix:
+                    raise ValueError(f'Module instance {mod_name} has a '
+                                     f'parameter {param.name} that is equal '
+                                     f'to prefix {prefix}.')
+
+                if re.match(prefix + '[A-Z].+$', param.name):
+                    name_top = (prefix + cc_mod_name +
+                                param.name[len(prefix):])
                 break
 
         new_param['name_top'] = name_top
diff --git a/util/topgen/templates/chiplevel.sv.tpl b/util/topgen/templates/chiplevel.sv.tpl
index e6ee5cc..58c9a43 100644
--- a/util/topgen/templates/chiplevel.sv.tpl
+++ b/util/topgen/templates/chiplevel.sv.tpl
@@ -1097,7 +1097,7 @@
     .RomCtrlBootRomInitFile(BootRomInitFile),
     .RvCoreIbexRegFile(ibex_pkg::RegFileFPGA),
     .RvCoreIbexPipeLine(1),
-    .SecRvCoreIbexureIbex(0),
+    .RvCoreIbexSecureIbex(0),
     .SramCtrlRetAonInstrExec(0),
     .SramCtrlMainInstrExec(1),
     .PinmuxAonTargetCfg(PinmuxTargetCfg)