mirror of
https://github.com/verilator/verilator.git
synced 2025-02-08 14:41:48 +00:00
added vl_check_array_format
This commit is contained in:
parent
840446c553
commit
8aceb0705a
@ -2823,10 +2823,104 @@ vpiHandle vpi_put_value(vpiHandle object, p_vpi_value valuep, p_vpi_time /*time_
|
|||||||
VL_VPI_ERROR_(__FILE__, __LINE__, "%s: Unsupported vpiHandle (%p)", __func__, object);
|
VL_VPI_ERROR_(__FILE__, __LINE__, "%s: Unsupported vpiHandle (%p)", __func__, object);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
bool vl_check_array_format(const VerilatedVar* varp, const p_vpi_arrayvalue arrayvalue_p, const char* fullname) {
|
||||||
|
bool status = true;
|
||||||
|
|
||||||
|
// Check for vpiVectorVal format
|
||||||
|
if (arrayvalue_p->format == vpiVectorVal) {
|
||||||
|
switch (varp->vltype()) {
|
||||||
|
case VLVT_UINT8:
|
||||||
|
case VLVT_UINT16:
|
||||||
|
case VLVT_UINT32:
|
||||||
|
case VLVT_UINT64:
|
||||||
|
case VLVT_WDATA:
|
||||||
|
return status; // Valid match
|
||||||
|
default:
|
||||||
|
return false; // Invalid format
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for vpiIntVal format
|
||||||
|
else if (arrayvalue_p->format == vpiIntVal) {
|
||||||
|
switch (varp->vltype()) {
|
||||||
|
case VLVT_UINT8:
|
||||||
|
case VLVT_UINT16:
|
||||||
|
case VLVT_UINT32:
|
||||||
|
return status; // Valid match
|
||||||
|
default:
|
||||||
|
return false; // Invalid format
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for vpiRealVal format
|
||||||
|
else if (arrayvalue_p->format == vpiRealVal) {
|
||||||
|
switch (varp->vltype()) {
|
||||||
|
case VLVT_REAL:
|
||||||
|
return status; // Valid match
|
||||||
|
default:
|
||||||
|
return false; // Invalid format
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for vpiTimeVal format
|
||||||
|
else if (arrayvalue_p->format == vpiTimeVal) {
|
||||||
|
switch (varp->vltype()) {
|
||||||
|
case VLVT_UINT64:
|
||||||
|
case VLVT_REAL:
|
||||||
|
return status; // Valid match
|
||||||
|
default:
|
||||||
|
return false; // Invalid format
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for vpiRawTwoStateVal format
|
||||||
|
else if (arrayvalue_p->format == vpiRawTwoStateVal) {
|
||||||
|
switch (varp->vltype()) {
|
||||||
|
// size in bytes is multiples of 8 depends on ngroups
|
||||||
|
case VLVT_UINT8:
|
||||||
|
case VLVT_UINT16:
|
||||||
|
case VLVT_UINT32:
|
||||||
|
case VLVT_UINT64:
|
||||||
|
case VLVT_WDATA:
|
||||||
|
return status; // Valid match
|
||||||
|
default:
|
||||||
|
return false; // Invalid format
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for vpiShortIntVal format
|
||||||
|
else if (arrayvalue_p->format == vpiShortIntVal) {
|
||||||
|
switch (varp->vltype()) {
|
||||||
|
case VLVT_UINT16:
|
||||||
|
return status; // Valid match
|
||||||
|
default:
|
||||||
|
return false; // Invalid format
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for vpiLongIntVal format
|
||||||
|
else if (arrayvalue_p->format == vpiLongIntVal) {
|
||||||
|
switch (varp->vltype()) {
|
||||||
|
case VLVT_UINT64:
|
||||||
|
return status; // Valid match
|
||||||
|
default:
|
||||||
|
return false; // Invalid format
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unsupported format, log an error and return false
|
||||||
|
else {
|
||||||
|
VL_VPI_ERROR_(__FILE__, __LINE__, "%s: Unsupported format (%s) as requested for %s",
|
||||||
|
__func__, VerilatedVpiError::strFromVpiVal(arrayvalue_p->format), fullname);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
void vl_get_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p,
|
void vl_get_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p,
|
||||||
PLI_INT32* index_p, PLI_UINT32 num) {
|
PLI_INT32* index_p, PLI_UINT32 num) {
|
||||||
// if (!vl_check_array_format(vop->varp(), arrayvalue_p)) return;
|
if (!vl_check_array_format(vop->varp(), arrayvalue_p)) return;
|
||||||
|
|
||||||
const VerilatedVpioVar* const vop = VerilatedVpioVar::castp(object);
|
const VerilatedVpioVar* const vop = VerilatedVpioVar::castp(object);
|
||||||
const VerilatedVar* const varp = vop->varp();
|
const VerilatedVar* const varp = vop->varp();
|
||||||
|
Loading…
Reference in New Issue
Block a user