Add "stat -tech cmos"
authorClifford Wolf <clifford@clifford.at>
Sat, 20 Jul 2019 13:06:28 +0000 (15:06 +0200)
committerClifford Wolf <clifford@clifford.at>
Sat, 20 Jul 2019 13:06:28 +0000 (15:06 +0200)
Signed-off-by: Clifford Wolf <clifford@clifford.at>
passes/cmds/stat.cc

index 27c5fb60ca70949023fe8b1c025f8d85490d0f27..80b400e0c7529a74ecafc4da704339e47a126869 100644 (file)
@@ -223,6 +223,33 @@ struct statdata_t
                        log("\n");
                        log("   Estimated number of LCs: %10d\n", lc_cnt);
                }
+
+               if (tech == "cmos")
+               {
+                       int tran_cnt = 0;
+                       bool tran_cnt_exact = true;
+
+                       for (auto it : num_cells_by_type) {
+                               auto ctype = it.first;
+                               auto cnum = it.second;
+
+                               if (ctype == "$_NOT_")
+                                       tran_cnt += 2*cnum;
+                               else if (ctype.in("$_NAND_", "$_NOR_"))
+                                       tran_cnt += 4*cnum;
+                               else if (ctype.in("$_AOI3_", "$_OAI3_"))
+                                       tran_cnt += 6*cnum;
+                               else if (ctype.in("$_AOI4_", "$_OAI4_"))
+                                       tran_cnt += 8*cnum;
+                               else if (ctype.in("$_DFF_P_", "$_DFF_N_"))
+                                       tran_cnt += 16*cnum;
+                               else
+                                       tran_cnt_exact = false;
+                       }
+
+                       log("\n");
+                       log("   Estimated number of transistors: %10d%s\n", tran_cnt, tran_cnt_exact ? "" : "+");
+               }
        }
 };
 
@@ -286,7 +313,7 @@ struct StatPass : public Pass {
                log("\n");
                log("    -tech <technology>\n");
                log("        print area estemate for the specified technology. Currently supported\n");
-               log("        values for <technology>: xilinx\n");
+               log("        values for <technology>: xilinx, cmos\n");
                log("\n");
                log("    -width\n");
                log("        annotate internal cell types with their word width.\n");
@@ -330,7 +357,7 @@ struct StatPass : public Pass {
                }
                extra_args(args, argidx, design);
 
-               if (techname != "" && techname != "xilinx")
+               if (techname != "" && techname != "xilinx" && techname != "cmos")
                        log_cmd_error("Unsupported technology: '%s'\n", techname.c_str());
 
                for (auto mod : design->selected_modules())