From abc6eb56f351130eff15e2cb36848c51a3520148 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Wed, 9 Jun 2021 17:10:05 +0200 Subject: [PATCH] Plausibility checking Enforce out=in when delay == 0 --- src/xspice/icm/analog/delay/cfunc.mod | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/xspice/icm/analog/delay/cfunc.mod b/src/xspice/icm/analog/delay/cfunc.mod index 4a51cd234..550959203 100644 --- a/src/xspice/icm/analog/delay/cfunc.mod +++ b/src/xspice/icm/analog/delay/cfunc.mod @@ -205,6 +205,7 @@ void cm_delay(ARGS) delay = PARAM(delay); if (delay < 0.0) { delay = 0.0; + cm_message_send("Negative delay not allowed, set to 0"); } /*** allocate static storage for *loc ***/ @@ -235,13 +236,31 @@ void cm_delay(ARGS) if (PARAM(has_delay_cnt) == MIF_TRUE) { if (PARAM_NULL(delmin)) loc->tdelmin = 0.0; - else + else { loc->tdelmin = PARAM(delmin); + if (loc->tdelmin < 0) { + loc->tdelmin = 0.0; + cm_message_send("Negative min delay not allowed, set to 0"); + } + else if (loc->tdelmin > ckt->CKTfinalTime) { + loc->tdelmin = ckt->CKTfinalTime; + cm_message_send("min delay greater than final sim time not allowed, set to final time"); + } + } if (PARAM_NULL(delmax)) loc->tdelmax = ckt->CKTfinalTime; - else + else { loc->tdelmax = PARAM(delmax); + if (loc->tdelmax < 0) { + loc->tdelmin = 0.0; + cm_message_send("Negative max delay not allowed, set to 0"); + } + else if (loc->tdelmax > ckt->CKTfinalTime) { + loc->tdelmax = ckt->CKTfinalTime; + cm_message_send("max delay greater than final sim time not allowed, set to final time"); + } + } } loc->buff_write = 0; @@ -263,7 +282,7 @@ void cm_delay(ARGS) to previous time storage */ delay = loc->tdelay; - if (delay == 0.0) { + if (delay == 0.0 && !PARAM(has_delay_cnt)) { OUTPUT(out) = INPUT(in); return; } @@ -302,6 +321,8 @@ void cm_delay(ARGS) if (TIME < delay) { OUTPUT(out) = loc->start_val; } + else if (delay == 0) + OUTPUT(out) = INPUT(in); else OUTPUT(out) = loc->buffer[loc->buff_del];