From f8ddab9f75cbbccedca0fc9e9f14f8695fffc814 Mon Sep 17 00:00:00 2001 From: Tali Auster Date: Fri, 31 Jul 2026 13:15:05 +0200 Subject: [PATCH] sc_clock: check for NaN duty cycle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is disallowed by ยง6.7.4 (b): The duty cycle shall lie between the limits 0.0 and 1.0, exclusive. The default duty cycle is 0.5. Signed-off-by: Tali Auster --- src/sysc/communication/sc_clock.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/sysc/communication/sc_clock.cpp b/src/sysc/communication/sc_clock.cpp index 040f87fec..56d5cd315 100644 --- a/src/sysc/communication/sc_clock.cpp +++ b/src/sysc/communication/sc_clock.cpp @@ -51,6 +51,7 @@ #include "sysc/utils/sc_utils_ids.h" #include +#include namespace sc_core { @@ -62,7 +63,7 @@ namespace sc_core { // constructors -sc_clock::sc_clock() : +sc_clock::sc_clock() : base_type( sc_gen_unique_name( "clock" ) ), m_period(), m_duty_cycle(), m_start_time(), m_posedge_first(), m_posedge_time(), m_negedge_time(), @@ -278,7 +279,7 @@ sc_clock::init( const sc_time& period_, m_period = period_; m_posedge_first = posedge_first_; - if( duty_cycle_ <= 0.0 || duty_cycle_ >= 1.0 ) { + if( std::isnan(duty_cycle_) || duty_cycle_ <= 0.0 || duty_cycle_ >= 1.0 ) { m_duty_cycle = 0.5; } else { m_duty_cycle = duty_cycle_;