SDC: Get clock wire name from SOURCE_PINS
Signed-off-by: Tomasz Michalak <tmichalak@antmicro.com>
diff --git a/sdc-plugin/clocks.cc b/sdc-plugin/clocks.cc
index 95ebaad..adcb6b1 100644
--- a/sdc-plugin/clocks.cc
+++ b/sdc-plugin/clocks.cc
@@ -114,11 +114,18 @@
return WireName(clock_wire);
}
-std::string Clock::WireName(RTLIL::Wire* wire) {
- if (!wire) {
+std::string Clock::WireName(RTLIL::Wire* clock_wire) {
+ if (!clock_wire) {
return std::string();
}
- return AddEscaping(RTLIL::unescape_id(wire->name));
+ return AddEscaping(RTLIL::unescape_id(clock_wire->name));
+}
+
+std::string Clock::SourcePinName(RTLIL::Wire* clock_wire) {
+ if (clock_wire->has_attribute(RTLIL::escape_id("SOURCE_PINS"))) {
+ return clock_wire->get_string_attribute(RTLIL::escape_id("SOURCE_PINS"));
+ }
+ return Name(clock_wire);
}
const std::map<std::string, RTLIL::Wire*> Clocks::GetClocks(
diff --git a/sdc-plugin/clocks.h b/sdc-plugin/clocks.h
index 2bcdf75..846a2af 100644
--- a/sdc-plugin/clocks.h
+++ b/sdc-plugin/clocks.h
@@ -46,6 +46,7 @@
static std::string AddEscaping(const std::string& name) {
return std::regex_replace(name, std::regex{"\\$"}, "\\$");
}
+ static std::string SourcePinName(RTLIL::Wire* clock_wire);
private:
static std::pair<float, float> Waveform(RTLIL::Wire* clock_wire);
diff --git a/sdc-plugin/sdc_writer.cc b/sdc-plugin/sdc_writer.cc
index 80c8e5e..6f7a760 100644
--- a/sdc-plugin/sdc_writer.cc
+++ b/sdc-plugin/sdc_writer.cc
@@ -54,7 +54,7 @@
file << "create_clock -period " << Clock::Period(clock_wire);
file << " -waveform {" << Clock::RisingEdge(clock_wire) << " "
<< Clock::FallingEdge(clock_wire) << "}";
- file << " " << Clock::WireName(clock_wire);
+ file << " " << Clock::SourcePinName(clock_wire);
file << std::endl;
}
}