fix problem coalescing events w/ probes.

This commit is contained in:
steve 2000-07-29 03:55:38 +00:00
parent 4494a7a4f3
commit 39c71ef68a
2 changed files with 33 additions and 8 deletions

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: design_dump.cc,v 1.92 2000/07/27 05:13:44 steve Exp $"
#ident "$Id: design_dump.cc,v 1.93 2000/07/29 03:55:38 steve Exp $"
#endif
/*
@ -600,10 +600,10 @@ void NetEvTrig::dump(ostream&o, unsigned ind) const
void NetEvWait::dump(ostream&o, unsigned ind) const
{
assert(nevents() > 0);
o << setw(ind) <<"" << "@(" << event(0)->name();
o << setw(ind) <<"" << "@(" << event(0)->full_name();
for (unsigned idx = 1 ; idx < nevents() ; idx += 1)
o << " or " << event(idx)->name();
o << " or " << event(idx)->full_name();
o << ") // " << get_line() << endl;
@ -716,8 +716,8 @@ void NetScope::dump(ostream&o) const
/* Dump the events in this scope. */
for (NetEvent*cur = events_ ; cur ; cur = cur->snext_) {
o << " event " << cur->name() << "; "
<< "// " << cur->get_line() << endl;
o << " event " << cur->name() << "; nprobe="
<< cur->nprobe() << " // " << cur->get_line() << endl;
}
// Dump the signals,
@ -987,6 +987,9 @@ void Design::dump(ostream&o) const
/*
* $Log: design_dump.cc,v $
* Revision 1.93 2000/07/29 03:55:38 steve
* fix problem coalescing events w/ probes.
*
* Revision 1.92 2000/07/27 05:13:44 steve
* Support elaboration of disable statements.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: net_event.cc,v 1.8 2000/05/31 02:26:49 steve Exp $"
#ident "$Id: net_event.cc,v 1.9 2000/07/29 03:55:38 steve Exp $"
#endif
# include "netlist.h"
@ -106,7 +106,9 @@ NetEvent* NetEvent::find_similar_event()
NetEvProbe*cur = probes_;
/* First locate all the canditate events from the probe
objects that are connected to them. */
objects that are connected to them and to my first
probe. All of these candidates have at least this probe in
common. */
for (NetNode*idx = cur->next_node()
; idx && (idx != cur) ; idx = idx->next_node()) {
@ -120,10 +122,20 @@ NetEvent* NetEvent::find_similar_event()
assert(ncand <= NCAND);
}
/* Now go through the remaining probes, checking that all the
candidate events also have a probe connected to this
one. By the time I finish this list, I will have eliminated
all the candidate events that are not connected to all of
my probes. */
for (cur = cur->enext_ ; cur && ncand ; cur = cur->enext_) {
for (unsigned idx = 0 ; idx < ncand ; idx += 1)
cflg[idx] = false;
/* For this probe, look for other probes connected to it
and find the event connected to it. Mark that event
as connected to this probe. */
for (NetNode*idx = cur->next_node()
; idx && (idx != cur) ; idx = idx->next_node()) {
NetEvProbe*tmp = dynamic_cast<NetEvProbe*>(idx);
@ -139,13 +151,16 @@ NetEvent* NetEvent::find_similar_event()
}
}
/* Look for all the candidates that did not connect to
this probe (cflg is false) and eliminate them. */
for (unsigned idx = 0 ; idx < ncand ; ) {
if (cflg[idx]) {
idx += 1;
continue;
}
for (unsigned tmp = idx ; idx+1 < ncand ; idx += 1) {
for (unsigned tmp = idx ; (tmp+1) < ncand ; tmp += 1) {
cflg[tmp] = cflg[tmp+1];
cand[tmp] = cand[tmp+1];
}
@ -153,6 +168,10 @@ NetEvent* NetEvent::find_similar_event()
}
}
/* Now, skip any of the remaining candidates for any that have
a different number of probes. These would be events that
have probes that I'm not connected to. */
for (unsigned idx = 0 ; idx < ncand ; idx += 1) {
if (cand[idx]->nprobe() == nprobe())
return cand[idx];
@ -364,6 +383,9 @@ NetProc* NetEvWait::statement()
/*
* $Log: net_event.cc,v $
* Revision 1.9 2000/07/29 03:55:38 steve
* fix problem coalescing events w/ probes.
*
* Revision 1.8 2000/05/31 02:26:49 steve
* Globally merge redundant event objects.
*