Spelling fixes.

This commit is contained in:
steve 2003-01-27 05:09:17 +00:00
parent 04ada23119
commit 8f0c02c0fa
19 changed files with 134 additions and 83 deletions

View File

@ -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: PExpr.cc,v 1.32 2002/11/09 19:20:48 steve Exp $" #ident "$Id: PExpr.cc,v 1.33 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -154,7 +154,7 @@ const hname_t& PEIdent::path() const
} }
/* /*
* An identifier can be in a constant expresion if (and only if) it is * An identifier can be in a constant expression if (and only if) it is
* a parameter. * a parameter.
*/ */
bool PEIdent::is_constant(Module*mod) const bool PEIdent::is_constant(Module*mod) const
@ -256,6 +256,9 @@ bool PEUnary::is_constant(Module*m) const
/* /*
* $Log: PExpr.cc,v $ * $Log: PExpr.cc,v $
* Revision 1.33 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.32 2002/11/09 19:20:48 steve * Revision 1.32 2002/11/09 19:20:48 steve
* Port expressions for output ports are lnets, not nets. * Port expressions for output ports are lnets, not nets.
* *

View File

@ -15,15 +15,9 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
* ---
* You should also have recieved a copy of the Picture Elements
* Binary Software License offer along with the source. This offer
* allows you to obtain the right to redistribute the software in
* binary (compiled) form. If you have not received it, contact
* Picture Elements, Inc., 777 Panoramic Way, Berkeley, CA 94704.
*/ */
#ifdef HAVE_CVS_IDENT #ifdef HAVE_CVS_IDENT
#ident "$Id: StringHeap.cc,v 1.3 2003/01/16 21:44:46 steve Exp $" #ident "$Id: StringHeap.cc,v 1.4 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "StringHeap.h" # include "StringHeap.h"
@ -43,7 +37,7 @@ StringHeap::StringHeap()
StringHeap::~StringHeap() StringHeap::~StringHeap()
{ {
// This is a planned memory leak. The string heap is indended // This is a planned memory leak. The string heap is intended
// to hold permanently-allocated strings. // to hold permanently-allocated strings.
} }
@ -72,6 +66,9 @@ const char* StringHeap::add(const char*text)
/* /*
* $Log: StringHeap.cc,v $ * $Log: StringHeap.cc,v $
* Revision 1.4 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.3 2003/01/16 21:44:46 steve * Revision 1.3 2003/01/16 21:44:46 steve
* Keep some debugging status. * Keep some debugging status.
* *

View File

@ -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: cprop.cc,v 1.39 2002/08/20 04:12:22 steve Exp $" #ident "$Id: cprop.cc,v 1.40 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -30,7 +30,7 @@
/* /*
* The cprop function below invokes constant propogation where * The cprop function below invokes constant propagation where
* possible. The elaboration generates NetConst objects. I can remove * possible. The elaboration generates NetConst objects. I can remove
* these and replace the gates connected to it with simpler ones. I * these and replace the gates connected to it with simpler ones. I
* may even be able to replace nets with a new constant. * may even be able to replace nets with a new constant.
@ -897,7 +897,7 @@ struct cprop_dc_functor : public functor_t {
void cprop_dc_functor::lpm_const(Design*des, NetConst*obj) void cprop_dc_functor::lpm_const(Design*des, NetConst*obj)
{ {
// 'bz constant values drive high impedance to whatever is // 'bz constant values drive high impedance to whatever is
// connected to it. In otherwords, it is a noop. // connected to it. In other words, it is a noop.
{ unsigned tmp = 0; { unsigned tmp = 0;
for (unsigned idx = 0 ; idx < obj->pin_count() ; idx += 1) for (unsigned idx = 0 ; idx < obj->pin_count() ; idx += 1)
if (obj->value(idx) == verinum::Vz) { if (obj->value(idx) == verinum::Vz) {
@ -994,6 +994,9 @@ void cprop(Design*des)
/* /*
* $Log: cprop.cc,v $ * $Log: cprop.cc,v $
* Revision 1.40 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.39 2002/08/20 04:12:22 steve * Revision 1.39 2002/08/20 04:12:22 steve
* Copy gate delays when doing gate delay substitutions. * Copy gate delays when doing gate delay substitutions.
* *

View File

@ -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: design_dump.cc,v 1.136 2003/01/26 21:15:58 steve Exp $" #ident "$Id: design_dump.cc,v 1.137 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -815,7 +815,7 @@ void NetProc::dump(ostream&o, unsigned ind) const
o << setw(ind) << "" << "// " << typeid(*this).name() << endl; o << setw(ind) << "" << "// " << typeid(*this).name() << endl;
} }
/* Dump an expression that noone wrote a dump method for. */ /* Dump an expression that no one wrote a dump method for. */
void NetExpr::dump(ostream&o) const void NetExpr::dump(ostream&o) const
{ {
o << "(?" << typeid(*this).name() << "?)"; o << "(?" << typeid(*this).name() << "?)";
@ -1021,6 +1021,9 @@ void Design::dump(ostream&o) const
/* /*
* $Log: design_dump.cc,v $ * $Log: design_dump.cc,v $
* Revision 1.137 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.136 2003/01/26 21:15:58 steve * Revision 1.136 2003/01/26 21:15:58 steve
* Rework expression parsing and elaboration to * Rework expression parsing and elaboration to
* accommodate real/realtime values and expressions. * accommodate real/realtime values and expressions.

View File

@ -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: elab_anet.cc,v 1.5 2002/08/12 01:34:58 steve Exp $" #ident "$Id: elab_anet.cc,v 1.6 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -34,7 +34,7 @@
NetNet* PExpr::elaborate_anet(Design*des, NetScope*scope) const NetNet* PExpr::elaborate_anet(Design*des, NetScope*scope) const
{ {
cerr << get_line() << ": error: Invalid expression on left side " cerr << get_line() << ": error: Invalid expression on left side "
<< "of precedural continuous asignment." << endl; << "of procedural continuous assignment." << endl;
return 0; return 0;
} }
@ -110,7 +110,7 @@ NetNet* PEIdent::elaborate_anet(Design*des, NetScope*scope) const
if (NetMemory*mem = des->find_memory(scope, path_)) { if (NetMemory*mem = des->find_memory(scope, path_)) {
cerr << get_line() << ": error: memories not allowed " cerr << get_line() << ": error: memories not allowed "
<< "on left side of procedural continuous " << "on left side of procedural continuous "
<< "asignment." << endl; << "assignment." << endl;
des->errors += 1; des->errors += 1;
return 0; return 0;
} }
@ -138,7 +138,7 @@ NetNet* PEIdent::elaborate_anet(Design*des, NetScope*scope) const
if (msb_ || lsb_) { if (msb_ || lsb_) {
cerr << get_line() << ": error: bit/part selects not allowed " cerr << get_line() << ": error: bit/part selects not allowed "
<< "on left side of procedural continuous asignment." << "on left side of procedural continuous assignment."
<< endl; << endl;
des->errors += 1; des->errors += 1;
return 0; return 0;
@ -149,6 +149,9 @@ NetNet* PEIdent::elaborate_anet(Design*des, NetScope*scope) const
/* /*
* $Log: elab_anet.cc,v $ * $Log: elab_anet.cc,v $
* Revision 1.6 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.5 2002/08/12 01:34:58 steve * Revision 1.5 2002/08/12 01:34:58 steve
* conditional ident string using autoconfig. * conditional ident string using autoconfig.
* *

View File

@ -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: elab_expr.cc,v 1.68 2003/01/26 21:15:58 steve Exp $" #ident "$Id: elab_expr.cc,v 1.69 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -227,7 +227,7 @@ NetExpr* PECallFunction::elaborate_sfunc_(Design*des, NetScope*scope) const
be interpreted as a single empty parameter. be interpreted as a single empty parameter.
Functions cannot really take empty parameters, but the Functions cannot really take empty parameters, but the
case ``func()'' is the same as no parmaters at all. So case ``func()'' is the same as no parameters at all. So
catch that special case here. */ catch that special case here. */
unsigned nparms = parms_.count(); unsigned nparms = parms_.count();
if ((nparms == 1) && (parms_[0] == 0)) if ((nparms == 1) && (parms_[0] == 0))
@ -447,7 +447,7 @@ NetExpr* PEIdent::elaborate_expr(Design*des, NetScope*scope,
verinum*msn = msb_->eval_const(des, scope); verinum*msn = msb_->eval_const(des, scope);
if ((lsn == 0) || (msn == 0)) { if ((lsn == 0) || (msn == 0)) {
cerr << get_line() << ": error: " cerr << get_line() << ": error: "
"Part select expresions must be " "Part select expressions must be "
"constant expressions." << endl; "constant expressions." << endl;
des->errors += 1; des->errors += 1;
return 0; return 0;
@ -568,7 +568,7 @@ NetExpr* PEIdent::elaborate_expr(Design*des, NetScope*scope,
verinum*msn = msb_->eval_const(des, scope); verinum*msn = msb_->eval_const(des, scope);
if ((lsn == 0) || (msn == 0)) { if ((lsn == 0) || (msn == 0)) {
cerr << get_line() << ": error: " cerr << get_line() << ": error: "
"Part select expresions must be " "Part select expressions must be "
"constant expressions." << endl; "constant expressions." << endl;
des->errors += 1; des->errors += 1;
return 0; return 0;
@ -581,7 +581,7 @@ NetExpr* PEIdent::elaborate_expr(Design*des, NetScope*scope,
integers, so allow negative values. However, integers, so allow negative values. However,
the width that they represent is the width that they represent is
unsigned. Remember that any order is possible, unsigned. Remember that any order is possible,
i.e. [1:0], [-4,6], etc. */ i.e., [1:0], [-4,6], etc. */
long lsv = lsn->as_long(); long lsv = lsn->as_long();
long msv = msn->as_long(); long msv = msn->as_long();
@ -733,7 +733,7 @@ NetExpr* PEIdent::elaborate_expr(Design*des, NetScope*scope,
// Finally, if this is a scope name, then return that. Look // Finally, if this is a scope name, then return that. Look
// first to see if this is a name of a local scope. Failing // first to see if this is a name of a local scope. Failing
// that, search globally for a heirarchical name. // that, search globally for a hierarchical name.
if ((path_.peek_name(1) == 0)) if ((path_.peek_name(1) == 0))
if (NetScope*nsc = scope->child(path_.peek_name(0))) { if (NetScope*nsc = scope->child(path_.peek_name(0))) {
NetEScope*tmp = new NetEScope(nsc); NetEScope*tmp = new NetEScope(nsc);
@ -900,6 +900,9 @@ NetExpr* PEUnary::elaborate_expr(Design*des, NetScope*scope, bool) const
/* /*
* $Log: elab_expr.cc,v $ * $Log: elab_expr.cc,v $
* Revision 1.69 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.68 2003/01/26 21:15:58 steve * Revision 1.68 2003/01/26 21:15:58 steve
* Rework expression parsing and elaboration to * Rework expression parsing and elaboration to
* accommodate real/realtime values and expressions. * accommodate real/realtime values and expressions.

View File

@ -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: elab_lval.cc,v 1.25 2003/01/26 21:15:58 steve Exp $" #ident "$Id: elab_lval.cc,v 1.26 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -29,23 +29,23 @@
/* /*
* These methods generate a NetAssign_ object for the l-value of the * These methods generate a NetAssign_ object for the l-value of the
* assignemnt. This is common code for the = and <= statements. * assignment. This is common code for the = and <= statements.
* *
* What gets generated depends on the structure of the l-value. If the * What gets generated depends on the structure of the l-value. If the
* l-value is a simple name (i.e. foo <= <value>) the the NetAssign_ * l-value is a simple name (i.e., foo <= <value>) the the NetAssign_
* is created the width of the foo reg and connected to all the * is created the width of the foo reg and connected to all the
* bits. * bits.
* *
* If there is a part select (i.e. foo[3:1] <= <value>) the NetAssign_ * If there is a part select (i.e., foo[3:1] <= <value>) the NetAssign_
* is made only as wide as it needs to be (3 bits in this example) and * is made only as wide as it needs to be (3 bits in this example) and
* connected to the correct bits of foo. A constant bit select is a * connected to the correct bits of foo. A constant bit select is a
* special case of the part select. * special case of the part select.
* *
* If the bit-select is non-constant (i.e. foo[<expr>] = <value>) the * If the bit-select is non-constant (i.e., foo[<expr>] = <value>) the
* NetAssign_ is made wide enough to connect to all the bits of foo, * NetAssign_ is made wide enough to connect to all the bits of foo,
* then the mux expression is elaborated and attached to the * then the mux expression is elaborated and attached to the
* NetAssign_ node as a b_mux value. The target must interpret the * NetAssign_ node as a b_mux value. The target must interpret the
* presense of a bmux value as taking a single bit and assigning it to * presence of a bmux value as taking a single bit and assigning it to
* the bit selected by the bmux expression. * the bit selected by the bmux expression.
* *
* If the l-value expression is non-trivial, but can be fully * If the l-value expression is non-trivial, but can be fully
@ -55,7 +55,7 @@
* l-value. * l-value.
* *
* This last case can turn up in statements like: {a, b[1]} = c; * This last case can turn up in statements like: {a, b[1]} = c;
* rather then create a NetAssign_ for each item in the contatenation, * rather then create a NetAssign_ for each item in the concatenation,
* elaboration makes a single NetAssign_ and connects it up properly. * elaboration makes a single NetAssign_ and connects it up properly.
*/ */
@ -347,6 +347,9 @@ NetAssign_* PENumber::elaborate_lval(Design*des, NetScope*) const
/* /*
* $Log: elab_lval.cc,v $ * $Log: elab_lval.cc,v $
* Revision 1.26 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.25 2003/01/26 21:15:58 steve * Revision 1.25 2003/01/26 21:15:58 steve
* Rework expression parsing and elaboration to * Rework expression parsing and elaboration to
* accommodate real/realtime values and expressions. * accommodate real/realtime values and expressions.

View File

@ -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: elab_net.cc,v 1.105 2003/01/19 00:35:39 steve Exp $" #ident "$Id: elab_net.cc,v 1.106 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -69,7 +69,7 @@ NetNet* PEBinary::elaborate_net(Design*des, NetScope*scope,
case '^': case '^':
case 'A': // Bitwise NAND (~&) case 'A': // Bitwise NAND (~&)
case 'O': // Bitwise NOR (~|) case 'O': // Bitwise NOR (~|)
case 'X': // Exclusing NOR case 'X': // Exclusive NOR
return elaborate_net_bit_(des, scope, width, rise, fall, decay); return elaborate_net_bit_(des, scope, width, rise, fall, decay);
case 'E': // === (case equals) case 'E': // === (case equals)
case 'e': // == case 'e': // ==
@ -588,7 +588,7 @@ NetNet* PEBinary::elaborate_net_cmp_(Design*des, NetScope*scope,
} }
/* /*
* Elaborate a divider gate. This function create a NetDevide gate * Elaborate a divider gate. This function create a NetDivide gate
* which has exactly the right sized DataA, DataB and Result ports. If * which has exactly the right sized DataA, DataB and Result ports. If
* the l-value is wider then the result, then pad. * the l-value is wider then the result, then pad.
*/ */
@ -825,7 +825,7 @@ NetNet* PEBinary::elaborate_net_mul_(Design*des, NetScope*scope,
verinum*rnum = right_->eval_const(des, scope); verinum*rnum = right_->eval_const(des, scope);
/* Detect and handle the special case that both the operands /* Detect and handle the special case that both the operands
of the multiply are constant expressions. Evalulate the of the multiply are constant expressions. Evaluate the
value and make this a simple constant. */ value and make this a simple constant. */
if (lnum && rnum) { if (lnum && rnum) {
verinum prod = *lnum * *rnum; verinum prod = *lnum * *rnum;
@ -1393,7 +1393,7 @@ NetNet* PEIdent::elaborate_net(Design*des, NetScope*scope,
} }
/* /*
* When I run into an identifier in an expression that referrs to a * When I run into an identifier in an expression that refers to a
* memory, create a RAM port object. * memory, create a RAM port object.
*/ */
NetNet* PEIdent::elaborate_net_ram_(Design*des, NetScope*scope, NetNet* PEIdent::elaborate_net_ram_(Design*des, NetScope*scope,
@ -2284,6 +2284,9 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
/* /*
* $Log: elab_net.cc,v $ * $Log: elab_net.cc,v $
* Revision 1.106 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.105 2003/01/19 00:35:39 steve * Revision 1.105 2003/01/19 00:35:39 steve
* Detect null arguments to concatenation operator. * Detect null arguments to concatenation operator.
* *

View File

@ -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: elab_pexpr.cc,v 1.18 2002/12/05 02:14:33 steve Exp $" #ident "$Id: elab_pexpr.cc,v 1.19 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -61,7 +61,7 @@ NetExpr*PEBinary::elaborate_pexpr (Design*des, NetScope*scope) const
* expressions can include concatenation expressions. This requires * expressions can include concatenation expressions. This requires
* that the subexpressions all have well-defined size (in spite of * that the subexpressions all have well-defined size (in spite of
* being in a parameter expression) in order to get a defined * being in a parameter expression) in order to get a defined
* value. The sub-expressions themsilves must also be value parameter * value. The sub-expressions themselves must also be value parameter
* expressions. * expressions.
*/ */
NetEConcat* PEConcat::elaborate_pexpr(Design*des, NetScope*scope) const NetEConcat* PEConcat::elaborate_pexpr(Design*des, NetScope*scope) const
@ -228,6 +228,9 @@ NetExpr*PEUnary::elaborate_pexpr (Design*des, NetScope*scope) const
/* /*
* $Log: elab_pexpr.cc,v $ * $Log: elab_pexpr.cc,v $
* Revision 1.19 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.18 2002/12/05 02:14:33 steve * Revision 1.18 2002/12/05 02:14:33 steve
* Support bit select in constant expressions. * Support bit select in constant expressions.
* *

View File

@ -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: elab_scope.cc,v 1.18 2003/01/26 21:15:58 steve Exp $" #ident "$Id: elab_scope.cc,v 1.19 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -138,7 +138,7 @@ bool Module::elaborate_scope(Design*des, NetScope*scope) const
// It is OK to elaborate the expressions of the defparam here // It is OK to elaborate the expressions of the defparam here
// because Verilog requires that the expressions only use // because Verilog requires that the expressions only use
// local parameter names. It is *not* OK to do the override // local parameter names. It is *not* OK to do the override
// here becuase the parameter receiving the assignment may be // here because the parameter receiving the assignment may be
// in a scope not discovered by this pass. // in a scope not discovered by this pass.
for (hparm_it_t cur = defparms.begin() for (hparm_it_t cur = defparms.begin()
@ -292,7 +292,7 @@ void PGModule::elaborate_scope_mod_(Design*des, Module*mod, NetScope*sc) const
// Look for module parameter replacements. The "replace" map // Look for module parameter replacements. The "replace" map
// maps parameter name to replacement expression that is // maps parameter name to replacement expression that is
// passed. It is built up by the ordered overrices or named // passed. It is built up by the ordered overrides or named
// overrides. // overrides.
typedef map<string,PExpr*>::const_iterator mparm_it_t; typedef map<string,PExpr*>::const_iterator mparm_it_t;
@ -414,7 +414,7 @@ void PBlock::elaborate_scope(Design*des, NetScope*scope) const
} }
/* /*
* The case statement itseof does not introduce scope, but contains * The case statement itself does not introduce scope, but contains
* other statements that may be named blocks. So scan the case items * other statements that may be named blocks. So scan the case items
* with the elaborate_scope method. * with the elaborate_scope method.
*/ */
@ -512,6 +512,9 @@ void PWhile::elaborate_scope(Design*des, NetScope*scope) const
/* /*
* $Log: elab_scope.cc,v $ * $Log: elab_scope.cc,v $
* Revision 1.19 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.18 2003/01/26 21:15:58 steve * Revision 1.18 2003/01/26 21:15:58 steve
* Rework expression parsing and elaboration to * Rework expression parsing and elaboration to
* accommodate real/realtime values and expressions. * accommodate real/realtime values and expressions.

View File

@ -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: elab_sig.cc,v 1.25 2002/08/12 01:34:59 steve Exp $" #ident "$Id: elab_sig.cc,v 1.26 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -360,7 +360,7 @@ bool PGate::elaborate_sig(Design*des, NetScope*scope) const
/* /*
* Elaborate a source wire. The "wire" is the declaration of wires, * Elaborate a source wire. The "wire" is the declaration of wires,
* registers, ports and memories. The parser has already merged the * registers, ports and memories. The parser has already merged the
* multiple properties of a wire (i.e. "input wire") so come the * multiple properties of a wire (i.e., "input wire") so come the
* elaboration this creates an object in the design that represent the * elaboration this creates an object in the design that represent the
* defined item. * defined item.
*/ */
@ -396,7 +396,7 @@ void PWire::elaborate_sig(Design*des, NetScope*scope) const
unsigned count_scalars = 0; unsigned count_scalars = 0;
/* There may be multiple declarations of ranges, because /* There may be multiple declarations of ranges, because
the symbol may have its range declared in i.e. input the symbol may have its range declared in e.g., input
and reg declarations. Calculate *all* the numbers and reg declarations. Calculate *all* the numbers
here. I will resolve the values later. */ here. I will resolve the values later. */
@ -525,6 +525,9 @@ void PWire::elaborate_sig(Design*des, NetScope*scope) const
/* /*
* $Log: elab_sig.cc,v $ * $Log: elab_sig.cc,v $
* Revision 1.26 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.25 2002/08/12 01:34:59 steve * Revision 1.25 2002/08/12 01:34:59 steve
* conditional ident string using autoconfig. * conditional ident string using autoconfig.
* *

View File

@ -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.269 2003/01/26 21:15:58 steve Exp $" #ident "$Id: elaborate.cc,v 1.270 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -110,7 +110,7 @@ void PGAssign::elaborate(Design*des, NetScope*scope) const
/* If the right hand net is the same type as the left /* If the right hand net is the same type as the left
side net (i.e. WIRE/WIRE) then it is enough to just side net (i.e., WIRE/WIRE) then it is enough to just
connect them together. Otherwise, put a bufz between connect them together. Otherwise, put a bufz between
them to carry strengths from the rval. them to carry strengths from the rval.
@ -133,7 +133,7 @@ void PGAssign::elaborate(Design*des, NetScope*scope) const
} }
} }
/* If the nets are different type (i.e. reg vs tri) then /* If the nets are different type (i.e., reg vs tri) then
a driver is needed. */ a driver is needed. */
if (rid->type() != lval->type()) if (rid->type() != lval->type())
need_driver_flag = true; need_driver_flag = true;
@ -254,7 +254,7 @@ void PGBuiltin::elaborate(Design*des, NetScope*scope) const
else else
name = scope->name()+"."+name; name = scope->name()+"."+name;
/* If the verilog source has a range specification for the /* If the Verilog source has a range specification for the
gates, then I am expected to make more then one gates, then I am expected to make more then one
gate. Figure out how many are desired. */ gate. Figure out how many are desired. */
if (msb_) { if (msb_) {
@ -292,10 +292,10 @@ void PGBuiltin::elaborate(Design*des, NetScope*scope) const
/* Calculate the gate delays from the delay expressions /* Calculate the gate delays from the delay expressions
given in the source. For logic gates, the decay time given in the source. For logic gates, the decay time
is meaningless because it can never go to high is meaningless because it can never go to high
impedence. However, the bufif devices can generate impedance. However, the bufif devices can generate
'bz output, so we will pretend that anything can. 'bz output, so we will pretend that anything can.
If only one delay value expression is given (i.e. #5 If only one delay value expression is given (i.e., #5
nand(foo,...)) then rise, fall and decay times are nand(foo,...)) then rise, fall and decay times are
all the same value. If two values are given, rise and all the same value. If two values are given, rise and
fall times are use, and the decay time is the minimum fall times are use, and the decay time is the minimum
@ -529,7 +529,7 @@ void PGModule::elaborate_mod_(Design*des, Module*rmod, NetScope*scope) const
/* Handle the special case that no ports are /* Handle the special case that no ports are
connected. It is possible that this is an empty connected. It is possible that this is an empty
connect-by-name list, su we'll allow it and assume connect-by-name list, so we'll allow it and assume
that is the case. */ that is the case. */
svector<PExpr*>*tmp = new svector<PExpr*>(rmod->port_count()); svector<PExpr*>*tmp = new svector<PExpr*>(rmod->port_count());
@ -571,7 +571,7 @@ void PGModule::elaborate_mod_(Design*des, Module*rmod, NetScope*scope) const
// bind them to the port of the elaborated module. // bind them to the port of the elaborated module.
// This can get rather complicated because the port can be // This can get rather complicated because the port can be
// unconnected (meaning an empty paramter is passed) connected // unconnected (meaning an empty parameter is passed) connected
// to a concatenation, or connected to an internally // to a concatenation, or connected to an internally
// unconnected port. // unconnected port.
@ -584,7 +584,7 @@ void PGModule::elaborate_mod_(Design*des, Module*rmod, NetScope*scope) const
// Inside the module, the port is zero or more signals // Inside the module, the port is zero or more signals
// that were already elaborated. List all those signals // that were already elaborated. List all those signals
// and the NetNet equivilents. // and the NetNet equivalents.
svector<PEIdent*> mport = rmod->get_port(idx); svector<PEIdent*> mport = rmod->get_port(idx);
svector<NetNet*>prts (mport.count()); svector<NetNet*>prts (mport.count());
@ -603,7 +603,7 @@ void PGModule::elaborate_mod_(Design*des, Module*rmod, NetScope*scope) const
// If I find that the port in unconnected inside the // If I find that the port in unconnected inside the
// module, then there is nothing to connect. Skip the // module, then there is nothing to connect. Skip the
// paramter. // parameter.
if (prts_pin_count == 0) { if (prts_pin_count == 0) {
continue; continue;
} }
@ -1187,7 +1187,7 @@ NetProc* PCase::elaborate(Design*des, NetScope*scope) const
} }
} }
/* Count the items in the case statement. Note that ther may /* Count the items in the case statement. Note that there may
be some cases that have multiple guards. Count each as a be some cases that have multiple guards. Count each as a
separate item. */ separate item. */
unsigned icount = 0; unsigned icount = 0;
@ -1564,7 +1564,7 @@ NetDeassign* PDeassign::elaborate(Design*des, NetScope*scope) const
} }
/* /*
* Elaborate the delay statment (of the form #<expr> <statement>) as a * Elaborate the delay statement (of the form #<expr> <statement>) as a
* NetPDelay object. If the expression is constant, evaluate it now * NetPDelay object. If the expression is constant, evaluate it now
* and make a constant delay. If not, then pass an elaborated * and make a constant delay. If not, then pass an elaborated
* expression to the constructor of NetPDelay so that the code * expression to the constructor of NetPDelay so that the code
@ -1697,7 +1697,7 @@ NetProc* PDisable::elaborate(Design*des, NetScope*scope) const
* classes. The NetEvWait class represents the part of the netlist * classes. The NetEvWait class represents the part of the netlist
* that is executed by behavioral code. The process starts waiting on * that is executed by behavioral code. The process starts waiting on
* the NetEvent when it executes the NetEvWait step. Net NetEvProbe * the NetEvent when it executes the NetEvWait step. Net NetEvProbe
* and NetEvTrig are structural and behavioral equivilents that * and NetEvTrig are structural and behavioral equivalents that
* trigger the event, and awakens any processes blocking in the * trigger the event, and awakens any processes blocking in the
* associated wait. * associated wait.
* *
@ -1728,7 +1728,7 @@ NetProc* PDisable::elaborate(Design*des, NetScope*scope) const
* always @(reset or posedge clk) <stmt>; * always @(reset or posedge clk) <stmt>;
* *
* Conjunctions like this cause a NetEvent object be created to * Conjunctions like this cause a NetEvent object be created to
* represent the overall conjuction, and NetEvProbe objects for each * represent the overall conjunction, and NetEvProbe objects for each
* event expression. * event expression.
* *
* If the NetEvent object represents a named event from the source, * If the NetEvent object represents a named event from the source,
@ -1780,7 +1780,7 @@ NetProc* PEventStatement::elaborate_st(Design*des, NetScope*scope,
<statement> <statement>
end end
This is equivilent, and uses the existing capapilities of This is equivalent, and uses the existing capapilities of
the netlist format. The resulting netlist should look like the netlist format. The resulting netlist should look like
this: this:
@ -1835,7 +1835,7 @@ NetProc* PEventStatement::elaborate_st(Design*des, NetScope*scope,
/* If we don't have a sub-statement after all, then we /* If we don't have a sub-statement after all, then we
don't really need the block and we can save the don't really need the block and we can save the
node. (i.e. wait (foo==1) ;) However, the common case node. (i.e., wait (foo==1) ;) However, the common case
has a statement in the wait so we create a sequential has a statement in the wait so we create a sequential
block to join the wait and the statement. */ block to join the wait and the statement. */
@ -1866,9 +1866,9 @@ NetProc* PEventStatement::elaborate_st(Design*des, NetScope*scope,
} }
} }
/* Create A single NetEvent and NetEvWait. Then, create a /* Create a single NetEvent and NetEvWait. Then, create a
NetEvProbe for each conjunctive event in the event NetEvProbe for each conjunctive event in the event
list. The NetEvProbe object al refer back to the NetEvent list. The NetEvProbe objects all refer back to the NetEvent
object. */ object. */
NetEvent*ev = new NetEvent(scope->local_symbol()); NetEvent*ev = new NetEvent(scope->local_symbol());
@ -2251,7 +2251,7 @@ NetProc* PRepeat::elaborate(Design*des, NetScope*scope) const
* of the task will include a foo.blah for the blah port. This port is * of the task will include a foo.blah for the blah port. This port is
* bound to a NetNet object by looking up the name. All of this is * bound to a NetNet object by looking up the name. All of this is
* handled by the PTask::elaborate_sig method and the results stashed * handled by the PTask::elaborate_sig method and the results stashed
* in the created NetDaskDef attached to the scope. * in the created NetTaskDef attached to the scope.
* *
* Elaboration pass 2 for the task definition causes the statement of * Elaboration pass 2 for the task definition causes the statement of
* the task to be elaborated and attached to the NetTaskDef object * the task to be elaborated and attached to the NetTaskDef object
@ -2463,7 +2463,7 @@ Design* elaborate(list<const char*>roots)
// defparam assignments to apply to the parameters in the // defparam assignments to apply to the parameters in the
// various scopes. This needs to be done after all the scopes // various scopes. This needs to be done after all the scopes
// and basic parameters are taken care of because the defparam // and basic parameters are taken care of because the defparam
// can assign to a paramter declared *after* it. // can assign to a parameter declared *after* it.
des->run_defparams(); des->run_defparams();
@ -2507,6 +2507,9 @@ Design* elaborate(list<const char*>roots)
/* /*
* $Log: elaborate.cc,v $ * $Log: elaborate.cc,v $
* Revision 1.270 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.269 2003/01/26 21:15:58 steve * Revision 1.269 2003/01/26 21:15:58 steve
* Rework expression parsing and elaboration to * Rework expression parsing and elaboration to
* accommodate real/realtime values and expressions. * accommodate real/realtime values and expressions.

View File

@ -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: eval_attrib.cc,v 1.5 2002/08/12 01:34:59 steve Exp $" #ident "$Id: eval_attrib.cc,v 1.6 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -29,7 +29,7 @@
/* /*
* The evaluate_attributes function evaluates the attribute * The evaluate_attributes function evaluates the attribute
* expressions from the map, and resturns a table in a form suitable * expressions from the map, and returns a table in a form suitable
* for passing to netlist devices. * for passing to netlist devices.
*/ */
@ -52,7 +52,7 @@ attrib_list_t* evaluate_attributes(const map<string,PExpr*>&att,
PExpr*exp = (*cur).second; PExpr*exp = (*cur).second;
/* If the attribute value is given in the source, then /* If the attribute value is given in the source, then
evalulate it as a constant. If the value is not evaluate it as a constant. If the value is not
given, then assume the value is 1. */ given, then assume the value is 1. */
verinum*tmp; verinum*tmp;
if (exp) if (exp)
@ -74,6 +74,9 @@ attrib_list_t* evaluate_attributes(const map<string,PExpr*>&att,
/* /*
* $Log: eval_attrib.cc,v $ * $Log: eval_attrib.cc,v $
* Revision 1.6 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.5 2002/08/12 01:34:59 steve * Revision 1.5 2002/08/12 01:34:59 steve
* conditional ident string using autoconfig. * conditional ident string using autoconfig.
* *

View File

@ -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: eval_tree.cc,v 1.44 2002/12/05 02:14:33 steve Exp $" #ident "$Id: eval_tree.cc,v 1.45 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -541,7 +541,7 @@ NetEConst* NetEBComp::eval_tree()
} }
/* /*
* The NetEBDiv operator includes the / and % opeators. First evaluate * The NetEBDiv operator includes the / and % operators. First evaluate
* the sub-expressions, then perform the required operation. * the sub-expressions, then perform the required operation.
*/ */
NetEConst* NetEBDiv::eval_tree() NetEConst* NetEBDiv::eval_tree()
@ -1187,6 +1187,9 @@ NetEConst* NetEUReduce::eval_tree()
/* /*
* $Log: eval_tree.cc,v $ * $Log: eval_tree.cc,v $
* Revision 1.45 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.44 2002/12/05 02:14:33 steve * Revision 1.44 2002/12/05 02:14:33 steve
* Support bit select in constant expressions. * Support bit select in constant expressions.
* *

View File

@ -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: net_design.cc,v 1.32 2003/01/26 21:15:58 steve Exp $" #ident "$Id: net_design.cc,v 1.33 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -107,7 +107,7 @@ const list<NetScope*> Design::find_root_scopes() const
/* /*
* This method locates a scope in the design, given its rooted * This method locates a scope in the design, given its rooted
* heirarchical name. Each component of the key is used to scan one * hierarchical name. Each component of the key is used to scan one
* more step down the tree until the name runs out or the search * more step down the tree until the name runs out or the search
* fails. * fails.
*/ */
@ -625,6 +625,9 @@ void Design::delete_process(NetProcTop*top)
/* /*
* $Log: net_design.cc,v $ * $Log: net_design.cc,v $
* Revision 1.33 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.32 2003/01/26 21:15:58 steve * Revision 1.32 2003/01/26 21:15:58 steve
* Rework expression parsing and elaboration to * Rework expression parsing and elaboration to
* accommodate real/realtime values and expressions. * accommodate real/realtime values and expressions.

View File

@ -17,13 +17,13 @@
* 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: net_force.cc,v 1.9 2002/08/19 00:06:12 steve Exp $" #ident "$Id: net_force.cc,v 1.10 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
/* /*
* This file contains implementatsion of the NetForce, NetRelease, * This file contains implementation of the NetForce, NetRelease,
* NetCAssign and NetDeassign classes. These are similar or related in * NetCAssign and NetDeassign classes. These are similar or related in
* that they handle the procedural continuous assign and force * that they handle the procedural continuous assign and force
* statements. * statements.
@ -35,7 +35,7 @@
/* /*
* Construct the procedural continuous assignment statement. This is a * Construct the procedural continuous assignment statement. This is a
* bit different from a normal assignment because the the lval is only * bit different from a normal assignment because the the lval is only
* intermittantly connected. The deassign in particular disconnects * intermittently connected. The deassign in particular disconnects
* the signals when they are not being assigned anymore. Because of * the signals when they are not being assigned anymore. Because of
* this, there is no other reference to the lval to make it stay put * this, there is no other reference to the lval to make it stay put
* so we increment the eref. * so we increment the eref.
@ -136,6 +136,9 @@ const NetNet*NetRelease::lval() const
/* /*
* $Log: net_force.cc,v $ * $Log: net_force.cc,v $
* Revision 1.10 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.9 2002/08/19 00:06:12 steve * Revision 1.9 2002/08/19 00:06:12 steve
* Allow release to handle removal of target net. * Allow release to handle removal of target net.
* *

View File

@ -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: net_scope.cc,v 1.23 2003/01/26 21:15:58 steve Exp $" #ident "$Id: net_scope.cc,v 1.24 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -397,7 +397,7 @@ void NetScope::add_variable(NetVariable*var)
/* /*
* This method locates a child scope by name. The name is the simple * This method locates a child scope by name. The name is the simple
* name of the child, no heirarchy is searched. * name of the child, no hierarchy is searched.
*/ */
NetScope* NetScope::child(const string&name) NetScope* NetScope::child(const string&name)
{ {
@ -450,6 +450,9 @@ string NetScope::local_hsymbol()
/* /*
* $Log: net_scope.cc,v $ * $Log: net_scope.cc,v $
* Revision 1.24 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.23 2003/01/26 21:15:58 steve * Revision 1.23 2003/01/26 21:15:58 steve
* Rework expression parsing and elaboration to * Rework expression parsing and elaboration to
* accommodate real/realtime values and expressions. * accommodate real/realtime values and expressions.

View File

@ -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: pad_to_width.cc,v 1.12 2003/01/26 21:15:59 steve Exp $" #ident "$Id: pad_to_width.cc,v 1.13 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -26,7 +26,7 @@
# include "netmisc.h" # include "netmisc.h"
/* /*
* This funciton transforms an expression by padding the high bits * This function transforms an expression by padding the high bits
* with V0 until the expression has the desired width. This may mean * with V0 until the expression has the desired width. This may mean
* not transforming the expression at all, if it is already wide * not transforming the expression at all, if it is already wide
* enough. * enough.
@ -99,6 +99,9 @@ NetNet*pad_to_width(Design*des, NetNet*net, unsigned wid)
/* /*
* $Log: pad_to_width.cc,v $ * $Log: pad_to_width.cc,v $
* Revision 1.13 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.12 2003/01/26 21:15:59 steve * Revision 1.12 2003/01/26 21:15:59 steve
* Rework expression parsing and elaboration to * Rework expression parsing and elaboration to
* accommodate real/realtime values and expressions. * accommodate real/realtime values and expressions.

View File

@ -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: synth2.cc,v 1.20 2002/11/09 23:29:29 steve Exp $" #ident "$Id: synth2.cc,v 1.21 2003/01/27 05:09:17 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -516,7 +516,7 @@ bool NetCondit::synth_sync(Design*des, NetScope*scope, NetFF*ff,
if (expr_) <true statement>; if (expr_) <true statement>;
The expr_ expression has alreacy been synthesized to the ce The expr_ expression has already been synthesized to the ce
net, so we connect it here to the FF. What's left is to net, so we connect it here to the FF. What's left is to
synthesize the substatement as a combinational synthesize the substatement as a combinational
statement. statement.
@ -637,7 +637,7 @@ bool NetProcTop::synth_sync(Design*des)
ff->attribute("LPM_FFType", verinum("DFF")); ff->attribute("LPM_FFType", verinum("DFF"));
/* The D inputs to the DFF device will receive the output from /* The D inputs to the DFF device will receive the output from
the statments of the process. */ the statements of the process. */
NetNet*nex_d = new NetNet(scope(), scope()->local_hsymbol().c_str(), NetNet*nex_d = new NetNet(scope(), scope()->local_hsymbol().c_str(),
NetNet::WIRE, nex_set.count()); NetNet::WIRE, nex_set.count());
nex_d->local_flag(true); nex_d->local_flag(true);
@ -738,6 +738,9 @@ void synth2(Design*des)
/* /*
* $Log: synth2.cc,v $ * $Log: synth2.cc,v $
* Revision 1.21 2003/01/27 05:09:17 steve
* Spelling fixes.
*
* Revision 1.20 2002/11/09 23:29:29 steve * Revision 1.20 2002/11/09 23:29:29 steve
* Handle nested-if chip enables. * Handle nested-if chip enables.
* *