Also rename cells with _TECHMAP_REPLACE_. prefix, as per @cliffordwolf
authorEddie Hung <eddie@fpgeh.com>
Wed, 2 Oct 2019 19:43:35 +0000 (12:43 -0700)
committerEddie Hung <eddie@fpgeh.com>
Wed, 2 Oct 2019 19:43:35 +0000 (12:43 -0700)
passes/techmap/techmap.cc

index 8f8cff9faf08a9f371e056671b30df252f6973c0..0c57733d41f1996a49f0df06d9bc3f28ee4abf71 100644 (file)
@@ -384,6 +384,8 @@ struct TechmapWorker
 
                        if (techmap_replace_cell)
                                c_name = orig_cell_name;
+                       else if (it.second->name.begins_with("\\_TECHMAP_REPLACE_."))
+                               c_name = stringf("%s%s", orig_cell_name.c_str(), c_name.c_str() + strlen("\\_TECHMAP_REPLACE_"));
                        else
                                apply_prefix(cell->name, c_name);
 
@@ -1204,10 +1206,12 @@ struct TechmapPass : public Pass {
                log("\n");
                log("A cell with the name _TECHMAP_REPLACE_ in the map file will inherit the name\n");
                log("and attributes of the cell that is being replaced.\n");
-               log("A wire with a name of the form `_TECHMAP_REPLACE_.<suffix>` in the map file will\n");
-               log("cause a new wire alias to be created with its name set to the original but with\n");
-               log("its `_TECHMAP_REPLACE_' prefix to be substituted with the name of the cell being\n");
-               log("replaced.\n");
+               log("A cell with a name of the form `_TECHMAP_REPLACE_.<suffix>` in the map file will\n");
+               log("be named thus but with the `_TECHMAP_REPLACE_' prefix substituted with the name\n");
+               log("of the cell being replaced.\n");
+               log("Similarly, a wire named in the form `_TECHMAP_REPLACE_.<suffix>` will cause a\n");
+               log("new wire alias to be created and named as above but with the `_TECHMAP_REPLACE_'\n");
+               log("prefix also substituted.\n");
                log("\n");
                log("See 'help extract' for a pass that does the opposite thing.\n");
                log("\n");