timing: Add safe zero check function for delay_t

This commit is contained in:
Rowan Goemans 2024-09-18 00:33:33 +02:00
parent ac2ab40d3c
commit 35bb3f3a8d
2 changed files with 12 additions and 2 deletions

View File

@ -78,6 +78,16 @@ struct PortRef
IdString port;
};
// Zero checking which works regardless if delay_t is floating or integer
inline bool is_zero_delay(delay_t delay)
{
if constexpr (std::is_floating_point<delay_t>::value) {
return std::fpclassify(delay) == FP_ZERO;
} else {
return delay == 0;
}
}
// minimum and maximum delay
struct DelayPair
{

View File

@ -985,7 +985,7 @@ CriticalPath TimingAnalyser::build_critical_path_report(domain_id_t domain_pair,
if (related_clock) {
delay_t clock_delay = clock_delays.at(clock_pair);
if (clock_delay != 0) {
if (!is_zero_delay(clock_delay)) {
CriticalPath::Segment seg_c2c;
seg_c2c.type = CriticalPath::Segment::Type::CLK_TO_CLK;
seg_c2c.delay = DelayPair(clock_delay);
@ -1005,7 +1005,7 @@ CriticalPath TimingAnalyser::build_critical_path_report(domain_id_t domain_pair,
delay_t clock_skew = clock_delay_launch - clock_delay_capture;
if (clock_skew != 0) {
if (!is_zero_delay(clock_skew)) {
CriticalPath::Segment seg_skew;
seg_skew.type = CriticalPath::Segment::Type::CLK_SKEW;
seg_skew.delay = DelayPair(clock_skew);