[reggen] Use Base address to calculate window

This is related to #169
diff --git a/hw/ip/flash_ctrl/sw/flash_ctrl_regs.h b/hw/ip/flash_ctrl/sw/flash_ctrl_regs.h
index 2cc2c81..54dba3e 100644
--- a/hw/ip/flash_ctrl/sw/flash_ctrl_regs.h
+++ b/hw/ip/flash_ctrl/sw/flash_ctrl_regs.h
@@ -179,11 +179,11 @@
 #define FLASH_CTRL_FIFO_LVL_RD_OFFSET 8
 
 // Memory area: Flash program fifo.
-#define FLASH_CTRL_PROG_FIFO(base) ((base) + 0x4c)
+#define FLASH_CTRL_PROG_FIFO(id) (FLASH_CTRL##id##_BASE_ADDR + 0x4c)
 #define FLASH_CTRL_PROG_FIFO_SIZE_WORDS 1
 #define FLASH_CTRL_PROG_FIFO_SIZE_BYTES 4
 // Memory area: Flash read fifo.
-#define FLASH_CTRL_RD_FIFO(base) ((base) + 0x50)
+#define FLASH_CTRL_RD_FIFO(id) (FLASH_CTRL##id##_BASE_ADDR + 0x50)
 #define FLASH_CTRL_RD_FIFO_SIZE_WORDS 1
 #define FLASH_CTRL_RD_FIFO_SIZE_BYTES 4
 #endif  // _FLASH_CTRL_REG_DEFS_
diff --git a/hw/ip/hmac/sw/hmac_regs.h b/hw/ip/hmac/sw/hmac_regs.h
index bb2b093..319b059 100644
--- a/hw/ip/hmac/sw/hmac_regs.h
+++ b/hw/ip/hmac/sw/hmac_regs.h
@@ -102,7 +102,7 @@
 #define HMAC_MSG_LENGTH_UPPER(id) (HMAC##id##_BASE_ADDR + 0x60)
 
 // Memory area: Message FIFO. Any address starts from offset 0x800 to 0xFFF
-#define HMAC_MSG_FIFO(base) ((base) + 0x800)
+#define HMAC_MSG_FIFO(id) (HMAC##id##_BASE_ADDR + 0x800)
 #define HMAC_MSG_FIFO_SIZE_WORDS 512
 #define HMAC_MSG_FIFO_SIZE_BYTES 2048
 #endif  // _HMAC_REG_DEFS_
diff --git a/hw/ip/spi_device/sw/spi_device_regs.h b/hw/ip/spi_device/sw/spi_device_regs.h
index 6b340d4..565d999 100644
--- a/hw/ip/spi_device/sw/spi_device_regs.h
+++ b/hw/ip/spi_device/sw/spi_device_regs.h
@@ -100,7 +100,7 @@
 #define SPI_DEVICE_TXF_ADDR_LIMIT_OFFSET 16
 
 // Memory area: SPI internal 2kB buffer.
-#define SPI_DEVICE_BUFFER(base) ((base) + 0x800)
+#define SPI_DEVICE_BUFFER(id) (SPI_DEVICE##id##_BASE_ADDR + 0x800)
 #define SPI_DEVICE_BUFFER_SIZE_WORDS 512
 #define SPI_DEVICE_BUFFER_SIZE_BYTES 2048
 #endif  // _SPI_DEVICE_REG_DEFS_
diff --git a/util/reggen/gen_cheader.py b/util/reggen/gen_cheader.py
index 3fd3417..84ad28e 100644
--- a/util/reggen/gen_cheader.py
+++ b/util/reggen/gen_cheader.py
@@ -54,16 +54,15 @@
                 mask = field['bitinfo'][0] >> fieldlsb
                 genout(outstr,
                        '#define ' + dname + '_MASK ' + hex(mask) + '\n')
-                genout(
-                    outstr,
-                    '#define ' + dname + '_OFFSET ' + str(fieldlsb) + '\n')
+                genout(outstr,
+                       '#define ' + dname + '_OFFSET ' + str(fieldlsb) + '\n')
             if 'enum' in field:
                 for enum in field['enum']:
                     ename = as_define(enum['name'])
                     genout(
                         outstr,
-                        '#define ' + defname + '_' + as_define(field['name'])
-                        + '_' + ename + ' ' + enum['value'] + '\n')
+                        '#define ' + defname + '_' + as_define(field['name']) +
+                        '_' + ename + ' ' + enum['value'] + '\n')
     genout(outstr, '\n')
     return
 
@@ -75,8 +74,8 @@
     genout(outstr, '// Memory area: ' + clean_desc(win['desc']) + '\n')
     defname = as_define(comp + '_' + wname)
     genout(
-        outstr,
-        '#define ' + defname + '(base) ((base) + ' + hex(offset) + ')\n')
+        outstr, '#define ' + defname + '(id) (' + as_define(comp) +
+        '##id##_BASE_ADDR + ' + hex(offset) + ')\n')
     items = int(win['items'])
     genout(outstr, '#define ' + defname + '_SIZE_WORDS ' + str(items) + '\n')
     items = items * (regwidth // 8)