From 1b0dd8c8e5e3f95ff6d9f5e26f6a4ecfb002c9b0 Mon Sep 17 00:00:00 2001 From: Cary R Date: Mon, 7 Sep 2009 16:41:27 -0700 Subject: [PATCH] Add support for 'bx from a signal to &PV<> &PV<> was just using vpi_get_value() when a signal was driving the select. This incorrectly returned 0 for 'bx or 'bz. This patch adds a check for an undefined value and returns INT_MIN for this case. --- vvp/vpi_signal.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/vvp/vpi_signal.cc b/vvp/vpi_signal.cc index dfe454d9c..d5a4203e1 100644 --- a/vvp/vpi_signal.cc +++ b/vvp/vpi_signal.cc @@ -989,6 +989,15 @@ static int PV_get_base(struct __vpiPV*rfp) /* We return from the symbol base if it is defined. */ if (rfp->sbase != 0) { s_vpi_value val; + /* Check to see if the value is defined. */ + val.format = vpiVectorVal; + vpi_get_value(rfp->sbase, &val); + int words = (vpi_get(vpiSize, rfp->sbase)-1)/32 + 1; + for(int idx = 0; idx < words; idx += 1) { + /* Return INT_MIN to indicate an X base. */ + if (val.value.vector[idx].bval != 0) return INT_MIN; + } + /* The value is defined so get and return it. */ val.format = vpiIntVal; vpi_get_value(rfp->sbase, &val); return val.value.integer;