Make &A<> use the same thread access syntax as &PV<>.
This patch makes &A<> use the same thread access syntax as &PV<> this is two unsigned numbers separated by a space instead of a single number.
This commit is contained in:
parent
8439fc6c19
commit
647e53bcbb
|
|
@ -289,7 +289,7 @@ static void draw_vpi_taskfunc_args(const char*call_string,
|
|||
struct vector_info av;
|
||||
av = draw_eval_expr(word_ex, STUFF_OK_XZ);
|
||||
snprintf(buffer, sizeof buffer,
|
||||
"&A<v%p, T<%u,%u,u>>", sig, av.base, av.wid);
|
||||
"&A<v%p, %u %u>", sig, av.base, av.wid);
|
||||
args[idx].vec = av;
|
||||
args[idx].vec_flag = 1;
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -780,9 +780,23 @@ The &A<> argument is a reference to the word of a variable array. The
|
|||
syntax is:
|
||||
|
||||
&A '<' <symbol> , <number> '>'
|
||||
&A '<' <symbol> , <base> <width> '>'
|
||||
|
||||
The <symbol> is the label for a variable array, and the <number> is
|
||||
the cannonical word index as an unsigned integer.
|
||||
the cannonical word index as an unsigned integer. The second form
|
||||
retrives the index from thread space (<width> bits starting at <base>).
|
||||
|
||||
* The &PV<> argument
|
||||
|
||||
The &PV<> argument is a reference to part of a signal. The syntax is:
|
||||
|
||||
&PV '<' <symbol> , <base> , <width> '>'
|
||||
&PV '<' <symbol> , <tbase> <twid> , <width> '>'
|
||||
|
||||
The <symbol> is the label for a signal, the <base> is the cannonical
|
||||
starting bit of the part select and <width> is the number of bits in
|
||||
the select. The second form retreives the <base> from thread space
|
||||
using <twid> bits starting at <tbase>.
|
||||
|
||||
* The T<> argument
|
||||
|
||||
|
|
|
|||
14
vvp/array.cc
14
vvp/array.cc
|
|
@ -1071,7 +1071,7 @@ vpiHandle vpip_make_vthr_A(char*label, unsigned addr)
|
|||
return &(obj->base);
|
||||
}
|
||||
|
||||
vpiHandle vpip_make_vthr_A(char*label, char*symbol)
|
||||
vpiHandle vpip_make_vthr_A(char*label, unsigned tbase, unsigned twid)
|
||||
{
|
||||
struct __vpiArrayVthrA*obj = (struct __vpiArrayVthrA*)
|
||||
malloc(sizeof (struct __vpiArrayVthrA));
|
||||
|
|
@ -1082,16 +1082,8 @@ vpiHandle vpip_make_vthr_A(char*label, char*symbol)
|
|||
assert(obj->array);
|
||||
free(label);
|
||||
|
||||
unsigned base;
|
||||
unsigned wid;
|
||||
char sflag;
|
||||
int rc = sscanf(symbol, "T<%u,%u,%c>", &base, &wid, &sflag);
|
||||
assert(rc == 3);
|
||||
free(symbol);
|
||||
|
||||
obj->address = base;
|
||||
obj->wid = wid;
|
||||
assert(sflag == 'u');
|
||||
obj->address = tbase;
|
||||
obj->wid = twid;
|
||||
|
||||
return &(obj->base);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -817,8 +817,8 @@ argument
|
|||
}
|
||||
| K_A '<' T_SYMBOL ',' T_NUMBER '>'
|
||||
{ $$ = vpip_make_vthr_A($3, $5); }
|
||||
| K_A '<' T_SYMBOL ',' T_SYMBOL '>'
|
||||
{ $$ = vpip_make_vthr_A($3, $5); }
|
||||
| K_A '<' T_SYMBOL ',' T_NUMBER T_NUMBER '>'
|
||||
{ $$ = vpip_make_vthr_A($3, $5, $6); }
|
||||
| K_PV '<' T_SYMBOL ',' T_NUMBER ',' T_NUMBER '>'
|
||||
{ $$ = vpip_make_PV($3, $5, $7); }
|
||||
| K_PV '<' T_SYMBOL ',' '-' T_NUMBER ',' T_NUMBER '>'
|
||||
|
|
|
|||
|
|
@ -447,6 +447,7 @@ vpiHandle vpip_make_vthr_word(unsigned base, const char*type);
|
|||
|
||||
vpiHandle vpip_make_vthr_A(char*symbol, unsigned index);
|
||||
vpiHandle vpip_make_vthr_A(char*symbol, char*symbol);
|
||||
vpiHandle vpip_make_vthr_A(char*symbol, unsigned tbase, unsigned twid);
|
||||
|
||||
/*
|
||||
* This function is called before any compilation to load VPI
|
||||
|
|
|
|||
Loading…
Reference in New Issue