Redesign event information to support arbitrary edge combining.
This commit is contained in:
parent
e29ecdc234
commit
d25690cc8e
24
ivl_target.h
24
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.40 2001/03/31 17:36:38 steve Exp $"
|
#ident "$Id: ivl_target.h,v 1.41 2001/04/01 01:48:21 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
@ -149,13 +149,14 @@ typedef struct ivl_statement_s*ivl_statement_t;
|
||||||
* changes and additions to the enumerations.
|
* changes and additions to the enumerations.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if 0
|
||||||
typedef enum ivl_edge_type_e {
|
typedef enum ivl_edge_type_e {
|
||||||
IVL_EDGE_NONE = 0,
|
IVL_EDGE_NONE = 0,
|
||||||
IVL_EDGE_ANY = 1,
|
IVL_EDGE_ANY = 1,
|
||||||
IVL_EDGE_POS = 2,
|
IVL_EDGE_POS = 2,
|
||||||
IVL_EDGE_NEG = 3
|
IVL_EDGE_NEG = 3
|
||||||
} ivl_edge_type_t;
|
} ivl_edge_type_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* This is the type of an ivl_expr_t object. */
|
/* This is the type of an ivl_expr_t object. */
|
||||||
typedef enum ivl_expr_type_e {
|
typedef enum ivl_expr_type_e {
|
||||||
|
|
@ -322,18 +323,18 @@ extern int ivl_const_signed(ivl_net_const_t net);
|
||||||
* ivl_event_edge
|
* ivl_event_edge
|
||||||
* Return the edge type for the event. If this is a named event
|
* Return the edge type for the event. If this is a named event
|
||||||
* that has no network input, then the edge is IVL_EDGE_NONE.
|
* that has no network input, then the edge is IVL_EDGE_NONE.
|
||||||
*
|
|
||||||
* ivl_event_pins
|
|
||||||
* ivl_event_pin
|
|
||||||
* Events of edge other then NONE have pins that are the connection
|
|
||||||
* of the event to the net.
|
|
||||||
*/
|
*/
|
||||||
extern const char* ivl_event_name(ivl_event_t net);
|
extern const char* ivl_event_name(ivl_event_t net);
|
||||||
extern const char* ivl_event_basename(ivl_event_t net);
|
extern const char* ivl_event_basename(ivl_event_t net);
|
||||||
extern ivl_edge_type_t ivl_event_edge(ivl_event_t net);
|
|
||||||
|
|
||||||
extern unsigned ivl_event_pins(ivl_event_t net);
|
extern unsigned ivl_event_nany(ivl_event_t net);
|
||||||
extern ivl_nexus_t ivl_event_pin(ivl_event_t net, unsigned idx);
|
extern ivl_nexus_t ivl_event_any(ivl_event_t net, unsigned idx);
|
||||||
|
|
||||||
|
extern unsigned ivl_event_nneg(ivl_event_t net);
|
||||||
|
extern ivl_nexus_t ivl_event_neg(ivl_event_t net, unsigned idx);
|
||||||
|
|
||||||
|
extern unsigned ivl_event_npos(ivl_event_t net);
|
||||||
|
extern ivl_nexus_t ivl_event_pos(ivl_event_t net, unsigned idx);
|
||||||
|
|
||||||
|
|
||||||
/* EXPRESSIONS
|
/* EXPRESSIONS
|
||||||
|
|
@ -730,6 +731,9 @@ _END_DECL
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: ivl_target.h,v $
|
* $Log: ivl_target.h,v $
|
||||||
|
* Revision 1.41 2001/04/01 01:48:21 steve
|
||||||
|
* Redesign event information to support arbitrary edge combining.
|
||||||
|
*
|
||||||
* Revision 1.40 2001/03/31 17:36:38 steve
|
* Revision 1.40 2001/03/31 17:36:38 steve
|
||||||
* Generate vvp code for case statements.
|
* Generate vvp code for case statements.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
46
t-dll-api.cc
46
t-dll-api.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-api.cc,v 1.28 2001/03/31 17:36:38 steve Exp $"
|
#ident "$Id: t-dll-api.cc,v 1.29 2001/04/01 01:48:21 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "t-dll.h"
|
# include "t-dll.h"
|
||||||
|
|
@ -99,25 +99,46 @@ extern "C" const char* ivl_event_basename(ivl_event_t net)
|
||||||
return nam;
|
return nam;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" ivl_edge_type_t ivl_event_edge(ivl_event_t net)
|
|
||||||
|
extern "C" unsigned ivl_event_nany(ivl_event_t net)
|
||||||
{
|
{
|
||||||
assert(net);
|
assert(net);
|
||||||
return net->edge;
|
return net->nany;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" unsigned ivl_event_pins(ivl_event_t net)
|
extern "C" ivl_nexus_t ivl_event_any(ivl_event_t net, unsigned idx)
|
||||||
{
|
{
|
||||||
assert(net);
|
assert(net);
|
||||||
return net->npins;
|
assert(idx < net->nany);
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" ivl_nexus_t ivl_event_pin(ivl_event_t net, unsigned idx)
|
|
||||||
{
|
|
||||||
assert(net);
|
|
||||||
assert(idx < net->npins);
|
|
||||||
return net->pins[idx];
|
return net->pins[idx];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" unsigned ivl_event_nneg(ivl_event_t net)
|
||||||
|
{
|
||||||
|
assert(net);
|
||||||
|
return net->nneg;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" ivl_nexus_t ivl_event_neg(ivl_event_t net, unsigned idx)
|
||||||
|
{
|
||||||
|
assert(net);
|
||||||
|
assert(idx < net->nneg);
|
||||||
|
return net->pins[net->nany + idx];
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" unsigned ivl_event_npos(ivl_event_t net)
|
||||||
|
{
|
||||||
|
assert(net);
|
||||||
|
return net->npos;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" ivl_nexus_t ivl_event_pos(ivl_event_t net, unsigned idx)
|
||||||
|
{
|
||||||
|
assert(net);
|
||||||
|
assert(idx < net->npos);
|
||||||
|
return net->pins[net->nany + net->nneg + idx];
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" const char* ivl_expr_bits(ivl_expr_t net)
|
extern "C" const char* ivl_expr_bits(ivl_expr_t net)
|
||||||
{
|
{
|
||||||
assert(net && (net->type_ == IVL_EX_NUMBER));
|
assert(net && (net->type_ == IVL_EX_NUMBER));
|
||||||
|
|
@ -781,6 +802,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.29 2001/04/01 01:48:21 steve
|
||||||
|
* Redesign event information to support arbitrary edge combining.
|
||||||
|
*
|
||||||
* Revision 1.28 2001/03/31 17:36:38 steve
|
* Revision 1.28 2001/03/31 17:36:38 steve
|
||||||
* Generate vvp code for case statements.
|
* Generate vvp code for case statements.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,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-proc.cc,v 1.17 2001/03/31 17:36:39 steve Exp $"
|
#ident "$Id: t-dll-proc.cc,v 1.18 2001/04/01 01:48:21 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "target.h"
|
# include "target.h"
|
||||||
|
|
@ -361,18 +361,41 @@ bool dll_target::proc_wait(const NetEvWait*net)
|
||||||
pins. This wasn't done during the ::event method because
|
pins. This wasn't done during the ::event method because
|
||||||
the signals weren't scanned yet. */
|
the signals weren't scanned yet. */
|
||||||
|
|
||||||
if (ev->nprobe() == 1) {
|
if (ev->nprobe() >= 1) {
|
||||||
const NetEvProbe*pr = ev->probe(0);
|
const NetEvProbe*pr = ev->probe(0);
|
||||||
ivl_event_t evnt = stmt_cur_->u_.wait_.event_;
|
ivl_event_t evnt = stmt_cur_->u_.wait_.event_;
|
||||||
|
|
||||||
assert(pr->pin_count() == evnt->npins);
|
unsigned iany = 0;
|
||||||
|
unsigned ineg = evnt->nany;
|
||||||
|
unsigned ipos = ineg + evnt->nneg;
|
||||||
|
|
||||||
for (unsigned idx = 0 ; idx < evnt->npins ; idx += 1) {
|
for (unsigned idx = 0 ; idx < ev->nprobe() ; idx += 1) {
|
||||||
ivl_nexus_t nex = (ivl_nexus_t)
|
const NetEvProbe*pr = ev->probe(idx);
|
||||||
pr->pin(idx).nexus()->t_cookie();
|
unsigned base = 0;
|
||||||
assert(nex);
|
|
||||||
evnt->pins[idx] = nex;
|
switch (pr->edge()) {
|
||||||
|
case NetEvProbe::ANYEDGE:
|
||||||
|
base = iany;
|
||||||
|
iany += pr->pin_count();
|
||||||
|
break;
|
||||||
|
case NetEvProbe::NEGEDGE:
|
||||||
|
base = ineg;
|
||||||
|
ineg += pr->pin_count();
|
||||||
|
break;
|
||||||
|
case NetEvProbe::POSEDGE:
|
||||||
|
base = ipos;
|
||||||
|
ipos += pr->pin_count();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned bit = 0; bit < pr->pin_count(); bit += 1) {
|
||||||
|
ivl_nexus_t nex = (ivl_nexus_t)
|
||||||
|
pr->pin(bit).nexus()->t_cookie();
|
||||||
|
assert(nex);
|
||||||
|
evnt->pins[base+bit] = nex;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The ivl_statement_t for the wait statement is not complete
|
/* The ivl_statement_t for the wait statement is not complete
|
||||||
|
|
@ -412,6 +435,9 @@ void dll_target::proc_while(const NetWhile*net)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: t-dll-proc.cc,v $
|
* $Log: t-dll-proc.cc,v $
|
||||||
|
* Revision 1.18 2001/04/01 01:48:21 steve
|
||||||
|
* Redesign event information to support arbitrary edge combining.
|
||||||
|
*
|
||||||
* Revision 1.17 2001/03/31 17:36:39 steve
|
* Revision 1.17 2001/03/31 17:36:39 steve
|
||||||
* Generate vvp code for case statements.
|
* Generate vvp code for case statements.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
42
t-dll.cc
42
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.31 2001/03/30 06:10:15 steve Exp $"
|
#ident "$Id: t-dll.cc,v 1.32 2001/04/01 01:48:21 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "compiler.h"
|
# include "compiler.h"
|
||||||
|
|
@ -298,29 +298,32 @@ void dll_target::event(const NetEvent*net)
|
||||||
obj->scope = scope;
|
obj->scope = scope;
|
||||||
scope_add_event(scope, obj);
|
scope_add_event(scope, obj);
|
||||||
|
|
||||||
assert(net->nprobe() <= 1);
|
obj->nany = 0;
|
||||||
|
obj->nneg = 0;
|
||||||
|
obj->npos = 0;
|
||||||
|
|
||||||
if (net->nprobe() == 1) {
|
if (net->nprobe() >= 1) {
|
||||||
const NetEvProbe*pr = net->probe(0);
|
|
||||||
switch (pr->edge()) {
|
for (unsigned idx = 0 ; idx < net->nprobe() ; idx += 1) {
|
||||||
case NetEvProbe::ANYEDGE:
|
const NetEvProbe*pr = net->probe(0);
|
||||||
obj->edge = IVL_EDGE_ANY;
|
switch (pr->edge()) {
|
||||||
break;
|
case NetEvProbe::ANYEDGE:
|
||||||
case NetEvProbe::NEGEDGE:
|
obj->nany += pr->pin_count();
|
||||||
obj->edge = IVL_EDGE_NEG;
|
break;
|
||||||
break;
|
case NetEvProbe::NEGEDGE:
|
||||||
case NetEvProbe::POSEDGE:
|
obj->nneg += pr->pin_count();
|
||||||
obj->edge = IVL_EDGE_POS;
|
break;
|
||||||
break;
|
case NetEvProbe::POSEDGE:
|
||||||
|
obj->npos += pr->pin_count();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
obj->npins = pr->pin_count();
|
unsigned npins = obj->nany + obj->nneg + obj->npos;
|
||||||
obj->pins = (ivl_nexus_t*)calloc(obj->npins, sizeof(ivl_nexus_t));
|
obj->pins = (ivl_nexus_t*)calloc(npins, sizeof(ivl_nexus_t));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
obj->npins = 0;
|
|
||||||
obj->pins = 0;
|
obj->pins = 0;
|
||||||
obj->edge = IVL_EDGE_NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -743,6 +746,9 @@ extern const struct target tgt_dll = { "dll", &dll_target_obj };
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: t-dll.cc,v $
|
* $Log: t-dll.cc,v $
|
||||||
|
* Revision 1.32 2001/04/01 01:48:21 steve
|
||||||
|
* Redesign event information to support arbitrary edge combining.
|
||||||
|
*
|
||||||
* Revision 1.31 2001/03/30 06:10:15 steve
|
* Revision 1.31 2001/03/30 06:10:15 steve
|
||||||
* Initialize the event_ list of new scopes.
|
* Initialize the event_ list of new scopes.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
8
t-dll.h
8
t-dll.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: t-dll.h,v 1.28 2001/03/31 17:36:39 steve Exp $"
|
#ident "$Id: t-dll.h,v 1.29 2001/04/01 01:48:21 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "target.h"
|
# include "target.h"
|
||||||
|
|
@ -105,8 +105,7 @@ struct dll_target : public target_t, public expr_scan_t {
|
||||||
struct ivl_event_s {
|
struct ivl_event_s {
|
||||||
char*name;
|
char*name;
|
||||||
ivl_scope_t scope;
|
ivl_scope_t scope;
|
||||||
ivl_edge_type_t edge;
|
unsigned short nany, nneg, npos;
|
||||||
unsigned npins;
|
|
||||||
ivl_nexus_t*pins;
|
ivl_nexus_t*pins;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -395,6 +394,9 @@ struct ivl_statement_s {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: t-dll.h,v $
|
* $Log: t-dll.h,v $
|
||||||
|
* Revision 1.29 2001/04/01 01:48:21 steve
|
||||||
|
* Redesign event information to support arbitrary edge combining.
|
||||||
|
*
|
||||||
* Revision 1.28 2001/03/31 17:36:39 steve
|
* Revision 1.28 2001/03/31 17:36:39 steve
|
||||||
* Generate vvp code for case statements.
|
* Generate vvp code for case statements.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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.33 2001/03/31 17:36:39 steve Exp $"
|
#ident "$Id: stub.c,v 1.34 2001/04/01 01:48:21 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -273,25 +273,22 @@ static int show_process(ivl_process_t net, void*x)
|
||||||
|
|
||||||
static void show_event(ivl_event_t net)
|
static void show_event(ivl_event_t net)
|
||||||
{
|
{
|
||||||
ivl_edge_type_t edge = ivl_event_edge(net);
|
unsigned idx;
|
||||||
|
fprintf(out, " event %s;\n", ivl_event_name(net));
|
||||||
|
|
||||||
switch (edge) {
|
for (idx = 0 ; idx < ivl_event_nany(net) ; idx += 1) {
|
||||||
case IVL_EDGE_NONE:
|
ivl_nexus_t nex = ivl_event_any(net, idx);
|
||||||
fprintf(out, " event %s;\n", ivl_event_name(net));
|
fprintf(out, " ANYEDGE: %s\n", ivl_nexus_name(nex));
|
||||||
break;
|
}
|
||||||
|
|
||||||
case IVL_EDGE_ANY:
|
for (idx = 0 ; idx < ivl_event_nneg(net) ; idx += 1) {
|
||||||
fprintf(out, " event %s @(", ivl_event_name(net));
|
ivl_nexus_t nex = ivl_event_neg(net, idx);
|
||||||
fprintf(out, ");\n");
|
fprintf(out, " NEGEDGE: %s\n", ivl_nexus_name(nex));
|
||||||
break;
|
}
|
||||||
case IVL_EDGE_NEG:
|
|
||||||
fprintf(out, " event %s @(negedge ", ivl_event_name(net));
|
for (idx = 0 ; idx < ivl_event_npos(net) ; idx += 1) {
|
||||||
fprintf(out, ");\n");
|
ivl_nexus_t nex = ivl_event_pos(net, idx);
|
||||||
break;
|
fprintf(out, " POSEDGE: %s\n", ivl_nexus_name(nex));
|
||||||
case IVL_EDGE_POS:
|
|
||||||
fprintf(out, " event %s @(posedge ", ivl_event_name(net));
|
|
||||||
fprintf(out, ");\n");
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -483,6 +480,9 @@ DECLARE_CYGWIN_DLL(DllMain);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: stub.c,v $
|
* $Log: stub.c,v $
|
||||||
|
* Revision 1.34 2001/04/01 01:48:21 steve
|
||||||
|
* Redesign event information to support arbitrary edge combining.
|
||||||
|
*
|
||||||
* Revision 1.33 2001/03/31 17:36:39 steve
|
* Revision 1.33 2001/03/31 17:36:39 steve
|
||||||
* Generate vvp code for case statements.
|
* Generate vvp code for case statements.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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.9 2001/03/31 19:29:23 steve Exp $"
|
#ident "$Id: vvp_scope.c,v 1.10 2001/04/01 01:48:21 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "vvp_priv.h"
|
# include "vvp_priv.h"
|
||||||
|
|
@ -160,35 +160,49 @@ static void draw_logic_in_scope(ivl_net_logic_t lptr)
|
||||||
|
|
||||||
static void draw_event_in_scope(ivl_event_t obj)
|
static void draw_event_in_scope(ivl_event_t obj)
|
||||||
{
|
{
|
||||||
ivl_edge_type_t edge = ivl_event_edge(obj);
|
unsigned nany = ivl_event_nany(obj);
|
||||||
|
unsigned nneg = ivl_event_nneg(obj);
|
||||||
if (edge == IVL_EDGE_NONE) {
|
unsigned npos = ivl_event_npos(obj);
|
||||||
|
if ((nany + nneg + npos) == 0) {
|
||||||
fprintf(vvp_out, "E_%s .event \"%s\";\n",
|
fprintf(vvp_out, "E_%s .event \"%s\";\n",
|
||||||
ivl_event_name(obj), ivl_event_basename(obj));
|
ivl_event_name(obj), ivl_event_basename(obj));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
unsigned idx;
|
unsigned idx;
|
||||||
unsigned pins = ivl_event_pins(obj);
|
|
||||||
assert(pins <= 4);
|
|
||||||
fprintf(vvp_out, "E_%s .event ", ivl_event_name(obj));
|
|
||||||
switch (edge) {
|
|
||||||
case IVL_EDGE_POS:
|
|
||||||
fprintf(vvp_out, "posedge");
|
|
||||||
break;
|
|
||||||
case IVL_EDGE_NEG:
|
|
||||||
fprintf(vvp_out, "posedge");
|
|
||||||
break;
|
|
||||||
case IVL_EDGE_ANY:
|
|
||||||
fprintf(vvp_out, "edge");
|
|
||||||
break;
|
|
||||||
case IVL_EDGE_NONE:
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (idx = 0 ; idx < pins ; idx += 1) {
|
fprintf(vvp_out, "E_%s .event ", ivl_event_name(obj));
|
||||||
ivl_nexus_t nex = ivl_event_pin(obj, idx);
|
|
||||||
fprintf(vvp_out, ", ");
|
if (nany > 0) {
|
||||||
draw_nexus_input(nex);
|
assert((nneg + npos) == 0);
|
||||||
|
assert(nany <= 4);
|
||||||
|
|
||||||
|
fprintf(vvp_out, "edge");
|
||||||
|
|
||||||
|
for (idx = 0 ; idx < nany ; idx += 1) {
|
||||||
|
ivl_nexus_t nex = ivl_event_any(obj, idx);
|
||||||
|
fprintf(vvp_out, ", ");
|
||||||
|
draw_nexus_input(nex);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (nneg > 0) {
|
||||||
|
assert((nany + npos) == 0);
|
||||||
|
fprintf(vvp_out, "negedge");
|
||||||
|
|
||||||
|
for (idx = 0 ; idx < nneg ; idx += 1) {
|
||||||
|
ivl_nexus_t nex = ivl_event_neg(obj, idx);
|
||||||
|
fprintf(vvp_out, ", ");
|
||||||
|
draw_nexus_input(nex);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
assert((nany + nneg) == 0);
|
||||||
|
fprintf(vvp_out, "posedge");
|
||||||
|
|
||||||
|
for (idx = 0 ; idx < npos ; idx += 1) {
|
||||||
|
ivl_nexus_t nex = ivl_event_pos(obj, idx);
|
||||||
|
fprintf(vvp_out, ", ");
|
||||||
|
draw_nexus_input(nex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(vvp_out, ";\n");
|
fprintf(vvp_out, ";\n");
|
||||||
|
|
@ -245,6 +259,9 @@ int draw_scope(ivl_scope_t net, ivl_scope_t parent)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: vvp_scope.c,v $
|
* $Log: vvp_scope.c,v $
|
||||||
|
* Revision 1.10 2001/04/01 01:48:21 steve
|
||||||
|
* Redesign event information to support arbitrary edge combining.
|
||||||
|
*
|
||||||
* Revision 1.9 2001/03/31 19:29:23 steve
|
* Revision 1.9 2001/03/31 19:29:23 steve
|
||||||
* Fix compilation warnings.
|
* Fix compilation warnings.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue