Add $mem support to SMT2 clock tagging
authorClifford Wolf <clifford@clifford.at>
Tue, 27 Mar 2018 00:11:20 +0000 (02:11 +0200)
committerClifford Wolf <clifford@clifford.at>
Tue, 27 Mar 2018 00:11:20 +0000 (02:11 +0200)
Signed-off-by: Clifford Wolf <clifford@clifford.at>
backends/smt2/smt2.cc

index 47c993d059736f0df90a5403c9ea83be0b932495..2fb6d4da9c5258743274fda0ea8e66c69ee12f7a 100644 (file)
@@ -135,6 +135,24 @@ struct Smt2Worker
                                log_error("Unsupported or unknown directionality on port %s of cell %s.%s (%s).\n",
                                                log_id(conn.first), log_id(module), log_id(cell), log_id(cell->type));
 
+                       if (cell->type.in("$mem") && conn.first.in("\\RD_CLK", "\\WR_CLK"))
+                       {
+                               SigSpec clk = sigmap(conn.second);
+                               for (int i = 0; i < GetSize(clk); i++)
+                               {
+                                       if (clk[i].wire == nullptr)
+                                               continue;
+
+                                       if (cell->getParam(conn.first == "\\RD_CLK" ? "\\RD_CLK_ENABLE" : "\\WR_CLK_ENABLE")[i] != State::S1)
+                                               continue;
+
+                                       if (cell->getParam(conn.first == "\\RD_CLK" ? "\\RD_CLK_POLARITY" : "\\WR_CLK_POLARITY")[i] == State::S1)
+                                               clock_posedge.insert(clk[i]);
+                                       else
+                                               clock_negedge.insert(clk[i]);
+                               }
+                       }
+                       else
                        if (cell->type.in("$dff", "$_DFF_P_", "$_DFF_N_") && conn.first.in("\\CLK", "\\C"))
                        {
                                bool posedge = (cell->type == "$_DFF_N_") || (cell->type == "$dff" && cell->getParam("\\CLK_POLARITY").as_bool());