diff --git a/src/periph/fpga.cpp b/src/periph/fpga.cpp
index 65e4462dd2ca5c1eaeb354bc19030334a3f6278a..ff23885253fe6d1903b6c9cf692bc58595f99304 100644
--- a/src/periph/fpga.cpp
+++ b/src/periph/fpga.cpp
@@ -631,6 +631,7 @@ bool Periph_fpga::read_system_info(TermOutput& termout)
         return false;
     }
 
+    // Register can be read, now get mmap if empty.
     if (mmap->empty()) {
         if (mmap != NULL) { delete mmap; }
         mmap = new CMMap(read_reg_map());
@@ -647,8 +648,13 @@ bool Periph_fpga::read_system_info(TermOutput& termout)
         }
     }
 
-    // string design_name = read_design_name();
-    my_current_design_name = read_design_name();
+    // If the design name is changed clear the mmap.
+    string design_name = read_design_name();
+    if (design_name != my_current_design_name) {
+        mmap->clear();
+    }
+    my_current_design_name = design_name;
+
     // cout << "node " << GlobalNr << " design_name= " << my_current_design_name << endl;
 
     // FIXME: get rid of magic constants in masks, should be in CCFG: