Handle complex net node delays.
This commit is contained in:
parent
a4116efd57
commit
368c27c9e4
27
PDelays.cc
27
PDelays.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
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: PDelays.cc,v 1.12 2006/01/02 05:33:19 steve Exp $"
|
#ident "$Id: PDelays.cc,v 1.13 2006/01/03 05:22:14 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -106,22 +106,42 @@ static NetExpr*calculate_val(Design*des, NetScope*scope, const PExpr*expr)
|
||||||
return dex;
|
return dex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static NetExpr* make_delay_nets(Design*des, NetExpr*expr)
|
||||||
|
{
|
||||||
|
if (dynamic_cast<NetESignal*> (expr))
|
||||||
|
return expr;
|
||||||
|
|
||||||
|
if (dynamic_cast<NetEConst*> (expr))
|
||||||
|
return expr;
|
||||||
|
|
||||||
|
NetNet*sig = expr->synthesize(des);
|
||||||
|
expr = new NetESignal(sig);
|
||||||
|
return expr;
|
||||||
|
}
|
||||||
|
|
||||||
void PDelays::eval_delays(Design*des, NetScope*scope,
|
void PDelays::eval_delays(Design*des, NetScope*scope,
|
||||||
NetExpr*&rise_time,
|
NetExpr*&rise_time,
|
||||||
NetExpr*&fall_time,
|
NetExpr*&fall_time,
|
||||||
NetExpr*&decay_time) const
|
NetExpr*&decay_time,
|
||||||
|
bool as_nets_flag) const
|
||||||
{
|
{
|
||||||
assert(scope);
|
assert(scope);
|
||||||
|
|
||||||
|
|
||||||
if (delay_[0]) {
|
if (delay_[0]) {
|
||||||
rise_time = calculate_val(des, scope, delay_[0]);
|
rise_time = calculate_val(des, scope, delay_[0]);
|
||||||
|
if (as_nets_flag)
|
||||||
|
rise_time = make_delay_nets(des, rise_time);
|
||||||
|
|
||||||
if (delay_[1]) {
|
if (delay_[1]) {
|
||||||
fall_time = calculate_val(des, scope, delay_[1]);
|
fall_time = calculate_val(des, scope, delay_[1]);
|
||||||
|
if (as_nets_flag)
|
||||||
|
fall_time = make_delay_nets(des, fall_time);
|
||||||
|
|
||||||
if (delay_[2]) {
|
if (delay_[2]) {
|
||||||
decay_time = calculate_val(des, scope, delay_[2]);
|
decay_time = calculate_val(des, scope, delay_[2]);
|
||||||
|
if (as_nets_flag)
|
||||||
|
decay_time = make_delay_nets(des, decay_time);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (rise_time < fall_time)
|
if (rise_time < fall_time)
|
||||||
|
|
@ -143,6 +163,9 @@ void PDelays::eval_delays(Design*des, NetScope*scope,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: PDelays.cc,v $
|
* $Log: PDelays.cc,v $
|
||||||
|
* Revision 1.13 2006/01/03 05:22:14 steve
|
||||||
|
* Handle complex net node delays.
|
||||||
|
*
|
||||||
* Revision 1.12 2006/01/02 05:33:19 steve
|
* Revision 1.12 2006/01/02 05:33:19 steve
|
||||||
* Node delays can be more general expressions in structural contexts.
|
* Node delays can be more general expressions in structural contexts.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: PDelays.h,v 1.8 2006/01/02 05:33:19 steve Exp $"
|
#ident "$Id: PDelays.h,v 1.9 2006/01/03 05:22:14 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "svector.h"
|
# include "svector.h"
|
||||||
|
|
@ -56,7 +56,8 @@ class PDelays {
|
||||||
void eval_delays(Design*des, NetScope*scope,
|
void eval_delays(Design*des, NetScope*scope,
|
||||||
NetExpr*&rise_time,
|
NetExpr*&rise_time,
|
||||||
NetExpr*&fall_time,
|
NetExpr*&fall_time,
|
||||||
NetExpr*&decay_time) const;
|
NetExpr*&decay_time,
|
||||||
|
bool as_nets_flag =false) const;
|
||||||
|
|
||||||
void dump_delays(ostream&out) const;
|
void dump_delays(ostream&out) const;
|
||||||
|
|
||||||
|
|
@ -73,6 +74,9 @@ ostream& operator << (ostream&o, const PDelays&);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: PDelays.h,v $
|
* $Log: PDelays.h,v $
|
||||||
|
* Revision 1.9 2006/01/03 05:22:14 steve
|
||||||
|
* Handle complex net node delays.
|
||||||
|
*
|
||||||
* Revision 1.8 2006/01/02 05:33:19 steve
|
* Revision 1.8 2006/01/02 05:33:19 steve
|
||||||
* Node delays can be more general expressions in structural contexts.
|
* Node delays can be more general expressions in structural contexts.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
12
PGate.cc
12
PGate.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
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: PGate.cc,v 1.17 2006/01/02 05:33:19 steve Exp $"
|
#ident "$Id: PGate.cc,v 1.18 2006/01/03 05:22:14 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -94,9 +94,12 @@ void PGate::elaborate_scope(Design*, NetScope*) const
|
||||||
void PGate::eval_delays(Design*des, NetScope*scope,
|
void PGate::eval_delays(Design*des, NetScope*scope,
|
||||||
NetExpr*&rise_expr,
|
NetExpr*&rise_expr,
|
||||||
NetExpr*&fall_expr,
|
NetExpr*&fall_expr,
|
||||||
NetExpr*&decay_expr) const
|
NetExpr*&decay_expr,
|
||||||
|
bool as_net_flag) const
|
||||||
{
|
{
|
||||||
delay_.eval_delays(des, scope, rise_expr, fall_expr, decay_expr);
|
delay_.eval_delays(des, scope,
|
||||||
|
rise_expr, fall_expr, decay_expr,
|
||||||
|
as_net_flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PGate::eval_delays(Design*des, NetScope*scope,
|
void PGate::eval_delays(Design*des, NetScope*scope,
|
||||||
|
|
@ -245,6 +248,9 @@ perm_string PGModule::get_type()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: PGate.cc,v $
|
* $Log: PGate.cc,v $
|
||||||
|
* Revision 1.18 2006/01/03 05:22:14 steve
|
||||||
|
* Handle complex net node delays.
|
||||||
|
*
|
||||||
* Revision 1.17 2006/01/02 05:33:19 steve
|
* Revision 1.17 2006/01/02 05:33:19 steve
|
||||||
* Node delays can be more general expressions in structural contexts.
|
* Node delays can be more general expressions in structural contexts.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
8
PGate.h
8
PGate.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
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: PGate.h,v 1.30 2006/01/02 05:33:19 steve Exp $"
|
#ident "$Id: PGate.h,v 1.31 2006/01/03 05:22:14 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "svector.h"
|
# include "svector.h"
|
||||||
|
|
@ -80,7 +80,8 @@ class PGate : public LineInfo {
|
||||||
void eval_delays(Design*des, NetScope*scope,
|
void eval_delays(Design*des, NetScope*scope,
|
||||||
NetExpr*&rise_time,
|
NetExpr*&rise_time,
|
||||||
NetExpr*&fall_time,
|
NetExpr*&fall_time,
|
||||||
NetExpr*&decay_time) const;
|
NetExpr*&decay_time,
|
||||||
|
bool as_net_flag =false) const;
|
||||||
|
|
||||||
unsigned pin_count() const { return pins_? pins_->count() : 0; }
|
unsigned pin_count() const { return pins_? pins_->count() : 0; }
|
||||||
const PExpr*pin(unsigned idx) const { return (*pins_)[idx]; }
|
const PExpr*pin(unsigned idx) const { return (*pins_)[idx]; }
|
||||||
|
|
@ -238,6 +239,9 @@ class PGModule : public PGate {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: PGate.h,v $
|
* $Log: PGate.h,v $
|
||||||
|
* Revision 1.31 2006/01/03 05:22:14 steve
|
||||||
|
* Handle complex net node delays.
|
||||||
|
*
|
||||||
* Revision 1.30 2006/01/02 05:33:19 steve
|
* Revision 1.30 2006/01/02 05:33:19 steve
|
||||||
* Node delays can be more general expressions in structural contexts.
|
* Node delays can be more general expressions in structural contexts.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: elaborate.cc,v 1.333 2006/01/02 05:33:19 steve Exp $"
|
#ident "$Id: elaborate.cc,v 1.334 2006/01/03 05:22:14 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -76,7 +76,7 @@ void PGAssign::elaborate(Design*des, NetScope*scope) const
|
||||||
assert(scope);
|
assert(scope);
|
||||||
|
|
||||||
NetExpr* rise_time, *fall_time, *decay_time;
|
NetExpr* rise_time, *fall_time, *decay_time;
|
||||||
eval_delays(des, scope, rise_time, fall_time, decay_time);
|
eval_delays(des, scope, rise_time, fall_time, decay_time, true);
|
||||||
|
|
||||||
Link::strength_t drive0 = drive_type(strength0());
|
Link::strength_t drive0 = drive_type(strength0());
|
||||||
Link::strength_t drive1 = drive_type(strength1());
|
Link::strength_t drive1 = drive_type(strength1());
|
||||||
|
|
@ -3069,6 +3069,9 @@ Design* elaborate(list<perm_string>roots)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: elaborate.cc,v $
|
* $Log: elaborate.cc,v $
|
||||||
|
* Revision 1.334 2006/01/03 05:22:14 steve
|
||||||
|
* Handle complex net node delays.
|
||||||
|
*
|
||||||
* Revision 1.333 2006/01/02 05:33:19 steve
|
* Revision 1.333 2006/01/02 05:33:19 steve
|
||||||
* Node delays can be more general expressions in structural contexts.
|
* Node delays can be more general expressions in structural contexts.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue