Tweak default gate costs, cleanup "stat -tech cmos"
authorClifford Wolf <clifford@clifford.at>
Wed, 7 Aug 2019 08:25:51 +0000 (10:25 +0200)
committerClifford Wolf <clifford@clifford.at>
Wed, 7 Aug 2019 08:25:51 +0000 (10:25 +0200)
Signed-off-by: Clifford Wolf <clifford@clifford.at>
kernel/cost.h
passes/cmds/stat.cc

index 7ff11eba2c5e6637da0ca382356a62131020410c..10fa50fb33b57be92d473fae3c3b7c5ec1051830 100644 (file)
@@ -36,12 +36,12 @@ struct CellCosts
                        { "$_NOR_",    4 },
                        { "$_ANDNOT_", 4 },
                        { "$_ORNOT_",  4 },
-                       { "$_XOR_",    6 },
-                       { "$_XNOR_",   6 },
+                       { "$_XOR_",    5 },
+                       { "$_XNOR_",   5 },
                        { "$_AOI3_",   6 },
                        { "$_OAI3_",   6 },
-                       { "$_AOI4_",   8 },
-                       { "$_OAI4_",   8 },
+                       { "$_AOI4_",   7 },
+                       { "$_OAI4_",   7 },
                        { "$_MUX_",    4 },
                        { "$_NMUX_",   4 }
                };
index 89920ed555d1ce0a0d1709caacc4bb337cb6f0ab..c8e4f3981281a18b9c83ad284c738ae8e3becb47 100644 (file)
  *
  */
 
-#include "kernel/register.h"
+#include "kernel/yosys.h"
 #include "kernel/celltypes.h"
 #include "passes/techmap/libparse.h"
-
-#include "kernel/log.h"
+#include "kernel/cost.h"
 
 USING_YOSYS_NAMESPACE
 PRIVATE_NAMESPACE_BEGIN
@@ -228,25 +227,16 @@ struct statdata_t
                {
                        int tran_cnt = 0;
                        bool tran_cnt_exact = true;
+                       auto &gate_costs = CellCosts::cmos_gate_cost();
 
                        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("$_NMUX_"))
-                                       tran_cnt += 10*cnum;
-                               else if (ctype.in("$_MUX_", "$_XOR_", "$_XNOR_"))
-                                       tran_cnt += 12*cnum;
+                               if (gate_costs.count(ctype))
+                                       tran_cnt += cnum * gate_costs.at(ctype);
                                else if (ctype.in("$_DFF_P_", "$_DFF_N_"))
-                                       tran_cnt += 16*cnum;
+                                       tran_cnt += cnum * 16;
                                else
                                        tran_cnt_exact = false;
                        }