2008-06-03 04:23:48 +02:00
|
|
|
/*
|
2010-04-11 20:00:39 +02:00
|
|
|
* Copyright (c) 2003-2010 Stephen Williams (steve@icarus.com)
|
2008-06-03 04:23:48 +02:00
|
|
|
*
|
|
|
|
|
* This source code is free software; you can redistribute it
|
|
|
|
|
* and/or modify it in source code form under the terms of the GNU
|
|
|
|
|
* General Public License as published by the Free Software
|
|
|
|
|
* Foundation; either version 2 of the License, or (at your option)
|
|
|
|
|
* any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
|
|
|
|
*/
|
|
|
|
|
|
2010-05-17 18:38:23 +02:00
|
|
|
#include "sys_priv.h"
|
2008-06-03 04:23:48 +02:00
|
|
|
#include <assert.h>
|
2009-02-25 01:47:46 +01:00
|
|
|
#include <ctype.h>
|
|
|
|
|
#include <stdlib.h>
|
2008-06-06 04:25:19 +02:00
|
|
|
#include <string.h>
|
2008-06-03 04:23:48 +02:00
|
|
|
|
2010-05-28 05:09:32 +02:00
|
|
|
PLI_UINT64 timerec_to_time64(const struct t_vpi_time*timerec)
|
2008-06-03 04:23:48 +02:00
|
|
|
{
|
|
|
|
|
PLI_UINT64 tmp;
|
|
|
|
|
|
2010-05-28 05:09:32 +02:00
|
|
|
tmp = timerec->high;
|
2008-06-03 04:23:48 +02:00
|
|
|
tmp <<= 32;
|
2010-05-28 05:09:32 +02:00
|
|
|
tmp |= (PLI_UINT64) timerec->low;
|
2008-06-03 04:23:48 +02:00
|
|
|
|
|
|
|
|
return tmp;
|
|
|
|
|
}
|
|
|
|
|
|
2009-02-27 00:22:21 +01:00
|
|
|
char *as_escaped(char *arg)
|
2009-02-25 01:47:46 +01:00
|
|
|
{
|
|
|
|
|
unsigned idx, cur, cnt, len = strlen(arg);
|
|
|
|
|
char *res = (char *) malloc(sizeof(char *) * len);
|
|
|
|
|
cur = 0;
|
|
|
|
|
cnt = len;
|
|
|
|
|
for (idx = 0; idx < cnt; idx++) {
|
2010-04-11 20:00:39 +02:00
|
|
|
if (isprint((int)arg[idx])) {
|
2009-02-25 01:47:46 +01:00
|
|
|
res[cur] = arg[idx];
|
|
|
|
|
cur += 1;
|
|
|
|
|
} else {
|
|
|
|
|
len += 3;
|
|
|
|
|
res = (char *) realloc(res, sizeof(char *) * len);
|
|
|
|
|
sprintf(&(res[cur]), "\\%03o", arg[idx]);
|
|
|
|
|
cur += 4;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
res[cur] = 0;
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Generic routine to get the filename from the given handle.
|
|
|
|
|
* The result is duplicated so call free when the name is no
|
|
|
|
|
* longer needed. Returns 0 (NULL) for an error.
|
|
|
|
|
*/
|
2009-02-27 00:22:21 +01:00
|
|
|
char *get_filename(vpiHandle callh, char *name, vpiHandle file)
|
2009-02-25 01:47:46 +01:00
|
|
|
{
|
|
|
|
|
s_vpi_value val;
|
|
|
|
|
unsigned len, idx;
|
2010-05-23 23:30:48 +02:00
|
|
|
|
2009-02-25 01:47:46 +01:00
|
|
|
/* Get the filename. */
|
|
|
|
|
val.format = vpiStringVal;
|
|
|
|
|
vpi_get_value(file, &val);
|
|
|
|
|
|
|
|
|
|
/* Verify that we have a string and that it is not NULL. */
|
|
|
|
|
if (val.format != vpiStringVal || !*(val.value.str)) {
|
|
|
|
|
vpi_printf("WARNING: %s:%d: ", vpi_get_str(vpiFile, callh),
|
|
|
|
|
(int)vpi_get(vpiLineNo, callh));
|
|
|
|
|
vpi_printf("%s's file name argument (%s) is not a valid string.\n",
|
|
|
|
|
name, vpi_get_str(vpiType, file));
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Verify that the file name is composed of only printable
|
|
|
|
|
* characters.
|
|
|
|
|
*/
|
|
|
|
|
len = strlen(val.value.str);
|
|
|
|
|
for (idx = 0; idx < len; idx++) {
|
2010-04-11 20:00:39 +02:00
|
|
|
if (! isprint((int)val.value.str[idx])) {
|
2009-02-25 01:47:46 +01:00
|
|
|
char msg [64];
|
|
|
|
|
char *esc_fname = as_escaped(val.value.str);
|
|
|
|
|
snprintf(msg, 64, "WARNING: %s:%d:",
|
|
|
|
|
vpi_get_str(vpiFile, callh),
|
|
|
|
|
(int)vpi_get(vpiLineNo, callh));
|
|
|
|
|
vpi_printf("%s %s's file name argument contains non-"
|
|
|
|
|
"printable characters.\n", msg, name);
|
|
|
|
|
vpi_printf("%*s \"%s\"\n", (int) strlen(msg), " ", esc_fname);
|
|
|
|
|
free(esc_fname);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return strdup(val.value.str);
|
|
|
|
|
}
|
|
|
|
|
|
2009-02-27 00:22:21 +01:00
|
|
|
void check_for_extra_args(vpiHandle argv, vpiHandle callh, char *name,
|
2010-09-27 20:03:43 +02:00
|
|
|
const char *arg_str, unsigned opt)
|
2009-02-27 00:22:21 +01:00
|
|
|
{
|
|
|
|
|
/* Check that there are no extra arguments. */
|
|
|
|
|
if (vpi_scan(argv) != 0) {
|
|
|
|
|
char msg [64];
|
|
|
|
|
unsigned argc;
|
|
|
|
|
|
|
|
|
|
snprintf(msg, 64, "ERROR: %s:%d:",
|
|
|
|
|
vpi_get_str(vpiFile, callh),
|
|
|
|
|
(int)vpi_get(vpiLineNo, callh));
|
|
|
|
|
|
|
|
|
|
argc = 1;
|
|
|
|
|
while (vpi_scan(argv)) argc += 1;
|
|
|
|
|
|
|
|
|
|
vpi_printf("%s %s takes %s%s.\n", msg, name,
|
|
|
|
|
opt ? "at most ": "", arg_str);
|
|
|
|
|
vpi_printf("%*s Found %u extra argument%s.\n",
|
|
|
|
|
(int) strlen(msg), " ", argc, argc == 1 ? "" : "s");
|
|
|
|
|
vpi_control(vpiFinish, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2008-06-03 04:23:48 +02:00
|
|
|
/*
|
|
|
|
|
* This routine returns 1 if the argument is a constant value,
|
|
|
|
|
* otherwise it returns 0.
|
2008-08-30 06:11:44 +02:00
|
|
|
*
|
|
|
|
|
* This routine was also copied to sys_clog2.c since it is not
|
|
|
|
|
* part of the standard system functions.
|
2008-06-03 04:23:48 +02:00
|
|
|
*/
|
|
|
|
|
unsigned is_constant_obj(vpiHandle obj)
|
|
|
|
|
{
|
|
|
|
|
unsigned rtn = 0;
|
|
|
|
|
|
2008-09-30 03:06:47 +02:00
|
|
|
assert(obj);
|
|
|
|
|
|
2008-06-03 04:23:48 +02:00
|
|
|
switch(vpi_get(vpiType, obj)) {
|
|
|
|
|
case vpiConstant:
|
|
|
|
|
case vpiParameter:
|
|
|
|
|
rtn = 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return rtn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* This routine returns 1 if the argument supports has a numeric value,
|
|
|
|
|
* otherwise it returns 0.
|
|
|
|
|
*/
|
|
|
|
|
unsigned is_numeric_obj(vpiHandle obj)
|
|
|
|
|
{
|
|
|
|
|
unsigned rtn = 0;
|
|
|
|
|
|
2008-09-30 03:06:47 +02:00
|
|
|
assert(obj);
|
|
|
|
|
|
2008-06-03 04:23:48 +02:00
|
|
|
switch(vpi_get(vpiType, obj)) {
|
|
|
|
|
case vpiConstant:
|
|
|
|
|
case vpiParameter:
|
|
|
|
|
/* These cannot be a string constant. */
|
|
|
|
|
if (vpi_get(vpiConstType, obj) != vpiStringConst) rtn = 1;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
/* These can have a valid numeric value. */
|
|
|
|
|
case vpiIntegerVar:
|
|
|
|
|
case vpiMemoryWord:
|
|
|
|
|
case vpiNet:
|
|
|
|
|
case vpiPartSelect:
|
|
|
|
|
case vpiRealVar:
|
|
|
|
|
case vpiReg:
|
|
|
|
|
case vpiTimeVar:
|
Rework $plusarg routines.
This patch addresses a number of issues:
Rewrote the $test$plusargs and $value$plusargs routines to have
better error/warning messages, to support runtime strings, to
correctly load bit based values (truncating, padding, negative
value), added support for the real formats using strtod() and
added "x/X" as an alias for "h/H" to match the other part of
Icarus.
Rewrite the vpip_{bin,oct,hex}_str_to_vec4 routines to ignore
embedded "_" characters. Add support for a negative value and
set the entire value to 'bx if an invalid digit is found. A
warning is printed for this case.
Rewrite vpip_dec_str_to_vec4 to ignore embedded "_" characters,
to support a single "x" or "z" constant and to return 'bx if an
invalid digit is found. A warning is printed for this case.
It simplifies the system task/functions error/warning messages.
It removes the signed flag for the bin and dec string conversions.
This was not being used (was always false) and the new negative
value support makes this obsolete.
Add support for a real variable to handle Bin, Oct, Dec and Hex
strings. They are converted into a vvp_vector4_t which is then
converted to a real value.
Add support for setting a bit based value using a real value.
Removed an unneeded rfp signal in vpip_make_reg()
2008-11-13 22:28:19 +01:00
|
|
|
rtn = 1;
|
2008-06-03 04:23:48 +02:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return rtn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* This routine returns 1 if the argument supports a valid string value,
|
|
|
|
|
* otherwise it returns 0.
|
|
|
|
|
*/
|
|
|
|
|
unsigned is_string_obj(vpiHandle obj)
|
|
|
|
|
{
|
|
|
|
|
unsigned rtn = 0;
|
|
|
|
|
|
2008-09-30 03:06:47 +02:00
|
|
|
assert(obj);
|
|
|
|
|
|
2008-06-03 04:23:48 +02:00
|
|
|
switch(vpi_get(vpiType, obj)) {
|
|
|
|
|
case vpiConstant:
|
|
|
|
|
case vpiParameter: {
|
|
|
|
|
/* These must be a string or binary constant. */
|
|
|
|
|
PLI_INT32 ctype = vpi_get(vpiConstType, obj);
|
|
|
|
|
if (ctype == vpiStringConst || ctype == vpiBinaryConst) rtn = 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* These can have a valid string value. */
|
|
|
|
|
case vpiIntegerVar:
|
|
|
|
|
case vpiMemoryWord:
|
|
|
|
|
case vpiNet:
|
|
|
|
|
case vpiPartSelect:
|
|
|
|
|
case vpiReg:
|
|
|
|
|
case vpiTimeVar:
|
Rework $plusarg routines.
This patch addresses a number of issues:
Rewrote the $test$plusargs and $value$plusargs routines to have
better error/warning messages, to support runtime strings, to
correctly load bit based values (truncating, padding, negative
value), added support for the real formats using strtod() and
added "x/X" as an alias for "h/H" to match the other part of
Icarus.
Rewrite the vpip_{bin,oct,hex}_str_to_vec4 routines to ignore
embedded "_" characters. Add support for a negative value and
set the entire value to 'bx if an invalid digit is found. A
warning is printed for this case.
Rewrite vpip_dec_str_to_vec4 to ignore embedded "_" characters,
to support a single "x" or "z" constant and to return 'bx if an
invalid digit is found. A warning is printed for this case.
It simplifies the system task/functions error/warning messages.
It removes the signed flag for the bin and dec string conversions.
This was not being used (was always false) and the new negative
value support makes this obsolete.
Add support for a real variable to handle Bin, Oct, Dec and Hex
strings. They are converted into a vvp_vector4_t which is then
converted to a real value.
Add support for setting a bit based value using a real value.
Removed an unneeded rfp signal in vpip_make_reg()
2008-11-13 22:28:19 +01:00
|
|
|
rtn = 1;
|
2008-06-03 04:23:48 +02:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return rtn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Find the enclosing module.
|
|
|
|
|
*/
|
|
|
|
|
vpiHandle sys_func_module(vpiHandle obj)
|
|
|
|
|
{
|
|
|
|
|
assert(obj);
|
|
|
|
|
|
|
|
|
|
while (vpi_get(vpiType, obj) != vpiModule) {
|
|
|
|
|
obj = vpi_handle(vpiScope, obj);
|
|
|
|
|
assert(obj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return obj;
|
|
|
|
|
}
|
2008-06-06 04:25:19 +02:00
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Standard compiletf routines.
|
|
|
|
|
*/
|
|
|
|
|
|
2008-06-14 05:46:18 +02:00
|
|
|
/* For system tasks/functions that do not take an argument. */
|
2010-10-04 18:31:01 +02:00
|
|
|
PLI_INT32 sys_no_arg_compiletf(ICARUS_VPI_CONST PLI_BYTE8 *name)
|
2008-06-06 04:25:19 +02:00
|
|
|
{
|
|
|
|
|
vpiHandle callh = vpi_handle(vpiSysTfCall, 0);
|
|
|
|
|
vpiHandle argv = vpi_iterate(vpiArgument, callh);
|
|
|
|
|
|
|
|
|
|
/* Make sure there are no arguments. */
|
|
|
|
|
if (argv != 0) {
|
|
|
|
|
char msg [64];
|
2008-09-30 03:06:47 +02:00
|
|
|
unsigned argc;
|
|
|
|
|
|
Rework $plusarg routines.
This patch addresses a number of issues:
Rewrote the $test$plusargs and $value$plusargs routines to have
better error/warning messages, to support runtime strings, to
correctly load bit based values (truncating, padding, negative
value), added support for the real formats using strtod() and
added "x/X" as an alias for "h/H" to match the other part of
Icarus.
Rewrite the vpip_{bin,oct,hex}_str_to_vec4 routines to ignore
embedded "_" characters. Add support for a negative value and
set the entire value to 'bx if an invalid digit is found. A
warning is printed for this case.
Rewrite vpip_dec_str_to_vec4 to ignore embedded "_" characters,
to support a single "x" or "z" constant and to return 'bx if an
invalid digit is found. A warning is printed for this case.
It simplifies the system task/functions error/warning messages.
It removes the signed flag for the bin and dec string conversions.
This was not being used (was always false) and the new negative
value support makes this obsolete.
Add support for a real variable to handle Bin, Oct, Dec and Hex
strings. They are converted into a vvp_vector4_t which is then
converted to a real value.
Add support for setting a bit based value using a real value.
Removed an unneeded rfp signal in vpip_make_reg()
2008-11-13 22:28:19 +01:00
|
|
|
snprintf(msg, 64, "ERROR: %s:%d:",
|
2008-06-06 04:25:19 +02:00
|
|
|
vpi_get_str(vpiFile, callh),
|
|
|
|
|
(int)vpi_get(vpiLineNo, callh));
|
|
|
|
|
|
2008-09-30 03:06:47 +02:00
|
|
|
argc = 0;
|
2008-06-06 04:25:19 +02:00
|
|
|
while (vpi_scan(argv)) argc += 1;
|
|
|
|
|
|
|
|
|
|
vpi_printf("%s %s does not take an argument.\n", msg, name);
|
|
|
|
|
vpi_printf("%*s Found %u extra argument%s.\n",
|
2008-06-20 19:12:17 +02:00
|
|
|
(int) strlen(msg), " ", argc, argc == 1 ? "" : "s");
|
2008-06-06 04:25:19 +02:00
|
|
|
vpi_control(vpiFinish, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2008-06-14 05:46:18 +02:00
|
|
|
/* For system tasks/functions that take a single numeric argument. */
|
2010-10-04 18:31:01 +02:00
|
|
|
PLI_INT32 sys_one_numeric_arg_compiletf(ICARUS_VPI_CONST PLI_BYTE8 *name)
|
2008-06-06 04:25:19 +02:00
|
|
|
{
|
|
|
|
|
vpiHandle callh = vpi_handle(vpiSysTfCall, 0);
|
|
|
|
|
vpiHandle argv = vpi_iterate(vpiArgument, callh);
|
|
|
|
|
|
|
|
|
|
/* Check that there is an argument and that it is numeric. */
|
|
|
|
|
if (argv == 0) {
|
Rework $plusarg routines.
This patch addresses a number of issues:
Rewrote the $test$plusargs and $value$plusargs routines to have
better error/warning messages, to support runtime strings, to
correctly load bit based values (truncating, padding, negative
value), added support for the real formats using strtod() and
added "x/X" as an alias for "h/H" to match the other part of
Icarus.
Rewrite the vpip_{bin,oct,hex}_str_to_vec4 routines to ignore
embedded "_" characters. Add support for a negative value and
set the entire value to 'bx if an invalid digit is found. A
warning is printed for this case.
Rewrite vpip_dec_str_to_vec4 to ignore embedded "_" characters,
to support a single "x" or "z" constant and to return 'bx if an
invalid digit is found. A warning is printed for this case.
It simplifies the system task/functions error/warning messages.
It removes the signed flag for the bin and dec string conversions.
This was not being used (was always false) and the new negative
value support makes this obsolete.
Add support for a real variable to handle Bin, Oct, Dec and Hex
strings. They are converted into a vvp_vector4_t which is then
converted to a real value.
Add support for setting a bit based value using a real value.
Removed an unneeded rfp signal in vpip_make_reg()
2008-11-13 22:28:19 +01:00
|
|
|
vpi_printf("ERROR: %s:%d: ", vpi_get_str(vpiFile, callh),
|
2008-06-06 04:25:19 +02:00
|
|
|
(int)vpi_get(vpiLineNo, callh));
|
|
|
|
|
vpi_printf("%s requires a single numeric argument.\n", name);
|
|
|
|
|
vpi_control(vpiFinish, 1);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (! is_numeric_obj(vpi_scan(argv))) {
|
Rework $plusarg routines.
This patch addresses a number of issues:
Rewrote the $test$plusargs and $value$plusargs routines to have
better error/warning messages, to support runtime strings, to
correctly load bit based values (truncating, padding, negative
value), added support for the real formats using strtod() and
added "x/X" as an alias for "h/H" to match the other part of
Icarus.
Rewrite the vpip_{bin,oct,hex}_str_to_vec4 routines to ignore
embedded "_" characters. Add support for a negative value and
set the entire value to 'bx if an invalid digit is found. A
warning is printed for this case.
Rewrite vpip_dec_str_to_vec4 to ignore embedded "_" characters,
to support a single "x" or "z" constant and to return 'bx if an
invalid digit is found. A warning is printed for this case.
It simplifies the system task/functions error/warning messages.
It removes the signed flag for the bin and dec string conversions.
This was not being used (was always false) and the new negative
value support makes this obsolete.
Add support for a real variable to handle Bin, Oct, Dec and Hex
strings. They are converted into a vvp_vector4_t which is then
converted to a real value.
Add support for setting a bit based value using a real value.
Removed an unneeded rfp signal in vpip_make_reg()
2008-11-13 22:28:19 +01:00
|
|
|
vpi_printf("ERROR: %s:%d: ", vpi_get_str(vpiFile, callh),
|
2008-06-06 04:25:19 +02:00
|
|
|
(int)vpi_get(vpiLineNo, callh));
|
|
|
|
|
vpi_printf("%s's argument must be numeric.\n", name);
|
|
|
|
|
vpi_control(vpiFinish, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Make sure there are no extra arguments. */
|
2009-02-27 00:22:21 +01:00
|
|
|
check_for_extra_args(argv, callh, name, "a single numeric argument", 0);
|
2008-06-06 04:25:19 +02:00
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2008-06-14 05:46:18 +02:00
|
|
|
/* For system tasks/functions that take a single optional numeric argument. */
|
2010-10-04 18:31:01 +02:00
|
|
|
PLI_INT32 sys_one_opt_numeric_arg_compiletf(ICARUS_VPI_CONST PLI_BYTE8 *name)
|
2008-06-06 04:25:19 +02:00
|
|
|
{
|
|
|
|
|
vpiHandle callh = vpi_handle(vpiSysTfCall, 0);
|
|
|
|
|
vpiHandle argv = vpi_iterate(vpiArgument, callh);
|
|
|
|
|
|
|
|
|
|
/* The argument is optional so just return if none are found. */
|
|
|
|
|
if (argv == 0) return 0;
|
|
|
|
|
|
|
|
|
|
if (! is_numeric_obj(vpi_scan(argv))) {
|
Rework $plusarg routines.
This patch addresses a number of issues:
Rewrote the $test$plusargs and $value$plusargs routines to have
better error/warning messages, to support runtime strings, to
correctly load bit based values (truncating, padding, negative
value), added support for the real formats using strtod() and
added "x/X" as an alias for "h/H" to match the other part of
Icarus.
Rewrite the vpip_{bin,oct,hex}_str_to_vec4 routines to ignore
embedded "_" characters. Add support for a negative value and
set the entire value to 'bx if an invalid digit is found. A
warning is printed for this case.
Rewrite vpip_dec_str_to_vec4 to ignore embedded "_" characters,
to support a single "x" or "z" constant and to return 'bx if an
invalid digit is found. A warning is printed for this case.
It simplifies the system task/functions error/warning messages.
It removes the signed flag for the bin and dec string conversions.
This was not being used (was always false) and the new negative
value support makes this obsolete.
Add support for a real variable to handle Bin, Oct, Dec and Hex
strings. They are converted into a vvp_vector4_t which is then
converted to a real value.
Add support for setting a bit based value using a real value.
Removed an unneeded rfp signal in vpip_make_reg()
2008-11-13 22:28:19 +01:00
|
|
|
vpi_printf("ERROR: %s:%d: ", vpi_get_str(vpiFile, callh),
|
2008-06-06 04:25:19 +02:00
|
|
|
(int)vpi_get(vpiLineNo, callh));
|
|
|
|
|
vpi_printf("%s's argument must be numeric.\n", name);
|
|
|
|
|
vpi_control(vpiFinish, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Make sure there are no extra arguments. */
|
2009-02-27 00:22:21 +01:00
|
|
|
check_for_extra_args(argv, callh, name, "one numeric argument", 1);
|
2008-06-14 05:46:18 +02:00
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* For system tasks/functions that take two numeric arguments. */
|
2010-10-04 18:31:01 +02:00
|
|
|
PLI_INT32 sys_two_numeric_args_compiletf(ICARUS_VPI_CONST PLI_BYTE8 *name)
|
2008-06-14 05:46:18 +02:00
|
|
|
{
|
|
|
|
|
vpiHandle callh = vpi_handle(vpiSysTfCall, 0);
|
|
|
|
|
vpiHandle argv = vpi_iterate(vpiArgument, callh);
|
|
|
|
|
vpiHandle arg;
|
|
|
|
|
|
|
|
|
|
/* Check that there are two argument and that they are numeric. */
|
|
|
|
|
if (argv == 0) {
|
Rework $plusarg routines.
This patch addresses a number of issues:
Rewrote the $test$plusargs and $value$plusargs routines to have
better error/warning messages, to support runtime strings, to
correctly load bit based values (truncating, padding, negative
value), added support for the real formats using strtod() and
added "x/X" as an alias for "h/H" to match the other part of
Icarus.
Rewrite the vpip_{bin,oct,hex}_str_to_vec4 routines to ignore
embedded "_" characters. Add support for a negative value and
set the entire value to 'bx if an invalid digit is found. A
warning is printed for this case.
Rewrite vpip_dec_str_to_vec4 to ignore embedded "_" characters,
to support a single "x" or "z" constant and to return 'bx if an
invalid digit is found. A warning is printed for this case.
It simplifies the system task/functions error/warning messages.
It removes the signed flag for the bin and dec string conversions.
This was not being used (was always false) and the new negative
value support makes this obsolete.
Add support for a real variable to handle Bin, Oct, Dec and Hex
strings. They are converted into a vvp_vector4_t which is then
converted to a real value.
Add support for setting a bit based value using a real value.
Removed an unneeded rfp signal in vpip_make_reg()
2008-11-13 22:28:19 +01:00
|
|
|
vpi_printf("ERROR: %s:%d: ", vpi_get_str(vpiFile, callh),
|
2008-06-14 05:46:18 +02:00
|
|
|
(int)vpi_get(vpiLineNo, callh));
|
|
|
|
|
vpi_printf("%s requires two numeric arguments.\n", name);
|
|
|
|
|
vpi_control(vpiFinish, 1);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (! is_numeric_obj(vpi_scan(argv))) {
|
Rework $plusarg routines.
This patch addresses a number of issues:
Rewrote the $test$plusargs and $value$plusargs routines to have
better error/warning messages, to support runtime strings, to
correctly load bit based values (truncating, padding, negative
value), added support for the real formats using strtod() and
added "x/X" as an alias for "h/H" to match the other part of
Icarus.
Rewrite the vpip_{bin,oct,hex}_str_to_vec4 routines to ignore
embedded "_" characters. Add support for a negative value and
set the entire value to 'bx if an invalid digit is found. A
warning is printed for this case.
Rewrite vpip_dec_str_to_vec4 to ignore embedded "_" characters,
to support a single "x" or "z" constant and to return 'bx if an
invalid digit is found. A warning is printed for this case.
It simplifies the system task/functions error/warning messages.
It removes the signed flag for the bin and dec string conversions.
This was not being used (was always false) and the new negative
value support makes this obsolete.
Add support for a real variable to handle Bin, Oct, Dec and Hex
strings. They are converted into a vvp_vector4_t which is then
converted to a real value.
Add support for setting a bit based value using a real value.
Removed an unneeded rfp signal in vpip_make_reg()
2008-11-13 22:28:19 +01:00
|
|
|
vpi_printf("ERROR: %s:%d: ", vpi_get_str(vpiFile, callh),
|
2008-06-14 05:46:18 +02:00
|
|
|
(int)vpi_get(vpiLineNo, callh));
|
|
|
|
|
vpi_printf("%s's first argument must be numeric.\n", name);
|
|
|
|
|
vpi_control(vpiFinish, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
arg = vpi_scan(argv);
|
|
|
|
|
if (! arg) {
|
Rework $plusarg routines.
This patch addresses a number of issues:
Rewrote the $test$plusargs and $value$plusargs routines to have
better error/warning messages, to support runtime strings, to
correctly load bit based values (truncating, padding, negative
value), added support for the real formats using strtod() and
added "x/X" as an alias for "h/H" to match the other part of
Icarus.
Rewrite the vpip_{bin,oct,hex}_str_to_vec4 routines to ignore
embedded "_" characters. Add support for a negative value and
set the entire value to 'bx if an invalid digit is found. A
warning is printed for this case.
Rewrite vpip_dec_str_to_vec4 to ignore embedded "_" characters,
to support a single "x" or "z" constant and to return 'bx if an
invalid digit is found. A warning is printed for this case.
It simplifies the system task/functions error/warning messages.
It removes the signed flag for the bin and dec string conversions.
This was not being used (was always false) and the new negative
value support makes this obsolete.
Add support for a real variable to handle Bin, Oct, Dec and Hex
strings. They are converted into a vvp_vector4_t which is then
converted to a real value.
Add support for setting a bit based value using a real value.
Removed an unneeded rfp signal in vpip_make_reg()
2008-11-13 22:28:19 +01:00
|
|
|
vpi_printf("ERROR: %s:%d: ", vpi_get_str(vpiFile, callh),
|
2008-06-14 05:46:18 +02:00
|
|
|
(int)vpi_get(vpiLineNo, callh));
|
|
|
|
|
vpi_printf("%s requires a second (numeric) argument.\n", name);
|
|
|
|
|
vpi_control(vpiFinish, 1);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (! is_numeric_obj(arg)) {
|
Rework $plusarg routines.
This patch addresses a number of issues:
Rewrote the $test$plusargs and $value$plusargs routines to have
better error/warning messages, to support runtime strings, to
correctly load bit based values (truncating, padding, negative
value), added support for the real formats using strtod() and
added "x/X" as an alias for "h/H" to match the other part of
Icarus.
Rewrite the vpip_{bin,oct,hex}_str_to_vec4 routines to ignore
embedded "_" characters. Add support for a negative value and
set the entire value to 'bx if an invalid digit is found. A
warning is printed for this case.
Rewrite vpip_dec_str_to_vec4 to ignore embedded "_" characters,
to support a single "x" or "z" constant and to return 'bx if an
invalid digit is found. A warning is printed for this case.
It simplifies the system task/functions error/warning messages.
It removes the signed flag for the bin and dec string conversions.
This was not being used (was always false) and the new negative
value support makes this obsolete.
Add support for a real variable to handle Bin, Oct, Dec and Hex
strings. They are converted into a vvp_vector4_t which is then
converted to a real value.
Add support for setting a bit based value using a real value.
Removed an unneeded rfp signal in vpip_make_reg()
2008-11-13 22:28:19 +01:00
|
|
|
vpi_printf("ERROR: %s:%d: ", vpi_get_str(vpiFile, callh),
|
2008-06-14 05:46:18 +02:00
|
|
|
(int)vpi_get(vpiLineNo, callh));
|
|
|
|
|
vpi_printf("%s's second argument must be numeric.\n", name);
|
|
|
|
|
vpi_control(vpiFinish, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Make sure there are no extra arguments. */
|
2009-02-27 00:22:21 +01:00
|
|
|
check_for_extra_args(argv, callh, name, "two numeric arguments", 0);
|
2008-06-14 05:46:18 +02:00
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* For system tasks/functions that take a single string argument. */
|
2010-10-04 18:31:01 +02:00
|
|
|
PLI_INT32 sys_one_string_arg_compiletf(ICARUS_VPI_CONST PLI_BYTE8 *name)
|
2008-06-14 05:46:18 +02:00
|
|
|
{
|
|
|
|
|
vpiHandle callh = vpi_handle(vpiSysTfCall, 0);
|
|
|
|
|
vpiHandle argv = vpi_iterate(vpiArgument, callh);
|
|
|
|
|
|
|
|
|
|
/* Check that there is an argument and that it is a string. */
|
|
|
|
|
if (argv == 0) {
|
Rework $plusarg routines.
This patch addresses a number of issues:
Rewrote the $test$plusargs and $value$plusargs routines to have
better error/warning messages, to support runtime strings, to
correctly load bit based values (truncating, padding, negative
value), added support for the real formats using strtod() and
added "x/X" as an alias for "h/H" to match the other part of
Icarus.
Rewrite the vpip_{bin,oct,hex}_str_to_vec4 routines to ignore
embedded "_" characters. Add support for a negative value and
set the entire value to 'bx if an invalid digit is found. A
warning is printed for this case.
Rewrite vpip_dec_str_to_vec4 to ignore embedded "_" characters,
to support a single "x" or "z" constant and to return 'bx if an
invalid digit is found. A warning is printed for this case.
It simplifies the system task/functions error/warning messages.
It removes the signed flag for the bin and dec string conversions.
This was not being used (was always false) and the new negative
value support makes this obsolete.
Add support for a real variable to handle Bin, Oct, Dec and Hex
strings. They are converted into a vvp_vector4_t which is then
converted to a real value.
Add support for setting a bit based value using a real value.
Removed an unneeded rfp signal in vpip_make_reg()
2008-11-13 22:28:19 +01:00
|
|
|
vpi_printf("ERROR: %s:%d: ", vpi_get_str(vpiFile, callh),
|
2008-06-14 05:46:18 +02:00
|
|
|
(int)vpi_get(vpiLineNo, callh));
|
|
|
|
|
vpi_printf("%s requires a single string argument.\n", name);
|
|
|
|
|
vpi_control(vpiFinish, 1);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
if (! is_string_obj(vpi_scan(argv))) {
|
Rework $plusarg routines.
This patch addresses a number of issues:
Rewrote the $test$plusargs and $value$plusargs routines to have
better error/warning messages, to support runtime strings, to
correctly load bit based values (truncating, padding, negative
value), added support for the real formats using strtod() and
added "x/X" as an alias for "h/H" to match the other part of
Icarus.
Rewrite the vpip_{bin,oct,hex}_str_to_vec4 routines to ignore
embedded "_" characters. Add support for a negative value and
set the entire value to 'bx if an invalid digit is found. A
warning is printed for this case.
Rewrite vpip_dec_str_to_vec4 to ignore embedded "_" characters,
to support a single "x" or "z" constant and to return 'bx if an
invalid digit is found. A warning is printed for this case.
It simplifies the system task/functions error/warning messages.
It removes the signed flag for the bin and dec string conversions.
This was not being used (was always false) and the new negative
value support makes this obsolete.
Add support for a real variable to handle Bin, Oct, Dec and Hex
strings. They are converted into a vvp_vector4_t which is then
converted to a real value.
Add support for setting a bit based value using a real value.
Removed an unneeded rfp signal in vpip_make_reg()
2008-11-13 22:28:19 +01:00
|
|
|
vpi_printf("ERROR: %s:%d: ", vpi_get_str(vpiFile, callh),
|
2008-06-14 05:46:18 +02:00
|
|
|
(int)vpi_get(vpiLineNo, callh));
|
|
|
|
|
vpi_printf("%s's argument must be a string.\n", name);
|
|
|
|
|
vpi_control(vpiFinish, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Make sure there are no extra arguments. */
|
2009-02-27 00:22:21 +01:00
|
|
|
check_for_extra_args(argv, callh, name, "a single string argument", 0);
|
2008-06-06 04:25:19 +02:00
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|