From 9992d6cf2eb841321bacfb66fd9898b911ede462 Mon Sep 17 00:00:00 2001 From: Jitesh Date: Thu, 31 Oct 2024 23:27:32 +0530 Subject: [PATCH] implemented vpiVectorVal --- include/verilated_vpi.cpp | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/include/verilated_vpi.cpp b/include/verilated_vpi.cpp index e54d2de1f..7d3006f58 100644 --- a/include/verilated_vpi.cpp +++ b/include/verilated_vpi.cpp @@ -3478,6 +3478,53 @@ void vl_put_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p, } } + return; + } else if (arrayvalue_p->format == vpiVectorVal) { + + p_vpi_vecval vectors=arrayvalue_p->value.vectors; + + if (varp->vltype() == VLVT_UINT8) { + CData *ptr = reinterpret_cast(vop->varDatap()); + + for (int i = 0; i < num; i++) { + ptr[index++]=vectors[i].aval; + index = index % size; + } + } else if (varp->vltype() == VLVT_UINT16) { + SData *ptr = reinterpret_cast(vop->varDatap()); + + for (int i = 0; i < num; i++) { + ptr[index++]=vectors[i].aval; + index = index % size; + } + } else if (varp->vltype() == VLVT_UINT32) { + IData *ptr = reinterpret_cast(vop->varDatap()); + + for (int i = 0; i < num; i++) { + ptr[index++]=vectors[i].aval; + index = index % size; + } + } else if (varp->vltype() == VLVT_UINT64) { + QData *ptr = reinterpret_cast(vop->varDatap()); + + for (int i = 0; i < num; i++) { + ptr[index++] = (static_cast(vectors[1].aval) << 32ULL) | static_cast(vectors[0].aval); + vectors += 2; + index = index % size; + } + } else if (varp->vltype() == VLVT_WDATA) { + EData *ptr = reinterpret_cast(vop->varDatap()); + + const int words = VL_WORDS_I(varp->packed().elements()); + + for (int i = 0; i < num; i++) { + for (int j = 0; j < words; j++) { + ptr[index * words + j] = vectors[i * words + j].aval; + } + index = ++index % size; + } + } + return; }