kernel: use more ID::*
[yosys.git] / passes / fsm / fsm_extract.cc
index 8a4ee3f265de636cb77e1dc914d3d7f650d7daf0..354ad87eb9febd15c532ea6279da0d2a0a1ebbda 100644 (file)
@@ -70,15 +70,15 @@ static bool find_states(RTLIL::SigSpec sig, const RTLIL::SigSpec &dff_out, RTLIL
        for (auto &cellport : cellport_list)
        {
                RTLIL::Cell *cell = module->cells_.at(cellport.first);
-               if ((cell->type != "$mux" && cell->type != "$pmux") || cellport.second != "\\Y") {
+               if ((cell->type != "$mux" && cell->type != "$pmux") || cellport.second != ID::Y) {
                        log("  unexpected cell type %s (%s) found in state selection tree.\n", cell->type.c_str(), cell->name.c_str());
                        return false;
                }
 
-               RTLIL::SigSpec sig_a = assign_map(cell->getPort("\\A"));
-               RTLIL::SigSpec sig_b = assign_map(cell->getPort("\\B"));
-               RTLIL::SigSpec sig_s = assign_map(cell->getPort("\\S"));
-               RTLIL::SigSpec sig_y = assign_map(cell->getPort("\\Y"));
+               RTLIL::SigSpec sig_a = assign_map(cell->getPort(ID::A));
+               RTLIL::SigSpec sig_b = assign_map(cell->getPort(ID::B));
+               RTLIL::SigSpec sig_s = assign_map(cell->getPort(ID::S));
+               RTLIL::SigSpec sig_y = assign_map(cell->getPort(ID::Y));
 
                RTLIL::SigSpec sig_aa = sig;
                sig_aa.replace(sig_y, sig_a);
@@ -168,7 +168,7 @@ undef_bit_in_next_state:
                        ctrl_in_bit_indices[ctrl_in[i]] = i;
 
                for (auto &it : ctrl_in_bit_indices)
-                       if (tr.ctrl_in.bits.at(it.second) == RTLIL::S1 && exclusive_ctrls.count(it.first) != 0)
+                       if (tr.ctrl_in.bits.at(it.second) == State::S1 && exclusive_ctrls.count(it.first) != 0)
                                for (auto &dc_bit : exclusive_ctrls.at(it.first))
                                        if (ctrl_in_bit_indices.count(dc_bit))
                                                tr.ctrl_in.bits.at(ctrl_in_bit_indices.at(dc_bit)) = RTLIL::State::Sa;
@@ -178,7 +178,7 @@ undef_bit_in_next_state:
                        log_state_in = fsm_data.state_table.at(state_in);
 
                if (states.count(ce.values_map(ce.assign_map(dff_in)).as_const()) == 0) {
-                       log("  transition: %10s %s -> INVALID_STATE(%s) %s  <ignored invalid transistion!>%s\n",
+                       log("  transition: %10s %s -> INVALID_STATE(%s) %s  <ignored invalid transition!>%s\n",
                                        log_signal(log_state_in), log_signal(tr.ctrl_in),
                                        log_signal(ce.values_map(ce.assign_map(dff_in))), log_signal(tr.ctrl_out),
                                        undef_bit_in_next_state_mode ? " SHORTENED" : "");
@@ -194,7 +194,7 @@ undef_bit_in_next_state:
                                        log_signal(log_state_in), log_signal(tr.ctrl_in),
                                        log_signal(fsm_data.state_table[tr.state_out]), log_signal(tr.ctrl_out));
                } else {
-                       log("  transition: %10s %s -> %10s %s  <ignored undef transistion!>\n",
+                       log("  transition: %10s %s -> %10s %s  <ignored undef transition!>\n",
                                        log_signal(log_state_in), log_signal(tr.ctrl_in),
                                        log_signal(fsm_data.state_table[tr.state_out]), log_signal(tr.ctrl_out));
                }
@@ -216,13 +216,13 @@ undef_bit_in_next_state:
                ce.push();
                dont_care.append(undef);
                ce.set(undef, constval.as_const());
-               if (exclusive_ctrls.count(undef) && constval == RTLIL::S1)
+               if (exclusive_ctrls.count(undef) && constval == State::S1)
                        for (auto &bit : exclusive_ctrls.at(undef)) {
                                RTLIL::SigSpec bitval = bit;
-                               if (ce.eval(bitval) && bitval != RTLIL::S0)
+                               if (ce.eval(bitval) && bitval != State::S0)
                                        goto found_contradiction_1;
                                else
-                                       ce.set(bit, RTLIL::S0);
+                                       ce.set(bit, State::S0);
                        }
                find_transitions(ce, ce_nostop, fsm_data, states, state_in, ctrl_in, ctrl_out, dff_in, dont_care);
        found_contradiction_1:
@@ -231,21 +231,21 @@ undef_bit_in_next_state:
        else
        {
                ce.push(), ce_nostop.push();
-               ce.set(undef, RTLIL::S0);
-               ce_nostop.set(undef, RTLIL::S0);
+               ce.set(undef, State::S0);
+               ce_nostop.set(undef, State::S0);
                find_transitions(ce, ce_nostop, fsm_data, states, state_in, ctrl_in, ctrl_out, dff_in, dont_care);
                ce.pop(), ce_nostop.pop();
 
                ce.push(), ce_nostop.push();
-               ce.set(undef, RTLIL::S1);
-               ce_nostop.set(undef, RTLIL::S1);
+               ce.set(undef, State::S1);
+               ce_nostop.set(undef, State::S1);
                if (exclusive_ctrls.count(undef))
                        for (auto &bit : exclusive_ctrls.at(undef)) {
                                RTLIL::SigSpec bitval = bit;
-                               if ((ce.eval(bitval) || ce_nostop.eval(bitval)) && bitval != RTLIL::S0)
+                               if ((ce.eval(bitval) || ce_nostop.eval(bitval)) && bitval != State::S0)
                                        goto found_contradiction_2;
                                else
-                                       ce.set(bit, RTLIL::S0), ce_nostop.set(bit, RTLIL::S0);
+                                       ce.set(bit, State::S0), ce_nostop.set(bit, RTLIL::S0);
                        }
                find_transitions(ce, ce_nostop, fsm_data, states, state_in, ctrl_in, ctrl_out, dff_in, dont_care);
        found_contradiction_2:
@@ -263,8 +263,8 @@ static void extract_fsm(RTLIL::Wire *wire)
        RTLIL::SigSpec dff_in(RTLIL::State::Sm, wire->width);
        RTLIL::Const reset_state(RTLIL::State::Sx, wire->width);
 
-       RTLIL::SigSpec clk = RTLIL::S0;
-       RTLIL::SigSpec arst = RTLIL::S0;
+       RTLIL::SigSpec clk = State::S0;
+       RTLIL::SigSpec arst = State::S0;
        bool clk_polarity = true;
        bool arst_polarity = true;
 
@@ -320,14 +320,14 @@ static void extract_fsm(RTLIL::Wire *wire)
        sig2trigger.find(dff_out, cellport_list);
        for (auto &cellport : cellport_list) {
                RTLIL::Cell *cell = module->cells_.at(cellport.first);
-               RTLIL::SigSpec sig_a = assign_map(cell->getPort("\\A"));
+               RTLIL::SigSpec sig_a = assign_map(cell->getPort(ID::A));
                RTLIL::SigSpec sig_b;
-               if (cell->hasPort("\\B"))
-                       sig_b = assign_map(cell->getPort("\\B"));
-               RTLIL::SigSpec sig_y = assign_map(cell->getPort("\\Y"));
-               if (cellport.second == "\\A" && !sig_b.is_fully_const())
+               if (cell->hasPort(ID::B))
+                       sig_b = assign_map(cell->getPort(ID::B));
+               RTLIL::SigSpec sig_y = assign_map(cell->getPort(ID::Y));
+               if (cellport.second == ID::A && !sig_b.is_fully_const())
                        continue;
-               if (cellport.second == "\\B" && !sig_a.is_fully_const())
+               if (cellport.second == ID::B && !sig_a.is_fully_const())
                        continue;
                log("  found ctrl output: %s\n", log_signal(sig_y));
                ctrl_out.append(sig_y);
@@ -371,8 +371,8 @@ static void extract_fsm(RTLIL::Wire *wire)
        RTLIL::Cell *fsm_cell = module->addCell(stringf("$fsm$%s$%d", wire->name.c_str(), autoidx++), "$fsm");
        fsm_cell->setPort("\\CLK", clk);
        fsm_cell->setPort("\\ARST", arst);
-       fsm_cell->parameters["\\CLK_POLARITY"] = clk_polarity ? RTLIL::S1 : RTLIL::S0;
-       fsm_cell->parameters["\\ARST_POLARITY"] = arst_polarity ? RTLIL::S1 : RTLIL::S0;
+       fsm_cell->parameters["\\CLK_POLARITY"] = clk_polarity ? State::S1 : State::S0;
+       fsm_cell->parameters["\\ARST_POLARITY"] = arst_polarity ? State::S1 : State::S0;
        fsm_cell->setPort("\\CTRL_IN", ctrl_in);
        fsm_cell->setPort("\\CTRL_OUT", ctrl_out);
        fsm_cell->parameters["\\NAME"] = RTLIL::Const(wire->name.str());
@@ -382,7 +382,7 @@ static void extract_fsm(RTLIL::Wire *wire)
        // rename original state wire
 
        module->wires_.erase(wire->name);
-       wire->attributes.erase("\\fsm_encoding");
+       wire->attributes.erase(ID::fsm_encoding);
        wire->name = stringf("$fsm$oldstate%s", wire->name.c_str());
        module->wires_[wire->name] = wire;
 
@@ -401,7 +401,7 @@ static void extract_fsm(RTLIL::Wire *wire)
 
 struct FsmExtractPass : public Pass {
        FsmExtractPass() : Pass("fsm_extract", "extracting FSMs in design") { }
-       virtual void help()
+       void help() YS_OVERRIDE
        {
                //   |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
                log("\n");
@@ -417,16 +417,12 @@ struct FsmExtractPass : public Pass {
                log("'opt_clean' pass to eliminate this signal.\n");
                log("\n");
        }
-       virtual void execute(std::vector<std::string> args, RTLIL::Design *design)
+       void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
        {
                log_header(design, "Executing FSM_EXTRACT pass (extracting FSM from design).\n");
                extra_args(args, 1, design);
 
-               CellTypes ct;
-               ct.setup_internals();
-               ct.setup_internals_mem();
-               ct.setup_stdcells();
-               ct.setup_stdcells_mem();
+               CellTypes ct(design);
 
                for (auto &mod_it : design->modules_)
                {
@@ -446,15 +442,15 @@ struct FsmExtractPass : public Pass {
                                                assign_map.apply(sig);
                                                sig2driver.insert(sig, sig2driver_entry_t(cell->name, conn_it.first));
                                        }
-                                       if (ct.cell_input(cell->type, conn_it.first) && cell->hasPort("\\Y") &&
-                                                       cell->getPort("\\Y").size() == 1 && (conn_it.first == "\\A" || conn_it.first == "\\B")) {
+                                       if (ct.cell_input(cell->type, conn_it.first) && cell->hasPort(ID::Y) &&
+                                                       cell->getPort(ID::Y).size() == 1 && (conn_it.first == ID::A || conn_it.first == ID::B)) {
                                                RTLIL::SigSpec sig = conn_it.second;
                                                assign_map.apply(sig);
                                                sig2trigger.insert(sig, sig2driver_entry_t(cell->name, conn_it.first));
                                        }
                                }
                                if (cell->type == "$pmux") {
-                                       RTLIL::SigSpec sel_sig = assign_map(cell->getPort("\\S"));
+                                       RTLIL::SigSpec sel_sig = assign_map(cell->getPort(ID::S));
                                        for (auto &bit1 : sel_sig)
                                        for (auto &bit2 : sel_sig)
                                                if (bit1 != bit2)
@@ -464,7 +460,7 @@ struct FsmExtractPass : public Pass {
 
                        std::vector<RTLIL::Wire*> wire_list;
                        for (auto &wire_it : module->wires_)
-                               if (wire_it.second->attributes.count("\\fsm_encoding") > 0 && wire_it.second->attributes["\\fsm_encoding"].decode_string() != "none")
+                               if (wire_it.second->attributes.count(ID::fsm_encoding) > 0 && wire_it.second->attributes[ID::fsm_encoding].decode_string() != "none")
                                        if (design->selected(module, wire_it.second))
                                                wire_list.push_back(wire_it.second);
                        for (auto wire : wire_list)