timing: Make hold violations an error

This commit is contained in:
Rowan Goemans 2024-09-12 14:53:37 +02:00 committed by myrtle
parent 82ea65d984
commit 60ee682d58

View File

@ -19,6 +19,7 @@
* *
*/ */
#include <algorithm>
#include "log.h" #include "log.h"
#include "nextpnr.h" #include "nextpnr.h"
#include "util.h" #include "util.h"
@ -170,18 +171,25 @@ static void log_crit_paths(const Context *ctx, TimingResult &result)
} }
// Min delay violated paths // Min delay violated paths
for (auto &report : result.min_delay_violations) { // Show maximum of 10
auto num_min_violations = result.min_delay_violations.size();
if (num_min_violations > 0) {
log_break();
log_info("Hold time violations:\n");
for (size_t i = 0; i < std::min((size_t)10, num_min_violations); ++i) {
auto &report = result.min_delay_violations.at(i);
log_break(); log_break();
std::string start = clock_event_name(ctx, report.clock_pair.start); std::string start = clock_event_name(ctx, report.clock_pair.start);
std::string end = clock_event_name(ctx, report.clock_pair.end); std::string end = clock_event_name(ctx, report.clock_pair.end);
if (report.clock_pair.start == report.clock_pair.end) { if (report.clock_pair.start == report.clock_pair.end) {
log_info("Hold time violations for clock '%s':\n", start.c_str()); log_nonfatal_error("Hold time violations for clock '%s':\n", start.c_str());
} else { } else {
log_info("Hold time violations for path '%s' -> '%s':\n", start.c_str(), end.c_str()); log_nonfatal_error("Hold time violations for path '%s' -> '%s':\n", start.c_str(), end.c_str());
} }
print_path_report(report); print_path_report(report);
} }
} }
}
static void log_fmax(Context *ctx, TimingResult &result, bool warn_on_failure) static void log_fmax(Context *ctx, TimingResult &result, bool warn_on_failure)
{ {