SDC: Simplify API Signed-off-by: Tomasz Michalak <tmichalak@antmicro.com>
diff --git a/sdc-plugin/clocks.cc b/sdc-plugin/clocks.cc index d634bb7..86e40e0 100644 --- a/sdc-plugin/clocks.cc +++ b/sdc-plugin/clocks.cc
@@ -23,7 +23,9 @@ void Clocks::AddClock(const std::string& name, std::vector<RTLIL::Wire*> wires, float period, float rising_edge, float falling_edge) { - AddClockWires(name, wires, period, rising_edge, falling_edge); + std::for_each(wires.begin(), wires.end(), [&, this](RTLIL::Wire* wire) { + AddClock(name, wire, period, rising_edge, falling_edge); + }); } void Clocks::AddClock(const std::string& name, RTLIL::Wire* wire, float period, @@ -46,26 +48,6 @@ clock.RisingEdge(), clock.FallingEdge()); } -void Clocks::AddClockWires(const std::string& name, - std::vector<RTLIL::Wire*> wires, float period, - float rising_edge, float falling_edge) { - std::for_each(wires.begin(), wires.end(), [&, this](RTLIL::Wire* wire) { - AddClockWire(name, wire, period, rising_edge, falling_edge); - }); -} - -void Clocks::AddClockWire(const std::string& name, RTLIL::Wire* wire, - float period, float rising_edge, float falling_edge) { - auto clock = - std::find_if(clocks_.begin(), clocks_.end(), - [&](Clock& clock) { return clock.Name() == name; }); - if (clock == clocks_.end()) { - AddClock(name, wire, period, rising_edge, falling_edge); - } else { - clock->AddWire(wire); - } -} - std::vector<std::string> Clocks::GetClockNames() { std::vector<std::string> res; for (auto clock : clocks_) { @@ -94,7 +76,7 @@ auto clock_wires = clock.GetClockWires(); for (auto clock_wire : clock_wires) { auto aliases = pass->FindAliasWires(clock_wire); - AddClockWires(clock.Name(), aliases, clock.Period(), + AddClock(clock.Name(), aliases, clock.Period(), clock.RisingEdge(), clock.FallingEdge()); } } @@ -106,14 +88,20 @@ void Clocks::Propagate(BufferPropagation* pass) { #ifdef SDC_DEBUG log("Start buffer clock propagation\n"); + log("IBUF pass\n"); #endif - for (auto clock : clocks_) { + std::vector<Clock> clocks(clocks_); + for (auto clock : clocks) { #ifdef SDC_DEBUG log("Processing clock %s\n", clock.Name().c_str()); #endif PropagateThroughBuffer(pass, clock, IBuf()); } - for (auto clock : clocks_) { +#ifdef SDC_DEBUG + log("BUFG pass\n"); +#endif + clocks = clocks_; + for (auto clock : clocks) { #ifdef SDC_DEBUG log("Processing clock %s\n", clock.Name().c_str()); #endif @@ -200,7 +188,7 @@ period_(period), rising_edge_(rising_edge), falling_edge_(falling_edge) { - AddWire(wire); + UpdateWires(wire); } Clock::Clock(const std::string& name, std::vector<RTLIL::Wire*> wires, @@ -210,14 +198,7 @@ rising_edge_(rising_edge), falling_edge_(falling_edge) { std::for_each(wires.begin(), wires.end(), - [&, this](RTLIL::Wire* wire) { AddWire(wire); }); -} - -void Clock::AddWire(RTLIL::Wire* wire) { - auto clock_wire = std::find(clock_wires_.begin(), clock_wires_.end(), wire); - if (clock_wire == clock_wires_.end()) { - clock_wires_.push_back(wire); - } + [&, this](RTLIL::Wire* wire) { UpdateWires(wire); }); } void Clock::UpdateClock(RTLIL::Wire* wire, float period, float rising_edge,
diff --git a/sdc-plugin/clocks.h b/sdc-plugin/clocks.h index f4b0e53..faa8aec 100644 --- a/sdc-plugin/clocks.h +++ b/sdc-plugin/clocks.h
@@ -36,7 +36,6 @@ float rising_edge, float falling_edge); Clock(const std::string& name, std::vector<RTLIL::Wire*> wires, float period, float rising_edge, float falling_edge); - void AddWire(RTLIL::Wire* wire); std::vector<RTLIL::Wire*> GetClockWires() { return clock_wires_; } const std::string& Name() const { return name_; } float Period() { return period_; } @@ -65,10 +64,6 @@ void AddClock(const std::string& name, RTLIL::Wire* wire, float period, float rising_edge, float falling_edge); void AddClock(Clock& clock); - void AddClockWires(const std::string& name, std::vector<RTLIL::Wire*> wires, - float period, float rising_edge, float falling_edge); - void AddClockWire(const std::string& name, RTLIL::Wire* wire, float period, - float rising_edge, float falling_edge); std::vector<std::string> GetClockNames(); void Propagate(NaturalPropagation* pass); void Propagate(BufferPropagation* pass);