From 6aac403ab0f19e7c1ff8d4244af30417bbc81a24 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Tue, 27 Jul 2021 11:45:38 +0200 Subject: [PATCH] XSPICE delay: add some more safeguards --- src/xspice/icm/analog/delay/cfunc.mod | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/xspice/icm/analog/delay/cfunc.mod b/src/xspice/icm/analog/delay/cfunc.mod index 3dacefa4a..a1bd95d83 100644 --- a/src/xspice/icm/analog/delay/cfunc.mod +++ b/src/xspice/icm/analog/delay/cfunc.mod @@ -170,7 +170,7 @@ static void cm_delay_callback(ARGS, Mif_Callback_Reason_t reason); void cm_delay(ARGS) { int buffer_size, delay_step; - double delay; + double delay, lcntrl; double delmin, delmax; mLocal_Data_t *loc; /* Pointer to local static data, not to be included @@ -252,6 +252,10 @@ void cm_delay(ARGS) cm_message_send("max delay greater than final sim time not allowed, set to final time"); } } + if (loc->tdelmax < loc->tdelmin) { + loc->tdelmax = loc->tdelmin; + cm_message_send("max delay smaller than min delay, set to min delay"); + } } loc->buff_write = 0; @@ -294,8 +298,14 @@ void cm_delay(ARGS) delmin = loc->tdelmin; delmax = loc->tdelmax; + lcntrl = INPUT(cntrl); + if (lcntrl < 0) + lcntrl = 0.; + else if (lcntrl > 1.) + lcntrl = 1.; + if (PARAM(has_delay_cnt) == MIF_TRUE) { - delay = (delmax - delmin) * INPUT(cntrl) + delmin; + delay = (delmax - delmin) * lcntrl + delmin; } /* time not yet advanced for delay output */