[top] auto-generate files

Signed-off-by: Timothy Chen <timothytim@google.com>

[top / flash_ctrl] more auto generate files

Signed-off-by: Timothy Chen <timothytim@google.com>

[top] Auto-generate files

Signed-off-by: Timothy Chen <timothytim@google.com>
diff --git a/hw/ip/flash_ctrl/data/flash_ctrl.hjson b/hw/ip/flash_ctrl/data/flash_ctrl.hjson
index 0474d14..deb6564 100644
--- a/hw/ip/flash_ctrl/data/flash_ctrl.hjson
+++ b/hw/ip/flash_ctrl/data/flash_ctrl.hjson
@@ -60,6 +60,8 @@
   ],
 
   param_list: [
+    // The reg parameters can be modified directly through top_*.hjson.
+    // The template will automatically propagate the appropriate values.
     { name: "RegNumBanks",
       desc: "Number of flash banks",
       type: "int",
@@ -67,6 +69,13 @@
       local: "true"
     },
 
+    { name: "RegPagesPerBank",
+      desc: "Number of pages per bank",
+      type: "int",
+      default: "256",
+      local: "true"
+    },
+
     { name: "NumRegions",
       desc: "Number of configurable flash regions",
       type: "int",
@@ -74,6 +83,8 @@
       local: "true"
     },
 
+    // The following parameters are derived from topgen and should not be
+    // direclty modified.
     { name: "NumInfos0",
       desc: "Number of configurable flash info pages for info type 0",
       type: "int",
@@ -86,6 +97,38 @@
       default: "4",
       local: "true"
     },
+
+    { name: "WordsPerPage",
+      desc: "Number of words per page",
+      type: "int",
+      default: "128",
+      local: "true"
+    },
+
+    { name: "BytesPerWord",
+      desc: "Number of bytes per word",
+      type: "int",
+      default: "8",
+      local: "true"
+    },
+
+    { name: "BytesPerPage",
+      desc: "Number of bytes per page",
+      type: "int",
+      default: "1024",
+      local: "true"
+    },
+
+    { name: "BytesPerBank",
+      desc: "Number of bytes per bank",
+      type: "int",
+      default: "262144",
+      local: "true"
+    },
+
+
+
+
   ],
 
   regwidth: "32",
diff --git a/hw/ip/flash_ctrl/rtl/flash_ctrl_pkg.sv b/hw/ip/flash_ctrl/rtl/flash_ctrl_pkg.sv
index e64d0b5..83f1c46 100644
--- a/hw/ip/flash_ctrl/rtl/flash_ctrl_pkg.sv
+++ b/hw/ip/flash_ctrl/rtl/flash_ctrl_pkg.sv
@@ -7,8 +7,11 @@
 
 package flash_ctrl_pkg;
 
-  // design constants
+  // design parameters that can be altered through topgen
   parameter int NumBanks        = flash_ctrl_reg_pkg::RegNumBanks;
+  parameter int PagesPerBank    = flash_ctrl_reg_pkg::RegPagesPerBank;
+
+  // fixed parameters of flash derived from topgen parameters
   parameter int DataWidth       = 64;
   parameter int MetaDataWidth   = 12;
   parameter int InfoTypes       = 2; // How many types of info per bank
@@ -24,7 +27,6 @@
     4,
     4
   });
-  parameter int PagesPerBank    = 256; // Data pages per bank
   parameter int WordsPerPage    = 128; // Number of flash words per page
   parameter int BusWidth        = top_pkg::TL_DW;
   parameter int MpRegions       = 8;  // flash controller protection regions
diff --git a/hw/ip/flash_ctrl/rtl/flash_ctrl_reg_pkg.sv b/hw/ip/flash_ctrl/rtl/flash_ctrl_reg_pkg.sv
index 5cf54aa..0b1c4ea 100644
--- a/hw/ip/flash_ctrl/rtl/flash_ctrl_reg_pkg.sv
+++ b/hw/ip/flash_ctrl/rtl/flash_ctrl_reg_pkg.sv
@@ -8,9 +8,14 @@
 
   // Param list
   parameter int RegNumBanks = 2;
+  parameter int RegPagesPerBank = 256;
   parameter int NumRegions = 8;
   parameter int NumInfos0 = 4;
   parameter int NumInfos1 = 4;
+  parameter int WordsPerPage = 128;
+  parameter int BytesPerWord = 8;
+  parameter int BytesPerPage = 1024;
+  parameter int BytesPerBank = 262144;
 
   ////////////////////////////
   // Typedefs for registers //
diff --git a/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson b/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
index 43d0303..4fef081 100644
--- a/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
+++ b/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
@@ -675,6 +675,7 @@
         rst_ni: lc
       }
       base_addr: 0x40030000
+      generated: "true"
       clock_reset_export: []
       clock_connections:
       {
@@ -3149,8 +3150,9 @@
       }
       type: eflash
       base_addr: 0x20000000
+      banks: 2
+      pages_per_bank: 256
       swaccess: ro
-      size: 0x80000
       inter_signal_list:
       [
         {
@@ -3183,6 +3185,16 @@
       {
         clk_i: clkmgr_clocks.clk_main_infra
       }
+      words_per_page: 128
+      data_width: 64
+      metadata_width: 12
+      info_types: 2
+      infos_per_bank:
+      [
+        4
+        4
+      ]
+      size: 0x80000
     }
   ]
   inter_module:
diff --git a/hw/top_earlgrey/ip/flash_ctrl/data/autogen/flash_ctrl.hjson b/hw/top_earlgrey/ip/flash_ctrl/data/autogen/flash_ctrl.hjson
new file mode 100644
index 0000000..7e7aef8
--- /dev/null
+++ b/hw/top_earlgrey/ip/flash_ctrl/data/autogen/flash_ctrl.hjson
@@ -0,0 +1,963 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
+// ------------------- W A R N I N G: A U T O - G E N E R A T E D   C O D E !! -------------------//
+// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED WITH THE FOLLOWING COMMAND:
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+{ name: "FLASH_CTRL",
+  clock_primary: "clk_i",
+  bus_device: "tlul",
+  interrupt_list: [
+    { name: "prog_empty", desc: "Program FIFO empty" },
+    { name: "prog_lvl",   desc: "Program FIFO drained to level" },
+    { name: "rd_full",    desc: "Read FIFO full" },
+    { name: "rd_lvl",     desc: "Read FIFO filled to level" },
+    { name: "op_done",    desc: "Operation complete" },
+    { name: "op_error",   desc: "Operation failed with error" },
+  ],
+
+  // Define flash_ctrl <-> flash_phy struct package
+  inter_signal_list: [
+    { struct:  "flash",          // flash_req_t, flash_rsp_t
+      type:    "req_rsp",
+      name:    "flash",          // flash_o (req), flash_i (rsp)
+      act:     "req",
+      package: "flash_ctrl_pkg", // Origin package (only needs for the requester)
+    },
+
+    { struct: "otp_flash",
+      type: "uni",
+      name: "otp",
+      act:  "rcv",
+      package: "flash_ctrl_pkg"
+    },
+
+    { struct: "lc_flash",
+      type: "req_rsp",
+      name: "lc",
+      act:  "rsp",
+      package: "flash_ctrl_pkg"
+    },
+
+    { struct: "edn_entropy",
+      type: "uni",
+      name: "edn",
+      act:  "rcv",
+      package: "flash_ctrl_pkg"
+    },
+
+    { struct: "pwr_flash",
+      type: "req_rsp",
+      name: "pwrmgr",
+      act:  "rsp",
+      package: "pwrmgr_pkg"
+    },
+
+    { struct: "keymgr_flash",
+      type: "uni",
+      name: "keymgr",
+      act: "req",
+      package: "flash_ctrl_pkg"
+    }
+
+  ],
+
+  param_list: [
+    // The reg parameters can be modified directly through top_*.hjson.
+    // The template will automatically propagate the appropriate values.
+    { name: "RegNumBanks",
+      desc: "Number of flash banks",
+      type: "int",
+      default: "2",
+      local: "true"
+    },
+
+    { name: "RegPagesPerBank",
+      desc: "Number of pages per bank",
+      type: "int",
+      default: "256",
+      local: "true"
+    },
+
+    { name: "NumRegions",
+      desc: "Number of configurable flash regions",
+      type: "int",
+      default: "8",
+      local: "true"
+    },
+
+    // The following parameters are derived from topgen and should not be
+    // direclty modified.
+    { name: "NumInfos0",
+      desc: "Number of configurable flash info pages for info type 0",
+      type: "int",
+      default: "4",
+      local: "true"
+    },
+    { name: "NumInfos1",
+      desc: "Number of configurable flash info pages for info type 1",
+      type: "int",
+      default: "4",
+      local: "true"
+    },
+
+    { name: "WordsPerPage",
+      desc: "Number of words per page",
+      type: "int",
+      default: "128",
+      local: "true"
+    },
+
+    { name: "BytesPerWord",
+      desc: "Number of bytes per word",
+      type: "int",
+      default: "8",
+      local: "true"
+    },
+
+    { name: "BytesPerPage",
+      desc: "Number of bytes per page",
+      type: "int",
+      default: "1024",
+      local: "true"
+    },
+
+    { name: "BytesPerBank",
+      desc: "Number of bytes per bank",
+      type: "int",
+      default: "262144",
+      local: "true"
+    },
+
+
+
+
+  ],
+
+  regwidth: "32",
+  registers: [
+
+    { name: "CTRL_REGWEN",
+      swaccess: "ro",
+      hwaccess: "hwo",
+      hwext: "true",
+      desc: '''
+      Controls the configurability of the !!CONTROL register.
+
+      This register ensures the contents of !!CONTROL cannot be changed by software once a flash
+      operation has begun.
+
+      It unlocks whenever the existing flash operation completes, regardless of success or error.
+      ''',
+
+      fields: [
+        { bits: "0",
+          name: "EN",
+          desc: '''
+            Configuration enable.
+
+            This bit defaults to 1 and is set to 0 by hardware when flash operation is initiated.
+            When the controller completes the flash operation, this bit is set
+            back to 1 to allow software configuration of !!CONTROL
+          ''',
+          resval: "1",
+        },
+      ]
+      tags: [// This regwen is completely under HW management and thus cannot be manipulated
+             // by software.
+             "excl:CsrNonInitTests:CsrExclCheck"]
+    },
+
+
+    { name: "CONTROL",
+      desc: "Control register",
+      regwen: "CTRL_REGWEN",
+      swaccess: "rw",
+      hwaccess: "hro",
+      fields: [
+        { bits: "0",
+          hwaccess: "hrw",
+          name: "START",
+          desc: '''
+            Start flash transaction.  This bit shall only be set after the other fields of the
+            CONTROL register and ADDR have been programmed
+            '''
+          resval: "0"
+          tags: [// Dont enable flash - it causes several side-effects.
+                 "excl:CsrAllTests:CsrExclWrite"],
+        },
+        { bits: "5:4",
+          name: "OP",
+          desc: "Flash operation selection",
+          resval: "0"
+          enum: [
+            { value: "0",
+              name: "Read",
+              desc: '''
+                Flash Read.
+
+                Read desired number of flash words
+                '''
+            },
+            { value: "1",
+              name: "Prog",
+              desc: '''
+                Flash Program.
+
+                Program desired number of flash words
+                '''
+            },
+            { value: "2",
+              name: "Erase",
+              desc: '''
+                Flash Erase Operation.
+
+                See ERASE_SEL for details on erase operation
+                '''
+            },
+          ]
+        },
+
+        { bits: "6",
+          name: "PROG_SEL",
+          desc: "Flash program operation type selection",
+          resval: "0"
+          enum: [
+            { value: "0",
+              name: "Normal program",
+              desc: '''
+                Normal program operation to the flash
+                '''
+            },
+            { value: "1",
+              name: "Program repair",
+              desc: '''
+                Repair program operation to the flash.  Whether this is actually
+                supported depends on the underlying flash memory.
+                '''
+            },
+          ]
+        },
+
+        { bits: "7",
+          name: "ERASE_SEL",
+          desc: "Flash erase operation type selection",
+          resval: "0"
+          enum: [
+            { value: "0",
+              name: "Page Erase",
+              desc: '''
+                Erase 1 page of flash
+                '''
+            },
+            { value: "1",
+              name: "Bank Erase",
+              desc: '''
+                Erase 1 bank of flash
+                '''
+            },
+          ]
+        },
+        { bits: "8",
+          name: "PARTITION_SEL",
+          desc: '''
+            Selects either info or data partition for operation.
+
+            When 0, select data partition - this is the portion of flash that is accessible both
+            by the host and by the controller.
+
+            When 1, select info partition - this is the portion of flash that is only accessible
+            by the controller.
+
+          '''
+          resval: "0"
+        },
+        { bits: "9",
+          name: "INFO_SEL",
+          desc: '''
+            Informational partions can have multiple types.
+
+            This field selects the info type to be accessed.
+          '''
+          resval: "0"
+        },
+        { bits: "27:16",
+          name: "NUM",
+          desc: "Number of bus words the flash operation should read or program.",
+          resval: "0"
+        },
+      ]
+    },
+    { name: "ADDR",
+      desc: "Address for flash operation",
+      swaccess: "rw",
+      hwaccess: "hro",
+      resval: "0",
+      fields: [
+        { bits: "31:0",
+          name: "START",
+          desc: '''
+            Start address of a flash transaction.  Software should supply the full byte address.
+            The flash controller will then truncate the address as needed.  For read operations,
+            the flash controller will truncate to the closest, lower word aligned address.  For
+            example, if 0x13 is supplied, the controller will perform a read at address 0x10.
+
+            Program operations behave similarly, the controller does not have read modified write
+            support.
+
+            For page erases, the controller will truncate to the closest lower page aligned
+            address.  Similarly for bank erases, the controller will truncate to the closest
+            lower bank aligned address.
+            '''
+          resval: "0"
+        },
+      ]
+    },
+
+    // Data partition memory protection region setup
+    { multireg: {
+        cname: "FLASH_CTRL",
+        name: "REGION_CFG_REGWEN"
+        desc: "Memory region registers configuration enable.",
+        count: "NumRegions",
+        swaccess: "rw0c",
+        hwaccess: "none",
+        compact: false,
+        fields: [
+            { bits: "0",
+              name: "REGION",
+              resval: "1"
+              desc: "Region register write enable.  Once set to 0, it can longer be configured to 1",
+              enum: [
+                { value: "0",
+                  name: "Region locked",
+                  desc: '''
+                    Region can no longer be configured until next reset
+                    '''
+                },
+                { value: "1",
+                  name: "Region enabled",
+                  desc: '''
+                    Region can be configured
+                    '''
+                },
+              ]
+            },
+        ],
+      },
+    },
+
+    { multireg: {
+        cname: "FLASH_CTRL",
+        name: "MP_REGION_CFG",
+        desc: "Memory protection configuration for data partition",
+        count: "NumRegions",
+        swaccess: "rw",
+        hwaccess: "hro",
+        regwen: "REGION_CFG_REGWEN",
+        regwen_multi: true,
+        fields: [
+            { bits: "0",
+              name: "EN",
+              desc: '''
+                Region enabled, following fields apply
+              ''',
+              resval: "0"
+            },
+            { bits: "1",
+              name: "RD_EN",
+              desc: '''
+                Region can be read
+              ''',
+              resval: "0"
+            },
+            { bits: "2",
+              name: "PROG_EN",
+              desc: '''
+                Region can be programmed
+              ''',
+              resval: "0"
+            }
+            { bits: "3",
+              name: "ERASE_EN",
+              desc: '''
+                Region can be erased
+              ''',
+              resval: "0"
+            }
+            { bits: "4",
+              name: "SCRAMBLE_EN",
+              desc: '''
+                Region is scramble and ECC enabled.
+              ''',
+              resval: "0"
+            }
+            { bits: "16:8",
+              name: "BASE",
+              desc: '''
+                Region base page. Note the granularity is page, not byte or word
+              ''',
+              resval: "0"
+            },
+            { bits: "29:20", // need to template this term long term for flash size
+              name: "SIZE",
+              desc: '''
+                Region size in number of pages
+              ''',
+              resval: "0"
+            },
+        ],
+      },
+    },
+
+    // Default region permissions for data partition memory protection
+    { name: "DEFAULT_REGION",
+      desc: "Default region permissions",
+      swaccess: "rw",
+      hwaccess: "hro",
+      resval: "0",
+      fields: [
+        { bits: "0",
+          name: "RD_EN",
+          desc: '''
+            Region can be read
+          ''',
+          resval: "0"
+        },
+        { bits: "1",
+          name: "PROG_EN",
+          desc: '''
+            Region can be programmed
+          ''',
+          resval: "0"
+        }
+        { bits: "2",
+          name: "ERASE_EN",
+          desc: '''
+            Region can be erased
+          ''',
+          resval: "0"
+        },
+        { bits: "3",
+          name: "SCRAMBLE_EN",
+          desc: '''
+            Region is scramble and ECC enabled
+          ''',
+          resval: "0"
+        }
+      ]
+    },
+
+    // Info partition memory protection setup
+    { multireg: {
+        cname: "FLASH_CTRL",
+        name: "BANK0_INFO0_REGWEN"
+        desc: "Memory region registers configuration enable.",
+        count: "NumInfos0",
+        swaccess: "rw0c",
+        hwaccess: "none",
+        compact: false,
+        fields: [
+            { bits: "0",
+              name: "REGION",
+              resval: "1"
+              desc: "Info0 page write enable.  Once set to 0, it can longer be configured to 1",
+              enum: [
+                { value: "0",
+                  name: "Page locked",
+                  desc: '''
+                    Region can no longer be configured until next reset
+                    '''
+                },
+                { value: "1",
+                  name: "Page enabled",
+                  desc: '''
+                    Region can be configured
+                    '''
+                },
+              ]
+            },
+        ],
+      },
+    },
+
+    { multireg: {
+        cname: "FLASH_CTRL",
+        name: "BANK0_INFO0_PAGE_CFG",
+        desc: '''
+                Memory protection configuration for info partition in bank0,
+                Unlike data partition, each page is individually protected.
+              '''
+        count: "NumInfos0",
+        swaccess: "rw",
+        hwaccess: "hro",
+        regwen: "BANK0_INFO0_REGWEN",
+        regwen_multi: true,
+        fields: [
+            { bits: "0",
+              name: "EN",
+              desc: '''
+                Region enabled, following fields apply
+              ''',
+              resval: "0"
+            },
+            { bits: "1",
+              name: "RD_EN",
+              desc: '''
+                Region can be read
+              ''',
+              resval: "0"
+            },
+            { bits: "2",
+              name: "PROG_EN",
+              desc: '''
+                Region can be programmed
+              ''',
+              resval: "0"
+            }
+            { bits: "3",
+              name: "ERASE_EN",
+              desc: '''
+                Region can be erased
+              ''',
+              resval: "0"
+            }
+            { bits: "4",
+              name: "SCRAMBLE_EN",
+              desc: '''
+                Region is scramble and ECC enabled.
+              ''',
+              resval: "0"
+            }
+        ],
+      },
+    },
+    { multireg: {
+        cname: "FLASH_CTRL",
+        name: "BANK0_INFO1_REGWEN"
+        desc: "Memory region registers configuration enable.",
+        count: "NumInfos1",
+        swaccess: "rw0c",
+        hwaccess: "none",
+        compact: false,
+        fields: [
+            { bits: "0",
+              name: "REGION",
+              resval: "1"
+              desc: "Info1 page write enable.  Once set to 0, it can longer be configured to 1",
+              enum: [
+                { value: "0",
+                  name: "Page locked",
+                  desc: '''
+                    Region can no longer be configured until next reset
+                    '''
+                },
+                { value: "1",
+                  name: "Page enabled",
+                  desc: '''
+                    Region can be configured
+                    '''
+                },
+              ]
+            },
+        ],
+      },
+    },
+
+    { multireg: {
+        cname: "FLASH_CTRL",
+        name: "BANK0_INFO1_PAGE_CFG",
+        desc: '''
+                Memory protection configuration for info partition in bank0,
+                Unlike data partition, each page is individually protected.
+              '''
+        count: "NumInfos1",
+        swaccess: "rw",
+        hwaccess: "hro",
+        regwen: "BANK0_INFO1_REGWEN",
+        regwen_multi: true,
+        fields: [
+            { bits: "0",
+              name: "EN",
+              desc: '''
+                Region enabled, following fields apply
+              ''',
+              resval: "0"
+            },
+            { bits: "1",
+              name: "RD_EN",
+              desc: '''
+                Region can be read
+              ''',
+              resval: "0"
+            },
+            { bits: "2",
+              name: "PROG_EN",
+              desc: '''
+                Region can be programmed
+              ''',
+              resval: "0"
+            }
+            { bits: "3",
+              name: "ERASE_EN",
+              desc: '''
+                Region can be erased
+              ''',
+              resval: "0"
+            }
+            { bits: "4",
+              name: "SCRAMBLE_EN",
+              desc: '''
+                Region is scramble and ECC enabled.
+              ''',
+              resval: "0"
+            }
+        ],
+      },
+    },
+    { multireg: {
+        cname: "FLASH_CTRL",
+        name: "BANK1_INFO0_REGWEN"
+        desc: "Memory region registers configuration enable.",
+        count: "NumInfos0",
+        swaccess: "rw0c",
+        hwaccess: "none",
+        compact: false,
+        fields: [
+            { bits: "0",
+              name: "REGION",
+              resval: "1"
+              desc: "Info0 page write enable.  Once set to 0, it can longer be configured to 1",
+              enum: [
+                { value: "0",
+                  name: "Page locked",
+                  desc: '''
+                    Region can no longer be configured until next reset
+                    '''
+                },
+                { value: "1",
+                  name: "Page enabled",
+                  desc: '''
+                    Region can be configured
+                    '''
+                },
+              ]
+            },
+        ],
+      },
+    },
+
+    { multireg: {
+        cname: "FLASH_CTRL",
+        name: "BANK1_INFO0_PAGE_CFG",
+        desc: '''
+                Memory protection configuration for info partition in bank1,
+                Unlike data partition, each page is individually protected.
+              '''
+        count: "NumInfos0",
+        swaccess: "rw",
+        hwaccess: "hro",
+        regwen: "BANK1_INFO0_REGWEN",
+        regwen_multi: true,
+        fields: [
+            { bits: "0",
+              name: "EN",
+              desc: '''
+                Region enabled, following fields apply
+              ''',
+              resval: "0"
+            },
+            { bits: "1",
+              name: "RD_EN",
+              desc: '''
+                Region can be read
+              ''',
+              resval: "0"
+            },
+            { bits: "2",
+              name: "PROG_EN",
+              desc: '''
+                Region can be programmed
+              ''',
+              resval: "0"
+            }
+            { bits: "3",
+              name: "ERASE_EN",
+              desc: '''
+                Region can be erased
+              ''',
+              resval: "0"
+            }
+            { bits: "4",
+              name: "SCRAMBLE_EN",
+              desc: '''
+                Region is scramble and ECC enabled.
+              ''',
+              resval: "0"
+            }
+        ],
+      },
+    },
+    { multireg: {
+        cname: "FLASH_CTRL",
+        name: "BANK1_INFO1_REGWEN"
+        desc: "Memory region registers configuration enable.",
+        count: "NumInfos1",
+        swaccess: "rw0c",
+        hwaccess: "none",
+        compact: false,
+        fields: [
+            { bits: "0",
+              name: "REGION",
+              resval: "1"
+              desc: "Info1 page write enable.  Once set to 0, it can longer be configured to 1",
+              enum: [
+                { value: "0",
+                  name: "Page locked",
+                  desc: '''
+                    Region can no longer be configured until next reset
+                    '''
+                },
+                { value: "1",
+                  name: "Page enabled",
+                  desc: '''
+                    Region can be configured
+                    '''
+                },
+              ]
+            },
+        ],
+      },
+    },
+
+    { multireg: {
+        cname: "FLASH_CTRL",
+        name: "BANK1_INFO1_PAGE_CFG",
+        desc: '''
+                Memory protection configuration for info partition in bank1,
+                Unlike data partition, each page is individually protected.
+              '''
+        count: "NumInfos1",
+        swaccess: "rw",
+        hwaccess: "hro",
+        regwen: "BANK1_INFO1_REGWEN",
+        regwen_multi: true,
+        fields: [
+            { bits: "0",
+              name: "EN",
+              desc: '''
+                Region enabled, following fields apply
+              ''',
+              resval: "0"
+            },
+            { bits: "1",
+              name: "RD_EN",
+              desc: '''
+                Region can be read
+              ''',
+              resval: "0"
+            },
+            { bits: "2",
+              name: "PROG_EN",
+              desc: '''
+                Region can be programmed
+              ''',
+              resval: "0"
+            }
+            { bits: "3",
+              name: "ERASE_EN",
+              desc: '''
+                Region can be erased
+              ''',
+              resval: "0"
+            }
+            { bits: "4",
+              name: "SCRAMBLE_EN",
+              desc: '''
+                Region is scramble and ECC enabled.
+              ''',
+              resval: "0"
+            }
+        ],
+      },
+    },
+
+    { name: "BANK_CFG_REGWEN"
+      desc: "Bank configuration registers configuration enable.",
+      swaccess: "rw0c",
+      hwaccess: "none",
+      fields: [
+          { bits: "0",
+            name: "BANK",
+            resval: "1"
+            desc: "Bank register write enable.  Once set to 0, it can longer be configured to 1",
+            enum: [
+              { value: "0",
+                name: "Bank locked",
+                desc: '''
+                  Bank can no longer be configured until next reset
+                  '''
+              },
+              { value: "1",
+                name: "Bank enabled",
+                desc: '''
+                  Bank can be configured
+                  '''
+              },
+            ]
+          },
+      ],
+    },
+
+    { multireg: {
+        cname: "FLASH_CTRL",
+        name: "MP_BANK_CFG",
+        desc: "Memory protect bank configuration",
+        count: "RegNumBanks",
+        swaccess: "rw",
+        hwaccess: "hro",
+        regwen: "BANK_CFG_REGWEN"
+        fields: [
+            { bits: "0",
+              name: "ERASE_EN",
+              desc: '''
+                Bank wide erase enable
+              ''',
+              resval: "0"
+            },
+        ],
+      },
+    },
+
+    { name: "OP_STATUS",
+      desc: "Flash Operation Status",
+      swaccess: "rw",
+      hwaccess: "hwo",
+      fields: [
+        { bits: "0", name: "done",
+          desc: "Flash operation done. Set by HW, cleared by SW" },
+        { bits: "1", name: "err",
+          desc: "Flash operation error. Set by HW, cleared by SW"},
+      ]
+    },
+    { name: "STATUS",
+      desc: "Flash Controller Status",
+      swaccess: "ro",
+      hwaccess: "hwo",
+      fields: [
+        { bits: "0",    name: "rd_full",    desc: "Flash read FIFO full, software must consume data"},
+        { bits: "1",    name: "rd_empty",   desc: "Flash read FIFO empty", resval: "1"},
+        { bits: "2",    name: "prog_full",  desc: "Flash program FIFO full"},
+        { bits: "3",    name: "prog_empty", desc: "Flash program FIFO empty, software must provide data", resval: "1"},
+        { bits: "4",    name: "init_wip",   desc: "Flash controller undergoing init, inclusive of phy init"},
+        { bits: "16:8", name: "error_addr", desc: "Flash controller error address."},
+      ]
+    },
+
+    { name: "PHY_STATUS",
+      desc: "Flash Phy Status",
+      swaccess: "ro",
+      hwaccess: "hwo",
+      fields: [
+        { bits: "0",
+          name: "init_wip",
+          desc: "Flash phy controller initializing"
+        },
+        { bits: "1",
+          name: "prog_normal_avail",
+          resval: "0x1",
+          desc: "Normal program supported"
+        },
+        { bits: "2",
+          name: "prog_repair_avail",
+          resval: "0x1",
+          desc: "Program repair supported"
+        },
+      ]
+    },
+
+    { name: "Scratch",
+      desc: "Flash Controller Scratch",
+      swaccess: "rw",
+      fields: [
+        { bits: "31:0", name: "data",  desc: "Flash ctrl scratch register" },
+      ]
+    },
+    { name: "FIFO_LVL",
+      desc: "Programmable depth where FIFOs should generate interrupts",
+      swaccess: "rw",
+      hwaccess: "hro",
+      fields: [
+        { bits: "4:0",
+          name: "PROG",
+          desc: '''
+            When the program FIFO drains to this level, trigger an interrupt.
+            Default value is set such that interrupt does not trigger at reset.
+            '''
+          resval: "0xF"
+        },
+        { bits: "12:8",
+          name: "RD",
+          desc: '''
+            When the read FIFO fills to this level, trigger an interrupt.
+            Default value is set such that interrupt does not trigger at reset.
+            '''
+          resval: "0xF"
+        },
+      ]
+    }
+
+    { name: "FIFO_RST",
+      desc: "Reset for flash controller FIFOs",
+      swaccess: "rw",
+      hwaccess: "hro",
+      resval: "0",
+      fields: [
+        { bits: "0",
+          name: "EN",
+          desc: '''
+            Active high resets for both program and read FIFOs.  This is especially useful after the controller
+            encounters an error of some kind.
+
+            This bit will hold the FIFO in reset as long as it is set.
+            '''
+          resval: "0"
+        },
+      ]
+    },
+
+    { window: {
+        name: "prog_fifo",
+        items: "1",
+        validbits: "32",
+        byte-write: "false",
+        unusual: "false"
+        swaccess: "wo",
+        desc: '''
+          Flash program FIFO.
+
+          The FIFO is 16 entries of 4B flash words. This FIFO can only be programmed
+          by software after a program operation has been initiated via the !!CONTROL register.
+          This ensures accidental programming of the program FIFO cannot lock up the system.
+          '''
+      },
+    },
+    { window: {
+        name: "rd_fifo",
+        items: "1",
+        validbits: "32",
+        byte-write: "false",
+        unusual: "false"
+        swaccess: "ro",
+        desc: '''
+          Flash read FIFO.
+
+          The FIFO is 16 entries of 4B flash words
+          '''
+      },
+    },
+  ]
+}
diff --git a/hw/top_earlgrey/ip/flash_ctrl/rtl/autogen/flash_ctrl.sv b/hw/top_earlgrey/ip/flash_ctrl/rtl/autogen/flash_ctrl.sv
new file mode 100644
index 0000000..8e3cccd
--- /dev/null
+++ b/hw/top_earlgrey/ip/flash_ctrl/rtl/autogen/flash_ctrl.sv
@@ -0,0 +1,761 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
+// ------------------- W A R N I N G: A U T O - G E N E R A T E D   C O D E !! -------------------//
+// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED WITH THE FOLLOWING COMMAND:
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
+// Flash Controller Module
+//
+//
+
+`include "prim_assert.sv"
+
+module flash_ctrl import flash_ctrl_pkg::*; (
+  input        clk_i,
+  input        rst_ni,
+
+  // Bus Interface
+  input        tlul_pkg::tl_h2d_t tl_i,
+  output       tlul_pkg::tl_d2h_t tl_o,
+
+  // Flash Interface
+  input        flash_rsp_t flash_i,
+  output       flash_req_t flash_o,
+
+  // otp/lc/pwrmgr/keymgr Interface
+  input        otp_flash_t otp_i,
+  input        lc_flash_req_t lc_i,
+  output       lc_flash_rsp_t lc_o,
+  input        pwrmgr_pkg::pwr_flash_req_t pwrmgr_i,
+  output       pwrmgr_pkg::pwr_flash_rsp_t pwrmgr_o,
+  input        edn_entropy_t edn_i,
+  output       keymgr_flash_t keymgr_o,
+
+  // Interrupts
+  output logic intr_prog_empty_o, // Program fifo is empty
+  output logic intr_prog_lvl_o,   // Program fifo is empty
+  output logic intr_rd_full_o,    // Read fifo is full
+  output logic intr_rd_lvl_o,     // Read fifo is full
+  output logic intr_op_done_o,    // Requested flash operation (wr/erase) done
+  output logic intr_op_error_o    // Requested flash operation (wr/erase) done
+);
+
+  import flash_ctrl_reg_pkg::*;
+
+  flash_ctrl_reg2hw_t reg2hw;
+  flash_ctrl_hw2reg_t hw2reg;
+
+  tlul_pkg::tl_h2d_t tl_fifo_h2d [2];
+  tlul_pkg::tl_d2h_t tl_fifo_d2h [2];
+
+  // Register module
+  flash_ctrl_reg_top u_reg (
+    .clk_i,
+    .rst_ni,
+
+    .tl_i,
+    .tl_o,
+
+    .tl_win_o (tl_fifo_h2d),
+    .tl_win_i (tl_fifo_d2h),
+
+    .reg2hw,
+    .hw2reg,
+
+    .devmode_i  (1'b1)
+  );
+
+  // FIFO Connections
+  logic                 prog_fifo_wvalid;
+  logic                 prog_fifo_wready;
+  logic                 prog_fifo_rvalid;
+  logic                 prog_fifo_ren;
+  logic [BusWidth-1:0]  prog_fifo_wdata;
+  logic [BusWidth-1:0]  prog_fifo_rdata;
+  logic [FifoDepthW-1:0] prog_fifo_depth;
+  logic                 rd_fifo_wready;
+  logic                 rd_fifo_rvalid;
+  logic                 rd_fifo_rready;
+  logic                 rd_fifo_wen;
+  logic                 rd_fifo_ren;
+  logic [BusWidth-1:0]  rd_fifo_wdata;
+  logic [BusWidth-1:0]  rd_fifo_rdata;
+  logic [FifoDepthW-1:0] rd_fifo_depth;
+
+  // Program Control Connections
+  logic prog_flash_req;
+  logic prog_flash_ovfl;
+  logic [BusAddrW-1:0] prog_flash_addr;
+  logic prog_op_valid;
+
+  // Read Control Connections
+  logic rd_flash_req;
+  logic rd_flash_ovfl;
+  logic [BusAddrW-1:0] rd_flash_addr;
+
+  // Erase Control Connections
+  logic erase_flash_req;
+  logic [BusAddrW-1:0] erase_flash_addr;
+  flash_erase_e erase_flash_type;
+
+  // Done / Error signaling from ctrl modules
+  logic prog_done, rd_done, erase_done;
+  logic prog_err, rd_err, erase_err;
+
+  // Flash Memory Protection Connections
+  logic [BusAddrW-1:0] flash_addr;
+  logic flash_req;
+  logic flash_rd_done, flash_prog_done, flash_erase_done;
+  logic flash_mp_error;
+  logic [BusWidth-1:0] flash_prog_data;
+  logic flash_prog_last;
+  flash_prog_e flash_prog_type;
+  logic [BusWidth-1:0] flash_rd_data;
+  logic flash_rd_err;
+  logic flash_phy_busy;
+  logic rd_op;
+  logic prog_op;
+  logic erase_op;
+  logic [AllPagesW-1:0] err_addr;
+  flash_lcmgr_phase_e phase;
+
+  // Flash control arbitration connections to hardware interface
+  flash_ctrl_reg2hw_control_reg_t hw_ctrl;
+  logic hw_req;
+  logic [top_pkg::TL_AW-1:0] hw_addr;
+  logic hw_done;
+  logic hw_err;
+  logic hw_rvalid;
+  logic hw_rready;
+  flash_sel_e if_sel;
+  logic sw_sel;
+  flash_lcmgr_phase_e hw_phase;
+  logic creator_seed_priv;
+  logic owner_seed_priv;
+
+  // Flash control arbitration connections to software interface
+  logic sw_ctrl_done;
+  logic sw_ctrl_err;
+
+  // Flash control muxed connections
+  flash_ctrl_reg2hw_control_reg_t muxed_ctrl;
+  logic [top_pkg::TL_AW-1:0] muxed_addr;
+  logic op_start;
+  logic [11:0] op_num_words;
+  logic [BusAddrW-1:0] op_addr;
+  flash_op_e op_type;
+  flash_part_e op_part;
+  logic [InfoTypesWidth-1:0] op_info_sel;
+  flash_erase_e op_erase_type;
+  flash_prog_e op_prog_type;
+
+  logic ctrl_init_busy;
+  logic fifo_clr;
+
+  // software tlul to flash control aribration
+  logic sw_rvalid;
+  logic adapter_rvalid;
+  logic sw_wvalid;
+  logic sw_wen;
+  logic sw_wready;
+
+  // lfsr for local entropy usage
+  logic [31:0] rand_val;
+  logic lfsr_en;
+
+  prim_lfsr #(
+    .DefaultSeed(),
+    .EntropyDw(4),
+    .LfsrDw(32),
+    .StateOutDw(32)
+  ) u_lfsr (
+    .clk_i,
+    .rst_ni,
+    .seed_en_i('0),
+    .seed_i('0),
+    .lfsr_en_i(lfsr_en),
+    .entropy_i(edn_i.valid ? edn_i.entropy : '0),
+    .state_o(rand_val)
+  );
+
+  // flash control arbitration between softawre / harware interfaces
+  flash_ctrl_arb u_ctrl_arb (
+    .clk_i,
+    .rst_ni,
+
+    // software interface to rd_ctrl / erase_ctrl
+    .sw_ctrl_i(reg2hw.control),
+    .sw_addr_i(reg2hw.addr.q),
+    .sw_ack_o(sw_ctrl_done),
+    .sw_err_o(sw_ctrl_err),
+
+    // software interface to rd_fifo
+    .sw_rvalid_o(sw_rvalid),
+    .sw_rready_i(adapter_rvalid),
+
+    // software interface to prog_fifo
+    .sw_wvalid_i(sw_wvalid & sw_wen),
+    .sw_wready_o(sw_wready),
+
+    // hardware interface to rd_ctrl / erase_ctrl
+    .hw_req_i(hw_req),
+    .hw_ctrl_i(hw_ctrl),
+
+    // hardware interface indicating operation phase
+    .hw_phase_i(hw_phase),
+
+    // hardware works on word address, however software expects byte address
+    .hw_addr_i(hw_addr),
+    .hw_ack_o(hw_done),
+    .hw_err_o(hw_err),
+
+    // hardware interface to rd_fifo
+    .hw_rvalid_o(hw_rvalid),
+    .hw_rready_i(hw_rready),
+
+    // hardware interface does not talk to prog_fifo
+
+    // muxed interface to rd_ctrl / erase_ctrl
+    .muxed_ctrl_o(muxed_ctrl),
+    .muxed_addr_o(muxed_addr),
+    .prog_ack_i(prog_done),
+    .prog_err_i(prog_err),
+    .rd_ack_i(rd_done),
+    .rd_err_i(rd_err),
+    .erase_ack_i(erase_done),
+    .erase_err_i(erase_err),
+
+    // muxed interface to rd_fifo
+    .rd_fifo_rvalid_i(rd_fifo_rvalid),
+    .rd_fifo_rready_o(rd_fifo_rready),
+
+    // muxed interface to prog_fifo
+    .prog_fifo_wvalid_o(prog_fifo_wvalid),
+    .prog_fifo_wready_i(prog_fifo_wready),
+
+    // flash phy initilization ongoing
+    .flash_phy_busy_i(flash_phy_busy),
+
+    // clear fifos
+    .fifo_clr_o(fifo_clr),
+
+    // phase indication
+    .phase_o(phase),
+
+    // indication that sw has been selected
+    .sel_o(if_sel),
+
+    // enable lfsr
+    .lfsr_en_o(lfsr_en)
+  );
+
+  assign op_start      = muxed_ctrl.start.q;
+  assign op_num_words  = muxed_ctrl.num.q;
+  assign op_erase_type = flash_erase_e'(muxed_ctrl.erase_sel.q);
+  assign op_prog_type  = flash_prog_e'(muxed_ctrl.prog_sel.q);
+  assign op_addr       = muxed_addr[BusByteWidth +: BusAddrW];
+  assign op_type       = flash_op_e'(muxed_ctrl.op.q);
+  assign op_part       = flash_part_e'(muxed_ctrl.partition_sel.q);
+  assign op_info_sel   = muxed_ctrl.info_sel.q;
+  assign rd_op         = op_type == FlashOpRead;
+  assign prog_op       = op_type == FlashOpProgram;
+  assign erase_op      = op_type == FlashOpErase;
+  assign sw_sel        = if_sel == SwSel;
+
+  // hardware interface
+
+  // software only has privilege to change creator seed when provision enable is set and
+  // before the the seed is set as valid in otp
+  assign creator_seed_priv = lc_i.provision_en & ~otp_i.seed_valid;
+
+  // owner seed is under software control and can be modided whenever provision enable is set
+  assign owner_seed_priv = lc_i.provision_en;
+
+  flash_ctrl_lcmgr u_flash_hw_if (
+    .clk_i,
+    .rst_ni,
+
+    .init_i(pwrmgr_i.flash_init),
+    .init_done_o(pwrmgr_o.flash_done),
+    .provision_en_i(lc_i.provision_en),
+
+    // interface to ctrl arb control ports
+    .ctrl_o(hw_ctrl),
+    .req_o(hw_req),
+    .addr_o(hw_addr),
+    .done_i(hw_done),
+    .err_i(hw_err),
+
+    // interface to ctrl_arb data ports
+    .rready_o(hw_rready),
+    .rvalid_i(hw_rvalid),
+
+    // direct form rd_fifo
+    .rdata_i(rd_fifo_rdata),
+
+    // external rma request
+    .rma_i(lc_i.rma_req),
+    .rma_token_i(lc_i.rma_req_token),
+    .rma_token_o(lc_o.rma_ack_token),
+    .rma_rsp_o(lc_o.rma_ack),
+
+    // random value
+    .rand_i(rand_val),
+
+    // outgoing seeds
+    .seeds_o(keymgr_o.seeds),
+    .seed_err_o(), // TBD hook-up to Err code register
+
+    // phase indication
+    .phase_o(hw_phase),
+
+    // init ongoing
+    .init_busy_o(ctrl_init_busy)
+  );
+
+  // Program FIFO
+  // Since the program and read FIFOs are never used at the same time, it should really be one
+  // FIFO with muxed inputs and outputs.  This should be addressed once the flash integration
+  // strategy has been identified
+  assign prog_op_valid = op_start & prog_op;
+
+  tlul_adapter_sram #(
+    .SramAw(1),         //address unused
+    .SramDw(BusWidth),
+    .ByteAccess(0),     //flash may not support byte access
+    .ErrOnRead(1)       //reads not supported
+  ) u_to_prog_fifo (
+    .clk_i,
+    .rst_ni,
+    .tl_i       (tl_fifo_h2d[0]),
+    .tl_o       (tl_fifo_d2h[0]),
+    .req_o      (sw_wvalid),
+    .gnt_i      (sw_wready),
+    .we_o       (sw_wen),
+    .addr_o     (),
+    .wmask_o    (),
+    .wdata_o    (prog_fifo_wdata),
+    .rdata_i    (BusWidth'(0)),
+    .rvalid_i   (1'b0),
+    .rerror_i   (2'b0)
+  );
+
+  prim_fifo_sync #(
+    .Width(BusWidth),
+    .Depth(FifoDepth)
+  ) u_prog_fifo (
+    .clk_i,
+    .rst_ni,
+    .clr_i   (reg2hw.fifo_rst.q | fifo_clr),
+    .wvalid_i(prog_fifo_wvalid & prog_op_valid),
+    .wready_o(prog_fifo_wready),
+    .wdata_i (prog_fifo_wdata),
+    .depth_o (prog_fifo_depth),
+    .rvalid_o(prog_fifo_rvalid),
+    .rready_i(prog_fifo_ren),
+    .rdata_o (prog_fifo_rdata)
+  );
+
+  // Program handler is consumer of prog_fifo
+
+  // OTP control bits can be used to explicitly disable repair
+  logic [ProgTypes-1:0] otp_en;
+  assign otp_en[FlashProgNormal] = 1'b1;
+  assign otp_en[FlashProgRepair] = otp_i.prog_repair_en;
+
+  flash_ctrl_prog u_flash_ctrl_prog (
+    .clk_i,
+    .rst_ni,
+
+    // Control interface
+    .op_start_i     (prog_op_valid),
+    .op_num_words_i (op_num_words),
+    .op_done_o      (prog_done),
+    .op_err_o       (prog_err),
+    .op_addr_i      (op_addr),
+    .op_type_i      (op_prog_type),
+    .type_avail_i   (flash_i.prog_type_avail & otp_en),
+
+    // FIFO Interface
+    .data_i         (prog_fifo_rdata),
+    .data_rdy_i     (prog_fifo_rvalid),
+    .data_rd_o      (prog_fifo_ren),
+
+    // Flash Macro Interface
+    .flash_req_o    (prog_flash_req),
+    .flash_addr_o   (prog_flash_addr),
+    .flash_ovfl_o   (prog_flash_ovfl),
+    .flash_data_o   (flash_prog_data),
+    .flash_last_o   (flash_prog_last),
+    .flash_type_o   (flash_prog_type),
+    .flash_done_i   (flash_prog_done),
+    .flash_error_i  (flash_mp_error)
+  );
+
+  always_ff @(posedge clk_i or negedge rst_ni) begin
+    if (!rst_ni) begin
+      adapter_rvalid <= 1'b0;
+    end else begin
+      adapter_rvalid <= rd_fifo_ren && sw_rvalid;
+    end
+  end
+
+  // tlul adapter represents software's access interface to flash
+  tlul_adapter_sram #(
+    .SramAw(1),         //address unused
+    .SramDw(BusWidth),
+    .ByteAccess(0),     //flash may not support byte access
+    .ErrOnWrite(1)      //writes not supported
+  ) u_to_rd_fifo (
+    .clk_i,
+    .rst_ni,
+    .tl_i       (tl_fifo_h2d[1]),
+    .tl_o       (tl_fifo_d2h[1]),
+    .req_o      (rd_fifo_ren),
+    .gnt_i      (rd_fifo_rvalid),
+    .we_o       (),
+    .addr_o     (),
+    .wmask_o    (),
+    .wdata_o    (),
+    .rdata_i    (rd_fifo_rdata),
+    .rvalid_i   (adapter_rvalid),
+    .rerror_i   (2'b0)
+  );
+
+  prim_fifo_sync #(
+    .Width(BusWidth),
+    .Depth(FifoDepth)
+  ) u_rd_fifo (
+    .clk_i,
+    .rst_ni,
+    .clr_i   (reg2hw.fifo_rst.q | fifo_clr),
+    .wvalid_i(rd_fifo_wen),
+    .wready_o(rd_fifo_wready),
+    .wdata_i (rd_fifo_wdata),
+    .depth_o (rd_fifo_depth),
+    .rvalid_o(rd_fifo_rvalid),
+    .rready_i(rd_fifo_rready),
+    .rdata_o (rd_fifo_rdata)
+  );
+
+  // Read handler is consumer of rd_fifo
+  flash_ctrl_rd  u_flash_ctrl_rd (
+    .clk_i,
+    .rst_ni,
+
+    // To arbiter Interface
+    .op_start_i     (op_start & rd_op),
+    .op_num_words_i (op_num_words),
+    .op_done_o      (rd_done),
+    .op_err_o       (rd_err),
+    .op_addr_i      (op_addr),
+
+    // FIFO Interface
+    .data_rdy_i     (rd_fifo_wready),
+    .data_o         (rd_fifo_wdata),
+    .data_wr_o      (rd_fifo_wen),
+
+    // Flash Macro Interface
+    .flash_req_o    (rd_flash_req),
+    .flash_addr_o   (rd_flash_addr),
+    .flash_ovfl_o   (rd_flash_ovfl),
+    .flash_data_i   (flash_rd_data),
+    .flash_done_i   (flash_rd_done),
+    .flash_error_i  (flash_mp_error | flash_rd_err)
+  );
+
+  // Erase handler does not consume fifo
+  flash_ctrl_erase u_flash_ctrl_erase (
+    // Software Interface
+    .op_start_i     (op_start & erase_op),
+    .op_type_i      (op_erase_type),
+    .op_done_o      (erase_done),
+    .op_err_o       (erase_err),
+    .op_addr_i      (op_addr),
+
+    // Flash Macro Interface
+    .flash_req_o    (erase_flash_req),
+    .flash_addr_o   (erase_flash_addr),
+    .flash_op_o     (erase_flash_type),
+    .flash_done_i   (flash_erase_done),
+    .flash_error_i  (flash_mp_error)
+  );
+
+  // Final muxing to flash macro module
+  always_comb begin
+    unique case (op_type)
+      FlashOpRead: begin
+        flash_req = rd_flash_req;
+        flash_addr = rd_flash_addr;
+      end
+      FlashOpProgram: begin
+        flash_req = prog_flash_req;
+        flash_addr = prog_flash_addr;
+      end
+      FlashOpErase: begin
+        flash_req = erase_flash_req;
+        flash_addr = erase_flash_addr;
+      end
+      default: begin
+        flash_req = 1'b0;
+        flash_addr  = '0;
+      end
+    endcase // unique case (op_type)
+  end
+
+  //////////////////////////////////////
+  // Data partition protection configuration
+  //////////////////////////////////////
+  // extra region is the default region
+  mp_region_cfg_t [MpRegions:0] region_cfgs;
+  assign region_cfgs[MpRegions-1:0] = reg2hw.mp_region_cfg[MpRegions-1:0];
+
+  //default region
+  assign region_cfgs[MpRegions].base.q = '0;
+  assign region_cfgs[MpRegions].size.q = NumBanks * PagesPerBank;
+  assign region_cfgs[MpRegions].en.q = 1'b1;
+  assign region_cfgs[MpRegions].rd_en.q = reg2hw.default_region.rd_en.q;
+  assign region_cfgs[MpRegions].prog_en.q = reg2hw.default_region.prog_en.q;
+  assign region_cfgs[MpRegions].erase_en.q = reg2hw.default_region.erase_en.q;
+  assign region_cfgs[MpRegions].scramble_en.q = reg2hw.default_region.scramble_en.q;
+
+  //////////////////////////////////////
+  // Info partition protection configuration
+  //////////////////////////////////////
+  info_page_cfg_t [NumBanks-1:0][InfoTypes-1:0][InfosPerBank-1:0] reg2hw_info_page_cfgs;
+  info_page_cfg_t [NumBanks-1:0][InfoTypes-1:0][InfosPerBank-1:0] info_page_cfgs;
+
+  // transform from reg output to structure
+  assign reg2hw_info_page_cfgs[0][0] = reg2hw.bank0_info0_page_cfg;
+  assign reg2hw_info_page_cfgs[0][1] = reg2hw.bank0_info1_page_cfg;
+  assign reg2hw_info_page_cfgs[1][0] = reg2hw.bank1_info0_page_cfg;
+  assign reg2hw_info_page_cfgs[1][1] = reg2hw.bank1_info1_page_cfg;
+
+  // qualify reg2hw settings with creator / owner privileges
+  for(genvar i = 0; i < NumBanks; i++) begin : gen_info_priv_bank
+    for (genvar j = 0; j < InfoTypes; j++) begin : gen_info_priv_type
+      flash_ctrl_info_cfg # (
+        .Bank(i),
+        .InfoSel(j)
+      ) u_info_cfg (
+        .cfgs_i(reg2hw_info_page_cfgs[i][j]),
+        .creator_seed_priv_i(creator_seed_priv),
+        .owner_seed_priv_i(owner_seed_priv),
+        .cfgs_o(info_page_cfgs[i][j])
+      );
+    end
+  end
+
+  //////////////////////////////////////
+  // flash memory protection
+  //////////////////////////////////////
+  // direct assignment since prog/rd/erase_ctrl do not make use of op_part
+  flash_part_e flash_part_sel;
+  logic [InfoTypesWidth-1:0] flash_info_sel;
+  assign flash_part_sel = op_part;
+  assign flash_info_sel = op_info_sel;
+
+  // Flash memory protection
+  // Memory protection is page based and thus should use phy addressing
+  // This should move to flash_phy long term
+  flash_mp u_flash_mp (
+    .clk_i,
+    .rst_ni,
+
+    // arbiter interface selection
+    .if_sel_i(if_sel),
+
+    // sw configuration for data partition
+    .region_cfgs_i(region_cfgs),
+    .bank_cfgs_i(reg2hw.mp_bank_cfg),
+
+    // sw configuration for info partition
+    .info_page_cfgs_i(info_page_cfgs),
+
+    // read / prog / erase controls
+    .req_i(flash_req),
+    .phase_i(phase),
+    .req_addr_i(flash_addr[BusAddrW-1 -: AllPagesW]),
+    .req_part_i(flash_part_sel),
+    .info_sel_i(flash_info_sel),
+    .addr_ovfl_i(rd_flash_ovfl | prog_flash_ovfl),
+    .rd_i(rd_op),
+    .prog_i(prog_op),
+    .pg_erase_i(erase_op & (erase_flash_type == FlashErasePage)),
+    .bk_erase_i(erase_op & (erase_flash_type == FlashEraseBank)),
+    .rd_done_o(flash_rd_done),
+    .prog_done_o(flash_prog_done),
+    .erase_done_o(flash_erase_done),
+    .error_o(flash_mp_error),
+    .err_addr_o(err_addr),
+
+    // flash phy interface
+    .req_o(flash_o.req),
+    .scramble_en_o(flash_o.scramble_en),
+    .rd_o(flash_o.rd),
+    .prog_o(flash_o.prog),
+    .pg_erase_o(flash_o.pg_erase),
+    .bk_erase_o(flash_o.bk_erase),
+    .rd_done_i(flash_i.rd_done),
+    .prog_done_i(flash_i.prog_done),
+    .erase_done_i(flash_i.erase_done)
+  );
+
+
+  // software interface feedback
+  // most values (other than flash_phy_busy) should only update when software operations
+  // are actually selected
+  assign hw2reg.op_status.done.d     = 1'b1;
+  assign hw2reg.op_status.done.de    = sw_ctrl_done;
+  assign hw2reg.op_status.err.d      = 1'b1;
+  assign hw2reg.op_status.err.de     = sw_ctrl_err;
+  assign hw2reg.status.rd_full.d     = ~rd_fifo_wready;
+  assign hw2reg.status.rd_full.de    = sw_sel;
+  assign hw2reg.status.rd_empty.d    = ~rd_fifo_rvalid;
+  assign hw2reg.status.rd_empty.de   = sw_sel;
+  assign hw2reg.status.prog_full.d   = ~prog_fifo_wready;
+  assign hw2reg.status.prog_full.de  = sw_sel;
+  assign hw2reg.status.prog_empty.d  = ~prog_fifo_rvalid;
+  assign hw2reg.status.prog_empty.de = sw_sel;
+  assign hw2reg.status.init_wip.d    = flash_phy_busy | ctrl_init_busy;
+  assign hw2reg.status.init_wip.de   = 1'b1;
+  assign hw2reg.status.error_addr.d  = err_addr;
+  assign hw2reg.status.error_addr.de = sw_sel;
+  assign hw2reg.control.start.d      = 1'b0;
+  assign hw2reg.control.start.de     = sw_ctrl_done;
+  // if software operation selected, based on transaction start
+  // if software operation not selected, software is free to change contents
+  assign hw2reg.ctrl_regwen.d        = sw_sel ? !op_start : 1'b1;
+
+  // phy status
+  assign hw2reg.phy_status.init_wip.d  = flash_phy_busy;
+  assign hw2reg.phy_status.init_wip.de = 1'b1;
+  assign hw2reg.phy_status.prog_normal_avail.d  = flash_i.prog_type_avail[FlashProgNormal];
+  assign hw2reg.phy_status.prog_normal_avail.de = 1'b1;
+  assign hw2reg.phy_status.prog_repair_avail.d  = flash_i.prog_type_avail[FlashProgRepair];
+  assign hw2reg.phy_status.prog_repair_avail.de = 1'b1;
+
+  // Flash Interface
+  assign flash_o.addr = flash_addr;
+  assign flash_o.part = flash_part_sel;
+  assign flash_o.prog_type = flash_prog_type;
+  assign flash_o.prog_data = flash_prog_data;
+  assign flash_o.prog_last = flash_prog_last;
+  assign flash_o.region_cfgs = region_cfgs;
+  assign flash_o.addr_key = otp_i.addr_key;
+  assign flash_o.data_key = otp_i.data_key;
+  assign flash_rd_err = flash_i.rd_err;
+  assign flash_rd_data = flash_i.rd_data;
+  assign flash_phy_busy = flash_i.init_busy;
+
+  // Interface to pwrmgr
+  // flash is not idle as long as there is a stateful operation ongoing
+  logic flash_idle_d;
+  assign flash_idle_d = ~(flash_o.req &
+                          (flash_o.prog | flash_o.pg_erase | flash_o.bk_erase));
+
+  prim_flop #(
+    .Width(1),
+    .ResetValue(1'b1)
+  ) u_reg_idle (
+    .clk_i,
+    .rst_ni,
+    .d_i(flash_idle_d),
+    .q_o(pwrmgr_o.flash_idle)
+  );
+
+
+  // Interrupts
+  // Generate edge triggered signals for sources that are level
+  logic [3:0] intr_src;
+  logic [3:0] intr_src_q;
+  logic [3:0] intr_assert;
+
+  assign intr_src = { ~prog_fifo_rvalid,
+                      reg2hw.fifo_lvl.prog.q == prog_fifo_depth,
+                      ~rd_fifo_wready,
+                      reg2hw.fifo_lvl.rd.q == rd_fifo_depth
+                    };
+
+  always_ff @(posedge clk_i or negedge rst_ni) begin
+    if (!rst_ni) begin
+      intr_src_q <= 4'h8; //prog_fifo is empty by default
+    end else if (sw_sel) begin
+      intr_src_q <= intr_src;
+    end
+  end
+
+  assign intr_assert = ~intr_src_q & intr_src;
+
+
+  assign intr_prog_empty_o = reg2hw.intr_enable.prog_empty.q & reg2hw.intr_state.prog_empty.q;
+  assign intr_prog_lvl_o = reg2hw.intr_enable.prog_lvl.q & reg2hw.intr_state.prog_lvl.q;
+  assign intr_rd_full_o = reg2hw.intr_enable.rd_full.q & reg2hw.intr_state.rd_full.q;
+  assign intr_rd_lvl_o = reg2hw.intr_enable.rd_lvl.q & reg2hw.intr_state.rd_lvl.q;
+  assign intr_op_done_o = reg2hw.intr_enable.op_done.q & reg2hw.intr_state.op_done.q;
+  assign intr_op_error_o = reg2hw.intr_enable.op_error.q & reg2hw.intr_state.op_error.q;
+
+  assign hw2reg.intr_state.prog_empty.d  = 1'b1;
+  assign hw2reg.intr_state.prog_empty.de = intr_assert[3]  |
+                                           (reg2hw.intr_test.prog_empty.qe  &
+                                           reg2hw.intr_test.prog_empty.q);
+
+  assign hw2reg.intr_state.prog_lvl.d  = 1'b1;
+  assign hw2reg.intr_state.prog_lvl.de = intr_assert[2]  |
+                                         (reg2hw.intr_test.prog_lvl.qe  &
+                                         reg2hw.intr_test.prog_lvl.q);
+
+  assign hw2reg.intr_state.rd_full.d  = 1'b1;
+  assign hw2reg.intr_state.rd_full.de = intr_assert[1] |
+                                        (reg2hw.intr_test.rd_full.qe  &
+                                        reg2hw.intr_test.rd_full.q);
+
+  assign hw2reg.intr_state.rd_lvl.d  = 1'b1;
+  assign hw2reg.intr_state.rd_lvl.de =  intr_assert[0] |
+                                       (reg2hw.intr_test.rd_lvl.qe  &
+                                       reg2hw.intr_test.rd_lvl.q);
+
+
+  assign hw2reg.intr_state.op_done.d  = 1'b1;
+  assign hw2reg.intr_state.op_done.de = sw_ctrl_done  |
+                                        (reg2hw.intr_test.op_done.qe  &
+                                        reg2hw.intr_test.op_done.q);
+
+  assign hw2reg.intr_state.op_error.d  = 1'b1;
+  assign hw2reg.intr_state.op_error.de = sw_ctrl_err  |
+                                        (reg2hw.intr_test.op_error.qe  &
+                                        reg2hw.intr_test.op_error.q);
+
+
+
+  // Unused bits
+  logic [BusByteWidth-1:0] unused_byte_sel;
+  logic [top_pkg::TL_AW-1-BusAddrW:0] unused_higher_addr_bits;
+  logic [top_pkg::TL_AW-1:0] unused_scratch;
+
+
+  // Unused signals
+  assign unused_byte_sel = muxed_addr[BusByteWidth-1:0];
+  assign unused_higher_addr_bits = muxed_addr[top_pkg::TL_AW-1:BusAddrW];
+  assign unused_scratch = reg2hw.scratch;
+
+
+  // Assertions
+  `ASSERT_KNOWN(TlDValidKnownO_A,       tl_o.d_valid     )
+  `ASSERT_KNOWN(TlAReadyKnownO_A,       tl_o.a_ready     )
+  `ASSERT_KNOWN(FlashKnownO_A,          {flash_o.req, flash_o.rd, flash_o.prog, flash_o.pg_erase,
+                                         flash_o.bk_erase})
+  `ASSERT_KNOWN_IF(FlashAddrKnown_A,    flash_o.addr, flash_o.req)
+  `ASSERT_KNOWN_IF(FlashProgKnown_A,    flash_o.prog_data, flash_o.prog & flash_o.req)
+  `ASSERT_KNOWN(IntrProgEmptyKnownO_A,  intr_prog_empty_o)
+  `ASSERT_KNOWN(IntrProgLvlKnownO_A,    intr_prog_lvl_o  )
+  `ASSERT_KNOWN(IntrProgRdFullKnownO_A, intr_rd_full_o   )
+  `ASSERT_KNOWN(IntrRdLvlKnownO_A,      intr_rd_lvl_o    )
+  `ASSERT_KNOWN(IntrOpDoneKnownO_A,     intr_op_done_o   )
+  `ASSERT_KNOWN(IntrOpErrorKnownO_A,    intr_op_error_o  )
+
+endmodule
diff --git a/hw/top_earlgrey/ip/flash_ctrl/rtl/autogen/flash_ctrl_pkg.sv b/hw/top_earlgrey/ip/flash_ctrl/rtl/autogen/flash_ctrl_pkg.sv
new file mode 100644
index 0000000..cef3d82
--- /dev/null
+++ b/hw/top_earlgrey/ip/flash_ctrl/rtl/autogen/flash_ctrl_pkg.sv
@@ -0,0 +1,363 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
+// ------------------- W A R N I N G: A U T O - G E N E R A T E D   C O D E !! -------------------//
+// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED WITH THE FOLLOWING COMMAND:
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
+// Flash Controller module.
+//
+
+package flash_ctrl_pkg;
+
+  // design parameters that can be altered through topgen
+  parameter int NumBanks        = flash_ctrl_reg_pkg::RegNumBanks;
+  parameter int PagesPerBank    = flash_ctrl_reg_pkg::RegPagesPerBank;
+
+  // fixed parameters of flash derived from topgen parameters
+  parameter int DataWidth       = 64;
+  parameter int MetaDataWidth   = 12;
+  parameter int InfoTypes       = 2; // How many types of info per bank
+
+// The following hard-wired values are there to work-around verilator.
+// For some reason if the values are assigned through parameters verilator thinks
+// they are not constant
+  parameter int InfoTypeSize [InfoTypes] = '{
+    4,
+    4
+  };
+  parameter int InfosPerBank    = max_info_pages('{
+    4,
+    4
+  });
+  parameter int WordsPerPage    = 128; // Number of flash words per page
+  parameter int BusWidth        = top_pkg::TL_DW;
+  parameter int MpRegions       = 8;  // flash controller protection regions
+  parameter int FifoDepth       = 16; // rd / prog fifos
+  parameter int InfoTypesWidth  = prim_util_pkg::vbits(InfoTypes);
+
+  // flash phy parameters
+  parameter int DataByteWidth   = prim_util_pkg::vbits(DataWidth / 8);
+  parameter int BankW           = prim_util_pkg::vbits(NumBanks);
+  parameter int InfoPageW       = prim_util_pkg::vbits(InfosPerBank);
+  parameter int PageW           = prim_util_pkg::vbits(PagesPerBank);
+  parameter int WordW           = prim_util_pkg::vbits(WordsPerPage);
+  parameter int AddrW           = BankW + PageW + WordW; // all flash range
+  parameter int BankAddrW       = PageW + WordW;         // 1 bank of flash range
+  parameter int AllPagesW       = BankW + PageW;
+
+  // flash ctrl / bus parameters
+  // flash / bus width may be different from actual flash word width
+  parameter int BusByteWidth    = prim_util_pkg::vbits(BusWidth / 8);
+  parameter int WidthMultiple   = DataWidth / BusWidth;
+  parameter int BusWordsPerPage = WordsPerPage * WidthMultiple;
+  parameter int BusWordW        = prim_util_pkg::vbits(BusWordsPerPage);
+  parameter int BusAddrW        = BankW + PageW + BusWordW;
+  parameter int BusBankAddrW    = PageW + BusWordW;
+  parameter int PhyAddrStart    = BusWordW - WordW;
+
+  // fifo parameters
+  parameter int FifoDepthW      = prim_util_pkg::vbits(FifoDepth+1);
+
+  // The end address in bus words for each kind of partition in each bank
+  parameter logic [PageW-1:0] DataPartitionEndAddr = PagesPerBank - 1;
+  parameter logic [PageW-1:0] InfoPartitionEndAddr [InfoTypes] = '{
+    InfoTypeSize[0] - 1,
+    InfoTypeSize[1] - 1
+  };
+
+  ////////////////////////////
+  // All memory protection, seed related parameters
+  // Those related for seed pages should be template candidates
+  ////////////////////////////
+
+  // parameters for connected components
+  parameter int SeedWidth = 256;
+
+  // lcmgr phase enum
+  typedef enum logic [1:0] {
+    PhaseSeed,
+    PhaseRma,
+    PhaseNone,
+    PhaseInvalid
+  } flash_lcmgr_phase_e;
+
+  // alias for super long reg_pkg typedef
+  typedef flash_ctrl_reg_pkg::flash_ctrl_reg2hw_bank0_info0_page_cfg_mreg_t info_page_cfg_t;
+  typedef flash_ctrl_reg_pkg::flash_ctrl_reg2hw_mp_region_cfg_mreg_t mp_region_cfg_t;
+
+  // memory protection specific structs
+  typedef struct packed {
+    logic [InfoTypesWidth-1:0] sel;
+    logic [AllPagesW-1:0] addr;
+  } page_addr_t;
+
+  typedef struct packed {
+    page_addr_t           page;
+    flash_lcmgr_phase_e   phase;
+    info_page_cfg_t       cfg;
+  } info_page_attr_t;
+
+  typedef struct packed {
+    flash_lcmgr_phase_e   phase;
+    mp_region_cfg_t cfg;
+  } data_region_attr_t;
+
+  // flash life cycle / key manager management constants
+  // One page for creator seeds
+  // One page for owner seeds
+  parameter int NumSeeds = 2;
+  parameter int SeedBank = 0;
+  parameter int SeedInfoSel = 0;
+  parameter int CreatorSeedIdx = 0;
+  parameter int OwnerSeedIdx = 1;
+  parameter int CreatorInfoPage = 1;
+  parameter int OwnerInfoPage = 2;
+
+  // which page of which info type of which bank
+  parameter page_addr_t SeedInfoPageSel [NumSeeds] = '{
+    '{
+      sel:  SeedInfoSel,
+      addr: {SeedBank, CreatorInfoPage}
+     },
+
+    '{
+      sel:  SeedInfoSel,
+      addr: {SeedBank, OwnerInfoPage}
+     }
+  };
+
+  // hardware interface memory protection rules
+  parameter int HwInfoRules = 3;
+  parameter int HwDataRules = 1;
+
+  parameter info_page_cfg_t CfgAllowRead = '{
+    en:          1'b1,
+    rd_en:       1'b1,
+    prog_en:     1'b0,
+    erase_en:    1'b0,
+    scramble_en: 1'b0  // TBD, update to 1 once tb supports ECC
+  };
+
+  parameter info_page_cfg_t CfgAllowReadErase = '{
+    en:          1'b1,
+    rd_en:       1'b1,
+    prog_en:     1'b0,
+    erase_en:    1'b1,
+    scramble_en: 1'b0  // TBD, update to 1 once tb supports ECC
+  };
+
+  parameter info_page_attr_t HwInfoPageAttr[HwInfoRules] = '{
+    '{
+       page:  SeedInfoPageSel[CreatorSeedIdx],
+       phase: PhaseSeed,
+       cfg:   CfgAllowRead
+     },
+
+    '{
+       page:  SeedInfoPageSel[OwnerSeedIdx],
+       phase: PhaseSeed,
+       cfg:   CfgAllowRead
+     },
+
+    '{
+       page:  SeedInfoPageSel[OwnerSeedIdx],
+       phase: PhaseRma,
+       cfg:   CfgAllowReadErase
+     }
+  };
+
+  parameter data_region_attr_t HwDataAttr[HwDataRules] = '{
+    '{
+       phase: PhaseRma,
+       cfg:   '{
+                 en:          1'b1,
+                 rd_en:       1'b1,
+                 prog_en:     1'b0,
+                 erase_en:    1'b1,
+                 scramble_en: 1'b0,
+                 base:        '0,
+                 size:        '{default:'1}
+                }
+     }
+  };
+
+
+  ////////////////////////////
+  // Flash operation related enums
+  ////////////////////////////
+
+  // Flash Operations Supported
+  typedef enum logic [1:0] {
+    FlashOpRead     = 2'h0,
+    FlashOpProgram  = 2'h1,
+    FlashOpErase    = 2'h2,
+    FlashOpInvalid  = 2'h3
+  } flash_op_e;
+
+  // Flash Program Operations Supported
+  typedef enum logic {
+    FlashProgNormal = 0,
+    FlashProgRepair = 1
+  } flash_prog_e;
+  parameter int ProgTypes = 2;
+
+  // Flash Erase Operations Supported
+  typedef enum logic  {
+    FlashErasePage  = 0,
+    FlashEraseBank  = 1
+  } flash_erase_e;
+
+  // Flash function select
+  typedef enum logic [1:0] {
+    NoneSel,
+    SwSel,
+    HwSel
+  } flash_sel_e;
+
+  // Flash tlul to fifo direction
+  typedef enum logic  {
+    WriteDir     = 1'b0,
+    ReadDir      = 1'b1
+  } flash_flfo_dir_e;
+
+  // Flash partition type
+  typedef enum logic {
+    FlashPartData = 1'b0,
+    FlashPartInfo = 1'b1
+  } flash_part_e;
+
+  // Flash controller to memory
+  typedef struct packed {
+    logic                 req;
+    logic                 scramble_en;
+    logic                 rd;
+    logic                 prog;
+    logic                 pg_erase;
+    logic                 bk_erase;
+    flash_part_e          part;
+    logic [BusAddrW-1:0]  addr;
+    logic [BusWidth-1:0]  prog_data;
+    logic                 prog_last;
+    flash_prog_e          prog_type;
+    mp_region_cfg_t [MpRegions:0] region_cfgs;
+    logic [127:0]         addr_key;
+    logic [127:0]         data_key;
+  } flash_req_t;
+
+  // default value of flash_req_t (for dangling ports)
+  parameter flash_req_t FLASH_REQ_DEFAULT = '{
+    req:         1'b0,
+    scramble_en: 1'b0,
+    rd:          1'b0,
+    prog:        1'b0,
+    pg_erase:    1'b0,
+    bk_erase:    1'b0,
+    part:        FlashPartData,
+    addr:        '0,
+    prog_data:   '0,
+    prog_last:   '0,
+    prog_type:   FlashProgNormal,
+    region_cfgs: '0,
+    addr_key:    128'hDEADBEEFBEEFFACEDEADBEEF5A5AA5A5,
+    data_key:    128'hDEADBEEF5A5AA5A5DEADBEEFBEEFFACE
+  };
+
+  // memory to flash controller
+  typedef struct packed {
+    logic [ProgTypes-1:0] prog_type_avail;
+    logic                rd_done;
+    logic                prog_done;
+    logic                erase_done;
+    logic                rd_err;
+    logic [BusWidth-1:0] rd_data;
+    logic                init_busy;
+  } flash_rsp_t;
+
+  // default value of flash_rsp_t (for dangling ports)
+  parameter flash_rsp_t FLASH_RSP_DEFAULT = '{
+    prog_type_avail: '{default: '1},
+    rd_done:    1'b0,
+    prog_done:  1'b0,
+    erase_done: 1'b0,
+    rd_err:     '0,
+    rd_data:    '0,
+    init_busy:  1'b0
+  };
+
+  ////////////////////////////
+  // The following inter-module should be moved to OTP/LC
+  ////////////////////////////
+
+  // otp to flash_ctrl
+  typedef struct packed {
+    logic [127:0] addr_key;
+    logic [127:0] data_key;
+    // TBD: this signal will become multi-bit in the future
+    logic seed_valid;
+    logic prog_repair_en;
+  } otp_flash_t;
+
+  // lc to flash_ctrl
+  typedef struct packed {
+    // TBD: this signal will become multi-bit in the future
+    logic rma_req;
+    logic [BusWidth-1:0] rma_req_token;
+    logic provision_en;
+  } lc_flash_req_t;
+
+  // flash_ctrl to lc
+  typedef struct packed {
+    logic rma_ack;
+    logic [BusWidth-1:0] rma_ack_token;
+  } lc_flash_rsp_t;
+
+  // flash_ctrl to keymgr
+  typedef struct packed {
+    logic [NumSeeds-1:0][SeedWidth-1:0] seeds;
+  } keymgr_flash_t;
+
+  // place holder for interface to EDN, replace with real one later
+  typedef struct packed {
+    logic valid;
+    logic [3:0] entropy;
+  } edn_entropy_t;
+
+  // default value of otp_flash_t
+  // These are hardwired default values that should never be used.
+  // Real values are individualized and supplied from OTP.
+  parameter otp_flash_t OTP_FLASH_DEFAULT = '{
+    addr_key: 128'hDEADBEEFBEEFFACEDEADBEEF5A5AA5A5,
+    data_key: 128'hDEADBEEF5A5AA5A5DEADBEEFBEEFFACE,
+    seed_valid: 1'b1,
+    prog_repair_en: 1'b1
+  };
+
+  parameter lc_flash_req_t LC_FLASH_REQ_DEFAULT = '{
+    rma_req: 1'b0,
+    rma_req_token: '0,
+    provision_en: 1'b1
+  };
+
+  parameter edn_entropy_t EDN_ENTROPY_DEFAULT = '{
+    valid: 1'b1,
+    entropy: '0
+  };
+
+
+  // find the max number pages among info types
+  function automatic integer max_info_pages(int infos[InfoTypes]);
+    int current_max = 0;
+    for (int i = 0; i < InfoTypes; i++) begin
+      if (infos[i] > current_max) begin
+        current_max = infos[i];
+      end
+    end
+    return current_max;
+  endfunction // max_info_banks
+
+
+endpackage : flash_ctrl_pkg
diff --git a/hw/top_earlgrey/ip/flash_ctrl/rtl/autogen/flash_ctrl_reg_pkg.sv b/hw/top_earlgrey/ip/flash_ctrl/rtl/autogen/flash_ctrl_reg_pkg.sv
new file mode 100644
index 0000000..0b1c4ea
--- /dev/null
+++ b/hw/top_earlgrey/ip/flash_ctrl/rtl/autogen/flash_ctrl_reg_pkg.sv
@@ -0,0 +1,583 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
+// Register Package auto-generated by `reggen` containing data structure
+
+package flash_ctrl_reg_pkg;
+
+  // Param list
+  parameter int RegNumBanks = 2;
+  parameter int RegPagesPerBank = 256;
+  parameter int NumRegions = 8;
+  parameter int NumInfos0 = 4;
+  parameter int NumInfos1 = 4;
+  parameter int WordsPerPage = 128;
+  parameter int BytesPerWord = 8;
+  parameter int BytesPerPage = 1024;
+  parameter int BytesPerBank = 262144;
+
+  ////////////////////////////
+  // Typedefs for registers //
+  ////////////////////////////
+  typedef struct packed {
+    struct packed {
+      logic        q;
+    } prog_empty;
+    struct packed {
+      logic        q;
+    } prog_lvl;
+    struct packed {
+      logic        q;
+    } rd_full;
+    struct packed {
+      logic        q;
+    } rd_lvl;
+    struct packed {
+      logic        q;
+    } op_done;
+    struct packed {
+      logic        q;
+    } op_error;
+  } flash_ctrl_reg2hw_intr_state_reg_t;
+
+  typedef struct packed {
+    struct packed {
+      logic        q;
+    } prog_empty;
+    struct packed {
+      logic        q;
+    } prog_lvl;
+    struct packed {
+      logic        q;
+    } rd_full;
+    struct packed {
+      logic        q;
+    } rd_lvl;
+    struct packed {
+      logic        q;
+    } op_done;
+    struct packed {
+      logic        q;
+    } op_error;
+  } flash_ctrl_reg2hw_intr_enable_reg_t;
+
+  typedef struct packed {
+    struct packed {
+      logic        q;
+      logic        qe;
+    } prog_empty;
+    struct packed {
+      logic        q;
+      logic        qe;
+    } prog_lvl;
+    struct packed {
+      logic        q;
+      logic        qe;
+    } rd_full;
+    struct packed {
+      logic        q;
+      logic        qe;
+    } rd_lvl;
+    struct packed {
+      logic        q;
+      logic        qe;
+    } op_done;
+    struct packed {
+      logic        q;
+      logic        qe;
+    } op_error;
+  } flash_ctrl_reg2hw_intr_test_reg_t;
+
+  typedef struct packed {
+    struct packed {
+      logic        q;
+    } start;
+    struct packed {
+      logic [1:0]  q;
+    } op;
+    struct packed {
+      logic        q;
+    } prog_sel;
+    struct packed {
+      logic        q;
+    } erase_sel;
+    struct packed {
+      logic        q;
+    } partition_sel;
+    struct packed {
+      logic        q;
+    } info_sel;
+    struct packed {
+      logic [11:0] q;
+    } num;
+  } flash_ctrl_reg2hw_control_reg_t;
+
+  typedef struct packed {
+    logic [31:0] q;
+  } flash_ctrl_reg2hw_addr_reg_t;
+
+  typedef struct packed {
+    struct packed {
+      logic        q;
+    } en;
+    struct packed {
+      logic        q;
+    } rd_en;
+    struct packed {
+      logic        q;
+    } prog_en;
+    struct packed {
+      logic        q;
+    } erase_en;
+    struct packed {
+      logic        q;
+    } scramble_en;
+    struct packed {
+      logic [8:0]  q;
+    } base;
+    struct packed {
+      logic [9:0] q;
+    } size;
+  } flash_ctrl_reg2hw_mp_region_cfg_mreg_t;
+
+  typedef struct packed {
+    struct packed {
+      logic        q;
+    } rd_en;
+    struct packed {
+      logic        q;
+    } prog_en;
+    struct packed {
+      logic        q;
+    } erase_en;
+    struct packed {
+      logic        q;
+    } scramble_en;
+  } flash_ctrl_reg2hw_default_region_reg_t;
+
+  typedef struct packed {
+    struct packed {
+      logic        q;
+    } en;
+    struct packed {
+      logic        q;
+    } rd_en;
+    struct packed {
+      logic        q;
+    } prog_en;
+    struct packed {
+      logic        q;
+    } erase_en;
+    struct packed {
+      logic        q;
+    } scramble_en;
+  } flash_ctrl_reg2hw_bank0_info0_page_cfg_mreg_t;
+
+  typedef struct packed {
+    struct packed {
+      logic        q;
+    } en;
+    struct packed {
+      logic        q;
+    } rd_en;
+    struct packed {
+      logic        q;
+    } prog_en;
+    struct packed {
+      logic        q;
+    } erase_en;
+    struct packed {
+      logic        q;
+    } scramble_en;
+  } flash_ctrl_reg2hw_bank0_info1_page_cfg_mreg_t;
+
+  typedef struct packed {
+    struct packed {
+      logic        q;
+    } en;
+    struct packed {
+      logic        q;
+    } rd_en;
+    struct packed {
+      logic        q;
+    } prog_en;
+    struct packed {
+      logic        q;
+    } erase_en;
+    struct packed {
+      logic        q;
+    } scramble_en;
+  } flash_ctrl_reg2hw_bank1_info0_page_cfg_mreg_t;
+
+  typedef struct packed {
+    struct packed {
+      logic        q;
+    } en;
+    struct packed {
+      logic        q;
+    } rd_en;
+    struct packed {
+      logic        q;
+    } prog_en;
+    struct packed {
+      logic        q;
+    } erase_en;
+    struct packed {
+      logic        q;
+    } scramble_en;
+  } flash_ctrl_reg2hw_bank1_info1_page_cfg_mreg_t;
+
+  typedef struct packed {
+    logic        q;
+  } flash_ctrl_reg2hw_mp_bank_cfg_mreg_t;
+
+  typedef struct packed {
+    logic [31:0] q;
+  } flash_ctrl_reg2hw_scratch_reg_t;
+
+  typedef struct packed {
+    struct packed {
+      logic [4:0]  q;
+    } prog;
+    struct packed {
+      logic [4:0]  q;
+    } rd;
+  } flash_ctrl_reg2hw_fifo_lvl_reg_t;
+
+  typedef struct packed {
+    logic        q;
+  } flash_ctrl_reg2hw_fifo_rst_reg_t;
+
+
+  typedef struct packed {
+    struct packed {
+      logic        d;
+      logic        de;
+    } prog_empty;
+    struct packed {
+      logic        d;
+      logic        de;
+    } prog_lvl;
+    struct packed {
+      logic        d;
+      logic        de;
+    } rd_full;
+    struct packed {
+      logic        d;
+      logic        de;
+    } rd_lvl;
+    struct packed {
+      logic        d;
+      logic        de;
+    } op_done;
+    struct packed {
+      logic        d;
+      logic        de;
+    } op_error;
+  } flash_ctrl_hw2reg_intr_state_reg_t;
+
+  typedef struct packed {
+    logic        d;
+  } flash_ctrl_hw2reg_ctrl_regwen_reg_t;
+
+  typedef struct packed {
+    struct packed {
+      logic        d;
+      logic        de;
+    } start;
+  } flash_ctrl_hw2reg_control_reg_t;
+
+  typedef struct packed {
+    struct packed {
+      logic        d;
+      logic        de;
+    } done;
+    struct packed {
+      logic        d;
+      logic        de;
+    } err;
+  } flash_ctrl_hw2reg_op_status_reg_t;
+
+  typedef struct packed {
+    struct packed {
+      logic        d;
+      logic        de;
+    } rd_full;
+    struct packed {
+      logic        d;
+      logic        de;
+    } rd_empty;
+    struct packed {
+      logic        d;
+      logic        de;
+    } prog_full;
+    struct packed {
+      logic        d;
+      logic        de;
+    } prog_empty;
+    struct packed {
+      logic        d;
+      logic        de;
+    } init_wip;
+    struct packed {
+      logic [8:0]  d;
+      logic        de;
+    } error_addr;
+  } flash_ctrl_hw2reg_status_reg_t;
+
+  typedef struct packed {
+    struct packed {
+      logic        d;
+      logic        de;
+    } init_wip;
+    struct packed {
+      logic        d;
+      logic        de;
+    } prog_normal_avail;
+    struct packed {
+      logic        d;
+      logic        de;
+    } prog_repair_avail;
+  } flash_ctrl_hw2reg_phy_status_reg_t;
+
+
+  ///////////////////////////////////////
+  // Register to internal design logic //
+  ///////////////////////////////////////
+  typedef struct packed {
+    flash_ctrl_reg2hw_intr_state_reg_t intr_state; // [395:390]
+    flash_ctrl_reg2hw_intr_enable_reg_t intr_enable; // [389:384]
+    flash_ctrl_reg2hw_intr_test_reg_t intr_test; // [383:372]
+    flash_ctrl_reg2hw_control_reg_t control; // [371:353]
+    flash_ctrl_reg2hw_addr_reg_t addr; // [352:321]
+    flash_ctrl_reg2hw_mp_region_cfg_mreg_t [7:0] mp_region_cfg; // [320:129]
+    flash_ctrl_reg2hw_default_region_reg_t default_region; // [128:125]
+    flash_ctrl_reg2hw_bank0_info0_page_cfg_mreg_t [3:0] bank0_info0_page_cfg; // [124:105]
+    flash_ctrl_reg2hw_bank0_info1_page_cfg_mreg_t [3:0] bank0_info1_page_cfg; // [104:85]
+    flash_ctrl_reg2hw_bank1_info0_page_cfg_mreg_t [3:0] bank1_info0_page_cfg; // [84:65]
+    flash_ctrl_reg2hw_bank1_info1_page_cfg_mreg_t [3:0] bank1_info1_page_cfg; // [64:45]
+    flash_ctrl_reg2hw_mp_bank_cfg_mreg_t [1:0] mp_bank_cfg; // [44:43]
+    flash_ctrl_reg2hw_scratch_reg_t scratch; // [42:11]
+    flash_ctrl_reg2hw_fifo_lvl_reg_t fifo_lvl; // [10:1]
+    flash_ctrl_reg2hw_fifo_rst_reg_t fifo_rst; // [0:0]
+  } flash_ctrl_reg2hw_t;
+
+  ///////////////////////////////////////
+  // Internal design logic to register //
+  ///////////////////////////////////////
+  typedef struct packed {
+    flash_ctrl_hw2reg_intr_state_reg_t intr_state; // [44:39]
+    flash_ctrl_hw2reg_ctrl_regwen_reg_t ctrl_regwen; // [38:39]
+    flash_ctrl_hw2reg_control_reg_t control; // [38:20]
+    flash_ctrl_hw2reg_op_status_reg_t op_status; // [19:20]
+    flash_ctrl_hw2reg_status_reg_t status; // [19:20]
+    flash_ctrl_hw2reg_phy_status_reg_t phy_status; // [19:20]
+  } flash_ctrl_hw2reg_t;
+
+  // Register Address
+  parameter logic [8:0] FLASH_CTRL_INTR_STATE_OFFSET = 9'h 0;
+  parameter logic [8:0] FLASH_CTRL_INTR_ENABLE_OFFSET = 9'h 4;
+  parameter logic [8:0] FLASH_CTRL_INTR_TEST_OFFSET = 9'h 8;
+  parameter logic [8:0] FLASH_CTRL_CTRL_REGWEN_OFFSET = 9'h c;
+  parameter logic [8:0] FLASH_CTRL_CONTROL_OFFSET = 9'h 10;
+  parameter logic [8:0] FLASH_CTRL_ADDR_OFFSET = 9'h 14;
+  parameter logic [8:0] FLASH_CTRL_REGION_CFG_REGWEN_0_OFFSET = 9'h 18;
+  parameter logic [8:0] FLASH_CTRL_REGION_CFG_REGWEN_1_OFFSET = 9'h 1c;
+  parameter logic [8:0] FLASH_CTRL_REGION_CFG_REGWEN_2_OFFSET = 9'h 20;
+  parameter logic [8:0] FLASH_CTRL_REGION_CFG_REGWEN_3_OFFSET = 9'h 24;
+  parameter logic [8:0] FLASH_CTRL_REGION_CFG_REGWEN_4_OFFSET = 9'h 28;
+  parameter logic [8:0] FLASH_CTRL_REGION_CFG_REGWEN_5_OFFSET = 9'h 2c;
+  parameter logic [8:0] FLASH_CTRL_REGION_CFG_REGWEN_6_OFFSET = 9'h 30;
+  parameter logic [8:0] FLASH_CTRL_REGION_CFG_REGWEN_7_OFFSET = 9'h 34;
+  parameter logic [8:0] FLASH_CTRL_MP_REGION_CFG_0_OFFSET = 9'h 38;
+  parameter logic [8:0] FLASH_CTRL_MP_REGION_CFG_1_OFFSET = 9'h 3c;
+  parameter logic [8:0] FLASH_CTRL_MP_REGION_CFG_2_OFFSET = 9'h 40;
+  parameter logic [8:0] FLASH_CTRL_MP_REGION_CFG_3_OFFSET = 9'h 44;
+  parameter logic [8:0] FLASH_CTRL_MP_REGION_CFG_4_OFFSET = 9'h 48;
+  parameter logic [8:0] FLASH_CTRL_MP_REGION_CFG_5_OFFSET = 9'h 4c;
+  parameter logic [8:0] FLASH_CTRL_MP_REGION_CFG_6_OFFSET = 9'h 50;
+  parameter logic [8:0] FLASH_CTRL_MP_REGION_CFG_7_OFFSET = 9'h 54;
+  parameter logic [8:0] FLASH_CTRL_DEFAULT_REGION_OFFSET = 9'h 58;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO0_REGWEN_0_OFFSET = 9'h 5c;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO0_REGWEN_1_OFFSET = 9'h 60;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO0_REGWEN_2_OFFSET = 9'h 64;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO0_REGWEN_3_OFFSET = 9'h 68;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO0_PAGE_CFG_0_OFFSET = 9'h 6c;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO0_PAGE_CFG_1_OFFSET = 9'h 70;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO0_PAGE_CFG_2_OFFSET = 9'h 74;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO0_PAGE_CFG_3_OFFSET = 9'h 78;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO1_REGWEN_0_OFFSET = 9'h 7c;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO1_REGWEN_1_OFFSET = 9'h 80;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO1_REGWEN_2_OFFSET = 9'h 84;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO1_REGWEN_3_OFFSET = 9'h 88;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO1_PAGE_CFG_0_OFFSET = 9'h 8c;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO1_PAGE_CFG_1_OFFSET = 9'h 90;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO1_PAGE_CFG_2_OFFSET = 9'h 94;
+  parameter logic [8:0] FLASH_CTRL_BANK0_INFO1_PAGE_CFG_3_OFFSET = 9'h 98;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO0_REGWEN_0_OFFSET = 9'h 9c;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO0_REGWEN_1_OFFSET = 9'h a0;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO0_REGWEN_2_OFFSET = 9'h a4;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO0_REGWEN_3_OFFSET = 9'h a8;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO0_PAGE_CFG_0_OFFSET = 9'h ac;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO0_PAGE_CFG_1_OFFSET = 9'h b0;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO0_PAGE_CFG_2_OFFSET = 9'h b4;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO0_PAGE_CFG_3_OFFSET = 9'h b8;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO1_REGWEN_0_OFFSET = 9'h bc;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO1_REGWEN_1_OFFSET = 9'h c0;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO1_REGWEN_2_OFFSET = 9'h c4;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO1_REGWEN_3_OFFSET = 9'h c8;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO1_PAGE_CFG_0_OFFSET = 9'h cc;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO1_PAGE_CFG_1_OFFSET = 9'h d0;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO1_PAGE_CFG_2_OFFSET = 9'h d4;
+  parameter logic [8:0] FLASH_CTRL_BANK1_INFO1_PAGE_CFG_3_OFFSET = 9'h d8;
+  parameter logic [8:0] FLASH_CTRL_BANK_CFG_REGWEN_OFFSET = 9'h dc;
+  parameter logic [8:0] FLASH_CTRL_MP_BANK_CFG_OFFSET = 9'h e0;
+  parameter logic [8:0] FLASH_CTRL_OP_STATUS_OFFSET = 9'h e4;
+  parameter logic [8:0] FLASH_CTRL_STATUS_OFFSET = 9'h e8;
+  parameter logic [8:0] FLASH_CTRL_PHY_STATUS_OFFSET = 9'h ec;
+  parameter logic [8:0] FLASH_CTRL_SCRATCH_OFFSET = 9'h f0;
+  parameter logic [8:0] FLASH_CTRL_FIFO_LVL_OFFSET = 9'h f4;
+  parameter logic [8:0] FLASH_CTRL_FIFO_RST_OFFSET = 9'h f8;
+
+  // Window parameter
+  parameter logic [8:0] FLASH_CTRL_PROG_FIFO_OFFSET = 9'h fc;
+  parameter logic [8:0] FLASH_CTRL_PROG_FIFO_SIZE   = 9'h 4;
+  parameter logic [8:0] FLASH_CTRL_RD_FIFO_OFFSET = 9'h 100;
+  parameter logic [8:0] FLASH_CTRL_RD_FIFO_SIZE   = 9'h 4;
+
+  // Register Index
+  typedef enum int {
+    FLASH_CTRL_INTR_STATE,
+    FLASH_CTRL_INTR_ENABLE,
+    FLASH_CTRL_INTR_TEST,
+    FLASH_CTRL_CTRL_REGWEN,
+    FLASH_CTRL_CONTROL,
+    FLASH_CTRL_ADDR,
+    FLASH_CTRL_REGION_CFG_REGWEN_0,
+    FLASH_CTRL_REGION_CFG_REGWEN_1,
+    FLASH_CTRL_REGION_CFG_REGWEN_2,
+    FLASH_CTRL_REGION_CFG_REGWEN_3,
+    FLASH_CTRL_REGION_CFG_REGWEN_4,
+    FLASH_CTRL_REGION_CFG_REGWEN_5,
+    FLASH_CTRL_REGION_CFG_REGWEN_6,
+    FLASH_CTRL_REGION_CFG_REGWEN_7,
+    FLASH_CTRL_MP_REGION_CFG_0,
+    FLASH_CTRL_MP_REGION_CFG_1,
+    FLASH_CTRL_MP_REGION_CFG_2,
+    FLASH_CTRL_MP_REGION_CFG_3,
+    FLASH_CTRL_MP_REGION_CFG_4,
+    FLASH_CTRL_MP_REGION_CFG_5,
+    FLASH_CTRL_MP_REGION_CFG_6,
+    FLASH_CTRL_MP_REGION_CFG_7,
+    FLASH_CTRL_DEFAULT_REGION,
+    FLASH_CTRL_BANK0_INFO0_REGWEN_0,
+    FLASH_CTRL_BANK0_INFO0_REGWEN_1,
+    FLASH_CTRL_BANK0_INFO0_REGWEN_2,
+    FLASH_CTRL_BANK0_INFO0_REGWEN_3,
+    FLASH_CTRL_BANK0_INFO0_PAGE_CFG_0,
+    FLASH_CTRL_BANK0_INFO0_PAGE_CFG_1,
+    FLASH_CTRL_BANK0_INFO0_PAGE_CFG_2,
+    FLASH_CTRL_BANK0_INFO0_PAGE_CFG_3,
+    FLASH_CTRL_BANK0_INFO1_REGWEN_0,
+    FLASH_CTRL_BANK0_INFO1_REGWEN_1,
+    FLASH_CTRL_BANK0_INFO1_REGWEN_2,
+    FLASH_CTRL_BANK0_INFO1_REGWEN_3,
+    FLASH_CTRL_BANK0_INFO1_PAGE_CFG_0,
+    FLASH_CTRL_BANK0_INFO1_PAGE_CFG_1,
+    FLASH_CTRL_BANK0_INFO1_PAGE_CFG_2,
+    FLASH_CTRL_BANK0_INFO1_PAGE_CFG_3,
+    FLASH_CTRL_BANK1_INFO0_REGWEN_0,
+    FLASH_CTRL_BANK1_INFO0_REGWEN_1,
+    FLASH_CTRL_BANK1_INFO0_REGWEN_2,
+    FLASH_CTRL_BANK1_INFO0_REGWEN_3,
+    FLASH_CTRL_BANK1_INFO0_PAGE_CFG_0,
+    FLASH_CTRL_BANK1_INFO0_PAGE_CFG_1,
+    FLASH_CTRL_BANK1_INFO0_PAGE_CFG_2,
+    FLASH_CTRL_BANK1_INFO0_PAGE_CFG_3,
+    FLASH_CTRL_BANK1_INFO1_REGWEN_0,
+    FLASH_CTRL_BANK1_INFO1_REGWEN_1,
+    FLASH_CTRL_BANK1_INFO1_REGWEN_2,
+    FLASH_CTRL_BANK1_INFO1_REGWEN_3,
+    FLASH_CTRL_BANK1_INFO1_PAGE_CFG_0,
+    FLASH_CTRL_BANK1_INFO1_PAGE_CFG_1,
+    FLASH_CTRL_BANK1_INFO1_PAGE_CFG_2,
+    FLASH_CTRL_BANK1_INFO1_PAGE_CFG_3,
+    FLASH_CTRL_BANK_CFG_REGWEN,
+    FLASH_CTRL_MP_BANK_CFG,
+    FLASH_CTRL_OP_STATUS,
+    FLASH_CTRL_STATUS,
+    FLASH_CTRL_PHY_STATUS,
+    FLASH_CTRL_SCRATCH,
+    FLASH_CTRL_FIFO_LVL,
+    FLASH_CTRL_FIFO_RST
+  } flash_ctrl_id_e;
+
+  // Register width information to check illegal writes
+  parameter logic [3:0] FLASH_CTRL_PERMIT [63] = '{
+    4'b 0001, // index[ 0] FLASH_CTRL_INTR_STATE
+    4'b 0001, // index[ 1] FLASH_CTRL_INTR_ENABLE
+    4'b 0001, // index[ 2] FLASH_CTRL_INTR_TEST
+    4'b 0001, // index[ 3] FLASH_CTRL_CTRL_REGWEN
+    4'b 1111, // index[ 4] FLASH_CTRL_CONTROL
+    4'b 1111, // index[ 5] FLASH_CTRL_ADDR
+    4'b 0001, // index[ 6] FLASH_CTRL_REGION_CFG_REGWEN_0
+    4'b 0001, // index[ 7] FLASH_CTRL_REGION_CFG_REGWEN_1
+    4'b 0001, // index[ 8] FLASH_CTRL_REGION_CFG_REGWEN_2
+    4'b 0001, // index[ 9] FLASH_CTRL_REGION_CFG_REGWEN_3
+    4'b 0001, // index[10] FLASH_CTRL_REGION_CFG_REGWEN_4
+    4'b 0001, // index[11] FLASH_CTRL_REGION_CFG_REGWEN_5
+    4'b 0001, // index[12] FLASH_CTRL_REGION_CFG_REGWEN_6
+    4'b 0001, // index[13] FLASH_CTRL_REGION_CFG_REGWEN_7
+    4'b 1111, // index[14] FLASH_CTRL_MP_REGION_CFG_0
+    4'b 1111, // index[15] FLASH_CTRL_MP_REGION_CFG_1
+    4'b 1111, // index[16] FLASH_CTRL_MP_REGION_CFG_2
+    4'b 1111, // index[17] FLASH_CTRL_MP_REGION_CFG_3
+    4'b 1111, // index[18] FLASH_CTRL_MP_REGION_CFG_4
+    4'b 1111, // index[19] FLASH_CTRL_MP_REGION_CFG_5
+    4'b 1111, // index[20] FLASH_CTRL_MP_REGION_CFG_6
+    4'b 1111, // index[21] FLASH_CTRL_MP_REGION_CFG_7
+    4'b 0001, // index[22] FLASH_CTRL_DEFAULT_REGION
+    4'b 0001, // index[23] FLASH_CTRL_BANK0_INFO0_REGWEN_0
+    4'b 0001, // index[24] FLASH_CTRL_BANK0_INFO0_REGWEN_1
+    4'b 0001, // index[25] FLASH_CTRL_BANK0_INFO0_REGWEN_2
+    4'b 0001, // index[26] FLASH_CTRL_BANK0_INFO0_REGWEN_3
+    4'b 0001, // index[27] FLASH_CTRL_BANK0_INFO0_PAGE_CFG_0
+    4'b 0001, // index[28] FLASH_CTRL_BANK0_INFO0_PAGE_CFG_1
+    4'b 0001, // index[29] FLASH_CTRL_BANK0_INFO0_PAGE_CFG_2
+    4'b 0001, // index[30] FLASH_CTRL_BANK0_INFO0_PAGE_CFG_3
+    4'b 0001, // index[31] FLASH_CTRL_BANK0_INFO1_REGWEN_0
+    4'b 0001, // index[32] FLASH_CTRL_BANK0_INFO1_REGWEN_1
+    4'b 0001, // index[33] FLASH_CTRL_BANK0_INFO1_REGWEN_2
+    4'b 0001, // index[34] FLASH_CTRL_BANK0_INFO1_REGWEN_3
+    4'b 0001, // index[35] FLASH_CTRL_BANK0_INFO1_PAGE_CFG_0
+    4'b 0001, // index[36] FLASH_CTRL_BANK0_INFO1_PAGE_CFG_1
+    4'b 0001, // index[37] FLASH_CTRL_BANK0_INFO1_PAGE_CFG_2
+    4'b 0001, // index[38] FLASH_CTRL_BANK0_INFO1_PAGE_CFG_3
+    4'b 0001, // index[39] FLASH_CTRL_BANK1_INFO0_REGWEN_0
+    4'b 0001, // index[40] FLASH_CTRL_BANK1_INFO0_REGWEN_1
+    4'b 0001, // index[41] FLASH_CTRL_BANK1_INFO0_REGWEN_2
+    4'b 0001, // index[42] FLASH_CTRL_BANK1_INFO0_REGWEN_3
+    4'b 0001, // index[43] FLASH_CTRL_BANK1_INFO0_PAGE_CFG_0
+    4'b 0001, // index[44] FLASH_CTRL_BANK1_INFO0_PAGE_CFG_1
+    4'b 0001, // index[45] FLASH_CTRL_BANK1_INFO0_PAGE_CFG_2
+    4'b 0001, // index[46] FLASH_CTRL_BANK1_INFO0_PAGE_CFG_3
+    4'b 0001, // index[47] FLASH_CTRL_BANK1_INFO1_REGWEN_0
+    4'b 0001, // index[48] FLASH_CTRL_BANK1_INFO1_REGWEN_1
+    4'b 0001, // index[49] FLASH_CTRL_BANK1_INFO1_REGWEN_2
+    4'b 0001, // index[50] FLASH_CTRL_BANK1_INFO1_REGWEN_3
+    4'b 0001, // index[51] FLASH_CTRL_BANK1_INFO1_PAGE_CFG_0
+    4'b 0001, // index[52] FLASH_CTRL_BANK1_INFO1_PAGE_CFG_1
+    4'b 0001, // index[53] FLASH_CTRL_BANK1_INFO1_PAGE_CFG_2
+    4'b 0001, // index[54] FLASH_CTRL_BANK1_INFO1_PAGE_CFG_3
+    4'b 0001, // index[55] FLASH_CTRL_BANK_CFG_REGWEN
+    4'b 0001, // index[56] FLASH_CTRL_MP_BANK_CFG
+    4'b 0001, // index[57] FLASH_CTRL_OP_STATUS
+    4'b 0111, // index[58] FLASH_CTRL_STATUS
+    4'b 0001, // index[59] FLASH_CTRL_PHY_STATUS
+    4'b 1111, // index[60] FLASH_CTRL_SCRATCH
+    4'b 0011, // index[61] FLASH_CTRL_FIFO_LVL
+    4'b 0001  // index[62] FLASH_CTRL_FIFO_RST
+  };
+endpackage
+
diff --git a/hw/top_earlgrey/ip/flash_ctrl/rtl/autogen/flash_ctrl_reg_top.sv b/hw/top_earlgrey/ip/flash_ctrl/rtl/autogen/flash_ctrl_reg_top.sv
new file mode 100644
index 0000000..280c91c
--- /dev/null
+++ b/hw/top_earlgrey/ip/flash_ctrl/rtl/autogen/flash_ctrl_reg_top.sv
@@ -0,0 +1,7388 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
+// Register Top module auto-generated by `reggen`
+
+`include "prim_assert.sv"
+
+module flash_ctrl_reg_top (
+  input clk_i,
+  input rst_ni,
+
+  // Below Regster interface can be changed
+  input  tlul_pkg::tl_h2d_t tl_i,
+  output tlul_pkg::tl_d2h_t tl_o,
+
+  // Output port for window
+  output tlul_pkg::tl_h2d_t tl_win_o  [2],
+  input  tlul_pkg::tl_d2h_t tl_win_i  [2],
+
+  // To HW
+  output flash_ctrl_reg_pkg::flash_ctrl_reg2hw_t reg2hw, // Write
+  input  flash_ctrl_reg_pkg::flash_ctrl_hw2reg_t hw2reg, // Read
+
+  // Config
+  input devmode_i // If 1, explicit error return for unmapped register access
+);
+
+  import flash_ctrl_reg_pkg::* ;
+
+  localparam int AW = 9;
+  localparam int DW = 32;
+  localparam int DBW = DW/8;                    // Byte Width
+
+  // register signals
+  logic           reg_we;
+  logic           reg_re;
+  logic [AW-1:0]  reg_addr;
+  logic [DW-1:0]  reg_wdata;
+  logic [DBW-1:0] reg_be;
+  logic [DW-1:0]  reg_rdata;
+  logic           reg_error;
+
+  logic          addrmiss, wr_err;
+
+  logic [DW-1:0] reg_rdata_next;
+
+  tlul_pkg::tl_h2d_t tl_reg_h2d;
+  tlul_pkg::tl_d2h_t tl_reg_d2h;
+
+  tlul_pkg::tl_h2d_t tl_socket_h2d [3];
+  tlul_pkg::tl_d2h_t tl_socket_d2h [3];
+
+  logic [1:0] reg_steer;
+
+  // socket_1n connection
+  assign tl_reg_h2d = tl_socket_h2d[2];
+  assign tl_socket_d2h[2] = tl_reg_d2h;
+
+  assign tl_win_o[0] = tl_socket_h2d[0];
+  assign tl_socket_d2h[0] = tl_win_i[0];
+  assign tl_win_o[1] = tl_socket_h2d[1];
+  assign tl_socket_d2h[1] = tl_win_i[1];
+
+  // Create Socket_1n
+  tlul_socket_1n #(
+    .N          (3),
+    .HReqPass   (1'b1),
+    .HRspPass   (1'b1),
+    .DReqPass   ({3{1'b1}}),
+    .DRspPass   ({3{1'b1}}),
+    .HReqDepth  (4'h0),
+    .HRspDepth  (4'h0),
+    .DReqDepth  ({3{4'h0}}),
+    .DRspDepth  ({3{4'h0}})
+  ) u_socket (
+    .clk_i,
+    .rst_ni,
+    .tl_h_i (tl_i),
+    .tl_h_o (tl_o),
+    .tl_d_o (tl_socket_h2d),
+    .tl_d_i (tl_socket_d2h),
+    .dev_select_i (reg_steer)
+  );
+
+  // Create steering logic
+  always_comb begin
+    reg_steer = 2;       // Default set to register
+
+    // TODO: Can below codes be unique case () inside ?
+    if (tl_i.a_address[AW-1:0] >= 252 && tl_i.a_address[AW-1:0] < 256) begin
+      reg_steer = 0;
+    end
+    if (tl_i.a_address[AW-1:0] >= 256 && tl_i.a_address[AW-1:0] < 260) begin
+      reg_steer = 1;
+    end
+  end
+
+  tlul_adapter_reg #(
+    .RegAw(AW),
+    .RegDw(DW)
+  ) u_reg_if (
+    .clk_i,
+    .rst_ni,
+
+    .tl_i (tl_reg_h2d),
+    .tl_o (tl_reg_d2h),
+
+    .we_o    (reg_we),
+    .re_o    (reg_re),
+    .addr_o  (reg_addr),
+    .wdata_o (reg_wdata),
+    .be_o    (reg_be),
+    .rdata_i (reg_rdata),
+    .error_i (reg_error)
+  );
+
+  assign reg_rdata = reg_rdata_next ;
+  assign reg_error = (devmode_i & addrmiss) | wr_err ;
+
+  // Define SW related signals
+  // Format: <reg>_<field>_{wd|we|qs}
+  //        or <reg>_{wd|we|qs} if field == 1 or 0
+  logic intr_state_prog_empty_qs;
+  logic intr_state_prog_empty_wd;
+  logic intr_state_prog_empty_we;
+  logic intr_state_prog_lvl_qs;
+  logic intr_state_prog_lvl_wd;
+  logic intr_state_prog_lvl_we;
+  logic intr_state_rd_full_qs;
+  logic intr_state_rd_full_wd;
+  logic intr_state_rd_full_we;
+  logic intr_state_rd_lvl_qs;
+  logic intr_state_rd_lvl_wd;
+  logic intr_state_rd_lvl_we;
+  logic intr_state_op_done_qs;
+  logic intr_state_op_done_wd;
+  logic intr_state_op_done_we;
+  logic intr_state_op_error_qs;
+  logic intr_state_op_error_wd;
+  logic intr_state_op_error_we;
+  logic intr_enable_prog_empty_qs;
+  logic intr_enable_prog_empty_wd;
+  logic intr_enable_prog_empty_we;
+  logic intr_enable_prog_lvl_qs;
+  logic intr_enable_prog_lvl_wd;
+  logic intr_enable_prog_lvl_we;
+  logic intr_enable_rd_full_qs;
+  logic intr_enable_rd_full_wd;
+  logic intr_enable_rd_full_we;
+  logic intr_enable_rd_lvl_qs;
+  logic intr_enable_rd_lvl_wd;
+  logic intr_enable_rd_lvl_we;
+  logic intr_enable_op_done_qs;
+  logic intr_enable_op_done_wd;
+  logic intr_enable_op_done_we;
+  logic intr_enable_op_error_qs;
+  logic intr_enable_op_error_wd;
+  logic intr_enable_op_error_we;
+  logic intr_test_prog_empty_wd;
+  logic intr_test_prog_empty_we;
+  logic intr_test_prog_lvl_wd;
+  logic intr_test_prog_lvl_we;
+  logic intr_test_rd_full_wd;
+  logic intr_test_rd_full_we;
+  logic intr_test_rd_lvl_wd;
+  logic intr_test_rd_lvl_we;
+  logic intr_test_op_done_wd;
+  logic intr_test_op_done_we;
+  logic intr_test_op_error_wd;
+  logic intr_test_op_error_we;
+  logic ctrl_regwen_qs;
+  logic ctrl_regwen_re;
+  logic control_start_qs;
+  logic control_start_wd;
+  logic control_start_we;
+  logic [1:0] control_op_qs;
+  logic [1:0] control_op_wd;
+  logic control_op_we;
+  logic control_prog_sel_qs;
+  logic control_prog_sel_wd;
+  logic control_prog_sel_we;
+  logic control_erase_sel_qs;
+  logic control_erase_sel_wd;
+  logic control_erase_sel_we;
+  logic control_partition_sel_qs;
+  logic control_partition_sel_wd;
+  logic control_partition_sel_we;
+  logic control_info_sel_qs;
+  logic control_info_sel_wd;
+  logic control_info_sel_we;
+  logic [11:0] control_num_qs;
+  logic [11:0] control_num_wd;
+  logic control_num_we;
+  logic [31:0] addr_qs;
+  logic [31:0] addr_wd;
+  logic addr_we;
+  logic region_cfg_regwen_0_qs;
+  logic region_cfg_regwen_0_wd;
+  logic region_cfg_regwen_0_we;
+  logic region_cfg_regwen_1_qs;
+  logic region_cfg_regwen_1_wd;
+  logic region_cfg_regwen_1_we;
+  logic region_cfg_regwen_2_qs;
+  logic region_cfg_regwen_2_wd;
+  logic region_cfg_regwen_2_we;
+  logic region_cfg_regwen_3_qs;
+  logic region_cfg_regwen_3_wd;
+  logic region_cfg_regwen_3_we;
+  logic region_cfg_regwen_4_qs;
+  logic region_cfg_regwen_4_wd;
+  logic region_cfg_regwen_4_we;
+  logic region_cfg_regwen_5_qs;
+  logic region_cfg_regwen_5_wd;
+  logic region_cfg_regwen_5_we;
+  logic region_cfg_regwen_6_qs;
+  logic region_cfg_regwen_6_wd;
+  logic region_cfg_regwen_6_we;
+  logic region_cfg_regwen_7_qs;
+  logic region_cfg_regwen_7_wd;
+  logic region_cfg_regwen_7_we;
+  logic mp_region_cfg_0_en_0_qs;
+  logic mp_region_cfg_0_en_0_wd;
+  logic mp_region_cfg_0_en_0_we;
+  logic mp_region_cfg_0_rd_en_0_qs;
+  logic mp_region_cfg_0_rd_en_0_wd;
+  logic mp_region_cfg_0_rd_en_0_we;
+  logic mp_region_cfg_0_prog_en_0_qs;
+  logic mp_region_cfg_0_prog_en_0_wd;
+  logic mp_region_cfg_0_prog_en_0_we;
+  logic mp_region_cfg_0_erase_en_0_qs;
+  logic mp_region_cfg_0_erase_en_0_wd;
+  logic mp_region_cfg_0_erase_en_0_we;
+  logic mp_region_cfg_0_scramble_en_0_qs;
+  logic mp_region_cfg_0_scramble_en_0_wd;
+  logic mp_region_cfg_0_scramble_en_0_we;
+  logic [8:0] mp_region_cfg_0_base_0_qs;
+  logic [8:0] mp_region_cfg_0_base_0_wd;
+  logic mp_region_cfg_0_base_0_we;
+  logic [9:0] mp_region_cfg_0_size_0_qs;
+  logic [9:0] mp_region_cfg_0_size_0_wd;
+  logic mp_region_cfg_0_size_0_we;
+  logic mp_region_cfg_1_en_1_qs;
+  logic mp_region_cfg_1_en_1_wd;
+  logic mp_region_cfg_1_en_1_we;
+  logic mp_region_cfg_1_rd_en_1_qs;
+  logic mp_region_cfg_1_rd_en_1_wd;
+  logic mp_region_cfg_1_rd_en_1_we;
+  logic mp_region_cfg_1_prog_en_1_qs;
+  logic mp_region_cfg_1_prog_en_1_wd;
+  logic mp_region_cfg_1_prog_en_1_we;
+  logic mp_region_cfg_1_erase_en_1_qs;
+  logic mp_region_cfg_1_erase_en_1_wd;
+  logic mp_region_cfg_1_erase_en_1_we;
+  logic mp_region_cfg_1_scramble_en_1_qs;
+  logic mp_region_cfg_1_scramble_en_1_wd;
+  logic mp_region_cfg_1_scramble_en_1_we;
+  logic [8:0] mp_region_cfg_1_base_1_qs;
+  logic [8:0] mp_region_cfg_1_base_1_wd;
+  logic mp_region_cfg_1_base_1_we;
+  logic [9:0] mp_region_cfg_1_size_1_qs;
+  logic [9:0] mp_region_cfg_1_size_1_wd;
+  logic mp_region_cfg_1_size_1_we;
+  logic mp_region_cfg_2_en_2_qs;
+  logic mp_region_cfg_2_en_2_wd;
+  logic mp_region_cfg_2_en_2_we;
+  logic mp_region_cfg_2_rd_en_2_qs;
+  logic mp_region_cfg_2_rd_en_2_wd;
+  logic mp_region_cfg_2_rd_en_2_we;
+  logic mp_region_cfg_2_prog_en_2_qs;
+  logic mp_region_cfg_2_prog_en_2_wd;
+  logic mp_region_cfg_2_prog_en_2_we;
+  logic mp_region_cfg_2_erase_en_2_qs;
+  logic mp_region_cfg_2_erase_en_2_wd;
+  logic mp_region_cfg_2_erase_en_2_we;
+  logic mp_region_cfg_2_scramble_en_2_qs;
+  logic mp_region_cfg_2_scramble_en_2_wd;
+  logic mp_region_cfg_2_scramble_en_2_we;
+  logic [8:0] mp_region_cfg_2_base_2_qs;
+  logic [8:0] mp_region_cfg_2_base_2_wd;
+  logic mp_region_cfg_2_base_2_we;
+  logic [9:0] mp_region_cfg_2_size_2_qs;
+  logic [9:0] mp_region_cfg_2_size_2_wd;
+  logic mp_region_cfg_2_size_2_we;
+  logic mp_region_cfg_3_en_3_qs;
+  logic mp_region_cfg_3_en_3_wd;
+  logic mp_region_cfg_3_en_3_we;
+  logic mp_region_cfg_3_rd_en_3_qs;
+  logic mp_region_cfg_3_rd_en_3_wd;
+  logic mp_region_cfg_3_rd_en_3_we;
+  logic mp_region_cfg_3_prog_en_3_qs;
+  logic mp_region_cfg_3_prog_en_3_wd;
+  logic mp_region_cfg_3_prog_en_3_we;
+  logic mp_region_cfg_3_erase_en_3_qs;
+  logic mp_region_cfg_3_erase_en_3_wd;
+  logic mp_region_cfg_3_erase_en_3_we;
+  logic mp_region_cfg_3_scramble_en_3_qs;
+  logic mp_region_cfg_3_scramble_en_3_wd;
+  logic mp_region_cfg_3_scramble_en_3_we;
+  logic [8:0] mp_region_cfg_3_base_3_qs;
+  logic [8:0] mp_region_cfg_3_base_3_wd;
+  logic mp_region_cfg_3_base_3_we;
+  logic [9:0] mp_region_cfg_3_size_3_qs;
+  logic [9:0] mp_region_cfg_3_size_3_wd;
+  logic mp_region_cfg_3_size_3_we;
+  logic mp_region_cfg_4_en_4_qs;
+  logic mp_region_cfg_4_en_4_wd;
+  logic mp_region_cfg_4_en_4_we;
+  logic mp_region_cfg_4_rd_en_4_qs;
+  logic mp_region_cfg_4_rd_en_4_wd;
+  logic mp_region_cfg_4_rd_en_4_we;
+  logic mp_region_cfg_4_prog_en_4_qs;
+  logic mp_region_cfg_4_prog_en_4_wd;
+  logic mp_region_cfg_4_prog_en_4_we;
+  logic mp_region_cfg_4_erase_en_4_qs;
+  logic mp_region_cfg_4_erase_en_4_wd;
+  logic mp_region_cfg_4_erase_en_4_we;
+  logic mp_region_cfg_4_scramble_en_4_qs;
+  logic mp_region_cfg_4_scramble_en_4_wd;
+  logic mp_region_cfg_4_scramble_en_4_we;
+  logic [8:0] mp_region_cfg_4_base_4_qs;
+  logic [8:0] mp_region_cfg_4_base_4_wd;
+  logic mp_region_cfg_4_base_4_we;
+  logic [9:0] mp_region_cfg_4_size_4_qs;
+  logic [9:0] mp_region_cfg_4_size_4_wd;
+  logic mp_region_cfg_4_size_4_we;
+  logic mp_region_cfg_5_en_5_qs;
+  logic mp_region_cfg_5_en_5_wd;
+  logic mp_region_cfg_5_en_5_we;
+  logic mp_region_cfg_5_rd_en_5_qs;
+  logic mp_region_cfg_5_rd_en_5_wd;
+  logic mp_region_cfg_5_rd_en_5_we;
+  logic mp_region_cfg_5_prog_en_5_qs;
+  logic mp_region_cfg_5_prog_en_5_wd;
+  logic mp_region_cfg_5_prog_en_5_we;
+  logic mp_region_cfg_5_erase_en_5_qs;
+  logic mp_region_cfg_5_erase_en_5_wd;
+  logic mp_region_cfg_5_erase_en_5_we;
+  logic mp_region_cfg_5_scramble_en_5_qs;
+  logic mp_region_cfg_5_scramble_en_5_wd;
+  logic mp_region_cfg_5_scramble_en_5_we;
+  logic [8:0] mp_region_cfg_5_base_5_qs;
+  logic [8:0] mp_region_cfg_5_base_5_wd;
+  logic mp_region_cfg_5_base_5_we;
+  logic [9:0] mp_region_cfg_5_size_5_qs;
+  logic [9:0] mp_region_cfg_5_size_5_wd;
+  logic mp_region_cfg_5_size_5_we;
+  logic mp_region_cfg_6_en_6_qs;
+  logic mp_region_cfg_6_en_6_wd;
+  logic mp_region_cfg_6_en_6_we;
+  logic mp_region_cfg_6_rd_en_6_qs;
+  logic mp_region_cfg_6_rd_en_6_wd;
+  logic mp_region_cfg_6_rd_en_6_we;
+  logic mp_region_cfg_6_prog_en_6_qs;
+  logic mp_region_cfg_6_prog_en_6_wd;
+  logic mp_region_cfg_6_prog_en_6_we;
+  logic mp_region_cfg_6_erase_en_6_qs;
+  logic mp_region_cfg_6_erase_en_6_wd;
+  logic mp_region_cfg_6_erase_en_6_we;
+  logic mp_region_cfg_6_scramble_en_6_qs;
+  logic mp_region_cfg_6_scramble_en_6_wd;
+  logic mp_region_cfg_6_scramble_en_6_we;
+  logic [8:0] mp_region_cfg_6_base_6_qs;
+  logic [8:0] mp_region_cfg_6_base_6_wd;
+  logic mp_region_cfg_6_base_6_we;
+  logic [9:0] mp_region_cfg_6_size_6_qs;
+  logic [9:0] mp_region_cfg_6_size_6_wd;
+  logic mp_region_cfg_6_size_6_we;
+  logic mp_region_cfg_7_en_7_qs;
+  logic mp_region_cfg_7_en_7_wd;
+  logic mp_region_cfg_7_en_7_we;
+  logic mp_region_cfg_7_rd_en_7_qs;
+  logic mp_region_cfg_7_rd_en_7_wd;
+  logic mp_region_cfg_7_rd_en_7_we;
+  logic mp_region_cfg_7_prog_en_7_qs;
+  logic mp_region_cfg_7_prog_en_7_wd;
+  logic mp_region_cfg_7_prog_en_7_we;
+  logic mp_region_cfg_7_erase_en_7_qs;
+  logic mp_region_cfg_7_erase_en_7_wd;
+  logic mp_region_cfg_7_erase_en_7_we;
+  logic mp_region_cfg_7_scramble_en_7_qs;
+  logic mp_region_cfg_7_scramble_en_7_wd;
+  logic mp_region_cfg_7_scramble_en_7_we;
+  logic [8:0] mp_region_cfg_7_base_7_qs;
+  logic [8:0] mp_region_cfg_7_base_7_wd;
+  logic mp_region_cfg_7_base_7_we;
+  logic [9:0] mp_region_cfg_7_size_7_qs;
+  logic [9:0] mp_region_cfg_7_size_7_wd;
+  logic mp_region_cfg_7_size_7_we;
+  logic default_region_rd_en_qs;
+  logic default_region_rd_en_wd;
+  logic default_region_rd_en_we;
+  logic default_region_prog_en_qs;
+  logic default_region_prog_en_wd;
+  logic default_region_prog_en_we;
+  logic default_region_erase_en_qs;
+  logic default_region_erase_en_wd;
+  logic default_region_erase_en_we;
+  logic default_region_scramble_en_qs;
+  logic default_region_scramble_en_wd;
+  logic default_region_scramble_en_we;
+  logic bank0_info0_regwen_0_qs;
+  logic bank0_info0_regwen_0_wd;
+  logic bank0_info0_regwen_0_we;
+  logic bank0_info0_regwen_1_qs;
+  logic bank0_info0_regwen_1_wd;
+  logic bank0_info0_regwen_1_we;
+  logic bank0_info0_regwen_2_qs;
+  logic bank0_info0_regwen_2_wd;
+  logic bank0_info0_regwen_2_we;
+  logic bank0_info0_regwen_3_qs;
+  logic bank0_info0_regwen_3_wd;
+  logic bank0_info0_regwen_3_we;
+  logic bank0_info0_page_cfg_0_en_0_qs;
+  logic bank0_info0_page_cfg_0_en_0_wd;
+  logic bank0_info0_page_cfg_0_en_0_we;
+  logic bank0_info0_page_cfg_0_rd_en_0_qs;
+  logic bank0_info0_page_cfg_0_rd_en_0_wd;
+  logic bank0_info0_page_cfg_0_rd_en_0_we;
+  logic bank0_info0_page_cfg_0_prog_en_0_qs;
+  logic bank0_info0_page_cfg_0_prog_en_0_wd;
+  logic bank0_info0_page_cfg_0_prog_en_0_we;
+  logic bank0_info0_page_cfg_0_erase_en_0_qs;
+  logic bank0_info0_page_cfg_0_erase_en_0_wd;
+  logic bank0_info0_page_cfg_0_erase_en_0_we;
+  logic bank0_info0_page_cfg_0_scramble_en_0_qs;
+  logic bank0_info0_page_cfg_0_scramble_en_0_wd;
+  logic bank0_info0_page_cfg_0_scramble_en_0_we;
+  logic bank0_info0_page_cfg_1_en_1_qs;
+  logic bank0_info0_page_cfg_1_en_1_wd;
+  logic bank0_info0_page_cfg_1_en_1_we;
+  logic bank0_info0_page_cfg_1_rd_en_1_qs;
+  logic bank0_info0_page_cfg_1_rd_en_1_wd;
+  logic bank0_info0_page_cfg_1_rd_en_1_we;
+  logic bank0_info0_page_cfg_1_prog_en_1_qs;
+  logic bank0_info0_page_cfg_1_prog_en_1_wd;
+  logic bank0_info0_page_cfg_1_prog_en_1_we;
+  logic bank0_info0_page_cfg_1_erase_en_1_qs;
+  logic bank0_info0_page_cfg_1_erase_en_1_wd;
+  logic bank0_info0_page_cfg_1_erase_en_1_we;
+  logic bank0_info0_page_cfg_1_scramble_en_1_qs;
+  logic bank0_info0_page_cfg_1_scramble_en_1_wd;
+  logic bank0_info0_page_cfg_1_scramble_en_1_we;
+  logic bank0_info0_page_cfg_2_en_2_qs;
+  logic bank0_info0_page_cfg_2_en_2_wd;
+  logic bank0_info0_page_cfg_2_en_2_we;
+  logic bank0_info0_page_cfg_2_rd_en_2_qs;
+  logic bank0_info0_page_cfg_2_rd_en_2_wd;
+  logic bank0_info0_page_cfg_2_rd_en_2_we;
+  logic bank0_info0_page_cfg_2_prog_en_2_qs;
+  logic bank0_info0_page_cfg_2_prog_en_2_wd;
+  logic bank0_info0_page_cfg_2_prog_en_2_we;
+  logic bank0_info0_page_cfg_2_erase_en_2_qs;
+  logic bank0_info0_page_cfg_2_erase_en_2_wd;
+  logic bank0_info0_page_cfg_2_erase_en_2_we;
+  logic bank0_info0_page_cfg_2_scramble_en_2_qs;
+  logic bank0_info0_page_cfg_2_scramble_en_2_wd;
+  logic bank0_info0_page_cfg_2_scramble_en_2_we;
+  logic bank0_info0_page_cfg_3_en_3_qs;
+  logic bank0_info0_page_cfg_3_en_3_wd;
+  logic bank0_info0_page_cfg_3_en_3_we;
+  logic bank0_info0_page_cfg_3_rd_en_3_qs;
+  logic bank0_info0_page_cfg_3_rd_en_3_wd;
+  logic bank0_info0_page_cfg_3_rd_en_3_we;
+  logic bank0_info0_page_cfg_3_prog_en_3_qs;
+  logic bank0_info0_page_cfg_3_prog_en_3_wd;
+  logic bank0_info0_page_cfg_3_prog_en_3_we;
+  logic bank0_info0_page_cfg_3_erase_en_3_qs;
+  logic bank0_info0_page_cfg_3_erase_en_3_wd;
+  logic bank0_info0_page_cfg_3_erase_en_3_we;
+  logic bank0_info0_page_cfg_3_scramble_en_3_qs;
+  logic bank0_info0_page_cfg_3_scramble_en_3_wd;
+  logic bank0_info0_page_cfg_3_scramble_en_3_we;
+  logic bank0_info1_regwen_0_qs;
+  logic bank0_info1_regwen_0_wd;
+  logic bank0_info1_regwen_0_we;
+  logic bank0_info1_regwen_1_qs;
+  logic bank0_info1_regwen_1_wd;
+  logic bank0_info1_regwen_1_we;
+  logic bank0_info1_regwen_2_qs;
+  logic bank0_info1_regwen_2_wd;
+  logic bank0_info1_regwen_2_we;
+  logic bank0_info1_regwen_3_qs;
+  logic bank0_info1_regwen_3_wd;
+  logic bank0_info1_regwen_3_we;
+  logic bank0_info1_page_cfg_0_en_0_qs;
+  logic bank0_info1_page_cfg_0_en_0_wd;
+  logic bank0_info1_page_cfg_0_en_0_we;
+  logic bank0_info1_page_cfg_0_rd_en_0_qs;
+  logic bank0_info1_page_cfg_0_rd_en_0_wd;
+  logic bank0_info1_page_cfg_0_rd_en_0_we;
+  logic bank0_info1_page_cfg_0_prog_en_0_qs;
+  logic bank0_info1_page_cfg_0_prog_en_0_wd;
+  logic bank0_info1_page_cfg_0_prog_en_0_we;
+  logic bank0_info1_page_cfg_0_erase_en_0_qs;
+  logic bank0_info1_page_cfg_0_erase_en_0_wd;
+  logic bank0_info1_page_cfg_0_erase_en_0_we;
+  logic bank0_info1_page_cfg_0_scramble_en_0_qs;
+  logic bank0_info1_page_cfg_0_scramble_en_0_wd;
+  logic bank0_info1_page_cfg_0_scramble_en_0_we;
+  logic bank0_info1_page_cfg_1_en_1_qs;
+  logic bank0_info1_page_cfg_1_en_1_wd;
+  logic bank0_info1_page_cfg_1_en_1_we;
+  logic bank0_info1_page_cfg_1_rd_en_1_qs;
+  logic bank0_info1_page_cfg_1_rd_en_1_wd;
+  logic bank0_info1_page_cfg_1_rd_en_1_we;
+  logic bank0_info1_page_cfg_1_prog_en_1_qs;
+  logic bank0_info1_page_cfg_1_prog_en_1_wd;
+  logic bank0_info1_page_cfg_1_prog_en_1_we;
+  logic bank0_info1_page_cfg_1_erase_en_1_qs;
+  logic bank0_info1_page_cfg_1_erase_en_1_wd;
+  logic bank0_info1_page_cfg_1_erase_en_1_we;
+  logic bank0_info1_page_cfg_1_scramble_en_1_qs;
+  logic bank0_info1_page_cfg_1_scramble_en_1_wd;
+  logic bank0_info1_page_cfg_1_scramble_en_1_we;
+  logic bank0_info1_page_cfg_2_en_2_qs;
+  logic bank0_info1_page_cfg_2_en_2_wd;
+  logic bank0_info1_page_cfg_2_en_2_we;
+  logic bank0_info1_page_cfg_2_rd_en_2_qs;
+  logic bank0_info1_page_cfg_2_rd_en_2_wd;
+  logic bank0_info1_page_cfg_2_rd_en_2_we;
+  logic bank0_info1_page_cfg_2_prog_en_2_qs;
+  logic bank0_info1_page_cfg_2_prog_en_2_wd;
+  logic bank0_info1_page_cfg_2_prog_en_2_we;
+  logic bank0_info1_page_cfg_2_erase_en_2_qs;
+  logic bank0_info1_page_cfg_2_erase_en_2_wd;
+  logic bank0_info1_page_cfg_2_erase_en_2_we;
+  logic bank0_info1_page_cfg_2_scramble_en_2_qs;
+  logic bank0_info1_page_cfg_2_scramble_en_2_wd;
+  logic bank0_info1_page_cfg_2_scramble_en_2_we;
+  logic bank0_info1_page_cfg_3_en_3_qs;
+  logic bank0_info1_page_cfg_3_en_3_wd;
+  logic bank0_info1_page_cfg_3_en_3_we;
+  logic bank0_info1_page_cfg_3_rd_en_3_qs;
+  logic bank0_info1_page_cfg_3_rd_en_3_wd;
+  logic bank0_info1_page_cfg_3_rd_en_3_we;
+  logic bank0_info1_page_cfg_3_prog_en_3_qs;
+  logic bank0_info1_page_cfg_3_prog_en_3_wd;
+  logic bank0_info1_page_cfg_3_prog_en_3_we;
+  logic bank0_info1_page_cfg_3_erase_en_3_qs;
+  logic bank0_info1_page_cfg_3_erase_en_3_wd;
+  logic bank0_info1_page_cfg_3_erase_en_3_we;
+  logic bank0_info1_page_cfg_3_scramble_en_3_qs;
+  logic bank0_info1_page_cfg_3_scramble_en_3_wd;
+  logic bank0_info1_page_cfg_3_scramble_en_3_we;
+  logic bank1_info0_regwen_0_qs;
+  logic bank1_info0_regwen_0_wd;
+  logic bank1_info0_regwen_0_we;
+  logic bank1_info0_regwen_1_qs;
+  logic bank1_info0_regwen_1_wd;
+  logic bank1_info0_regwen_1_we;
+  logic bank1_info0_regwen_2_qs;
+  logic bank1_info0_regwen_2_wd;
+  logic bank1_info0_regwen_2_we;
+  logic bank1_info0_regwen_3_qs;
+  logic bank1_info0_regwen_3_wd;
+  logic bank1_info0_regwen_3_we;
+  logic bank1_info0_page_cfg_0_en_0_qs;
+  logic bank1_info0_page_cfg_0_en_0_wd;
+  logic bank1_info0_page_cfg_0_en_0_we;
+  logic bank1_info0_page_cfg_0_rd_en_0_qs;
+  logic bank1_info0_page_cfg_0_rd_en_0_wd;
+  logic bank1_info0_page_cfg_0_rd_en_0_we;
+  logic bank1_info0_page_cfg_0_prog_en_0_qs;
+  logic bank1_info0_page_cfg_0_prog_en_0_wd;
+  logic bank1_info0_page_cfg_0_prog_en_0_we;
+  logic bank1_info0_page_cfg_0_erase_en_0_qs;
+  logic bank1_info0_page_cfg_0_erase_en_0_wd;
+  logic bank1_info0_page_cfg_0_erase_en_0_we;
+  logic bank1_info0_page_cfg_0_scramble_en_0_qs;
+  logic bank1_info0_page_cfg_0_scramble_en_0_wd;
+  logic bank1_info0_page_cfg_0_scramble_en_0_we;
+  logic bank1_info0_page_cfg_1_en_1_qs;
+  logic bank1_info0_page_cfg_1_en_1_wd;
+  logic bank1_info0_page_cfg_1_en_1_we;
+  logic bank1_info0_page_cfg_1_rd_en_1_qs;
+  logic bank1_info0_page_cfg_1_rd_en_1_wd;
+  logic bank1_info0_page_cfg_1_rd_en_1_we;
+  logic bank1_info0_page_cfg_1_prog_en_1_qs;
+  logic bank1_info0_page_cfg_1_prog_en_1_wd;
+  logic bank1_info0_page_cfg_1_prog_en_1_we;
+  logic bank1_info0_page_cfg_1_erase_en_1_qs;
+  logic bank1_info0_page_cfg_1_erase_en_1_wd;
+  logic bank1_info0_page_cfg_1_erase_en_1_we;
+  logic bank1_info0_page_cfg_1_scramble_en_1_qs;
+  logic bank1_info0_page_cfg_1_scramble_en_1_wd;
+  logic bank1_info0_page_cfg_1_scramble_en_1_we;
+  logic bank1_info0_page_cfg_2_en_2_qs;
+  logic bank1_info0_page_cfg_2_en_2_wd;
+  logic bank1_info0_page_cfg_2_en_2_we;
+  logic bank1_info0_page_cfg_2_rd_en_2_qs;
+  logic bank1_info0_page_cfg_2_rd_en_2_wd;
+  logic bank1_info0_page_cfg_2_rd_en_2_we;
+  logic bank1_info0_page_cfg_2_prog_en_2_qs;
+  logic bank1_info0_page_cfg_2_prog_en_2_wd;
+  logic bank1_info0_page_cfg_2_prog_en_2_we;
+  logic bank1_info0_page_cfg_2_erase_en_2_qs;
+  logic bank1_info0_page_cfg_2_erase_en_2_wd;
+  logic bank1_info0_page_cfg_2_erase_en_2_we;
+  logic bank1_info0_page_cfg_2_scramble_en_2_qs;
+  logic bank1_info0_page_cfg_2_scramble_en_2_wd;
+  logic bank1_info0_page_cfg_2_scramble_en_2_we;
+  logic bank1_info0_page_cfg_3_en_3_qs;
+  logic bank1_info0_page_cfg_3_en_3_wd;
+  logic bank1_info0_page_cfg_3_en_3_we;
+  logic bank1_info0_page_cfg_3_rd_en_3_qs;
+  logic bank1_info0_page_cfg_3_rd_en_3_wd;
+  logic bank1_info0_page_cfg_3_rd_en_3_we;
+  logic bank1_info0_page_cfg_3_prog_en_3_qs;
+  logic bank1_info0_page_cfg_3_prog_en_3_wd;
+  logic bank1_info0_page_cfg_3_prog_en_3_we;
+  logic bank1_info0_page_cfg_3_erase_en_3_qs;
+  logic bank1_info0_page_cfg_3_erase_en_3_wd;
+  logic bank1_info0_page_cfg_3_erase_en_3_we;
+  logic bank1_info0_page_cfg_3_scramble_en_3_qs;
+  logic bank1_info0_page_cfg_3_scramble_en_3_wd;
+  logic bank1_info0_page_cfg_3_scramble_en_3_we;
+  logic bank1_info1_regwen_0_qs;
+  logic bank1_info1_regwen_0_wd;
+  logic bank1_info1_regwen_0_we;
+  logic bank1_info1_regwen_1_qs;
+  logic bank1_info1_regwen_1_wd;
+  logic bank1_info1_regwen_1_we;
+  logic bank1_info1_regwen_2_qs;
+  logic bank1_info1_regwen_2_wd;
+  logic bank1_info1_regwen_2_we;
+  logic bank1_info1_regwen_3_qs;
+  logic bank1_info1_regwen_3_wd;
+  logic bank1_info1_regwen_3_we;
+  logic bank1_info1_page_cfg_0_en_0_qs;
+  logic bank1_info1_page_cfg_0_en_0_wd;
+  logic bank1_info1_page_cfg_0_en_0_we;
+  logic bank1_info1_page_cfg_0_rd_en_0_qs;
+  logic bank1_info1_page_cfg_0_rd_en_0_wd;
+  logic bank1_info1_page_cfg_0_rd_en_0_we;
+  logic bank1_info1_page_cfg_0_prog_en_0_qs;
+  logic bank1_info1_page_cfg_0_prog_en_0_wd;
+  logic bank1_info1_page_cfg_0_prog_en_0_we;
+  logic bank1_info1_page_cfg_0_erase_en_0_qs;
+  logic bank1_info1_page_cfg_0_erase_en_0_wd;
+  logic bank1_info1_page_cfg_0_erase_en_0_we;
+  logic bank1_info1_page_cfg_0_scramble_en_0_qs;
+  logic bank1_info1_page_cfg_0_scramble_en_0_wd;
+  logic bank1_info1_page_cfg_0_scramble_en_0_we;
+  logic bank1_info1_page_cfg_1_en_1_qs;
+  logic bank1_info1_page_cfg_1_en_1_wd;
+  logic bank1_info1_page_cfg_1_en_1_we;
+  logic bank1_info1_page_cfg_1_rd_en_1_qs;
+  logic bank1_info1_page_cfg_1_rd_en_1_wd;
+  logic bank1_info1_page_cfg_1_rd_en_1_we;
+  logic bank1_info1_page_cfg_1_prog_en_1_qs;
+  logic bank1_info1_page_cfg_1_prog_en_1_wd;
+  logic bank1_info1_page_cfg_1_prog_en_1_we;
+  logic bank1_info1_page_cfg_1_erase_en_1_qs;
+  logic bank1_info1_page_cfg_1_erase_en_1_wd;
+  logic bank1_info1_page_cfg_1_erase_en_1_we;
+  logic bank1_info1_page_cfg_1_scramble_en_1_qs;
+  logic bank1_info1_page_cfg_1_scramble_en_1_wd;
+  logic bank1_info1_page_cfg_1_scramble_en_1_we;
+  logic bank1_info1_page_cfg_2_en_2_qs;
+  logic bank1_info1_page_cfg_2_en_2_wd;
+  logic bank1_info1_page_cfg_2_en_2_we;
+  logic bank1_info1_page_cfg_2_rd_en_2_qs;
+  logic bank1_info1_page_cfg_2_rd_en_2_wd;
+  logic bank1_info1_page_cfg_2_rd_en_2_we;
+  logic bank1_info1_page_cfg_2_prog_en_2_qs;
+  logic bank1_info1_page_cfg_2_prog_en_2_wd;
+  logic bank1_info1_page_cfg_2_prog_en_2_we;
+  logic bank1_info1_page_cfg_2_erase_en_2_qs;
+  logic bank1_info1_page_cfg_2_erase_en_2_wd;
+  logic bank1_info1_page_cfg_2_erase_en_2_we;
+  logic bank1_info1_page_cfg_2_scramble_en_2_qs;
+  logic bank1_info1_page_cfg_2_scramble_en_2_wd;
+  logic bank1_info1_page_cfg_2_scramble_en_2_we;
+  logic bank1_info1_page_cfg_3_en_3_qs;
+  logic bank1_info1_page_cfg_3_en_3_wd;
+  logic bank1_info1_page_cfg_3_en_3_we;
+  logic bank1_info1_page_cfg_3_rd_en_3_qs;
+  logic bank1_info1_page_cfg_3_rd_en_3_wd;
+  logic bank1_info1_page_cfg_3_rd_en_3_we;
+  logic bank1_info1_page_cfg_3_prog_en_3_qs;
+  logic bank1_info1_page_cfg_3_prog_en_3_wd;
+  logic bank1_info1_page_cfg_3_prog_en_3_we;
+  logic bank1_info1_page_cfg_3_erase_en_3_qs;
+  logic bank1_info1_page_cfg_3_erase_en_3_wd;
+  logic bank1_info1_page_cfg_3_erase_en_3_we;
+  logic bank1_info1_page_cfg_3_scramble_en_3_qs;
+  logic bank1_info1_page_cfg_3_scramble_en_3_wd;
+  logic bank1_info1_page_cfg_3_scramble_en_3_we;
+  logic bank_cfg_regwen_qs;
+  logic bank_cfg_regwen_wd;
+  logic bank_cfg_regwen_we;
+  logic mp_bank_cfg_erase_en_0_qs;
+  logic mp_bank_cfg_erase_en_0_wd;
+  logic mp_bank_cfg_erase_en_0_we;
+  logic mp_bank_cfg_erase_en_1_qs;
+  logic mp_bank_cfg_erase_en_1_wd;
+  logic mp_bank_cfg_erase_en_1_we;
+  logic op_status_done_qs;
+  logic op_status_done_wd;
+  logic op_status_done_we;
+  logic op_status_err_qs;
+  logic op_status_err_wd;
+  logic op_status_err_we;
+  logic status_rd_full_qs;
+  logic status_rd_empty_qs;
+  logic status_prog_full_qs;
+  logic status_prog_empty_qs;
+  logic status_init_wip_qs;
+  logic [8:0] status_error_addr_qs;
+  logic phy_status_init_wip_qs;
+  logic phy_status_prog_normal_avail_qs;
+  logic phy_status_prog_repair_avail_qs;
+  logic [31:0] scratch_qs;
+  logic [31:0] scratch_wd;
+  logic scratch_we;
+  logic [4:0] fifo_lvl_prog_qs;
+  logic [4:0] fifo_lvl_prog_wd;
+  logic fifo_lvl_prog_we;
+  logic [4:0] fifo_lvl_rd_qs;
+  logic [4:0] fifo_lvl_rd_wd;
+  logic fifo_lvl_rd_we;
+  logic fifo_rst_qs;
+  logic fifo_rst_wd;
+  logic fifo_rst_we;
+
+  // Register instances
+  // R[intr_state]: V(False)
+
+  //   F[prog_empty]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W1C"),
+    .RESVAL  (1'h0)
+  ) u_intr_state_prog_empty (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (intr_state_prog_empty_we),
+    .wd     (intr_state_prog_empty_wd),
+
+    // from internal hardware
+    .de     (hw2reg.intr_state.prog_empty.de),
+    .d      (hw2reg.intr_state.prog_empty.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.intr_state.prog_empty.q ),
+
+    // to register interface (read)
+    .qs     (intr_state_prog_empty_qs)
+  );
+
+
+  //   F[prog_lvl]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W1C"),
+    .RESVAL  (1'h0)
+  ) u_intr_state_prog_lvl (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (intr_state_prog_lvl_we),
+    .wd     (intr_state_prog_lvl_wd),
+
+    // from internal hardware
+    .de     (hw2reg.intr_state.prog_lvl.de),
+    .d      (hw2reg.intr_state.prog_lvl.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.intr_state.prog_lvl.q ),
+
+    // to register interface (read)
+    .qs     (intr_state_prog_lvl_qs)
+  );
+
+
+  //   F[rd_full]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W1C"),
+    .RESVAL  (1'h0)
+  ) u_intr_state_rd_full (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (intr_state_rd_full_we),
+    .wd     (intr_state_rd_full_wd),
+
+    // from internal hardware
+    .de     (hw2reg.intr_state.rd_full.de),
+    .d      (hw2reg.intr_state.rd_full.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.intr_state.rd_full.q ),
+
+    // to register interface (read)
+    .qs     (intr_state_rd_full_qs)
+  );
+
+
+  //   F[rd_lvl]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W1C"),
+    .RESVAL  (1'h0)
+  ) u_intr_state_rd_lvl (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (intr_state_rd_lvl_we),
+    .wd     (intr_state_rd_lvl_wd),
+
+    // from internal hardware
+    .de     (hw2reg.intr_state.rd_lvl.de),
+    .d      (hw2reg.intr_state.rd_lvl.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.intr_state.rd_lvl.q ),
+
+    // to register interface (read)
+    .qs     (intr_state_rd_lvl_qs)
+  );
+
+
+  //   F[op_done]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W1C"),
+    .RESVAL  (1'h0)
+  ) u_intr_state_op_done (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (intr_state_op_done_we),
+    .wd     (intr_state_op_done_wd),
+
+    // from internal hardware
+    .de     (hw2reg.intr_state.op_done.de),
+    .d      (hw2reg.intr_state.op_done.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.intr_state.op_done.q ),
+
+    // to register interface (read)
+    .qs     (intr_state_op_done_qs)
+  );
+
+
+  //   F[op_error]: 5:5
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W1C"),
+    .RESVAL  (1'h0)
+  ) u_intr_state_op_error (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (intr_state_op_error_we),
+    .wd     (intr_state_op_error_wd),
+
+    // from internal hardware
+    .de     (hw2reg.intr_state.op_error.de),
+    .d      (hw2reg.intr_state.op_error.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.intr_state.op_error.q ),
+
+    // to register interface (read)
+    .qs     (intr_state_op_error_qs)
+  );
+
+
+  // R[intr_enable]: V(False)
+
+  //   F[prog_empty]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_intr_enable_prog_empty (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (intr_enable_prog_empty_we),
+    .wd     (intr_enable_prog_empty_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.intr_enable.prog_empty.q ),
+
+    // to register interface (read)
+    .qs     (intr_enable_prog_empty_qs)
+  );
+
+
+  //   F[prog_lvl]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_intr_enable_prog_lvl (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (intr_enable_prog_lvl_we),
+    .wd     (intr_enable_prog_lvl_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.intr_enable.prog_lvl.q ),
+
+    // to register interface (read)
+    .qs     (intr_enable_prog_lvl_qs)
+  );
+
+
+  //   F[rd_full]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_intr_enable_rd_full (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (intr_enable_rd_full_we),
+    .wd     (intr_enable_rd_full_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.intr_enable.rd_full.q ),
+
+    // to register interface (read)
+    .qs     (intr_enable_rd_full_qs)
+  );
+
+
+  //   F[rd_lvl]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_intr_enable_rd_lvl (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (intr_enable_rd_lvl_we),
+    .wd     (intr_enable_rd_lvl_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.intr_enable.rd_lvl.q ),
+
+    // to register interface (read)
+    .qs     (intr_enable_rd_lvl_qs)
+  );
+
+
+  //   F[op_done]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_intr_enable_op_done (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (intr_enable_op_done_we),
+    .wd     (intr_enable_op_done_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.intr_enable.op_done.q ),
+
+    // to register interface (read)
+    .qs     (intr_enable_op_done_qs)
+  );
+
+
+  //   F[op_error]: 5:5
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_intr_enable_op_error (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (intr_enable_op_error_we),
+    .wd     (intr_enable_op_error_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.intr_enable.op_error.q ),
+
+    // to register interface (read)
+    .qs     (intr_enable_op_error_qs)
+  );
+
+
+  // R[intr_test]: V(True)
+
+  //   F[prog_empty]: 0:0
+  prim_subreg_ext #(
+    .DW    (1)
+  ) u_intr_test_prog_empty (
+    .re     (1'b0),
+    .we     (intr_test_prog_empty_we),
+    .wd     (intr_test_prog_empty_wd),
+    .d      ('0),
+    .qre    (),
+    .qe     (reg2hw.intr_test.prog_empty.qe),
+    .q      (reg2hw.intr_test.prog_empty.q ),
+    .qs     ()
+  );
+
+
+  //   F[prog_lvl]: 1:1
+  prim_subreg_ext #(
+    .DW    (1)
+  ) u_intr_test_prog_lvl (
+    .re     (1'b0),
+    .we     (intr_test_prog_lvl_we),
+    .wd     (intr_test_prog_lvl_wd),
+    .d      ('0),
+    .qre    (),
+    .qe     (reg2hw.intr_test.prog_lvl.qe),
+    .q      (reg2hw.intr_test.prog_lvl.q ),
+    .qs     ()
+  );
+
+
+  //   F[rd_full]: 2:2
+  prim_subreg_ext #(
+    .DW    (1)
+  ) u_intr_test_rd_full (
+    .re     (1'b0),
+    .we     (intr_test_rd_full_we),
+    .wd     (intr_test_rd_full_wd),
+    .d      ('0),
+    .qre    (),
+    .qe     (reg2hw.intr_test.rd_full.qe),
+    .q      (reg2hw.intr_test.rd_full.q ),
+    .qs     ()
+  );
+
+
+  //   F[rd_lvl]: 3:3
+  prim_subreg_ext #(
+    .DW    (1)
+  ) u_intr_test_rd_lvl (
+    .re     (1'b0),
+    .we     (intr_test_rd_lvl_we),
+    .wd     (intr_test_rd_lvl_wd),
+    .d      ('0),
+    .qre    (),
+    .qe     (reg2hw.intr_test.rd_lvl.qe),
+    .q      (reg2hw.intr_test.rd_lvl.q ),
+    .qs     ()
+  );
+
+
+  //   F[op_done]: 4:4
+  prim_subreg_ext #(
+    .DW    (1)
+  ) u_intr_test_op_done (
+    .re     (1'b0),
+    .we     (intr_test_op_done_we),
+    .wd     (intr_test_op_done_wd),
+    .d      ('0),
+    .qre    (),
+    .qe     (reg2hw.intr_test.op_done.qe),
+    .q      (reg2hw.intr_test.op_done.q ),
+    .qs     ()
+  );
+
+
+  //   F[op_error]: 5:5
+  prim_subreg_ext #(
+    .DW    (1)
+  ) u_intr_test_op_error (
+    .re     (1'b0),
+    .we     (intr_test_op_error_we),
+    .wd     (intr_test_op_error_wd),
+    .d      ('0),
+    .qre    (),
+    .qe     (reg2hw.intr_test.op_error.qe),
+    .q      (reg2hw.intr_test.op_error.q ),
+    .qs     ()
+  );
+
+
+  // R[ctrl_regwen]: V(True)
+
+  prim_subreg_ext #(
+    .DW    (1)
+  ) u_ctrl_regwen (
+    .re     (ctrl_regwen_re),
+    .we     (1'b0),
+    .wd     ('0),
+    .d      (hw2reg.ctrl_regwen.d),
+    .qre    (),
+    .qe     (),
+    .q      (),
+    .qs     (ctrl_regwen_qs)
+  );
+
+
+  // R[control]: V(False)
+
+  //   F[start]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_control_start (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (control_start_we & ctrl_regwen_qs),
+    .wd     (control_start_wd),
+
+    // from internal hardware
+    .de     (hw2reg.control.start.de),
+    .d      (hw2reg.control.start.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.control.start.q ),
+
+    // to register interface (read)
+    .qs     (control_start_qs)
+  );
+
+
+  //   F[op]: 5:4
+  prim_subreg #(
+    .DW      (2),
+    .SWACCESS("RW"),
+    .RESVAL  (2'h0)
+  ) u_control_op (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (control_op_we & ctrl_regwen_qs),
+    .wd     (control_op_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.control.op.q ),
+
+    // to register interface (read)
+    .qs     (control_op_qs)
+  );
+
+
+  //   F[prog_sel]: 6:6
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_control_prog_sel (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (control_prog_sel_we & ctrl_regwen_qs),
+    .wd     (control_prog_sel_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.control.prog_sel.q ),
+
+    // to register interface (read)
+    .qs     (control_prog_sel_qs)
+  );
+
+
+  //   F[erase_sel]: 7:7
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_control_erase_sel (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (control_erase_sel_we & ctrl_regwen_qs),
+    .wd     (control_erase_sel_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.control.erase_sel.q ),
+
+    // to register interface (read)
+    .qs     (control_erase_sel_qs)
+  );
+
+
+  //   F[partition_sel]: 8:8
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_control_partition_sel (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (control_partition_sel_we & ctrl_regwen_qs),
+    .wd     (control_partition_sel_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.control.partition_sel.q ),
+
+    // to register interface (read)
+    .qs     (control_partition_sel_qs)
+  );
+
+
+  //   F[info_sel]: 9:9
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_control_info_sel (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (control_info_sel_we & ctrl_regwen_qs),
+    .wd     (control_info_sel_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.control.info_sel.q ),
+
+    // to register interface (read)
+    .qs     (control_info_sel_qs)
+  );
+
+
+  //   F[num]: 27:16
+  prim_subreg #(
+    .DW      (12),
+    .SWACCESS("RW"),
+    .RESVAL  (12'h0)
+  ) u_control_num (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (control_num_we & ctrl_regwen_qs),
+    .wd     (control_num_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.control.num.q ),
+
+    // to register interface (read)
+    .qs     (control_num_qs)
+  );
+
+
+  // R[addr]: V(False)
+
+  prim_subreg #(
+    .DW      (32),
+    .SWACCESS("RW"),
+    .RESVAL  (32'h0)
+  ) u_addr (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (addr_we),
+    .wd     (addr_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.addr.q ),
+
+    // to register interface (read)
+    .qs     (addr_qs)
+  );
+
+
+
+  // Subregister 0 of Multireg region_cfg_regwen
+  // R[region_cfg_regwen_0]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_region_cfg_regwen_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (region_cfg_regwen_0_we),
+    .wd     (region_cfg_regwen_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (region_cfg_regwen_0_qs)
+  );
+
+  // Subregister 1 of Multireg region_cfg_regwen
+  // R[region_cfg_regwen_1]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_region_cfg_regwen_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (region_cfg_regwen_1_we),
+    .wd     (region_cfg_regwen_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (region_cfg_regwen_1_qs)
+  );
+
+  // Subregister 2 of Multireg region_cfg_regwen
+  // R[region_cfg_regwen_2]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_region_cfg_regwen_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (region_cfg_regwen_2_we),
+    .wd     (region_cfg_regwen_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (region_cfg_regwen_2_qs)
+  );
+
+  // Subregister 3 of Multireg region_cfg_regwen
+  // R[region_cfg_regwen_3]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_region_cfg_regwen_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (region_cfg_regwen_3_we),
+    .wd     (region_cfg_regwen_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (region_cfg_regwen_3_qs)
+  );
+
+  // Subregister 4 of Multireg region_cfg_regwen
+  // R[region_cfg_regwen_4]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_region_cfg_regwen_4 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (region_cfg_regwen_4_we),
+    .wd     (region_cfg_regwen_4_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (region_cfg_regwen_4_qs)
+  );
+
+  // Subregister 5 of Multireg region_cfg_regwen
+  // R[region_cfg_regwen_5]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_region_cfg_regwen_5 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (region_cfg_regwen_5_we),
+    .wd     (region_cfg_regwen_5_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (region_cfg_regwen_5_qs)
+  );
+
+  // Subregister 6 of Multireg region_cfg_regwen
+  // R[region_cfg_regwen_6]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_region_cfg_regwen_6 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (region_cfg_regwen_6_we),
+    .wd     (region_cfg_regwen_6_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (region_cfg_regwen_6_qs)
+  );
+
+  // Subregister 7 of Multireg region_cfg_regwen
+  // R[region_cfg_regwen_7]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_region_cfg_regwen_7 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (region_cfg_regwen_7_we),
+    .wd     (region_cfg_regwen_7_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (region_cfg_regwen_7_qs)
+  );
+
+
+
+  // Subregister 0 of Multireg mp_region_cfg
+  // R[mp_region_cfg_0]: V(False)
+
+  // F[en_0]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_0_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_0_en_0_we & region_cfg_regwen_0_qs),
+    .wd     (mp_region_cfg_0_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[0].en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_0_en_0_qs)
+  );
+
+
+  // F[rd_en_0]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_0_rd_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_0_rd_en_0_we & region_cfg_regwen_0_qs),
+    .wd     (mp_region_cfg_0_rd_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[0].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_0_rd_en_0_qs)
+  );
+
+
+  // F[prog_en_0]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_0_prog_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_0_prog_en_0_we & region_cfg_regwen_0_qs),
+    .wd     (mp_region_cfg_0_prog_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[0].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_0_prog_en_0_qs)
+  );
+
+
+  // F[erase_en_0]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_0_erase_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_0_erase_en_0_we & region_cfg_regwen_0_qs),
+    .wd     (mp_region_cfg_0_erase_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[0].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_0_erase_en_0_qs)
+  );
+
+
+  // F[scramble_en_0]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_0_scramble_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_0_scramble_en_0_we & region_cfg_regwen_0_qs),
+    .wd     (mp_region_cfg_0_scramble_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[0].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_0_scramble_en_0_qs)
+  );
+
+
+  // F[base_0]: 16:8
+  prim_subreg #(
+    .DW      (9),
+    .SWACCESS("RW"),
+    .RESVAL  (9'h0)
+  ) u_mp_region_cfg_0_base_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_0_base_0_we & region_cfg_regwen_0_qs),
+    .wd     (mp_region_cfg_0_base_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[0].base.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_0_base_0_qs)
+  );
+
+
+  // F[size_0]: 29:20
+  prim_subreg #(
+    .DW      (10),
+    .SWACCESS("RW"),
+    .RESVAL  (10'h0)
+  ) u_mp_region_cfg_0_size_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_0_size_0_we & region_cfg_regwen_0_qs),
+    .wd     (mp_region_cfg_0_size_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[0].size.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_0_size_0_qs)
+  );
+
+
+  // Subregister 1 of Multireg mp_region_cfg
+  // R[mp_region_cfg_1]: V(False)
+
+  // F[en_1]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_1_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_1_en_1_we & region_cfg_regwen_1_qs),
+    .wd     (mp_region_cfg_1_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[1].en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_1_en_1_qs)
+  );
+
+
+  // F[rd_en_1]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_1_rd_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_1_rd_en_1_we & region_cfg_regwen_1_qs),
+    .wd     (mp_region_cfg_1_rd_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[1].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_1_rd_en_1_qs)
+  );
+
+
+  // F[prog_en_1]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_1_prog_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_1_prog_en_1_we & region_cfg_regwen_1_qs),
+    .wd     (mp_region_cfg_1_prog_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[1].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_1_prog_en_1_qs)
+  );
+
+
+  // F[erase_en_1]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_1_erase_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_1_erase_en_1_we & region_cfg_regwen_1_qs),
+    .wd     (mp_region_cfg_1_erase_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[1].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_1_erase_en_1_qs)
+  );
+
+
+  // F[scramble_en_1]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_1_scramble_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_1_scramble_en_1_we & region_cfg_regwen_1_qs),
+    .wd     (mp_region_cfg_1_scramble_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[1].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_1_scramble_en_1_qs)
+  );
+
+
+  // F[base_1]: 16:8
+  prim_subreg #(
+    .DW      (9),
+    .SWACCESS("RW"),
+    .RESVAL  (9'h0)
+  ) u_mp_region_cfg_1_base_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_1_base_1_we & region_cfg_regwen_1_qs),
+    .wd     (mp_region_cfg_1_base_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[1].base.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_1_base_1_qs)
+  );
+
+
+  // F[size_1]: 29:20
+  prim_subreg #(
+    .DW      (10),
+    .SWACCESS("RW"),
+    .RESVAL  (10'h0)
+  ) u_mp_region_cfg_1_size_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_1_size_1_we & region_cfg_regwen_1_qs),
+    .wd     (mp_region_cfg_1_size_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[1].size.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_1_size_1_qs)
+  );
+
+
+  // Subregister 2 of Multireg mp_region_cfg
+  // R[mp_region_cfg_2]: V(False)
+
+  // F[en_2]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_2_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_2_en_2_we & region_cfg_regwen_2_qs),
+    .wd     (mp_region_cfg_2_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[2].en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_2_en_2_qs)
+  );
+
+
+  // F[rd_en_2]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_2_rd_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_2_rd_en_2_we & region_cfg_regwen_2_qs),
+    .wd     (mp_region_cfg_2_rd_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[2].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_2_rd_en_2_qs)
+  );
+
+
+  // F[prog_en_2]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_2_prog_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_2_prog_en_2_we & region_cfg_regwen_2_qs),
+    .wd     (mp_region_cfg_2_prog_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[2].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_2_prog_en_2_qs)
+  );
+
+
+  // F[erase_en_2]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_2_erase_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_2_erase_en_2_we & region_cfg_regwen_2_qs),
+    .wd     (mp_region_cfg_2_erase_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[2].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_2_erase_en_2_qs)
+  );
+
+
+  // F[scramble_en_2]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_2_scramble_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_2_scramble_en_2_we & region_cfg_regwen_2_qs),
+    .wd     (mp_region_cfg_2_scramble_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[2].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_2_scramble_en_2_qs)
+  );
+
+
+  // F[base_2]: 16:8
+  prim_subreg #(
+    .DW      (9),
+    .SWACCESS("RW"),
+    .RESVAL  (9'h0)
+  ) u_mp_region_cfg_2_base_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_2_base_2_we & region_cfg_regwen_2_qs),
+    .wd     (mp_region_cfg_2_base_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[2].base.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_2_base_2_qs)
+  );
+
+
+  // F[size_2]: 29:20
+  prim_subreg #(
+    .DW      (10),
+    .SWACCESS("RW"),
+    .RESVAL  (10'h0)
+  ) u_mp_region_cfg_2_size_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_2_size_2_we & region_cfg_regwen_2_qs),
+    .wd     (mp_region_cfg_2_size_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[2].size.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_2_size_2_qs)
+  );
+
+
+  // Subregister 3 of Multireg mp_region_cfg
+  // R[mp_region_cfg_3]: V(False)
+
+  // F[en_3]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_3_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_3_en_3_we & region_cfg_regwen_3_qs),
+    .wd     (mp_region_cfg_3_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[3].en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_3_en_3_qs)
+  );
+
+
+  // F[rd_en_3]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_3_rd_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_3_rd_en_3_we & region_cfg_regwen_3_qs),
+    .wd     (mp_region_cfg_3_rd_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[3].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_3_rd_en_3_qs)
+  );
+
+
+  // F[prog_en_3]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_3_prog_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_3_prog_en_3_we & region_cfg_regwen_3_qs),
+    .wd     (mp_region_cfg_3_prog_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[3].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_3_prog_en_3_qs)
+  );
+
+
+  // F[erase_en_3]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_3_erase_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_3_erase_en_3_we & region_cfg_regwen_3_qs),
+    .wd     (mp_region_cfg_3_erase_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[3].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_3_erase_en_3_qs)
+  );
+
+
+  // F[scramble_en_3]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_3_scramble_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_3_scramble_en_3_we & region_cfg_regwen_3_qs),
+    .wd     (mp_region_cfg_3_scramble_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[3].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_3_scramble_en_3_qs)
+  );
+
+
+  // F[base_3]: 16:8
+  prim_subreg #(
+    .DW      (9),
+    .SWACCESS("RW"),
+    .RESVAL  (9'h0)
+  ) u_mp_region_cfg_3_base_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_3_base_3_we & region_cfg_regwen_3_qs),
+    .wd     (mp_region_cfg_3_base_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[3].base.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_3_base_3_qs)
+  );
+
+
+  // F[size_3]: 29:20
+  prim_subreg #(
+    .DW      (10),
+    .SWACCESS("RW"),
+    .RESVAL  (10'h0)
+  ) u_mp_region_cfg_3_size_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_3_size_3_we & region_cfg_regwen_3_qs),
+    .wd     (mp_region_cfg_3_size_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[3].size.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_3_size_3_qs)
+  );
+
+
+  // Subregister 4 of Multireg mp_region_cfg
+  // R[mp_region_cfg_4]: V(False)
+
+  // F[en_4]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_4_en_4 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_4_en_4_we & region_cfg_regwen_4_qs),
+    .wd     (mp_region_cfg_4_en_4_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[4].en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_4_en_4_qs)
+  );
+
+
+  // F[rd_en_4]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_4_rd_en_4 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_4_rd_en_4_we & region_cfg_regwen_4_qs),
+    .wd     (mp_region_cfg_4_rd_en_4_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[4].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_4_rd_en_4_qs)
+  );
+
+
+  // F[prog_en_4]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_4_prog_en_4 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_4_prog_en_4_we & region_cfg_regwen_4_qs),
+    .wd     (mp_region_cfg_4_prog_en_4_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[4].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_4_prog_en_4_qs)
+  );
+
+
+  // F[erase_en_4]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_4_erase_en_4 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_4_erase_en_4_we & region_cfg_regwen_4_qs),
+    .wd     (mp_region_cfg_4_erase_en_4_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[4].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_4_erase_en_4_qs)
+  );
+
+
+  // F[scramble_en_4]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_4_scramble_en_4 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_4_scramble_en_4_we & region_cfg_regwen_4_qs),
+    .wd     (mp_region_cfg_4_scramble_en_4_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[4].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_4_scramble_en_4_qs)
+  );
+
+
+  // F[base_4]: 16:8
+  prim_subreg #(
+    .DW      (9),
+    .SWACCESS("RW"),
+    .RESVAL  (9'h0)
+  ) u_mp_region_cfg_4_base_4 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_4_base_4_we & region_cfg_regwen_4_qs),
+    .wd     (mp_region_cfg_4_base_4_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[4].base.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_4_base_4_qs)
+  );
+
+
+  // F[size_4]: 29:20
+  prim_subreg #(
+    .DW      (10),
+    .SWACCESS("RW"),
+    .RESVAL  (10'h0)
+  ) u_mp_region_cfg_4_size_4 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_4_size_4_we & region_cfg_regwen_4_qs),
+    .wd     (mp_region_cfg_4_size_4_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[4].size.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_4_size_4_qs)
+  );
+
+
+  // Subregister 5 of Multireg mp_region_cfg
+  // R[mp_region_cfg_5]: V(False)
+
+  // F[en_5]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_5_en_5 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_5_en_5_we & region_cfg_regwen_5_qs),
+    .wd     (mp_region_cfg_5_en_5_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[5].en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_5_en_5_qs)
+  );
+
+
+  // F[rd_en_5]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_5_rd_en_5 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_5_rd_en_5_we & region_cfg_regwen_5_qs),
+    .wd     (mp_region_cfg_5_rd_en_5_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[5].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_5_rd_en_5_qs)
+  );
+
+
+  // F[prog_en_5]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_5_prog_en_5 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_5_prog_en_5_we & region_cfg_regwen_5_qs),
+    .wd     (mp_region_cfg_5_prog_en_5_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[5].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_5_prog_en_5_qs)
+  );
+
+
+  // F[erase_en_5]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_5_erase_en_5 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_5_erase_en_5_we & region_cfg_regwen_5_qs),
+    .wd     (mp_region_cfg_5_erase_en_5_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[5].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_5_erase_en_5_qs)
+  );
+
+
+  // F[scramble_en_5]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_5_scramble_en_5 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_5_scramble_en_5_we & region_cfg_regwen_5_qs),
+    .wd     (mp_region_cfg_5_scramble_en_5_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[5].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_5_scramble_en_5_qs)
+  );
+
+
+  // F[base_5]: 16:8
+  prim_subreg #(
+    .DW      (9),
+    .SWACCESS("RW"),
+    .RESVAL  (9'h0)
+  ) u_mp_region_cfg_5_base_5 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_5_base_5_we & region_cfg_regwen_5_qs),
+    .wd     (mp_region_cfg_5_base_5_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[5].base.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_5_base_5_qs)
+  );
+
+
+  // F[size_5]: 29:20
+  prim_subreg #(
+    .DW      (10),
+    .SWACCESS("RW"),
+    .RESVAL  (10'h0)
+  ) u_mp_region_cfg_5_size_5 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_5_size_5_we & region_cfg_regwen_5_qs),
+    .wd     (mp_region_cfg_5_size_5_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[5].size.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_5_size_5_qs)
+  );
+
+
+  // Subregister 6 of Multireg mp_region_cfg
+  // R[mp_region_cfg_6]: V(False)
+
+  // F[en_6]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_6_en_6 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_6_en_6_we & region_cfg_regwen_6_qs),
+    .wd     (mp_region_cfg_6_en_6_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[6].en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_6_en_6_qs)
+  );
+
+
+  // F[rd_en_6]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_6_rd_en_6 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_6_rd_en_6_we & region_cfg_regwen_6_qs),
+    .wd     (mp_region_cfg_6_rd_en_6_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[6].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_6_rd_en_6_qs)
+  );
+
+
+  // F[prog_en_6]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_6_prog_en_6 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_6_prog_en_6_we & region_cfg_regwen_6_qs),
+    .wd     (mp_region_cfg_6_prog_en_6_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[6].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_6_prog_en_6_qs)
+  );
+
+
+  // F[erase_en_6]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_6_erase_en_6 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_6_erase_en_6_we & region_cfg_regwen_6_qs),
+    .wd     (mp_region_cfg_6_erase_en_6_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[6].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_6_erase_en_6_qs)
+  );
+
+
+  // F[scramble_en_6]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_6_scramble_en_6 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_6_scramble_en_6_we & region_cfg_regwen_6_qs),
+    .wd     (mp_region_cfg_6_scramble_en_6_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[6].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_6_scramble_en_6_qs)
+  );
+
+
+  // F[base_6]: 16:8
+  prim_subreg #(
+    .DW      (9),
+    .SWACCESS("RW"),
+    .RESVAL  (9'h0)
+  ) u_mp_region_cfg_6_base_6 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_6_base_6_we & region_cfg_regwen_6_qs),
+    .wd     (mp_region_cfg_6_base_6_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[6].base.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_6_base_6_qs)
+  );
+
+
+  // F[size_6]: 29:20
+  prim_subreg #(
+    .DW      (10),
+    .SWACCESS("RW"),
+    .RESVAL  (10'h0)
+  ) u_mp_region_cfg_6_size_6 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_6_size_6_we & region_cfg_regwen_6_qs),
+    .wd     (mp_region_cfg_6_size_6_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[6].size.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_6_size_6_qs)
+  );
+
+
+  // Subregister 7 of Multireg mp_region_cfg
+  // R[mp_region_cfg_7]: V(False)
+
+  // F[en_7]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_7_en_7 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_7_en_7_we & region_cfg_regwen_7_qs),
+    .wd     (mp_region_cfg_7_en_7_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[7].en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_7_en_7_qs)
+  );
+
+
+  // F[rd_en_7]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_7_rd_en_7 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_7_rd_en_7_we & region_cfg_regwen_7_qs),
+    .wd     (mp_region_cfg_7_rd_en_7_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[7].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_7_rd_en_7_qs)
+  );
+
+
+  // F[prog_en_7]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_7_prog_en_7 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_7_prog_en_7_we & region_cfg_regwen_7_qs),
+    .wd     (mp_region_cfg_7_prog_en_7_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[7].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_7_prog_en_7_qs)
+  );
+
+
+  // F[erase_en_7]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_7_erase_en_7 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_7_erase_en_7_we & region_cfg_regwen_7_qs),
+    .wd     (mp_region_cfg_7_erase_en_7_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[7].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_7_erase_en_7_qs)
+  );
+
+
+  // F[scramble_en_7]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_region_cfg_7_scramble_en_7 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_7_scramble_en_7_we & region_cfg_regwen_7_qs),
+    .wd     (mp_region_cfg_7_scramble_en_7_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[7].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_7_scramble_en_7_qs)
+  );
+
+
+  // F[base_7]: 16:8
+  prim_subreg #(
+    .DW      (9),
+    .SWACCESS("RW"),
+    .RESVAL  (9'h0)
+  ) u_mp_region_cfg_7_base_7 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_7_base_7_we & region_cfg_regwen_7_qs),
+    .wd     (mp_region_cfg_7_base_7_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[7].base.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_7_base_7_qs)
+  );
+
+
+  // F[size_7]: 29:20
+  prim_subreg #(
+    .DW      (10),
+    .SWACCESS("RW"),
+    .RESVAL  (10'h0)
+  ) u_mp_region_cfg_7_size_7 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_region_cfg_7_size_7_we & region_cfg_regwen_7_qs),
+    .wd     (mp_region_cfg_7_size_7_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_region_cfg[7].size.q ),
+
+    // to register interface (read)
+    .qs     (mp_region_cfg_7_size_7_qs)
+  );
+
+
+
+  // R[default_region]: V(False)
+
+  //   F[rd_en]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_default_region_rd_en (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (default_region_rd_en_we),
+    .wd     (default_region_rd_en_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.default_region.rd_en.q ),
+
+    // to register interface (read)
+    .qs     (default_region_rd_en_qs)
+  );
+
+
+  //   F[prog_en]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_default_region_prog_en (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (default_region_prog_en_we),
+    .wd     (default_region_prog_en_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.default_region.prog_en.q ),
+
+    // to register interface (read)
+    .qs     (default_region_prog_en_qs)
+  );
+
+
+  //   F[erase_en]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_default_region_erase_en (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (default_region_erase_en_we),
+    .wd     (default_region_erase_en_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.default_region.erase_en.q ),
+
+    // to register interface (read)
+    .qs     (default_region_erase_en_qs)
+  );
+
+
+  //   F[scramble_en]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_default_region_scramble_en (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (default_region_scramble_en_we),
+    .wd     (default_region_scramble_en_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.default_region.scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (default_region_scramble_en_qs)
+  );
+
+
+
+  // Subregister 0 of Multireg bank0_info0_regwen
+  // R[bank0_info0_regwen_0]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank0_info0_regwen_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank0_info0_regwen_0_we),
+    .wd     (bank0_info0_regwen_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank0_info0_regwen_0_qs)
+  );
+
+  // Subregister 1 of Multireg bank0_info0_regwen
+  // R[bank0_info0_regwen_1]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank0_info0_regwen_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank0_info0_regwen_1_we),
+    .wd     (bank0_info0_regwen_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank0_info0_regwen_1_qs)
+  );
+
+  // Subregister 2 of Multireg bank0_info0_regwen
+  // R[bank0_info0_regwen_2]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank0_info0_regwen_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank0_info0_regwen_2_we),
+    .wd     (bank0_info0_regwen_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank0_info0_regwen_2_qs)
+  );
+
+  // Subregister 3 of Multireg bank0_info0_regwen
+  // R[bank0_info0_regwen_3]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank0_info0_regwen_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank0_info0_regwen_3_we),
+    .wd     (bank0_info0_regwen_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank0_info0_regwen_3_qs)
+  );
+
+
+
+  // Subregister 0 of Multireg bank0_info0_page_cfg
+  // R[bank0_info0_page_cfg_0]: V(False)
+
+  // F[en_0]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_0_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_0_en_0_we & bank0_info0_regwen_0_qs),
+    .wd     (bank0_info0_page_cfg_0_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[0].en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_0_en_0_qs)
+  );
+
+
+  // F[rd_en_0]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_0_rd_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_0_rd_en_0_we & bank0_info0_regwen_0_qs),
+    .wd     (bank0_info0_page_cfg_0_rd_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[0].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_0_rd_en_0_qs)
+  );
+
+
+  // F[prog_en_0]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_0_prog_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_0_prog_en_0_we & bank0_info0_regwen_0_qs),
+    .wd     (bank0_info0_page_cfg_0_prog_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[0].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_0_prog_en_0_qs)
+  );
+
+
+  // F[erase_en_0]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_0_erase_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_0_erase_en_0_we & bank0_info0_regwen_0_qs),
+    .wd     (bank0_info0_page_cfg_0_erase_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[0].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_0_erase_en_0_qs)
+  );
+
+
+  // F[scramble_en_0]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_0_scramble_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_0_scramble_en_0_we & bank0_info0_regwen_0_qs),
+    .wd     (bank0_info0_page_cfg_0_scramble_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[0].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_0_scramble_en_0_qs)
+  );
+
+
+  // Subregister 1 of Multireg bank0_info0_page_cfg
+  // R[bank0_info0_page_cfg_1]: V(False)
+
+  // F[en_1]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_1_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_1_en_1_we & bank0_info0_regwen_1_qs),
+    .wd     (bank0_info0_page_cfg_1_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[1].en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_1_en_1_qs)
+  );
+
+
+  // F[rd_en_1]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_1_rd_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_1_rd_en_1_we & bank0_info0_regwen_1_qs),
+    .wd     (bank0_info0_page_cfg_1_rd_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[1].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_1_rd_en_1_qs)
+  );
+
+
+  // F[prog_en_1]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_1_prog_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_1_prog_en_1_we & bank0_info0_regwen_1_qs),
+    .wd     (bank0_info0_page_cfg_1_prog_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[1].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_1_prog_en_1_qs)
+  );
+
+
+  // F[erase_en_1]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_1_erase_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_1_erase_en_1_we & bank0_info0_regwen_1_qs),
+    .wd     (bank0_info0_page_cfg_1_erase_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[1].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_1_erase_en_1_qs)
+  );
+
+
+  // F[scramble_en_1]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_1_scramble_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_1_scramble_en_1_we & bank0_info0_regwen_1_qs),
+    .wd     (bank0_info0_page_cfg_1_scramble_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[1].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_1_scramble_en_1_qs)
+  );
+
+
+  // Subregister 2 of Multireg bank0_info0_page_cfg
+  // R[bank0_info0_page_cfg_2]: V(False)
+
+  // F[en_2]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_2_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_2_en_2_we & bank0_info0_regwen_2_qs),
+    .wd     (bank0_info0_page_cfg_2_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[2].en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_2_en_2_qs)
+  );
+
+
+  // F[rd_en_2]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_2_rd_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_2_rd_en_2_we & bank0_info0_regwen_2_qs),
+    .wd     (bank0_info0_page_cfg_2_rd_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[2].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_2_rd_en_2_qs)
+  );
+
+
+  // F[prog_en_2]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_2_prog_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_2_prog_en_2_we & bank0_info0_regwen_2_qs),
+    .wd     (bank0_info0_page_cfg_2_prog_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[2].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_2_prog_en_2_qs)
+  );
+
+
+  // F[erase_en_2]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_2_erase_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_2_erase_en_2_we & bank0_info0_regwen_2_qs),
+    .wd     (bank0_info0_page_cfg_2_erase_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[2].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_2_erase_en_2_qs)
+  );
+
+
+  // F[scramble_en_2]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_2_scramble_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_2_scramble_en_2_we & bank0_info0_regwen_2_qs),
+    .wd     (bank0_info0_page_cfg_2_scramble_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[2].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_2_scramble_en_2_qs)
+  );
+
+
+  // Subregister 3 of Multireg bank0_info0_page_cfg
+  // R[bank0_info0_page_cfg_3]: V(False)
+
+  // F[en_3]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_3_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_3_en_3_we & bank0_info0_regwen_3_qs),
+    .wd     (bank0_info0_page_cfg_3_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[3].en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_3_en_3_qs)
+  );
+
+
+  // F[rd_en_3]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_3_rd_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_3_rd_en_3_we & bank0_info0_regwen_3_qs),
+    .wd     (bank0_info0_page_cfg_3_rd_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[3].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_3_rd_en_3_qs)
+  );
+
+
+  // F[prog_en_3]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_3_prog_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_3_prog_en_3_we & bank0_info0_regwen_3_qs),
+    .wd     (bank0_info0_page_cfg_3_prog_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[3].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_3_prog_en_3_qs)
+  );
+
+
+  // F[erase_en_3]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_3_erase_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_3_erase_en_3_we & bank0_info0_regwen_3_qs),
+    .wd     (bank0_info0_page_cfg_3_erase_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[3].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_3_erase_en_3_qs)
+  );
+
+
+  // F[scramble_en_3]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info0_page_cfg_3_scramble_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info0_page_cfg_3_scramble_en_3_we & bank0_info0_regwen_3_qs),
+    .wd     (bank0_info0_page_cfg_3_scramble_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info0_page_cfg[3].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info0_page_cfg_3_scramble_en_3_qs)
+  );
+
+
+
+
+  // Subregister 0 of Multireg bank0_info1_regwen
+  // R[bank0_info1_regwen_0]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank0_info1_regwen_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank0_info1_regwen_0_we),
+    .wd     (bank0_info1_regwen_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank0_info1_regwen_0_qs)
+  );
+
+  // Subregister 1 of Multireg bank0_info1_regwen
+  // R[bank0_info1_regwen_1]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank0_info1_regwen_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank0_info1_regwen_1_we),
+    .wd     (bank0_info1_regwen_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank0_info1_regwen_1_qs)
+  );
+
+  // Subregister 2 of Multireg bank0_info1_regwen
+  // R[bank0_info1_regwen_2]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank0_info1_regwen_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank0_info1_regwen_2_we),
+    .wd     (bank0_info1_regwen_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank0_info1_regwen_2_qs)
+  );
+
+  // Subregister 3 of Multireg bank0_info1_regwen
+  // R[bank0_info1_regwen_3]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank0_info1_regwen_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank0_info1_regwen_3_we),
+    .wd     (bank0_info1_regwen_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank0_info1_regwen_3_qs)
+  );
+
+
+
+  // Subregister 0 of Multireg bank0_info1_page_cfg
+  // R[bank0_info1_page_cfg_0]: V(False)
+
+  // F[en_0]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_0_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_0_en_0_we & bank0_info1_regwen_0_qs),
+    .wd     (bank0_info1_page_cfg_0_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[0].en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_0_en_0_qs)
+  );
+
+
+  // F[rd_en_0]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_0_rd_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_0_rd_en_0_we & bank0_info1_regwen_0_qs),
+    .wd     (bank0_info1_page_cfg_0_rd_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[0].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_0_rd_en_0_qs)
+  );
+
+
+  // F[prog_en_0]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_0_prog_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_0_prog_en_0_we & bank0_info1_regwen_0_qs),
+    .wd     (bank0_info1_page_cfg_0_prog_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[0].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_0_prog_en_0_qs)
+  );
+
+
+  // F[erase_en_0]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_0_erase_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_0_erase_en_0_we & bank0_info1_regwen_0_qs),
+    .wd     (bank0_info1_page_cfg_0_erase_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[0].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_0_erase_en_0_qs)
+  );
+
+
+  // F[scramble_en_0]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_0_scramble_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_0_scramble_en_0_we & bank0_info1_regwen_0_qs),
+    .wd     (bank0_info1_page_cfg_0_scramble_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[0].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_0_scramble_en_0_qs)
+  );
+
+
+  // Subregister 1 of Multireg bank0_info1_page_cfg
+  // R[bank0_info1_page_cfg_1]: V(False)
+
+  // F[en_1]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_1_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_1_en_1_we & bank0_info1_regwen_1_qs),
+    .wd     (bank0_info1_page_cfg_1_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[1].en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_1_en_1_qs)
+  );
+
+
+  // F[rd_en_1]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_1_rd_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_1_rd_en_1_we & bank0_info1_regwen_1_qs),
+    .wd     (bank0_info1_page_cfg_1_rd_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[1].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_1_rd_en_1_qs)
+  );
+
+
+  // F[prog_en_1]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_1_prog_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_1_prog_en_1_we & bank0_info1_regwen_1_qs),
+    .wd     (bank0_info1_page_cfg_1_prog_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[1].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_1_prog_en_1_qs)
+  );
+
+
+  // F[erase_en_1]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_1_erase_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_1_erase_en_1_we & bank0_info1_regwen_1_qs),
+    .wd     (bank0_info1_page_cfg_1_erase_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[1].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_1_erase_en_1_qs)
+  );
+
+
+  // F[scramble_en_1]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_1_scramble_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_1_scramble_en_1_we & bank0_info1_regwen_1_qs),
+    .wd     (bank0_info1_page_cfg_1_scramble_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[1].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_1_scramble_en_1_qs)
+  );
+
+
+  // Subregister 2 of Multireg bank0_info1_page_cfg
+  // R[bank0_info1_page_cfg_2]: V(False)
+
+  // F[en_2]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_2_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_2_en_2_we & bank0_info1_regwen_2_qs),
+    .wd     (bank0_info1_page_cfg_2_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[2].en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_2_en_2_qs)
+  );
+
+
+  // F[rd_en_2]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_2_rd_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_2_rd_en_2_we & bank0_info1_regwen_2_qs),
+    .wd     (bank0_info1_page_cfg_2_rd_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[2].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_2_rd_en_2_qs)
+  );
+
+
+  // F[prog_en_2]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_2_prog_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_2_prog_en_2_we & bank0_info1_regwen_2_qs),
+    .wd     (bank0_info1_page_cfg_2_prog_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[2].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_2_prog_en_2_qs)
+  );
+
+
+  // F[erase_en_2]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_2_erase_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_2_erase_en_2_we & bank0_info1_regwen_2_qs),
+    .wd     (bank0_info1_page_cfg_2_erase_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[2].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_2_erase_en_2_qs)
+  );
+
+
+  // F[scramble_en_2]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_2_scramble_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_2_scramble_en_2_we & bank0_info1_regwen_2_qs),
+    .wd     (bank0_info1_page_cfg_2_scramble_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[2].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_2_scramble_en_2_qs)
+  );
+
+
+  // Subregister 3 of Multireg bank0_info1_page_cfg
+  // R[bank0_info1_page_cfg_3]: V(False)
+
+  // F[en_3]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_3_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_3_en_3_we & bank0_info1_regwen_3_qs),
+    .wd     (bank0_info1_page_cfg_3_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[3].en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_3_en_3_qs)
+  );
+
+
+  // F[rd_en_3]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_3_rd_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_3_rd_en_3_we & bank0_info1_regwen_3_qs),
+    .wd     (bank0_info1_page_cfg_3_rd_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[3].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_3_rd_en_3_qs)
+  );
+
+
+  // F[prog_en_3]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_3_prog_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_3_prog_en_3_we & bank0_info1_regwen_3_qs),
+    .wd     (bank0_info1_page_cfg_3_prog_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[3].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_3_prog_en_3_qs)
+  );
+
+
+  // F[erase_en_3]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_3_erase_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_3_erase_en_3_we & bank0_info1_regwen_3_qs),
+    .wd     (bank0_info1_page_cfg_3_erase_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[3].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_3_erase_en_3_qs)
+  );
+
+
+  // F[scramble_en_3]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank0_info1_page_cfg_3_scramble_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank0_info1_page_cfg_3_scramble_en_3_we & bank0_info1_regwen_3_qs),
+    .wd     (bank0_info1_page_cfg_3_scramble_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank0_info1_page_cfg[3].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank0_info1_page_cfg_3_scramble_en_3_qs)
+  );
+
+
+
+
+  // Subregister 0 of Multireg bank1_info0_regwen
+  // R[bank1_info0_regwen_0]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank1_info0_regwen_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank1_info0_regwen_0_we),
+    .wd     (bank1_info0_regwen_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank1_info0_regwen_0_qs)
+  );
+
+  // Subregister 1 of Multireg bank1_info0_regwen
+  // R[bank1_info0_regwen_1]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank1_info0_regwen_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank1_info0_regwen_1_we),
+    .wd     (bank1_info0_regwen_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank1_info0_regwen_1_qs)
+  );
+
+  // Subregister 2 of Multireg bank1_info0_regwen
+  // R[bank1_info0_regwen_2]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank1_info0_regwen_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank1_info0_regwen_2_we),
+    .wd     (bank1_info0_regwen_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank1_info0_regwen_2_qs)
+  );
+
+  // Subregister 3 of Multireg bank1_info0_regwen
+  // R[bank1_info0_regwen_3]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank1_info0_regwen_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank1_info0_regwen_3_we),
+    .wd     (bank1_info0_regwen_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank1_info0_regwen_3_qs)
+  );
+
+
+
+  // Subregister 0 of Multireg bank1_info0_page_cfg
+  // R[bank1_info0_page_cfg_0]: V(False)
+
+  // F[en_0]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_0_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_0_en_0_we & bank1_info0_regwen_0_qs),
+    .wd     (bank1_info0_page_cfg_0_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[0].en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_0_en_0_qs)
+  );
+
+
+  // F[rd_en_0]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_0_rd_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_0_rd_en_0_we & bank1_info0_regwen_0_qs),
+    .wd     (bank1_info0_page_cfg_0_rd_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[0].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_0_rd_en_0_qs)
+  );
+
+
+  // F[prog_en_0]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_0_prog_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_0_prog_en_0_we & bank1_info0_regwen_0_qs),
+    .wd     (bank1_info0_page_cfg_0_prog_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[0].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_0_prog_en_0_qs)
+  );
+
+
+  // F[erase_en_0]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_0_erase_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_0_erase_en_0_we & bank1_info0_regwen_0_qs),
+    .wd     (bank1_info0_page_cfg_0_erase_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[0].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_0_erase_en_0_qs)
+  );
+
+
+  // F[scramble_en_0]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_0_scramble_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_0_scramble_en_0_we & bank1_info0_regwen_0_qs),
+    .wd     (bank1_info0_page_cfg_0_scramble_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[0].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_0_scramble_en_0_qs)
+  );
+
+
+  // Subregister 1 of Multireg bank1_info0_page_cfg
+  // R[bank1_info0_page_cfg_1]: V(False)
+
+  // F[en_1]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_1_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_1_en_1_we & bank1_info0_regwen_1_qs),
+    .wd     (bank1_info0_page_cfg_1_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[1].en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_1_en_1_qs)
+  );
+
+
+  // F[rd_en_1]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_1_rd_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_1_rd_en_1_we & bank1_info0_regwen_1_qs),
+    .wd     (bank1_info0_page_cfg_1_rd_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[1].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_1_rd_en_1_qs)
+  );
+
+
+  // F[prog_en_1]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_1_prog_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_1_prog_en_1_we & bank1_info0_regwen_1_qs),
+    .wd     (bank1_info0_page_cfg_1_prog_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[1].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_1_prog_en_1_qs)
+  );
+
+
+  // F[erase_en_1]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_1_erase_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_1_erase_en_1_we & bank1_info0_regwen_1_qs),
+    .wd     (bank1_info0_page_cfg_1_erase_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[1].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_1_erase_en_1_qs)
+  );
+
+
+  // F[scramble_en_1]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_1_scramble_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_1_scramble_en_1_we & bank1_info0_regwen_1_qs),
+    .wd     (bank1_info0_page_cfg_1_scramble_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[1].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_1_scramble_en_1_qs)
+  );
+
+
+  // Subregister 2 of Multireg bank1_info0_page_cfg
+  // R[bank1_info0_page_cfg_2]: V(False)
+
+  // F[en_2]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_2_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_2_en_2_we & bank1_info0_regwen_2_qs),
+    .wd     (bank1_info0_page_cfg_2_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[2].en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_2_en_2_qs)
+  );
+
+
+  // F[rd_en_2]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_2_rd_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_2_rd_en_2_we & bank1_info0_regwen_2_qs),
+    .wd     (bank1_info0_page_cfg_2_rd_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[2].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_2_rd_en_2_qs)
+  );
+
+
+  // F[prog_en_2]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_2_prog_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_2_prog_en_2_we & bank1_info0_regwen_2_qs),
+    .wd     (bank1_info0_page_cfg_2_prog_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[2].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_2_prog_en_2_qs)
+  );
+
+
+  // F[erase_en_2]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_2_erase_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_2_erase_en_2_we & bank1_info0_regwen_2_qs),
+    .wd     (bank1_info0_page_cfg_2_erase_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[2].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_2_erase_en_2_qs)
+  );
+
+
+  // F[scramble_en_2]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_2_scramble_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_2_scramble_en_2_we & bank1_info0_regwen_2_qs),
+    .wd     (bank1_info0_page_cfg_2_scramble_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[2].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_2_scramble_en_2_qs)
+  );
+
+
+  // Subregister 3 of Multireg bank1_info0_page_cfg
+  // R[bank1_info0_page_cfg_3]: V(False)
+
+  // F[en_3]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_3_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_3_en_3_we & bank1_info0_regwen_3_qs),
+    .wd     (bank1_info0_page_cfg_3_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[3].en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_3_en_3_qs)
+  );
+
+
+  // F[rd_en_3]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_3_rd_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_3_rd_en_3_we & bank1_info0_regwen_3_qs),
+    .wd     (bank1_info0_page_cfg_3_rd_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[3].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_3_rd_en_3_qs)
+  );
+
+
+  // F[prog_en_3]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_3_prog_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_3_prog_en_3_we & bank1_info0_regwen_3_qs),
+    .wd     (bank1_info0_page_cfg_3_prog_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[3].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_3_prog_en_3_qs)
+  );
+
+
+  // F[erase_en_3]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_3_erase_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_3_erase_en_3_we & bank1_info0_regwen_3_qs),
+    .wd     (bank1_info0_page_cfg_3_erase_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[3].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_3_erase_en_3_qs)
+  );
+
+
+  // F[scramble_en_3]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info0_page_cfg_3_scramble_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info0_page_cfg_3_scramble_en_3_we & bank1_info0_regwen_3_qs),
+    .wd     (bank1_info0_page_cfg_3_scramble_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info0_page_cfg[3].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info0_page_cfg_3_scramble_en_3_qs)
+  );
+
+
+
+
+  // Subregister 0 of Multireg bank1_info1_regwen
+  // R[bank1_info1_regwen_0]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank1_info1_regwen_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank1_info1_regwen_0_we),
+    .wd     (bank1_info1_regwen_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank1_info1_regwen_0_qs)
+  );
+
+  // Subregister 1 of Multireg bank1_info1_regwen
+  // R[bank1_info1_regwen_1]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank1_info1_regwen_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank1_info1_regwen_1_we),
+    .wd     (bank1_info1_regwen_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank1_info1_regwen_1_qs)
+  );
+
+  // Subregister 2 of Multireg bank1_info1_regwen
+  // R[bank1_info1_regwen_2]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank1_info1_regwen_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank1_info1_regwen_2_we),
+    .wd     (bank1_info1_regwen_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank1_info1_regwen_2_qs)
+  );
+
+  // Subregister 3 of Multireg bank1_info1_regwen
+  // R[bank1_info1_regwen_3]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank1_info1_regwen_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank1_info1_regwen_3_we),
+    .wd     (bank1_info1_regwen_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank1_info1_regwen_3_qs)
+  );
+
+
+
+  // Subregister 0 of Multireg bank1_info1_page_cfg
+  // R[bank1_info1_page_cfg_0]: V(False)
+
+  // F[en_0]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_0_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_0_en_0_we & bank1_info1_regwen_0_qs),
+    .wd     (bank1_info1_page_cfg_0_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[0].en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_0_en_0_qs)
+  );
+
+
+  // F[rd_en_0]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_0_rd_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_0_rd_en_0_we & bank1_info1_regwen_0_qs),
+    .wd     (bank1_info1_page_cfg_0_rd_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[0].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_0_rd_en_0_qs)
+  );
+
+
+  // F[prog_en_0]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_0_prog_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_0_prog_en_0_we & bank1_info1_regwen_0_qs),
+    .wd     (bank1_info1_page_cfg_0_prog_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[0].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_0_prog_en_0_qs)
+  );
+
+
+  // F[erase_en_0]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_0_erase_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_0_erase_en_0_we & bank1_info1_regwen_0_qs),
+    .wd     (bank1_info1_page_cfg_0_erase_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[0].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_0_erase_en_0_qs)
+  );
+
+
+  // F[scramble_en_0]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_0_scramble_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_0_scramble_en_0_we & bank1_info1_regwen_0_qs),
+    .wd     (bank1_info1_page_cfg_0_scramble_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[0].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_0_scramble_en_0_qs)
+  );
+
+
+  // Subregister 1 of Multireg bank1_info1_page_cfg
+  // R[bank1_info1_page_cfg_1]: V(False)
+
+  // F[en_1]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_1_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_1_en_1_we & bank1_info1_regwen_1_qs),
+    .wd     (bank1_info1_page_cfg_1_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[1].en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_1_en_1_qs)
+  );
+
+
+  // F[rd_en_1]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_1_rd_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_1_rd_en_1_we & bank1_info1_regwen_1_qs),
+    .wd     (bank1_info1_page_cfg_1_rd_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[1].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_1_rd_en_1_qs)
+  );
+
+
+  // F[prog_en_1]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_1_prog_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_1_prog_en_1_we & bank1_info1_regwen_1_qs),
+    .wd     (bank1_info1_page_cfg_1_prog_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[1].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_1_prog_en_1_qs)
+  );
+
+
+  // F[erase_en_1]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_1_erase_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_1_erase_en_1_we & bank1_info1_regwen_1_qs),
+    .wd     (bank1_info1_page_cfg_1_erase_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[1].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_1_erase_en_1_qs)
+  );
+
+
+  // F[scramble_en_1]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_1_scramble_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_1_scramble_en_1_we & bank1_info1_regwen_1_qs),
+    .wd     (bank1_info1_page_cfg_1_scramble_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[1].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_1_scramble_en_1_qs)
+  );
+
+
+  // Subregister 2 of Multireg bank1_info1_page_cfg
+  // R[bank1_info1_page_cfg_2]: V(False)
+
+  // F[en_2]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_2_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_2_en_2_we & bank1_info1_regwen_2_qs),
+    .wd     (bank1_info1_page_cfg_2_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[2].en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_2_en_2_qs)
+  );
+
+
+  // F[rd_en_2]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_2_rd_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_2_rd_en_2_we & bank1_info1_regwen_2_qs),
+    .wd     (bank1_info1_page_cfg_2_rd_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[2].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_2_rd_en_2_qs)
+  );
+
+
+  // F[prog_en_2]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_2_prog_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_2_prog_en_2_we & bank1_info1_regwen_2_qs),
+    .wd     (bank1_info1_page_cfg_2_prog_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[2].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_2_prog_en_2_qs)
+  );
+
+
+  // F[erase_en_2]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_2_erase_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_2_erase_en_2_we & bank1_info1_regwen_2_qs),
+    .wd     (bank1_info1_page_cfg_2_erase_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[2].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_2_erase_en_2_qs)
+  );
+
+
+  // F[scramble_en_2]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_2_scramble_en_2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_2_scramble_en_2_we & bank1_info1_regwen_2_qs),
+    .wd     (bank1_info1_page_cfg_2_scramble_en_2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[2].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_2_scramble_en_2_qs)
+  );
+
+
+  // Subregister 3 of Multireg bank1_info1_page_cfg
+  // R[bank1_info1_page_cfg_3]: V(False)
+
+  // F[en_3]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_3_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_3_en_3_we & bank1_info1_regwen_3_qs),
+    .wd     (bank1_info1_page_cfg_3_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[3].en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_3_en_3_qs)
+  );
+
+
+  // F[rd_en_3]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_3_rd_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_3_rd_en_3_we & bank1_info1_regwen_3_qs),
+    .wd     (bank1_info1_page_cfg_3_rd_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[3].rd_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_3_rd_en_3_qs)
+  );
+
+
+  // F[prog_en_3]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_3_prog_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_3_prog_en_3_we & bank1_info1_regwen_3_qs),
+    .wd     (bank1_info1_page_cfg_3_prog_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[3].prog_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_3_prog_en_3_qs)
+  );
+
+
+  // F[erase_en_3]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_3_erase_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_3_erase_en_3_we & bank1_info1_regwen_3_qs),
+    .wd     (bank1_info1_page_cfg_3_erase_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[3].erase_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_3_erase_en_3_qs)
+  );
+
+
+  // F[scramble_en_3]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_bank1_info1_page_cfg_3_scramble_en_3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (bank1_info1_page_cfg_3_scramble_en_3_we & bank1_info1_regwen_3_qs),
+    .wd     (bank1_info1_page_cfg_3_scramble_en_3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.bank1_info1_page_cfg[3].scramble_en.q ),
+
+    // to register interface (read)
+    .qs     (bank1_info1_page_cfg_3_scramble_en_3_qs)
+  );
+
+
+
+  // R[bank_cfg_regwen]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W0C"),
+    .RESVAL  (1'h1)
+  ) u_bank_cfg_regwen (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (bank_cfg_regwen_we),
+    .wd     (bank_cfg_regwen_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (bank_cfg_regwen_qs)
+  );
+
+
+
+  // Subregister 0 of Multireg mp_bank_cfg
+  // R[mp_bank_cfg]: V(False)
+
+  // F[erase_en_0]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_bank_cfg_erase_en_0 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_bank_cfg_erase_en_0_we & bank_cfg_regwen_qs),
+    .wd     (mp_bank_cfg_erase_en_0_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_bank_cfg[0].q ),
+
+    // to register interface (read)
+    .qs     (mp_bank_cfg_erase_en_0_qs)
+  );
+
+
+  // F[erase_en_1]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_mp_bank_cfg_erase_en_1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (mp_bank_cfg_erase_en_1_we & bank_cfg_regwen_qs),
+    .wd     (mp_bank_cfg_erase_en_1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.mp_bank_cfg[1].q ),
+
+    // to register interface (read)
+    .qs     (mp_bank_cfg_erase_en_1_qs)
+  );
+
+
+
+  // R[op_status]: V(False)
+
+  //   F[done]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_op_status_done (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (op_status_done_we),
+    .wd     (op_status_done_wd),
+
+    // from internal hardware
+    .de     (hw2reg.op_status.done.de),
+    .d      (hw2reg.op_status.done.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (op_status_done_qs)
+  );
+
+
+  //   F[err]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_op_status_err (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (op_status_err_we),
+    .wd     (op_status_err_wd),
+
+    // from internal hardware
+    .de     (hw2reg.op_status.err.de),
+    .d      (hw2reg.op_status.err.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (op_status_err_qs)
+  );
+
+
+  // R[status]: V(False)
+
+  //   F[rd_full]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RO"),
+    .RESVAL  (1'h0)
+  ) u_status_rd_full (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    .we     (1'b0),
+    .wd     ('0  ),
+
+    // from internal hardware
+    .de     (hw2reg.status.rd_full.de),
+    .d      (hw2reg.status.rd_full.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (status_rd_full_qs)
+  );
+
+
+  //   F[rd_empty]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RO"),
+    .RESVAL  (1'h1)
+  ) u_status_rd_empty (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    .we     (1'b0),
+    .wd     ('0  ),
+
+    // from internal hardware
+    .de     (hw2reg.status.rd_empty.de),
+    .d      (hw2reg.status.rd_empty.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (status_rd_empty_qs)
+  );
+
+
+  //   F[prog_full]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RO"),
+    .RESVAL  (1'h0)
+  ) u_status_prog_full (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    .we     (1'b0),
+    .wd     ('0  ),
+
+    // from internal hardware
+    .de     (hw2reg.status.prog_full.de),
+    .d      (hw2reg.status.prog_full.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (status_prog_full_qs)
+  );
+
+
+  //   F[prog_empty]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RO"),
+    .RESVAL  (1'h1)
+  ) u_status_prog_empty (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    .we     (1'b0),
+    .wd     ('0  ),
+
+    // from internal hardware
+    .de     (hw2reg.status.prog_empty.de),
+    .d      (hw2reg.status.prog_empty.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (status_prog_empty_qs)
+  );
+
+
+  //   F[init_wip]: 4:4
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RO"),
+    .RESVAL  (1'h0)
+  ) u_status_init_wip (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    .we     (1'b0),
+    .wd     ('0  ),
+
+    // from internal hardware
+    .de     (hw2reg.status.init_wip.de),
+    .d      (hw2reg.status.init_wip.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (status_init_wip_qs)
+  );
+
+
+  //   F[error_addr]: 16:8
+  prim_subreg #(
+    .DW      (9),
+    .SWACCESS("RO"),
+    .RESVAL  (9'h0)
+  ) u_status_error_addr (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    .we     (1'b0),
+    .wd     ('0  ),
+
+    // from internal hardware
+    .de     (hw2reg.status.error_addr.de),
+    .d      (hw2reg.status.error_addr.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (status_error_addr_qs)
+  );
+
+
+  // R[phy_status]: V(False)
+
+  //   F[init_wip]: 0:0
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RO"),
+    .RESVAL  (1'h0)
+  ) u_phy_status_init_wip (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    .we     (1'b0),
+    .wd     ('0  ),
+
+    // from internal hardware
+    .de     (hw2reg.phy_status.init_wip.de),
+    .d      (hw2reg.phy_status.init_wip.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (phy_status_init_wip_qs)
+  );
+
+
+  //   F[prog_normal_avail]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RO"),
+    .RESVAL  (1'h1)
+  ) u_phy_status_prog_normal_avail (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    .we     (1'b0),
+    .wd     ('0  ),
+
+    // from internal hardware
+    .de     (hw2reg.phy_status.prog_normal_avail.de),
+    .d      (hw2reg.phy_status.prog_normal_avail.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (phy_status_prog_normal_avail_qs)
+  );
+
+
+  //   F[prog_repair_avail]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RO"),
+    .RESVAL  (1'h1)
+  ) u_phy_status_prog_repair_avail (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    .we     (1'b0),
+    .wd     ('0  ),
+
+    // from internal hardware
+    .de     (hw2reg.phy_status.prog_repair_avail.de),
+    .d      (hw2reg.phy_status.prog_repair_avail.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (phy_status_prog_repair_avail_qs)
+  );
+
+
+  // R[scratch]: V(False)
+
+  prim_subreg #(
+    .DW      (32),
+    .SWACCESS("RW"),
+    .RESVAL  (32'h0)
+  ) u_scratch (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (scratch_we),
+    .wd     (scratch_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.scratch.q ),
+
+    // to register interface (read)
+    .qs     (scratch_qs)
+  );
+
+
+  // R[fifo_lvl]: V(False)
+
+  //   F[prog]: 4:0
+  prim_subreg #(
+    .DW      (5),
+    .SWACCESS("RW"),
+    .RESVAL  (5'hf)
+  ) u_fifo_lvl_prog (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (fifo_lvl_prog_we),
+    .wd     (fifo_lvl_prog_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.fifo_lvl.prog.q ),
+
+    // to register interface (read)
+    .qs     (fifo_lvl_prog_qs)
+  );
+
+
+  //   F[rd]: 12:8
+  prim_subreg #(
+    .DW      (5),
+    .SWACCESS("RW"),
+    .RESVAL  (5'hf)
+  ) u_fifo_lvl_rd (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (fifo_lvl_rd_we),
+    .wd     (fifo_lvl_rd_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.fifo_lvl.rd.q ),
+
+    // to register interface (read)
+    .qs     (fifo_lvl_rd_qs)
+  );
+
+
+  // R[fifo_rst]: V(False)
+
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_fifo_rst (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (fifo_rst_we),
+    .wd     (fifo_rst_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.fifo_rst.q ),
+
+    // to register interface (read)
+    .qs     (fifo_rst_qs)
+  );
+
+
+
+
+  logic [62:0] addr_hit;
+  always_comb begin
+    addr_hit = '0;
+    addr_hit[ 0] = (reg_addr == FLASH_CTRL_INTR_STATE_OFFSET);
+    addr_hit[ 1] = (reg_addr == FLASH_CTRL_INTR_ENABLE_OFFSET);
+    addr_hit[ 2] = (reg_addr == FLASH_CTRL_INTR_TEST_OFFSET);
+    addr_hit[ 3] = (reg_addr == FLASH_CTRL_CTRL_REGWEN_OFFSET);
+    addr_hit[ 4] = (reg_addr == FLASH_CTRL_CONTROL_OFFSET);
+    addr_hit[ 5] = (reg_addr == FLASH_CTRL_ADDR_OFFSET);
+    addr_hit[ 6] = (reg_addr == FLASH_CTRL_REGION_CFG_REGWEN_0_OFFSET);
+    addr_hit[ 7] = (reg_addr == FLASH_CTRL_REGION_CFG_REGWEN_1_OFFSET);
+    addr_hit[ 8] = (reg_addr == FLASH_CTRL_REGION_CFG_REGWEN_2_OFFSET);
+    addr_hit[ 9] = (reg_addr == FLASH_CTRL_REGION_CFG_REGWEN_3_OFFSET);
+    addr_hit[10] = (reg_addr == FLASH_CTRL_REGION_CFG_REGWEN_4_OFFSET);
+    addr_hit[11] = (reg_addr == FLASH_CTRL_REGION_CFG_REGWEN_5_OFFSET);
+    addr_hit[12] = (reg_addr == FLASH_CTRL_REGION_CFG_REGWEN_6_OFFSET);
+    addr_hit[13] = (reg_addr == FLASH_CTRL_REGION_CFG_REGWEN_7_OFFSET);
+    addr_hit[14] = (reg_addr == FLASH_CTRL_MP_REGION_CFG_0_OFFSET);
+    addr_hit[15] = (reg_addr == FLASH_CTRL_MP_REGION_CFG_1_OFFSET);
+    addr_hit[16] = (reg_addr == FLASH_CTRL_MP_REGION_CFG_2_OFFSET);
+    addr_hit[17] = (reg_addr == FLASH_CTRL_MP_REGION_CFG_3_OFFSET);
+    addr_hit[18] = (reg_addr == FLASH_CTRL_MP_REGION_CFG_4_OFFSET);
+    addr_hit[19] = (reg_addr == FLASH_CTRL_MP_REGION_CFG_5_OFFSET);
+    addr_hit[20] = (reg_addr == FLASH_CTRL_MP_REGION_CFG_6_OFFSET);
+    addr_hit[21] = (reg_addr == FLASH_CTRL_MP_REGION_CFG_7_OFFSET);
+    addr_hit[22] = (reg_addr == FLASH_CTRL_DEFAULT_REGION_OFFSET);
+    addr_hit[23] = (reg_addr == FLASH_CTRL_BANK0_INFO0_REGWEN_0_OFFSET);
+    addr_hit[24] = (reg_addr == FLASH_CTRL_BANK0_INFO0_REGWEN_1_OFFSET);
+    addr_hit[25] = (reg_addr == FLASH_CTRL_BANK0_INFO0_REGWEN_2_OFFSET);
+    addr_hit[26] = (reg_addr == FLASH_CTRL_BANK0_INFO0_REGWEN_3_OFFSET);
+    addr_hit[27] = (reg_addr == FLASH_CTRL_BANK0_INFO0_PAGE_CFG_0_OFFSET);
+    addr_hit[28] = (reg_addr == FLASH_CTRL_BANK0_INFO0_PAGE_CFG_1_OFFSET);
+    addr_hit[29] = (reg_addr == FLASH_CTRL_BANK0_INFO0_PAGE_CFG_2_OFFSET);
+    addr_hit[30] = (reg_addr == FLASH_CTRL_BANK0_INFO0_PAGE_CFG_3_OFFSET);
+    addr_hit[31] = (reg_addr == FLASH_CTRL_BANK0_INFO1_REGWEN_0_OFFSET);
+    addr_hit[32] = (reg_addr == FLASH_CTRL_BANK0_INFO1_REGWEN_1_OFFSET);
+    addr_hit[33] = (reg_addr == FLASH_CTRL_BANK0_INFO1_REGWEN_2_OFFSET);
+    addr_hit[34] = (reg_addr == FLASH_CTRL_BANK0_INFO1_REGWEN_3_OFFSET);
+    addr_hit[35] = (reg_addr == FLASH_CTRL_BANK0_INFO1_PAGE_CFG_0_OFFSET);
+    addr_hit[36] = (reg_addr == FLASH_CTRL_BANK0_INFO1_PAGE_CFG_1_OFFSET);
+    addr_hit[37] = (reg_addr == FLASH_CTRL_BANK0_INFO1_PAGE_CFG_2_OFFSET);
+    addr_hit[38] = (reg_addr == FLASH_CTRL_BANK0_INFO1_PAGE_CFG_3_OFFSET);
+    addr_hit[39] = (reg_addr == FLASH_CTRL_BANK1_INFO0_REGWEN_0_OFFSET);
+    addr_hit[40] = (reg_addr == FLASH_CTRL_BANK1_INFO0_REGWEN_1_OFFSET);
+    addr_hit[41] = (reg_addr == FLASH_CTRL_BANK1_INFO0_REGWEN_2_OFFSET);
+    addr_hit[42] = (reg_addr == FLASH_CTRL_BANK1_INFO0_REGWEN_3_OFFSET);
+    addr_hit[43] = (reg_addr == FLASH_CTRL_BANK1_INFO0_PAGE_CFG_0_OFFSET);
+    addr_hit[44] = (reg_addr == FLASH_CTRL_BANK1_INFO0_PAGE_CFG_1_OFFSET);
+    addr_hit[45] = (reg_addr == FLASH_CTRL_BANK1_INFO0_PAGE_CFG_2_OFFSET);
+    addr_hit[46] = (reg_addr == FLASH_CTRL_BANK1_INFO0_PAGE_CFG_3_OFFSET);
+    addr_hit[47] = (reg_addr == FLASH_CTRL_BANK1_INFO1_REGWEN_0_OFFSET);
+    addr_hit[48] = (reg_addr == FLASH_CTRL_BANK1_INFO1_REGWEN_1_OFFSET);
+    addr_hit[49] = (reg_addr == FLASH_CTRL_BANK1_INFO1_REGWEN_2_OFFSET);
+    addr_hit[50] = (reg_addr == FLASH_CTRL_BANK1_INFO1_REGWEN_3_OFFSET);
+    addr_hit[51] = (reg_addr == FLASH_CTRL_BANK1_INFO1_PAGE_CFG_0_OFFSET);
+    addr_hit[52] = (reg_addr == FLASH_CTRL_BANK1_INFO1_PAGE_CFG_1_OFFSET);
+    addr_hit[53] = (reg_addr == FLASH_CTRL_BANK1_INFO1_PAGE_CFG_2_OFFSET);
+    addr_hit[54] = (reg_addr == FLASH_CTRL_BANK1_INFO1_PAGE_CFG_3_OFFSET);
+    addr_hit[55] = (reg_addr == FLASH_CTRL_BANK_CFG_REGWEN_OFFSET);
+    addr_hit[56] = (reg_addr == FLASH_CTRL_MP_BANK_CFG_OFFSET);
+    addr_hit[57] = (reg_addr == FLASH_CTRL_OP_STATUS_OFFSET);
+    addr_hit[58] = (reg_addr == FLASH_CTRL_STATUS_OFFSET);
+    addr_hit[59] = (reg_addr == FLASH_CTRL_PHY_STATUS_OFFSET);
+    addr_hit[60] = (reg_addr == FLASH_CTRL_SCRATCH_OFFSET);
+    addr_hit[61] = (reg_addr == FLASH_CTRL_FIFO_LVL_OFFSET);
+    addr_hit[62] = (reg_addr == FLASH_CTRL_FIFO_RST_OFFSET);
+  end
+
+  assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ;
+
+  // Check sub-word write is permitted
+  always_comb begin
+    wr_err = 1'b0;
+    if (addr_hit[ 0] && reg_we && (FLASH_CTRL_PERMIT[ 0] != (FLASH_CTRL_PERMIT[ 0] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[ 1] && reg_we && (FLASH_CTRL_PERMIT[ 1] != (FLASH_CTRL_PERMIT[ 1] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[ 2] && reg_we && (FLASH_CTRL_PERMIT[ 2] != (FLASH_CTRL_PERMIT[ 2] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[ 3] && reg_we && (FLASH_CTRL_PERMIT[ 3] != (FLASH_CTRL_PERMIT[ 3] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[ 4] && reg_we && (FLASH_CTRL_PERMIT[ 4] != (FLASH_CTRL_PERMIT[ 4] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[ 5] && reg_we && (FLASH_CTRL_PERMIT[ 5] != (FLASH_CTRL_PERMIT[ 5] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[ 6] && reg_we && (FLASH_CTRL_PERMIT[ 6] != (FLASH_CTRL_PERMIT[ 6] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[ 7] && reg_we && (FLASH_CTRL_PERMIT[ 7] != (FLASH_CTRL_PERMIT[ 7] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[ 8] && reg_we && (FLASH_CTRL_PERMIT[ 8] != (FLASH_CTRL_PERMIT[ 8] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[ 9] && reg_we && (FLASH_CTRL_PERMIT[ 9] != (FLASH_CTRL_PERMIT[ 9] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[10] && reg_we && (FLASH_CTRL_PERMIT[10] != (FLASH_CTRL_PERMIT[10] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[11] && reg_we && (FLASH_CTRL_PERMIT[11] != (FLASH_CTRL_PERMIT[11] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[12] && reg_we && (FLASH_CTRL_PERMIT[12] != (FLASH_CTRL_PERMIT[12] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[13] && reg_we && (FLASH_CTRL_PERMIT[13] != (FLASH_CTRL_PERMIT[13] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[14] && reg_we && (FLASH_CTRL_PERMIT[14] != (FLASH_CTRL_PERMIT[14] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[15] && reg_we && (FLASH_CTRL_PERMIT[15] != (FLASH_CTRL_PERMIT[15] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[16] && reg_we && (FLASH_CTRL_PERMIT[16] != (FLASH_CTRL_PERMIT[16] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[17] && reg_we && (FLASH_CTRL_PERMIT[17] != (FLASH_CTRL_PERMIT[17] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[18] && reg_we && (FLASH_CTRL_PERMIT[18] != (FLASH_CTRL_PERMIT[18] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[19] && reg_we && (FLASH_CTRL_PERMIT[19] != (FLASH_CTRL_PERMIT[19] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[20] && reg_we && (FLASH_CTRL_PERMIT[20] != (FLASH_CTRL_PERMIT[20] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[21] && reg_we && (FLASH_CTRL_PERMIT[21] != (FLASH_CTRL_PERMIT[21] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[22] && reg_we && (FLASH_CTRL_PERMIT[22] != (FLASH_CTRL_PERMIT[22] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[23] && reg_we && (FLASH_CTRL_PERMIT[23] != (FLASH_CTRL_PERMIT[23] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[24] && reg_we && (FLASH_CTRL_PERMIT[24] != (FLASH_CTRL_PERMIT[24] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[25] && reg_we && (FLASH_CTRL_PERMIT[25] != (FLASH_CTRL_PERMIT[25] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[26] && reg_we && (FLASH_CTRL_PERMIT[26] != (FLASH_CTRL_PERMIT[26] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[27] && reg_we && (FLASH_CTRL_PERMIT[27] != (FLASH_CTRL_PERMIT[27] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[28] && reg_we && (FLASH_CTRL_PERMIT[28] != (FLASH_CTRL_PERMIT[28] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[29] && reg_we && (FLASH_CTRL_PERMIT[29] != (FLASH_CTRL_PERMIT[29] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[30] && reg_we && (FLASH_CTRL_PERMIT[30] != (FLASH_CTRL_PERMIT[30] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[31] && reg_we && (FLASH_CTRL_PERMIT[31] != (FLASH_CTRL_PERMIT[31] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[32] && reg_we && (FLASH_CTRL_PERMIT[32] != (FLASH_CTRL_PERMIT[32] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[33] && reg_we && (FLASH_CTRL_PERMIT[33] != (FLASH_CTRL_PERMIT[33] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[34] && reg_we && (FLASH_CTRL_PERMIT[34] != (FLASH_CTRL_PERMIT[34] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[35] && reg_we && (FLASH_CTRL_PERMIT[35] != (FLASH_CTRL_PERMIT[35] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[36] && reg_we && (FLASH_CTRL_PERMIT[36] != (FLASH_CTRL_PERMIT[36] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[37] && reg_we && (FLASH_CTRL_PERMIT[37] != (FLASH_CTRL_PERMIT[37] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[38] && reg_we && (FLASH_CTRL_PERMIT[38] != (FLASH_CTRL_PERMIT[38] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[39] && reg_we && (FLASH_CTRL_PERMIT[39] != (FLASH_CTRL_PERMIT[39] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[40] && reg_we && (FLASH_CTRL_PERMIT[40] != (FLASH_CTRL_PERMIT[40] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[41] && reg_we && (FLASH_CTRL_PERMIT[41] != (FLASH_CTRL_PERMIT[41] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[42] && reg_we && (FLASH_CTRL_PERMIT[42] != (FLASH_CTRL_PERMIT[42] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[43] && reg_we && (FLASH_CTRL_PERMIT[43] != (FLASH_CTRL_PERMIT[43] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[44] && reg_we && (FLASH_CTRL_PERMIT[44] != (FLASH_CTRL_PERMIT[44] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[45] && reg_we && (FLASH_CTRL_PERMIT[45] != (FLASH_CTRL_PERMIT[45] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[46] && reg_we && (FLASH_CTRL_PERMIT[46] != (FLASH_CTRL_PERMIT[46] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[47] && reg_we && (FLASH_CTRL_PERMIT[47] != (FLASH_CTRL_PERMIT[47] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[48] && reg_we && (FLASH_CTRL_PERMIT[48] != (FLASH_CTRL_PERMIT[48] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[49] && reg_we && (FLASH_CTRL_PERMIT[49] != (FLASH_CTRL_PERMIT[49] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[50] && reg_we && (FLASH_CTRL_PERMIT[50] != (FLASH_CTRL_PERMIT[50] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[51] && reg_we && (FLASH_CTRL_PERMIT[51] != (FLASH_CTRL_PERMIT[51] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[52] && reg_we && (FLASH_CTRL_PERMIT[52] != (FLASH_CTRL_PERMIT[52] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[53] && reg_we && (FLASH_CTRL_PERMIT[53] != (FLASH_CTRL_PERMIT[53] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[54] && reg_we && (FLASH_CTRL_PERMIT[54] != (FLASH_CTRL_PERMIT[54] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[55] && reg_we && (FLASH_CTRL_PERMIT[55] != (FLASH_CTRL_PERMIT[55] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[56] && reg_we && (FLASH_CTRL_PERMIT[56] != (FLASH_CTRL_PERMIT[56] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[57] && reg_we && (FLASH_CTRL_PERMIT[57] != (FLASH_CTRL_PERMIT[57] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[58] && reg_we && (FLASH_CTRL_PERMIT[58] != (FLASH_CTRL_PERMIT[58] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[59] && reg_we && (FLASH_CTRL_PERMIT[59] != (FLASH_CTRL_PERMIT[59] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[60] && reg_we && (FLASH_CTRL_PERMIT[60] != (FLASH_CTRL_PERMIT[60] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[61] && reg_we && (FLASH_CTRL_PERMIT[61] != (FLASH_CTRL_PERMIT[61] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[62] && reg_we && (FLASH_CTRL_PERMIT[62] != (FLASH_CTRL_PERMIT[62] & reg_be))) wr_err = 1'b1 ;
+  end
+
+  assign intr_state_prog_empty_we = addr_hit[0] & reg_we & ~wr_err;
+  assign intr_state_prog_empty_wd = reg_wdata[0];
+
+  assign intr_state_prog_lvl_we = addr_hit[0] & reg_we & ~wr_err;
+  assign intr_state_prog_lvl_wd = reg_wdata[1];
+
+  assign intr_state_rd_full_we = addr_hit[0] & reg_we & ~wr_err;
+  assign intr_state_rd_full_wd = reg_wdata[2];
+
+  assign intr_state_rd_lvl_we = addr_hit[0] & reg_we & ~wr_err;
+  assign intr_state_rd_lvl_wd = reg_wdata[3];
+
+  assign intr_state_op_done_we = addr_hit[0] & reg_we & ~wr_err;
+  assign intr_state_op_done_wd = reg_wdata[4];
+
+  assign intr_state_op_error_we = addr_hit[0] & reg_we & ~wr_err;
+  assign intr_state_op_error_wd = reg_wdata[5];
+
+  assign intr_enable_prog_empty_we = addr_hit[1] & reg_we & ~wr_err;
+  assign intr_enable_prog_empty_wd = reg_wdata[0];
+
+  assign intr_enable_prog_lvl_we = addr_hit[1] & reg_we & ~wr_err;
+  assign intr_enable_prog_lvl_wd = reg_wdata[1];
+
+  assign intr_enable_rd_full_we = addr_hit[1] & reg_we & ~wr_err;
+  assign intr_enable_rd_full_wd = reg_wdata[2];
+
+  assign intr_enable_rd_lvl_we = addr_hit[1] & reg_we & ~wr_err;
+  assign intr_enable_rd_lvl_wd = reg_wdata[3];
+
+  assign intr_enable_op_done_we = addr_hit[1] & reg_we & ~wr_err;
+  assign intr_enable_op_done_wd = reg_wdata[4];
+
+  assign intr_enable_op_error_we = addr_hit[1] & reg_we & ~wr_err;
+  assign intr_enable_op_error_wd = reg_wdata[5];
+
+  assign intr_test_prog_empty_we = addr_hit[2] & reg_we & ~wr_err;
+  assign intr_test_prog_empty_wd = reg_wdata[0];
+
+  assign intr_test_prog_lvl_we = addr_hit[2] & reg_we & ~wr_err;
+  assign intr_test_prog_lvl_wd = reg_wdata[1];
+
+  assign intr_test_rd_full_we = addr_hit[2] & reg_we & ~wr_err;
+  assign intr_test_rd_full_wd = reg_wdata[2];
+
+  assign intr_test_rd_lvl_we = addr_hit[2] & reg_we & ~wr_err;
+  assign intr_test_rd_lvl_wd = reg_wdata[3];
+
+  assign intr_test_op_done_we = addr_hit[2] & reg_we & ~wr_err;
+  assign intr_test_op_done_wd = reg_wdata[4];
+
+  assign intr_test_op_error_we = addr_hit[2] & reg_we & ~wr_err;
+  assign intr_test_op_error_wd = reg_wdata[5];
+
+  assign ctrl_regwen_re = addr_hit[3] && reg_re;
+
+  assign control_start_we = addr_hit[4] & reg_we & ~wr_err;
+  assign control_start_wd = reg_wdata[0];
+
+  assign control_op_we = addr_hit[4] & reg_we & ~wr_err;
+  assign control_op_wd = reg_wdata[5:4];
+
+  assign control_prog_sel_we = addr_hit[4] & reg_we & ~wr_err;
+  assign control_prog_sel_wd = reg_wdata[6];
+
+  assign control_erase_sel_we = addr_hit[4] & reg_we & ~wr_err;
+  assign control_erase_sel_wd = reg_wdata[7];
+
+  assign control_partition_sel_we = addr_hit[4] & reg_we & ~wr_err;
+  assign control_partition_sel_wd = reg_wdata[8];
+
+  assign control_info_sel_we = addr_hit[4] & reg_we & ~wr_err;
+  assign control_info_sel_wd = reg_wdata[9];
+
+  assign control_num_we = addr_hit[4] & reg_we & ~wr_err;
+  assign control_num_wd = reg_wdata[27:16];
+
+  assign addr_we = addr_hit[5] & reg_we & ~wr_err;
+  assign addr_wd = reg_wdata[31:0];
+
+  assign region_cfg_regwen_0_we = addr_hit[6] & reg_we & ~wr_err;
+  assign region_cfg_regwen_0_wd = reg_wdata[0];
+
+  assign region_cfg_regwen_1_we = addr_hit[7] & reg_we & ~wr_err;
+  assign region_cfg_regwen_1_wd = reg_wdata[0];
+
+  assign region_cfg_regwen_2_we = addr_hit[8] & reg_we & ~wr_err;
+  assign region_cfg_regwen_2_wd = reg_wdata[0];
+
+  assign region_cfg_regwen_3_we = addr_hit[9] & reg_we & ~wr_err;
+  assign region_cfg_regwen_3_wd = reg_wdata[0];
+
+  assign region_cfg_regwen_4_we = addr_hit[10] & reg_we & ~wr_err;
+  assign region_cfg_regwen_4_wd = reg_wdata[0];
+
+  assign region_cfg_regwen_5_we = addr_hit[11] & reg_we & ~wr_err;
+  assign region_cfg_regwen_5_wd = reg_wdata[0];
+
+  assign region_cfg_regwen_6_we = addr_hit[12] & reg_we & ~wr_err;
+  assign region_cfg_regwen_6_wd = reg_wdata[0];
+
+  assign region_cfg_regwen_7_we = addr_hit[13] & reg_we & ~wr_err;
+  assign region_cfg_regwen_7_wd = reg_wdata[0];
+
+  assign mp_region_cfg_0_en_0_we = addr_hit[14] & reg_we & ~wr_err;
+  assign mp_region_cfg_0_en_0_wd = reg_wdata[0];
+
+  assign mp_region_cfg_0_rd_en_0_we = addr_hit[14] & reg_we & ~wr_err;
+  assign mp_region_cfg_0_rd_en_0_wd = reg_wdata[1];
+
+  assign mp_region_cfg_0_prog_en_0_we = addr_hit[14] & reg_we & ~wr_err;
+  assign mp_region_cfg_0_prog_en_0_wd = reg_wdata[2];
+
+  assign mp_region_cfg_0_erase_en_0_we = addr_hit[14] & reg_we & ~wr_err;
+  assign mp_region_cfg_0_erase_en_0_wd = reg_wdata[3];
+
+  assign mp_region_cfg_0_scramble_en_0_we = addr_hit[14] & reg_we & ~wr_err;
+  assign mp_region_cfg_0_scramble_en_0_wd = reg_wdata[4];
+
+  assign mp_region_cfg_0_base_0_we = addr_hit[14] & reg_we & ~wr_err;
+  assign mp_region_cfg_0_base_0_wd = reg_wdata[16:8];
+
+  assign mp_region_cfg_0_size_0_we = addr_hit[14] & reg_we & ~wr_err;
+  assign mp_region_cfg_0_size_0_wd = reg_wdata[29:20];
+
+  assign mp_region_cfg_1_en_1_we = addr_hit[15] & reg_we & ~wr_err;
+  assign mp_region_cfg_1_en_1_wd = reg_wdata[0];
+
+  assign mp_region_cfg_1_rd_en_1_we = addr_hit[15] & reg_we & ~wr_err;
+  assign mp_region_cfg_1_rd_en_1_wd = reg_wdata[1];
+
+  assign mp_region_cfg_1_prog_en_1_we = addr_hit[15] & reg_we & ~wr_err;
+  assign mp_region_cfg_1_prog_en_1_wd = reg_wdata[2];
+
+  assign mp_region_cfg_1_erase_en_1_we = addr_hit[15] & reg_we & ~wr_err;
+  assign mp_region_cfg_1_erase_en_1_wd = reg_wdata[3];
+
+  assign mp_region_cfg_1_scramble_en_1_we = addr_hit[15] & reg_we & ~wr_err;
+  assign mp_region_cfg_1_scramble_en_1_wd = reg_wdata[4];
+
+  assign mp_region_cfg_1_base_1_we = addr_hit[15] & reg_we & ~wr_err;
+  assign mp_region_cfg_1_base_1_wd = reg_wdata[16:8];
+
+  assign mp_region_cfg_1_size_1_we = addr_hit[15] & reg_we & ~wr_err;
+  assign mp_region_cfg_1_size_1_wd = reg_wdata[29:20];
+
+  assign mp_region_cfg_2_en_2_we = addr_hit[16] & reg_we & ~wr_err;
+  assign mp_region_cfg_2_en_2_wd = reg_wdata[0];
+
+  assign mp_region_cfg_2_rd_en_2_we = addr_hit[16] & reg_we & ~wr_err;
+  assign mp_region_cfg_2_rd_en_2_wd = reg_wdata[1];
+
+  assign mp_region_cfg_2_prog_en_2_we = addr_hit[16] & reg_we & ~wr_err;
+  assign mp_region_cfg_2_prog_en_2_wd = reg_wdata[2];
+
+  assign mp_region_cfg_2_erase_en_2_we = addr_hit[16] & reg_we & ~wr_err;
+  assign mp_region_cfg_2_erase_en_2_wd = reg_wdata[3];
+
+  assign mp_region_cfg_2_scramble_en_2_we = addr_hit[16] & reg_we & ~wr_err;
+  assign mp_region_cfg_2_scramble_en_2_wd = reg_wdata[4];
+
+  assign mp_region_cfg_2_base_2_we = addr_hit[16] & reg_we & ~wr_err;
+  assign mp_region_cfg_2_base_2_wd = reg_wdata[16:8];
+
+  assign mp_region_cfg_2_size_2_we = addr_hit[16] & reg_we & ~wr_err;
+  assign mp_region_cfg_2_size_2_wd = reg_wdata[29:20];
+
+  assign mp_region_cfg_3_en_3_we = addr_hit[17] & reg_we & ~wr_err;
+  assign mp_region_cfg_3_en_3_wd = reg_wdata[0];
+
+  assign mp_region_cfg_3_rd_en_3_we = addr_hit[17] & reg_we & ~wr_err;
+  assign mp_region_cfg_3_rd_en_3_wd = reg_wdata[1];
+
+  assign mp_region_cfg_3_prog_en_3_we = addr_hit[17] & reg_we & ~wr_err;
+  assign mp_region_cfg_3_prog_en_3_wd = reg_wdata[2];
+
+  assign mp_region_cfg_3_erase_en_3_we = addr_hit[17] & reg_we & ~wr_err;
+  assign mp_region_cfg_3_erase_en_3_wd = reg_wdata[3];
+
+  assign mp_region_cfg_3_scramble_en_3_we = addr_hit[17] & reg_we & ~wr_err;
+  assign mp_region_cfg_3_scramble_en_3_wd = reg_wdata[4];
+
+  assign mp_region_cfg_3_base_3_we = addr_hit[17] & reg_we & ~wr_err;
+  assign mp_region_cfg_3_base_3_wd = reg_wdata[16:8];
+
+  assign mp_region_cfg_3_size_3_we = addr_hit[17] & reg_we & ~wr_err;
+  assign mp_region_cfg_3_size_3_wd = reg_wdata[29:20];
+
+  assign mp_region_cfg_4_en_4_we = addr_hit[18] & reg_we & ~wr_err;
+  assign mp_region_cfg_4_en_4_wd = reg_wdata[0];
+
+  assign mp_region_cfg_4_rd_en_4_we = addr_hit[18] & reg_we & ~wr_err;
+  assign mp_region_cfg_4_rd_en_4_wd = reg_wdata[1];
+
+  assign mp_region_cfg_4_prog_en_4_we = addr_hit[18] & reg_we & ~wr_err;
+  assign mp_region_cfg_4_prog_en_4_wd = reg_wdata[2];
+
+  assign mp_region_cfg_4_erase_en_4_we = addr_hit[18] & reg_we & ~wr_err;
+  assign mp_region_cfg_4_erase_en_4_wd = reg_wdata[3];
+
+  assign mp_region_cfg_4_scramble_en_4_we = addr_hit[18] & reg_we & ~wr_err;
+  assign mp_region_cfg_4_scramble_en_4_wd = reg_wdata[4];
+
+  assign mp_region_cfg_4_base_4_we = addr_hit[18] & reg_we & ~wr_err;
+  assign mp_region_cfg_4_base_4_wd = reg_wdata[16:8];
+
+  assign mp_region_cfg_4_size_4_we = addr_hit[18] & reg_we & ~wr_err;
+  assign mp_region_cfg_4_size_4_wd = reg_wdata[29:20];
+
+  assign mp_region_cfg_5_en_5_we = addr_hit[19] & reg_we & ~wr_err;
+  assign mp_region_cfg_5_en_5_wd = reg_wdata[0];
+
+  assign mp_region_cfg_5_rd_en_5_we = addr_hit[19] & reg_we & ~wr_err;
+  assign mp_region_cfg_5_rd_en_5_wd = reg_wdata[1];
+
+  assign mp_region_cfg_5_prog_en_5_we = addr_hit[19] & reg_we & ~wr_err;
+  assign mp_region_cfg_5_prog_en_5_wd = reg_wdata[2];
+
+  assign mp_region_cfg_5_erase_en_5_we = addr_hit[19] & reg_we & ~wr_err;
+  assign mp_region_cfg_5_erase_en_5_wd = reg_wdata[3];
+
+  assign mp_region_cfg_5_scramble_en_5_we = addr_hit[19] & reg_we & ~wr_err;
+  assign mp_region_cfg_5_scramble_en_5_wd = reg_wdata[4];
+
+  assign mp_region_cfg_5_base_5_we = addr_hit[19] & reg_we & ~wr_err;
+  assign mp_region_cfg_5_base_5_wd = reg_wdata[16:8];
+
+  assign mp_region_cfg_5_size_5_we = addr_hit[19] & reg_we & ~wr_err;
+  assign mp_region_cfg_5_size_5_wd = reg_wdata[29:20];
+
+  assign mp_region_cfg_6_en_6_we = addr_hit[20] & reg_we & ~wr_err;
+  assign mp_region_cfg_6_en_6_wd = reg_wdata[0];
+
+  assign mp_region_cfg_6_rd_en_6_we = addr_hit[20] & reg_we & ~wr_err;
+  assign mp_region_cfg_6_rd_en_6_wd = reg_wdata[1];
+
+  assign mp_region_cfg_6_prog_en_6_we = addr_hit[20] & reg_we & ~wr_err;
+  assign mp_region_cfg_6_prog_en_6_wd = reg_wdata[2];
+
+  assign mp_region_cfg_6_erase_en_6_we = addr_hit[20] & reg_we & ~wr_err;
+  assign mp_region_cfg_6_erase_en_6_wd = reg_wdata[3];
+
+  assign mp_region_cfg_6_scramble_en_6_we = addr_hit[20] & reg_we & ~wr_err;
+  assign mp_region_cfg_6_scramble_en_6_wd = reg_wdata[4];
+
+  assign mp_region_cfg_6_base_6_we = addr_hit[20] & reg_we & ~wr_err;
+  assign mp_region_cfg_6_base_6_wd = reg_wdata[16:8];
+
+  assign mp_region_cfg_6_size_6_we = addr_hit[20] & reg_we & ~wr_err;
+  assign mp_region_cfg_6_size_6_wd = reg_wdata[29:20];
+
+  assign mp_region_cfg_7_en_7_we = addr_hit[21] & reg_we & ~wr_err;
+  assign mp_region_cfg_7_en_7_wd = reg_wdata[0];
+
+  assign mp_region_cfg_7_rd_en_7_we = addr_hit[21] & reg_we & ~wr_err;
+  assign mp_region_cfg_7_rd_en_7_wd = reg_wdata[1];
+
+  assign mp_region_cfg_7_prog_en_7_we = addr_hit[21] & reg_we & ~wr_err;
+  assign mp_region_cfg_7_prog_en_7_wd = reg_wdata[2];
+
+  assign mp_region_cfg_7_erase_en_7_we = addr_hit[21] & reg_we & ~wr_err;
+  assign mp_region_cfg_7_erase_en_7_wd = reg_wdata[3];
+
+  assign mp_region_cfg_7_scramble_en_7_we = addr_hit[21] & reg_we & ~wr_err;
+  assign mp_region_cfg_7_scramble_en_7_wd = reg_wdata[4];
+
+  assign mp_region_cfg_7_base_7_we = addr_hit[21] & reg_we & ~wr_err;
+  assign mp_region_cfg_7_base_7_wd = reg_wdata[16:8];
+
+  assign mp_region_cfg_7_size_7_we = addr_hit[21] & reg_we & ~wr_err;
+  assign mp_region_cfg_7_size_7_wd = reg_wdata[29:20];
+
+  assign default_region_rd_en_we = addr_hit[22] & reg_we & ~wr_err;
+  assign default_region_rd_en_wd = reg_wdata[0];
+
+  assign default_region_prog_en_we = addr_hit[22] & reg_we & ~wr_err;
+  assign default_region_prog_en_wd = reg_wdata[1];
+
+  assign default_region_erase_en_we = addr_hit[22] & reg_we & ~wr_err;
+  assign default_region_erase_en_wd = reg_wdata[2];
+
+  assign default_region_scramble_en_we = addr_hit[22] & reg_we & ~wr_err;
+  assign default_region_scramble_en_wd = reg_wdata[3];
+
+  assign bank0_info0_regwen_0_we = addr_hit[23] & reg_we & ~wr_err;
+  assign bank0_info0_regwen_0_wd = reg_wdata[0];
+
+  assign bank0_info0_regwen_1_we = addr_hit[24] & reg_we & ~wr_err;
+  assign bank0_info0_regwen_1_wd = reg_wdata[0];
+
+  assign bank0_info0_regwen_2_we = addr_hit[25] & reg_we & ~wr_err;
+  assign bank0_info0_regwen_2_wd = reg_wdata[0];
+
+  assign bank0_info0_regwen_3_we = addr_hit[26] & reg_we & ~wr_err;
+  assign bank0_info0_regwen_3_wd = reg_wdata[0];
+
+  assign bank0_info0_page_cfg_0_en_0_we = addr_hit[27] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_0_en_0_wd = reg_wdata[0];
+
+  assign bank0_info0_page_cfg_0_rd_en_0_we = addr_hit[27] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_0_rd_en_0_wd = reg_wdata[1];
+
+  assign bank0_info0_page_cfg_0_prog_en_0_we = addr_hit[27] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_0_prog_en_0_wd = reg_wdata[2];
+
+  assign bank0_info0_page_cfg_0_erase_en_0_we = addr_hit[27] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_0_erase_en_0_wd = reg_wdata[3];
+
+  assign bank0_info0_page_cfg_0_scramble_en_0_we = addr_hit[27] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_0_scramble_en_0_wd = reg_wdata[4];
+
+  assign bank0_info0_page_cfg_1_en_1_we = addr_hit[28] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_1_en_1_wd = reg_wdata[0];
+
+  assign bank0_info0_page_cfg_1_rd_en_1_we = addr_hit[28] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_1_rd_en_1_wd = reg_wdata[1];
+
+  assign bank0_info0_page_cfg_1_prog_en_1_we = addr_hit[28] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_1_prog_en_1_wd = reg_wdata[2];
+
+  assign bank0_info0_page_cfg_1_erase_en_1_we = addr_hit[28] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_1_erase_en_1_wd = reg_wdata[3];
+
+  assign bank0_info0_page_cfg_1_scramble_en_1_we = addr_hit[28] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_1_scramble_en_1_wd = reg_wdata[4];
+
+  assign bank0_info0_page_cfg_2_en_2_we = addr_hit[29] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_2_en_2_wd = reg_wdata[0];
+
+  assign bank0_info0_page_cfg_2_rd_en_2_we = addr_hit[29] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_2_rd_en_2_wd = reg_wdata[1];
+
+  assign bank0_info0_page_cfg_2_prog_en_2_we = addr_hit[29] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_2_prog_en_2_wd = reg_wdata[2];
+
+  assign bank0_info0_page_cfg_2_erase_en_2_we = addr_hit[29] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_2_erase_en_2_wd = reg_wdata[3];
+
+  assign bank0_info0_page_cfg_2_scramble_en_2_we = addr_hit[29] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_2_scramble_en_2_wd = reg_wdata[4];
+
+  assign bank0_info0_page_cfg_3_en_3_we = addr_hit[30] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_3_en_3_wd = reg_wdata[0];
+
+  assign bank0_info0_page_cfg_3_rd_en_3_we = addr_hit[30] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_3_rd_en_3_wd = reg_wdata[1];
+
+  assign bank0_info0_page_cfg_3_prog_en_3_we = addr_hit[30] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_3_prog_en_3_wd = reg_wdata[2];
+
+  assign bank0_info0_page_cfg_3_erase_en_3_we = addr_hit[30] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_3_erase_en_3_wd = reg_wdata[3];
+
+  assign bank0_info0_page_cfg_3_scramble_en_3_we = addr_hit[30] & reg_we & ~wr_err;
+  assign bank0_info0_page_cfg_3_scramble_en_3_wd = reg_wdata[4];
+
+  assign bank0_info1_regwen_0_we = addr_hit[31] & reg_we & ~wr_err;
+  assign bank0_info1_regwen_0_wd = reg_wdata[0];
+
+  assign bank0_info1_regwen_1_we = addr_hit[32] & reg_we & ~wr_err;
+  assign bank0_info1_regwen_1_wd = reg_wdata[0];
+
+  assign bank0_info1_regwen_2_we = addr_hit[33] & reg_we & ~wr_err;
+  assign bank0_info1_regwen_2_wd = reg_wdata[0];
+
+  assign bank0_info1_regwen_3_we = addr_hit[34] & reg_we & ~wr_err;
+  assign bank0_info1_regwen_3_wd = reg_wdata[0];
+
+  assign bank0_info1_page_cfg_0_en_0_we = addr_hit[35] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_0_en_0_wd = reg_wdata[0];
+
+  assign bank0_info1_page_cfg_0_rd_en_0_we = addr_hit[35] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_0_rd_en_0_wd = reg_wdata[1];
+
+  assign bank0_info1_page_cfg_0_prog_en_0_we = addr_hit[35] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_0_prog_en_0_wd = reg_wdata[2];
+
+  assign bank0_info1_page_cfg_0_erase_en_0_we = addr_hit[35] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_0_erase_en_0_wd = reg_wdata[3];
+
+  assign bank0_info1_page_cfg_0_scramble_en_0_we = addr_hit[35] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_0_scramble_en_0_wd = reg_wdata[4];
+
+  assign bank0_info1_page_cfg_1_en_1_we = addr_hit[36] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_1_en_1_wd = reg_wdata[0];
+
+  assign bank0_info1_page_cfg_1_rd_en_1_we = addr_hit[36] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_1_rd_en_1_wd = reg_wdata[1];
+
+  assign bank0_info1_page_cfg_1_prog_en_1_we = addr_hit[36] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_1_prog_en_1_wd = reg_wdata[2];
+
+  assign bank0_info1_page_cfg_1_erase_en_1_we = addr_hit[36] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_1_erase_en_1_wd = reg_wdata[3];
+
+  assign bank0_info1_page_cfg_1_scramble_en_1_we = addr_hit[36] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_1_scramble_en_1_wd = reg_wdata[4];
+
+  assign bank0_info1_page_cfg_2_en_2_we = addr_hit[37] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_2_en_2_wd = reg_wdata[0];
+
+  assign bank0_info1_page_cfg_2_rd_en_2_we = addr_hit[37] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_2_rd_en_2_wd = reg_wdata[1];
+
+  assign bank0_info1_page_cfg_2_prog_en_2_we = addr_hit[37] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_2_prog_en_2_wd = reg_wdata[2];
+
+  assign bank0_info1_page_cfg_2_erase_en_2_we = addr_hit[37] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_2_erase_en_2_wd = reg_wdata[3];
+
+  assign bank0_info1_page_cfg_2_scramble_en_2_we = addr_hit[37] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_2_scramble_en_2_wd = reg_wdata[4];
+
+  assign bank0_info1_page_cfg_3_en_3_we = addr_hit[38] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_3_en_3_wd = reg_wdata[0];
+
+  assign bank0_info1_page_cfg_3_rd_en_3_we = addr_hit[38] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_3_rd_en_3_wd = reg_wdata[1];
+
+  assign bank0_info1_page_cfg_3_prog_en_3_we = addr_hit[38] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_3_prog_en_3_wd = reg_wdata[2];
+
+  assign bank0_info1_page_cfg_3_erase_en_3_we = addr_hit[38] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_3_erase_en_3_wd = reg_wdata[3];
+
+  assign bank0_info1_page_cfg_3_scramble_en_3_we = addr_hit[38] & reg_we & ~wr_err;
+  assign bank0_info1_page_cfg_3_scramble_en_3_wd = reg_wdata[4];
+
+  assign bank1_info0_regwen_0_we = addr_hit[39] & reg_we & ~wr_err;
+  assign bank1_info0_regwen_0_wd = reg_wdata[0];
+
+  assign bank1_info0_regwen_1_we = addr_hit[40] & reg_we & ~wr_err;
+  assign bank1_info0_regwen_1_wd = reg_wdata[0];
+
+  assign bank1_info0_regwen_2_we = addr_hit[41] & reg_we & ~wr_err;
+  assign bank1_info0_regwen_2_wd = reg_wdata[0];
+
+  assign bank1_info0_regwen_3_we = addr_hit[42] & reg_we & ~wr_err;
+  assign bank1_info0_regwen_3_wd = reg_wdata[0];
+
+  assign bank1_info0_page_cfg_0_en_0_we = addr_hit[43] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_0_en_0_wd = reg_wdata[0];
+
+  assign bank1_info0_page_cfg_0_rd_en_0_we = addr_hit[43] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_0_rd_en_0_wd = reg_wdata[1];
+
+  assign bank1_info0_page_cfg_0_prog_en_0_we = addr_hit[43] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_0_prog_en_0_wd = reg_wdata[2];
+
+  assign bank1_info0_page_cfg_0_erase_en_0_we = addr_hit[43] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_0_erase_en_0_wd = reg_wdata[3];
+
+  assign bank1_info0_page_cfg_0_scramble_en_0_we = addr_hit[43] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_0_scramble_en_0_wd = reg_wdata[4];
+
+  assign bank1_info0_page_cfg_1_en_1_we = addr_hit[44] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_1_en_1_wd = reg_wdata[0];
+
+  assign bank1_info0_page_cfg_1_rd_en_1_we = addr_hit[44] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_1_rd_en_1_wd = reg_wdata[1];
+
+  assign bank1_info0_page_cfg_1_prog_en_1_we = addr_hit[44] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_1_prog_en_1_wd = reg_wdata[2];
+
+  assign bank1_info0_page_cfg_1_erase_en_1_we = addr_hit[44] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_1_erase_en_1_wd = reg_wdata[3];
+
+  assign bank1_info0_page_cfg_1_scramble_en_1_we = addr_hit[44] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_1_scramble_en_1_wd = reg_wdata[4];
+
+  assign bank1_info0_page_cfg_2_en_2_we = addr_hit[45] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_2_en_2_wd = reg_wdata[0];
+
+  assign bank1_info0_page_cfg_2_rd_en_2_we = addr_hit[45] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_2_rd_en_2_wd = reg_wdata[1];
+
+  assign bank1_info0_page_cfg_2_prog_en_2_we = addr_hit[45] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_2_prog_en_2_wd = reg_wdata[2];
+
+  assign bank1_info0_page_cfg_2_erase_en_2_we = addr_hit[45] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_2_erase_en_2_wd = reg_wdata[3];
+
+  assign bank1_info0_page_cfg_2_scramble_en_2_we = addr_hit[45] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_2_scramble_en_2_wd = reg_wdata[4];
+
+  assign bank1_info0_page_cfg_3_en_3_we = addr_hit[46] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_3_en_3_wd = reg_wdata[0];
+
+  assign bank1_info0_page_cfg_3_rd_en_3_we = addr_hit[46] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_3_rd_en_3_wd = reg_wdata[1];
+
+  assign bank1_info0_page_cfg_3_prog_en_3_we = addr_hit[46] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_3_prog_en_3_wd = reg_wdata[2];
+
+  assign bank1_info0_page_cfg_3_erase_en_3_we = addr_hit[46] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_3_erase_en_3_wd = reg_wdata[3];
+
+  assign bank1_info0_page_cfg_3_scramble_en_3_we = addr_hit[46] & reg_we & ~wr_err;
+  assign bank1_info0_page_cfg_3_scramble_en_3_wd = reg_wdata[4];
+
+  assign bank1_info1_regwen_0_we = addr_hit[47] & reg_we & ~wr_err;
+  assign bank1_info1_regwen_0_wd = reg_wdata[0];
+
+  assign bank1_info1_regwen_1_we = addr_hit[48] & reg_we & ~wr_err;
+  assign bank1_info1_regwen_1_wd = reg_wdata[0];
+
+  assign bank1_info1_regwen_2_we = addr_hit[49] & reg_we & ~wr_err;
+  assign bank1_info1_regwen_2_wd = reg_wdata[0];
+
+  assign bank1_info1_regwen_3_we = addr_hit[50] & reg_we & ~wr_err;
+  assign bank1_info1_regwen_3_wd = reg_wdata[0];
+
+  assign bank1_info1_page_cfg_0_en_0_we = addr_hit[51] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_0_en_0_wd = reg_wdata[0];
+
+  assign bank1_info1_page_cfg_0_rd_en_0_we = addr_hit[51] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_0_rd_en_0_wd = reg_wdata[1];
+
+  assign bank1_info1_page_cfg_0_prog_en_0_we = addr_hit[51] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_0_prog_en_0_wd = reg_wdata[2];
+
+  assign bank1_info1_page_cfg_0_erase_en_0_we = addr_hit[51] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_0_erase_en_0_wd = reg_wdata[3];
+
+  assign bank1_info1_page_cfg_0_scramble_en_0_we = addr_hit[51] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_0_scramble_en_0_wd = reg_wdata[4];
+
+  assign bank1_info1_page_cfg_1_en_1_we = addr_hit[52] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_1_en_1_wd = reg_wdata[0];
+
+  assign bank1_info1_page_cfg_1_rd_en_1_we = addr_hit[52] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_1_rd_en_1_wd = reg_wdata[1];
+
+  assign bank1_info1_page_cfg_1_prog_en_1_we = addr_hit[52] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_1_prog_en_1_wd = reg_wdata[2];
+
+  assign bank1_info1_page_cfg_1_erase_en_1_we = addr_hit[52] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_1_erase_en_1_wd = reg_wdata[3];
+
+  assign bank1_info1_page_cfg_1_scramble_en_1_we = addr_hit[52] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_1_scramble_en_1_wd = reg_wdata[4];
+
+  assign bank1_info1_page_cfg_2_en_2_we = addr_hit[53] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_2_en_2_wd = reg_wdata[0];
+
+  assign bank1_info1_page_cfg_2_rd_en_2_we = addr_hit[53] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_2_rd_en_2_wd = reg_wdata[1];
+
+  assign bank1_info1_page_cfg_2_prog_en_2_we = addr_hit[53] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_2_prog_en_2_wd = reg_wdata[2];
+
+  assign bank1_info1_page_cfg_2_erase_en_2_we = addr_hit[53] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_2_erase_en_2_wd = reg_wdata[3];
+
+  assign bank1_info1_page_cfg_2_scramble_en_2_we = addr_hit[53] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_2_scramble_en_2_wd = reg_wdata[4];
+
+  assign bank1_info1_page_cfg_3_en_3_we = addr_hit[54] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_3_en_3_wd = reg_wdata[0];
+
+  assign bank1_info1_page_cfg_3_rd_en_3_we = addr_hit[54] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_3_rd_en_3_wd = reg_wdata[1];
+
+  assign bank1_info1_page_cfg_3_prog_en_3_we = addr_hit[54] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_3_prog_en_3_wd = reg_wdata[2];
+
+  assign bank1_info1_page_cfg_3_erase_en_3_we = addr_hit[54] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_3_erase_en_3_wd = reg_wdata[3];
+
+  assign bank1_info1_page_cfg_3_scramble_en_3_we = addr_hit[54] & reg_we & ~wr_err;
+  assign bank1_info1_page_cfg_3_scramble_en_3_wd = reg_wdata[4];
+
+  assign bank_cfg_regwen_we = addr_hit[55] & reg_we & ~wr_err;
+  assign bank_cfg_regwen_wd = reg_wdata[0];
+
+  assign mp_bank_cfg_erase_en_0_we = addr_hit[56] & reg_we & ~wr_err;
+  assign mp_bank_cfg_erase_en_0_wd = reg_wdata[0];
+
+  assign mp_bank_cfg_erase_en_1_we = addr_hit[56] & reg_we & ~wr_err;
+  assign mp_bank_cfg_erase_en_1_wd = reg_wdata[1];
+
+  assign op_status_done_we = addr_hit[57] & reg_we & ~wr_err;
+  assign op_status_done_wd = reg_wdata[0];
+
+  assign op_status_err_we = addr_hit[57] & reg_we & ~wr_err;
+  assign op_status_err_wd = reg_wdata[1];
+
+
+
+
+
+
+
+
+
+
+  assign scratch_we = addr_hit[60] & reg_we & ~wr_err;
+  assign scratch_wd = reg_wdata[31:0];
+
+  assign fifo_lvl_prog_we = addr_hit[61] & reg_we & ~wr_err;
+  assign fifo_lvl_prog_wd = reg_wdata[4:0];
+
+  assign fifo_lvl_rd_we = addr_hit[61] & reg_we & ~wr_err;
+  assign fifo_lvl_rd_wd = reg_wdata[12:8];
+
+  assign fifo_rst_we = addr_hit[62] & reg_we & ~wr_err;
+  assign fifo_rst_wd = reg_wdata[0];
+
+  // Read data return
+  always_comb begin
+    reg_rdata_next = '0;
+    unique case (1'b1)
+      addr_hit[0]: begin
+        reg_rdata_next[0] = intr_state_prog_empty_qs;
+        reg_rdata_next[1] = intr_state_prog_lvl_qs;
+        reg_rdata_next[2] = intr_state_rd_full_qs;
+        reg_rdata_next[3] = intr_state_rd_lvl_qs;
+        reg_rdata_next[4] = intr_state_op_done_qs;
+        reg_rdata_next[5] = intr_state_op_error_qs;
+      end
+
+      addr_hit[1]: begin
+        reg_rdata_next[0] = intr_enable_prog_empty_qs;
+        reg_rdata_next[1] = intr_enable_prog_lvl_qs;
+        reg_rdata_next[2] = intr_enable_rd_full_qs;
+        reg_rdata_next[3] = intr_enable_rd_lvl_qs;
+        reg_rdata_next[4] = intr_enable_op_done_qs;
+        reg_rdata_next[5] = intr_enable_op_error_qs;
+      end
+
+      addr_hit[2]: begin
+        reg_rdata_next[0] = '0;
+        reg_rdata_next[1] = '0;
+        reg_rdata_next[2] = '0;
+        reg_rdata_next[3] = '0;
+        reg_rdata_next[4] = '0;
+        reg_rdata_next[5] = '0;
+      end
+
+      addr_hit[3]: begin
+        reg_rdata_next[0] = ctrl_regwen_qs;
+      end
+
+      addr_hit[4]: begin
+        reg_rdata_next[0] = control_start_qs;
+        reg_rdata_next[5:4] = control_op_qs;
+        reg_rdata_next[6] = control_prog_sel_qs;
+        reg_rdata_next[7] = control_erase_sel_qs;
+        reg_rdata_next[8] = control_partition_sel_qs;
+        reg_rdata_next[9] = control_info_sel_qs;
+        reg_rdata_next[27:16] = control_num_qs;
+      end
+
+      addr_hit[5]: begin
+        reg_rdata_next[31:0] = addr_qs;
+      end
+
+      addr_hit[6]: begin
+        reg_rdata_next[0] = region_cfg_regwen_0_qs;
+      end
+
+      addr_hit[7]: begin
+        reg_rdata_next[0] = region_cfg_regwen_1_qs;
+      end
+
+      addr_hit[8]: begin
+        reg_rdata_next[0] = region_cfg_regwen_2_qs;
+      end
+
+      addr_hit[9]: begin
+        reg_rdata_next[0] = region_cfg_regwen_3_qs;
+      end
+
+      addr_hit[10]: begin
+        reg_rdata_next[0] = region_cfg_regwen_4_qs;
+      end
+
+      addr_hit[11]: begin
+        reg_rdata_next[0] = region_cfg_regwen_5_qs;
+      end
+
+      addr_hit[12]: begin
+        reg_rdata_next[0] = region_cfg_regwen_6_qs;
+      end
+
+      addr_hit[13]: begin
+        reg_rdata_next[0] = region_cfg_regwen_7_qs;
+      end
+
+      addr_hit[14]: begin
+        reg_rdata_next[0] = mp_region_cfg_0_en_0_qs;
+        reg_rdata_next[1] = mp_region_cfg_0_rd_en_0_qs;
+        reg_rdata_next[2] = mp_region_cfg_0_prog_en_0_qs;
+        reg_rdata_next[3] = mp_region_cfg_0_erase_en_0_qs;
+        reg_rdata_next[4] = mp_region_cfg_0_scramble_en_0_qs;
+        reg_rdata_next[16:8] = mp_region_cfg_0_base_0_qs;
+        reg_rdata_next[29:20] = mp_region_cfg_0_size_0_qs;
+      end
+
+      addr_hit[15]: begin
+        reg_rdata_next[0] = mp_region_cfg_1_en_1_qs;
+        reg_rdata_next[1] = mp_region_cfg_1_rd_en_1_qs;
+        reg_rdata_next[2] = mp_region_cfg_1_prog_en_1_qs;
+        reg_rdata_next[3] = mp_region_cfg_1_erase_en_1_qs;
+        reg_rdata_next[4] = mp_region_cfg_1_scramble_en_1_qs;
+        reg_rdata_next[16:8] = mp_region_cfg_1_base_1_qs;
+        reg_rdata_next[29:20] = mp_region_cfg_1_size_1_qs;
+      end
+
+      addr_hit[16]: begin
+        reg_rdata_next[0] = mp_region_cfg_2_en_2_qs;
+        reg_rdata_next[1] = mp_region_cfg_2_rd_en_2_qs;
+        reg_rdata_next[2] = mp_region_cfg_2_prog_en_2_qs;
+        reg_rdata_next[3] = mp_region_cfg_2_erase_en_2_qs;
+        reg_rdata_next[4] = mp_region_cfg_2_scramble_en_2_qs;
+        reg_rdata_next[16:8] = mp_region_cfg_2_base_2_qs;
+        reg_rdata_next[29:20] = mp_region_cfg_2_size_2_qs;
+      end
+
+      addr_hit[17]: begin
+        reg_rdata_next[0] = mp_region_cfg_3_en_3_qs;
+        reg_rdata_next[1] = mp_region_cfg_3_rd_en_3_qs;
+        reg_rdata_next[2] = mp_region_cfg_3_prog_en_3_qs;
+        reg_rdata_next[3] = mp_region_cfg_3_erase_en_3_qs;
+        reg_rdata_next[4] = mp_region_cfg_3_scramble_en_3_qs;
+        reg_rdata_next[16:8] = mp_region_cfg_3_base_3_qs;
+        reg_rdata_next[29:20] = mp_region_cfg_3_size_3_qs;
+      end
+
+      addr_hit[18]: begin
+        reg_rdata_next[0] = mp_region_cfg_4_en_4_qs;
+        reg_rdata_next[1] = mp_region_cfg_4_rd_en_4_qs;
+        reg_rdata_next[2] = mp_region_cfg_4_prog_en_4_qs;
+        reg_rdata_next[3] = mp_region_cfg_4_erase_en_4_qs;
+        reg_rdata_next[4] = mp_region_cfg_4_scramble_en_4_qs;
+        reg_rdata_next[16:8] = mp_region_cfg_4_base_4_qs;
+        reg_rdata_next[29:20] = mp_region_cfg_4_size_4_qs;
+      end
+
+      addr_hit[19]: begin
+        reg_rdata_next[0] = mp_region_cfg_5_en_5_qs;
+        reg_rdata_next[1] = mp_region_cfg_5_rd_en_5_qs;
+        reg_rdata_next[2] = mp_region_cfg_5_prog_en_5_qs;
+        reg_rdata_next[3] = mp_region_cfg_5_erase_en_5_qs;
+        reg_rdata_next[4] = mp_region_cfg_5_scramble_en_5_qs;
+        reg_rdata_next[16:8] = mp_region_cfg_5_base_5_qs;
+        reg_rdata_next[29:20] = mp_region_cfg_5_size_5_qs;
+      end
+
+      addr_hit[20]: begin
+        reg_rdata_next[0] = mp_region_cfg_6_en_6_qs;
+        reg_rdata_next[1] = mp_region_cfg_6_rd_en_6_qs;
+        reg_rdata_next[2] = mp_region_cfg_6_prog_en_6_qs;
+        reg_rdata_next[3] = mp_region_cfg_6_erase_en_6_qs;
+        reg_rdata_next[4] = mp_region_cfg_6_scramble_en_6_qs;
+        reg_rdata_next[16:8] = mp_region_cfg_6_base_6_qs;
+        reg_rdata_next[29:20] = mp_region_cfg_6_size_6_qs;
+      end
+
+      addr_hit[21]: begin
+        reg_rdata_next[0] = mp_region_cfg_7_en_7_qs;
+        reg_rdata_next[1] = mp_region_cfg_7_rd_en_7_qs;
+        reg_rdata_next[2] = mp_region_cfg_7_prog_en_7_qs;
+        reg_rdata_next[3] = mp_region_cfg_7_erase_en_7_qs;
+        reg_rdata_next[4] = mp_region_cfg_7_scramble_en_7_qs;
+        reg_rdata_next[16:8] = mp_region_cfg_7_base_7_qs;
+        reg_rdata_next[29:20] = mp_region_cfg_7_size_7_qs;
+      end
+
+      addr_hit[22]: begin
+        reg_rdata_next[0] = default_region_rd_en_qs;
+        reg_rdata_next[1] = default_region_prog_en_qs;
+        reg_rdata_next[2] = default_region_erase_en_qs;
+        reg_rdata_next[3] = default_region_scramble_en_qs;
+      end
+
+      addr_hit[23]: begin
+        reg_rdata_next[0] = bank0_info0_regwen_0_qs;
+      end
+
+      addr_hit[24]: begin
+        reg_rdata_next[0] = bank0_info0_regwen_1_qs;
+      end
+
+      addr_hit[25]: begin
+        reg_rdata_next[0] = bank0_info0_regwen_2_qs;
+      end
+
+      addr_hit[26]: begin
+        reg_rdata_next[0] = bank0_info0_regwen_3_qs;
+      end
+
+      addr_hit[27]: begin
+        reg_rdata_next[0] = bank0_info0_page_cfg_0_en_0_qs;
+        reg_rdata_next[1] = bank0_info0_page_cfg_0_rd_en_0_qs;
+        reg_rdata_next[2] = bank0_info0_page_cfg_0_prog_en_0_qs;
+        reg_rdata_next[3] = bank0_info0_page_cfg_0_erase_en_0_qs;
+        reg_rdata_next[4] = bank0_info0_page_cfg_0_scramble_en_0_qs;
+      end
+
+      addr_hit[28]: begin
+        reg_rdata_next[0] = bank0_info0_page_cfg_1_en_1_qs;
+        reg_rdata_next[1] = bank0_info0_page_cfg_1_rd_en_1_qs;
+        reg_rdata_next[2] = bank0_info0_page_cfg_1_prog_en_1_qs;
+        reg_rdata_next[3] = bank0_info0_page_cfg_1_erase_en_1_qs;
+        reg_rdata_next[4] = bank0_info0_page_cfg_1_scramble_en_1_qs;
+      end
+
+      addr_hit[29]: begin
+        reg_rdata_next[0] = bank0_info0_page_cfg_2_en_2_qs;
+        reg_rdata_next[1] = bank0_info0_page_cfg_2_rd_en_2_qs;
+        reg_rdata_next[2] = bank0_info0_page_cfg_2_prog_en_2_qs;
+        reg_rdata_next[3] = bank0_info0_page_cfg_2_erase_en_2_qs;
+        reg_rdata_next[4] = bank0_info0_page_cfg_2_scramble_en_2_qs;
+      end
+
+      addr_hit[30]: begin
+        reg_rdata_next[0] = bank0_info0_page_cfg_3_en_3_qs;
+        reg_rdata_next[1] = bank0_info0_page_cfg_3_rd_en_3_qs;
+        reg_rdata_next[2] = bank0_info0_page_cfg_3_prog_en_3_qs;
+        reg_rdata_next[3] = bank0_info0_page_cfg_3_erase_en_3_qs;
+        reg_rdata_next[4] = bank0_info0_page_cfg_3_scramble_en_3_qs;
+      end
+
+      addr_hit[31]: begin
+        reg_rdata_next[0] = bank0_info1_regwen_0_qs;
+      end
+
+      addr_hit[32]: begin
+        reg_rdata_next[0] = bank0_info1_regwen_1_qs;
+      end
+
+      addr_hit[33]: begin
+        reg_rdata_next[0] = bank0_info1_regwen_2_qs;
+      end
+
+      addr_hit[34]: begin
+        reg_rdata_next[0] = bank0_info1_regwen_3_qs;
+      end
+
+      addr_hit[35]: begin
+        reg_rdata_next[0] = bank0_info1_page_cfg_0_en_0_qs;
+        reg_rdata_next[1] = bank0_info1_page_cfg_0_rd_en_0_qs;
+        reg_rdata_next[2] = bank0_info1_page_cfg_0_prog_en_0_qs;
+        reg_rdata_next[3] = bank0_info1_page_cfg_0_erase_en_0_qs;
+        reg_rdata_next[4] = bank0_info1_page_cfg_0_scramble_en_0_qs;
+      end
+
+      addr_hit[36]: begin
+        reg_rdata_next[0] = bank0_info1_page_cfg_1_en_1_qs;
+        reg_rdata_next[1] = bank0_info1_page_cfg_1_rd_en_1_qs;
+        reg_rdata_next[2] = bank0_info1_page_cfg_1_prog_en_1_qs;
+        reg_rdata_next[3] = bank0_info1_page_cfg_1_erase_en_1_qs;
+        reg_rdata_next[4] = bank0_info1_page_cfg_1_scramble_en_1_qs;
+      end
+
+      addr_hit[37]: begin
+        reg_rdata_next[0] = bank0_info1_page_cfg_2_en_2_qs;
+        reg_rdata_next[1] = bank0_info1_page_cfg_2_rd_en_2_qs;
+        reg_rdata_next[2] = bank0_info1_page_cfg_2_prog_en_2_qs;
+        reg_rdata_next[3] = bank0_info1_page_cfg_2_erase_en_2_qs;
+        reg_rdata_next[4] = bank0_info1_page_cfg_2_scramble_en_2_qs;
+      end
+
+      addr_hit[38]: begin
+        reg_rdata_next[0] = bank0_info1_page_cfg_3_en_3_qs;
+        reg_rdata_next[1] = bank0_info1_page_cfg_3_rd_en_3_qs;
+        reg_rdata_next[2] = bank0_info1_page_cfg_3_prog_en_3_qs;
+        reg_rdata_next[3] = bank0_info1_page_cfg_3_erase_en_3_qs;
+        reg_rdata_next[4] = bank0_info1_page_cfg_3_scramble_en_3_qs;
+      end
+
+      addr_hit[39]: begin
+        reg_rdata_next[0] = bank1_info0_regwen_0_qs;
+      end
+
+      addr_hit[40]: begin
+        reg_rdata_next[0] = bank1_info0_regwen_1_qs;
+      end
+
+      addr_hit[41]: begin
+        reg_rdata_next[0] = bank1_info0_regwen_2_qs;
+      end
+
+      addr_hit[42]: begin
+        reg_rdata_next[0] = bank1_info0_regwen_3_qs;
+      end
+
+      addr_hit[43]: begin
+        reg_rdata_next[0] = bank1_info0_page_cfg_0_en_0_qs;
+        reg_rdata_next[1] = bank1_info0_page_cfg_0_rd_en_0_qs;
+        reg_rdata_next[2] = bank1_info0_page_cfg_0_prog_en_0_qs;
+        reg_rdata_next[3] = bank1_info0_page_cfg_0_erase_en_0_qs;
+        reg_rdata_next[4] = bank1_info0_page_cfg_0_scramble_en_0_qs;
+      end
+
+      addr_hit[44]: begin
+        reg_rdata_next[0] = bank1_info0_page_cfg_1_en_1_qs;
+        reg_rdata_next[1] = bank1_info0_page_cfg_1_rd_en_1_qs;
+        reg_rdata_next[2] = bank1_info0_page_cfg_1_prog_en_1_qs;
+        reg_rdata_next[3] = bank1_info0_page_cfg_1_erase_en_1_qs;
+        reg_rdata_next[4] = bank1_info0_page_cfg_1_scramble_en_1_qs;
+      end
+
+      addr_hit[45]: begin
+        reg_rdata_next[0] = bank1_info0_page_cfg_2_en_2_qs;
+        reg_rdata_next[1] = bank1_info0_page_cfg_2_rd_en_2_qs;
+        reg_rdata_next[2] = bank1_info0_page_cfg_2_prog_en_2_qs;
+        reg_rdata_next[3] = bank1_info0_page_cfg_2_erase_en_2_qs;
+        reg_rdata_next[4] = bank1_info0_page_cfg_2_scramble_en_2_qs;
+      end
+
+      addr_hit[46]: begin
+        reg_rdata_next[0] = bank1_info0_page_cfg_3_en_3_qs;
+        reg_rdata_next[1] = bank1_info0_page_cfg_3_rd_en_3_qs;
+        reg_rdata_next[2] = bank1_info0_page_cfg_3_prog_en_3_qs;
+        reg_rdata_next[3] = bank1_info0_page_cfg_3_erase_en_3_qs;
+        reg_rdata_next[4] = bank1_info0_page_cfg_3_scramble_en_3_qs;
+      end
+
+      addr_hit[47]: begin
+        reg_rdata_next[0] = bank1_info1_regwen_0_qs;
+      end
+
+      addr_hit[48]: begin
+        reg_rdata_next[0] = bank1_info1_regwen_1_qs;
+      end
+
+      addr_hit[49]: begin
+        reg_rdata_next[0] = bank1_info1_regwen_2_qs;
+      end
+
+      addr_hit[50]: begin
+        reg_rdata_next[0] = bank1_info1_regwen_3_qs;
+      end
+
+      addr_hit[51]: begin
+        reg_rdata_next[0] = bank1_info1_page_cfg_0_en_0_qs;
+        reg_rdata_next[1] = bank1_info1_page_cfg_0_rd_en_0_qs;
+        reg_rdata_next[2] = bank1_info1_page_cfg_0_prog_en_0_qs;
+        reg_rdata_next[3] = bank1_info1_page_cfg_0_erase_en_0_qs;
+        reg_rdata_next[4] = bank1_info1_page_cfg_0_scramble_en_0_qs;
+      end
+
+      addr_hit[52]: begin
+        reg_rdata_next[0] = bank1_info1_page_cfg_1_en_1_qs;
+        reg_rdata_next[1] = bank1_info1_page_cfg_1_rd_en_1_qs;
+        reg_rdata_next[2] = bank1_info1_page_cfg_1_prog_en_1_qs;
+        reg_rdata_next[3] = bank1_info1_page_cfg_1_erase_en_1_qs;
+        reg_rdata_next[4] = bank1_info1_page_cfg_1_scramble_en_1_qs;
+      end
+
+      addr_hit[53]: begin
+        reg_rdata_next[0] = bank1_info1_page_cfg_2_en_2_qs;
+        reg_rdata_next[1] = bank1_info1_page_cfg_2_rd_en_2_qs;
+        reg_rdata_next[2] = bank1_info1_page_cfg_2_prog_en_2_qs;
+        reg_rdata_next[3] = bank1_info1_page_cfg_2_erase_en_2_qs;
+        reg_rdata_next[4] = bank1_info1_page_cfg_2_scramble_en_2_qs;
+      end
+
+      addr_hit[54]: begin
+        reg_rdata_next[0] = bank1_info1_page_cfg_3_en_3_qs;
+        reg_rdata_next[1] = bank1_info1_page_cfg_3_rd_en_3_qs;
+        reg_rdata_next[2] = bank1_info1_page_cfg_3_prog_en_3_qs;
+        reg_rdata_next[3] = bank1_info1_page_cfg_3_erase_en_3_qs;
+        reg_rdata_next[4] = bank1_info1_page_cfg_3_scramble_en_3_qs;
+      end
+
+      addr_hit[55]: begin
+        reg_rdata_next[0] = bank_cfg_regwen_qs;
+      end
+
+      addr_hit[56]: begin
+        reg_rdata_next[0] = mp_bank_cfg_erase_en_0_qs;
+        reg_rdata_next[1] = mp_bank_cfg_erase_en_1_qs;
+      end
+
+      addr_hit[57]: begin
+        reg_rdata_next[0] = op_status_done_qs;
+        reg_rdata_next[1] = op_status_err_qs;
+      end
+
+      addr_hit[58]: begin
+        reg_rdata_next[0] = status_rd_full_qs;
+        reg_rdata_next[1] = status_rd_empty_qs;
+        reg_rdata_next[2] = status_prog_full_qs;
+        reg_rdata_next[3] = status_prog_empty_qs;
+        reg_rdata_next[4] = status_init_wip_qs;
+        reg_rdata_next[16:8] = status_error_addr_qs;
+      end
+
+      addr_hit[59]: begin
+        reg_rdata_next[0] = phy_status_init_wip_qs;
+        reg_rdata_next[1] = phy_status_prog_normal_avail_qs;
+        reg_rdata_next[2] = phy_status_prog_repair_avail_qs;
+      end
+
+      addr_hit[60]: begin
+        reg_rdata_next[31:0] = scratch_qs;
+      end
+
+      addr_hit[61]: begin
+        reg_rdata_next[4:0] = fifo_lvl_prog_qs;
+        reg_rdata_next[12:8] = fifo_lvl_rd_qs;
+      end
+
+      addr_hit[62]: begin
+        reg_rdata_next[0] = fifo_rst_qs;
+      end
+
+      default: begin
+        reg_rdata_next = '1;
+      end
+    endcase
+  end
+
+  // Assertions for Register Interface
+  `ASSERT_PULSE(wePulse, reg_we)
+  `ASSERT_PULSE(rePulse, reg_re)
+
+  `ASSERT(reAfterRv, $rose(reg_re || reg_we) |=> tl_o.d_valid)
+
+  `ASSERT(en2addrHit, (reg_we || reg_re) |-> $onehot0(addr_hit))
+
+  // this is formulated as an assumption such that the FPV testbenches do disprove this
+  // property by mistake
+  `ASSUME(reqParity, tl_reg_h2d.a_valid |-> tl_reg_h2d.a_user.parity_en == 1'b0)
+
+endmodule