SDC: Correct error messages for incorrect waveform and period values Signed-off-by: Tomasz Michalak <tmichalak@antmicro.com>
diff --git a/sdc-plugin/clocks.cc b/sdc-plugin/clocks.cc index cd2b5f2..4f2ab29 100644 --- a/sdc-plugin/clocks.cc +++ b/sdc-plugin/clocks.cc
@@ -55,10 +55,16 @@ return 0; } float period(0); + std::string period_str; try { - period = std::stof(clock_wire->get_string_attribute(RTLIL::escape_id("PERIOD"))); + period_str = + clock_wire->get_string_attribute(RTLIL::escape_id("PERIOD")); + period = std::stof(period_str); } catch (const std::invalid_argument& e) { - log_cmd_error("Incorrect PERIOD format\n"); + log_cmd_error( + "Incorrect value '%s' specifed on PERIOD attribute for wire " + "'%s'.\nPERIOD needs to be a float value.\n", + period_str.c_str(), WireName(clock_wire).c_str()); } return period; } @@ -83,8 +89,13 @@ float falling_edge(0); std::string waveform( clock_wire->get_string_attribute(RTLIL::escape_id("WAVEFORM"))); - if (std::sscanf(waveform.c_str(), "%f %f", &rising_edge, &falling_edge) != 2) { - log_cmd_error("Incorrect WAVEFORM format\n"); + if (std::sscanf(waveform.c_str(), "%f %f", &rising_edge, &falling_edge) != + 2) { + log_cmd_error( + "Incorrect value '%s' specifed on WAVEFORM attribute for wire " + "'%s'.\nWAVEFORM needs to be specified in form of '<rising_edge> " + "<falling_edge>' where the edge values are floats.\n", + waveform.c_str(), WireName(clock_wire).c_str()); } return std::make_pair(rising_edge, falling_edge); }