support subtraction in tgt-vvp.
This commit is contained in:
parent
19a7f3faeb
commit
2f2657b765
14
ivl_target.h
14
ivl_target.h
|
|
@ -19,7 +19,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: ivl_target.h,v 1.64 2001/06/07 02:12:43 steve Exp $"
|
#ident "$Id: ivl_target.h,v 1.65 2001/06/07 03:09:37 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
@ -203,7 +203,8 @@ typedef enum ivl_logic_e {
|
||||||
typedef enum ivl_lpm_type_e {
|
typedef enum ivl_lpm_type_e {
|
||||||
IVL_LPM_ADD,
|
IVL_LPM_ADD,
|
||||||
IVL_LPM_FF,
|
IVL_LPM_FF,
|
||||||
IVL_LPM_MUX
|
IVL_LPM_MUX,
|
||||||
|
IVL_LPM_SUB
|
||||||
} ivl_lpm_type_t;
|
} ivl_lpm_type_t;
|
||||||
|
|
||||||
/* Processes are initial or always blocks with a statement. This is
|
/* Processes are initial or always blocks with a statement. This is
|
||||||
|
|
@ -510,13 +511,13 @@ extern unsigned ivl_lpm_width(ivl_lpm_t net);
|
||||||
|
|
||||||
/* IVL_LPM_FF */
|
/* IVL_LPM_FF */
|
||||||
extern ivl_nexus_t ivl_lpm_clk(ivl_lpm_t net);
|
extern ivl_nexus_t ivl_lpm_clk(ivl_lpm_t net);
|
||||||
/* IVL_LPM_ADD IVL_LPM_FF */
|
/* IVL_LPM_ADD IVL_LPM_FF IVL_LPM_SUB */
|
||||||
extern ivl_nexus_t ivl_lpm_data(ivl_lpm_t net, unsigned idx);
|
extern ivl_nexus_t ivl_lpm_data(ivl_lpm_t net, unsigned idx);
|
||||||
/* IVL_LPM_ADD */
|
/* IVL_LPM_ADD IVL_LPM_SUB */
|
||||||
extern ivl_nexus_t ivl_lpm_datab(ivl_lpm_t net, unsigned idx);
|
extern ivl_nexus_t ivl_lpm_datab(ivl_lpm_t net, unsigned idx);
|
||||||
/* IVL_LPM_MUX */
|
/* IVL_LPM_MUX */
|
||||||
extern ivl_nexus_t ivl_lpm_data2(ivl_lpm_t net, unsigned sdx, unsigned idx);
|
extern ivl_nexus_t ivl_lpm_data2(ivl_lpm_t net, unsigned sdx, unsigned idx);
|
||||||
/* IVL_LPM_ADD IVL_LPM_FF */
|
/* IVL_LPM_ADD IVL_LPM_FF IVL_LPM_SUB */
|
||||||
extern ivl_nexus_t ivl_lpm_q(ivl_lpm_t net, unsigned idx);
|
extern ivl_nexus_t ivl_lpm_q(ivl_lpm_t net, unsigned idx);
|
||||||
/* IVL_LPM_MUX */
|
/* IVL_LPM_MUX */
|
||||||
extern unsigned ivl_lpm_selects(ivl_lpm_t net);
|
extern unsigned ivl_lpm_selects(ivl_lpm_t net);
|
||||||
|
|
@ -872,6 +873,9 @@ _END_DECL
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: ivl_target.h,v $
|
* $Log: ivl_target.h,v $
|
||||||
|
* Revision 1.65 2001/06/07 03:09:37 steve
|
||||||
|
* support subtraction in tgt-vvp.
|
||||||
|
*
|
||||||
* Revision 1.64 2001/06/07 02:12:43 steve
|
* Revision 1.64 2001/06/07 02:12:43 steve
|
||||||
* Support structural addition.
|
* Support structural addition.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: t-dll-api.cc,v 1.47 2001/06/07 02:12:43 steve Exp $"
|
#ident "$Id: t-dll-api.cc,v 1.48 2001/06/07 03:09:37 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "t-dll.h"
|
# include "t-dll.h"
|
||||||
|
|
@ -450,6 +450,7 @@ extern "C" ivl_nexus_t ivl_lpm_data(ivl_lpm_t net, unsigned idx)
|
||||||
assert(net);
|
assert(net);
|
||||||
switch (net->type) {
|
switch (net->type) {
|
||||||
case IVL_LPM_ADD:
|
case IVL_LPM_ADD:
|
||||||
|
case IVL_LPM_SUB:
|
||||||
assert(idx < net->u_.arith.width);
|
assert(idx < net->u_.arith.width);
|
||||||
return net->u_.arith.a[idx];
|
return net->u_.arith.a[idx];
|
||||||
|
|
||||||
|
|
@ -472,6 +473,7 @@ extern "C" ivl_nexus_t ivl_lpm_datab(ivl_lpm_t net, unsigned idx)
|
||||||
switch (net->type) {
|
switch (net->type) {
|
||||||
|
|
||||||
case IVL_LPM_ADD:
|
case IVL_LPM_ADD:
|
||||||
|
case IVL_LPM_SUB:
|
||||||
assert(idx < net->u_.arith.width);
|
assert(idx < net->u_.arith.width);
|
||||||
return net->u_.arith.b[idx];
|
return net->u_.arith.b[idx];
|
||||||
|
|
||||||
|
|
@ -507,6 +509,7 @@ extern "C" ivl_nexus_t ivl_lpm_q(ivl_lpm_t net, unsigned idx)
|
||||||
|
|
||||||
switch (net->type) {
|
switch (net->type) {
|
||||||
case IVL_LPM_ADD:
|
case IVL_LPM_ADD:
|
||||||
|
case IVL_LPM_SUB:
|
||||||
assert(idx < net->u_.arith.width);
|
assert(idx < net->u_.arith.width);
|
||||||
return net->u_.arith.q[idx];
|
return net->u_.arith.q[idx];
|
||||||
|
|
||||||
|
|
@ -582,6 +585,7 @@ extern "C" unsigned ivl_lpm_width(ivl_lpm_t net)
|
||||||
case IVL_LPM_MUX:
|
case IVL_LPM_MUX:
|
||||||
return net->u_.mux.width;
|
return net->u_.mux.width;
|
||||||
case IVL_LPM_ADD:
|
case IVL_LPM_ADD:
|
||||||
|
case IVL_LPM_SUB:
|
||||||
return net->u_.arith.width;
|
return net->u_.arith.width;
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
|
|
@ -1171,6 +1175,9 @@ extern "C" ivl_statement_t ivl_stmt_sub_stmt(ivl_statement_t net)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: t-dll-api.cc,v $
|
* $Log: t-dll-api.cc,v $
|
||||||
|
* Revision 1.48 2001/06/07 03:09:37 steve
|
||||||
|
* support subtraction in tgt-vvp.
|
||||||
|
*
|
||||||
* Revision 1.47 2001/06/07 02:12:43 steve
|
* Revision 1.47 2001/06/07 02:12:43 steve
|
||||||
* Support structural addition.
|
* Support structural addition.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
10
t-dll.cc
10
t-dll.cc
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: t-dll.cc,v 1.43 2001/06/07 02:12:43 steve Exp $"
|
#ident "$Id: t-dll.cc,v 1.44 2001/06/07 03:09:37 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "compiler.h"
|
# include "compiler.h"
|
||||||
|
|
@ -609,7 +609,10 @@ void dll_target::memory(const NetMemory*net)
|
||||||
void dll_target::lpm_add_sub(const NetAddSub*net)
|
void dll_target::lpm_add_sub(const NetAddSub*net)
|
||||||
{
|
{
|
||||||
ivl_lpm_t obj = new struct ivl_lpm_s;
|
ivl_lpm_t obj = new struct ivl_lpm_s;
|
||||||
obj->type = IVL_LPM_ADD;
|
if (net->attribute("LPM_Direction") == "SUB")
|
||||||
|
obj->type = IVL_LPM_SUB;
|
||||||
|
else
|
||||||
|
obj->type = IVL_LPM_ADD;
|
||||||
obj->name = strdup(net->name());
|
obj->name = strdup(net->name());
|
||||||
assert(net->scope());
|
assert(net->scope());
|
||||||
obj->scope = find_scope(des_.root_, net->scope());
|
obj->scope = find_scope(des_.root_, net->scope());
|
||||||
|
|
@ -1063,6 +1066,9 @@ extern const struct target tgt_dll = { "dll", &dll_target_obj };
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: t-dll.cc,v $
|
* $Log: t-dll.cc,v $
|
||||||
|
* Revision 1.44 2001/06/07 03:09:37 steve
|
||||||
|
* support subtraction in tgt-vvp.
|
||||||
|
*
|
||||||
* Revision 1.43 2001/06/07 02:12:43 steve
|
* Revision 1.43 2001/06/07 02:12:43 steve
|
||||||
* Support structural addition.
|
* Support structural addition.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: stub.c,v 1.43 2001/06/07 02:12:43 steve Exp $"
|
#ident "$Id: stub.c,v 1.44 2001/06/07 03:09:37 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -115,6 +115,21 @@ static void show_lpm(ivl_lpm_t net)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case IVL_LPM_SUB: {
|
||||||
|
fprintf(out, " LPM_SUB %s: <width=%u>\n",
|
||||||
|
ivl_lpm_name(net), width);
|
||||||
|
for (idx = 0 ; idx < width ; idx += 1)
|
||||||
|
fprintf(out, " Q %u: %s\n", idx,
|
||||||
|
ivl_nexus_name(ivl_lpm_q(net, idx)));
|
||||||
|
for (idx = 0 ; idx < width ; idx += 1)
|
||||||
|
fprintf(out, " Data A %u: %s\n", idx,
|
||||||
|
ivl_nexus_name(ivl_lpm_data(net, idx)));
|
||||||
|
for (idx = 0 ; idx < width ; idx += 1)
|
||||||
|
fprintf(out, " Data B %u: %s\n", idx,
|
||||||
|
ivl_nexus_name(ivl_lpm_datab(net, idx)));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case IVL_LPM_FF: {
|
case IVL_LPM_FF: {
|
||||||
|
|
||||||
fprintf(out, " LPM_FF %s: <width=%u>\n",
|
fprintf(out, " LPM_FF %s: <width=%u>\n",
|
||||||
|
|
@ -566,6 +581,9 @@ DECLARE_CYGWIN_DLL(DllMain);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: stub.c,v $
|
* $Log: stub.c,v $
|
||||||
|
* Revision 1.44 2001/06/07 03:09:37 steve
|
||||||
|
* support subtraction in tgt-vvp.
|
||||||
|
*
|
||||||
* Revision 1.43 2001/06/07 02:12:43 steve
|
* Revision 1.43 2001/06/07 02:12:43 steve
|
||||||
* Support structural addition.
|
* Support structural addition.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT)
|
#if !defined(WINNT)
|
||||||
#ident "$Id: vvp_scope.c,v 1.29 2001/06/07 02:12:43 steve Exp $"
|
#ident "$Id: vvp_scope.c,v 1.30 2001/06/07 03:09:37 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "vvp_priv.h"
|
# include "vvp_priv.h"
|
||||||
|
|
@ -115,6 +115,7 @@ static const char* draw_net_input_drive(ivl_nexus_t nex, ivl_nexus_ptr_t nptr)
|
||||||
}
|
}
|
||||||
|
|
||||||
case IVL_LPM_ADD:
|
case IVL_LPM_ADD:
|
||||||
|
case IVL_LPM_SUB:
|
||||||
for (idx = 0 ; idx < ivl_lpm_width(lpm) ; idx += 1)
|
for (idx = 0 ; idx < ivl_lpm_width(lpm) ; idx += 1)
|
||||||
if (ivl_lpm_q(lpm, idx) == nex) {
|
if (ivl_lpm_q(lpm, idx) == nex) {
|
||||||
sprintf(result, "L_%s[%u]",
|
sprintf(result, "L_%s[%u]",
|
||||||
|
|
@ -609,10 +610,22 @@ static void draw_event_in_scope(ivl_event_t obj)
|
||||||
static void draw_lpm_add(ivl_lpm_t net)
|
static void draw_lpm_add(ivl_lpm_t net)
|
||||||
{
|
{
|
||||||
unsigned idx, width;
|
unsigned idx, width;
|
||||||
|
const char*type = "";
|
||||||
|
|
||||||
width = ivl_lpm_width(net);
|
width = ivl_lpm_width(net);
|
||||||
|
|
||||||
fprintf(vvp_out, "L_%s .arith/sum %u", ivl_lpm_name(net), width);
|
switch (ivl_lpm_type(net)) {
|
||||||
|
case IVL_LPM_ADD:
|
||||||
|
type = "sum";
|
||||||
|
break;
|
||||||
|
case IVL_LPM_SUB:
|
||||||
|
type = "sub";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
assert(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(vvp_out, "L_%s .arith/%s %u", ivl_lpm_name(net), type, width);
|
||||||
|
|
||||||
for (idx = 0 ; idx < width ; idx += 1) {
|
for (idx = 0 ; idx < width ; idx += 1) {
|
||||||
ivl_nexus_t a = ivl_lpm_data(net, idx);
|
ivl_nexus_t a = ivl_lpm_data(net, idx);
|
||||||
|
|
@ -660,6 +673,7 @@ static void draw_lpm_in_scope(ivl_lpm_t net)
|
||||||
{
|
{
|
||||||
switch (ivl_lpm_type(net)) {
|
switch (ivl_lpm_type(net)) {
|
||||||
case IVL_LPM_ADD:
|
case IVL_LPM_ADD:
|
||||||
|
case IVL_LPM_SUB:
|
||||||
draw_lpm_add(net);
|
draw_lpm_add(net);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -752,6 +766,9 @@ int draw_scope(ivl_scope_t net, ivl_scope_t parent)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: vvp_scope.c,v $
|
* $Log: vvp_scope.c,v $
|
||||||
|
* Revision 1.30 2001/06/07 03:09:37 steve
|
||||||
|
* support subtraction in tgt-vvp.
|
||||||
|
*
|
||||||
* Revision 1.29 2001/06/07 02:12:43 steve
|
* Revision 1.29 2001/06/07 02:12:43 steve
|
||||||
* Support structural addition.
|
* Support structural addition.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue