All NetObj objects have lex_string base names.

This commit is contained in:
steve 2003-03-06 00:28:41 +00:00
parent 26546c1bd8
commit badad63ab4
23 changed files with 345 additions and 326 deletions

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: cprop.cc,v 1.42 2003/02/26 01:29:24 steve Exp $"
#ident "$Id: cprop.cc,v 1.43 2003/03/06 00:28:41 steve Exp $"
#endif
# include "config.h"
@ -118,8 +118,8 @@ void cprop_functor::lpm_add_sub(Design*des, NetAddSub*obj)
NetLogic*tmp;
if (obj->pin_Cout().is_linked()) {
tmp = new NetLogic(obj->scope(),
des->local_symbol(obj->name()), 3,
NetLogic::AND);
obj->scope()->local_symbol(),
3, NetLogic::AND);
connect(tmp->pin(0), obj->pin_Cout());
connect(tmp->pin(1), obj->pin_DataA(0));
connect(tmp->pin(2), obj->pin_DataB(0));
@ -837,7 +837,7 @@ void cprop_functor::lpm_mux(Design*des, NetMux*obj)
NetScope*scope = obj->scope();
for (unsigned idx = 0 ; idx < obj->width() ; idx += 1) {
NetLogic*tmp = new NetLogic(obj->scope(),
scope->local_hsymbol(),
scope->local_symbol(),
3, NetLogic::BUFIF1);
connect(obj->pin_Result(idx), tmp->pin(0));
@ -870,7 +870,7 @@ void cprop_functor::lpm_mux(Design*des, NetMux*obj)
NetScope*scope = obj->scope();
for (unsigned idx = 0 ; idx < obj->width() ; idx += 1) {
NetLogic*tmp = new NetLogic(obj->scope(),
scope->local_hsymbol(),
scope->local_symbol(),
3, NetLogic::BUFIF0);
connect(obj->pin_Result(idx), tmp->pin(0));
@ -996,6 +996,9 @@ void cprop(Design*des)
/*
* $Log: cprop.cc,v $
* Revision 1.43 2003/03/06 00:28:41 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.42 2003/02/26 01:29:24 steve
* LPM objects store only their base names.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: elab_anet.cc,v 1.6 2003/01/27 05:09:17 steve Exp $"
#ident "$Id: elab_anet.cc,v 1.7 2003/03/06 00:28:41 steve Exp $"
#endif
# include "config.h"
@ -86,7 +86,7 @@ NetNet* PEConcat::elaborate_anet(Design*des, NetScope*scope) const
Allow for a repeat count other then 1 by repeating the
connect loop as many times as necessary. */
NetNet*osig = new NetNet(scope, des->local_symbol(scope->name()),
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT_REG, pins);
pins = 0;
@ -149,6 +149,9 @@ NetNet* PEIdent::elaborate_anet(Design*des, NetScope*scope) const
/*
* $Log: elab_anet.cc,v $
* Revision 1.7 2003/03/06 00:28:41 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.6 2003/01/27 05:09:17 steve
* Spelling fixes.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: elab_net.cc,v 1.107 2003/02/26 01:29:24 steve Exp $"
#ident "$Id: elab_net.cc,v 1.108 2003/03/06 00:28:41 steve Exp $"
#endif
# include "config.h"
@ -180,7 +180,6 @@ NetNet* PEBinary::elaborate_net_add_(Design*des, NetScope*scope,
NetNode*gate;
NetNode*gate_t;
string name = scope->local_symbol();
unsigned width = lsig->pin_count();
if (rsig->pin_count() > lsig->pin_count())
width = rsig->pin_count();
@ -219,10 +218,10 @@ NetNet* PEBinary::elaborate_net_add_(Design*des, NetScope*scope,
rsig = pad_to_width(des, rsig, width);
// Make the adder as wide as the widest operand
osig = new NetNet(scope, scope->local_hsymbol(),
osig = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE, owidth);
osig->local_flag(true);
NetAddSub*adder = new NetAddSub(scope, name, width);
NetAddSub*adder = new NetAddSub(scope, scope->local_symbol(), width);
// Connect the adder to the various parts.
for (unsigned idx = 0 ; idx < lsig->pin_count() ; idx += 1)
@ -295,14 +294,14 @@ NetNet* PEBinary::elaborate_net_bit_(Design*des, NetScope*scope,
assert(lsig->pin_count() == rsig->pin_count());
NetNet*osig = new NetNet(scope, scope->local_hsymbol(), NetNet::WIRE,
NetNet*osig = new NetNet(scope, scope->local_symbol(), NetNet::WIRE,
lsig->pin_count());
osig->local_flag(true);
switch (op_) {
case '^': // XOR
for (unsigned idx = 0 ; idx < lsig->pin_count() ; idx += 1) {
NetLogic*gate = new NetLogic(scope, scope->local_hsymbol(),
NetLogic*gate = new NetLogic(scope, scope->local_symbol(),
3, NetLogic::XOR);
connect(gate->pin(1), lsig->pin(idx));
connect(gate->pin(2), rsig->pin(idx));
@ -316,7 +315,7 @@ NetNet* PEBinary::elaborate_net_bit_(Design*des, NetScope*scope,
case 'X': // XNOR
for (unsigned idx = 0 ; idx < lsig->pin_count() ; idx += 1) {
NetLogic*gate = new NetLogic(scope, scope->local_hsymbol(),
NetLogic*gate = new NetLogic(scope, scope->local_symbol(),
3, NetLogic::XNOR);
connect(gate->pin(1), lsig->pin(idx));
connect(gate->pin(2), rsig->pin(idx));
@ -330,7 +329,7 @@ NetNet* PEBinary::elaborate_net_bit_(Design*des, NetScope*scope,
case '&': // AND
for (unsigned idx = 0 ; idx < lsig->pin_count() ; idx += 1) {
NetLogic*gate = new NetLogic(scope, scope->local_hsymbol(),
NetLogic*gate = new NetLogic(scope, scope->local_symbol(),
3, NetLogic::AND);
connect(gate->pin(1), lsig->pin(idx));
connect(gate->pin(2), rsig->pin(idx));
@ -344,7 +343,7 @@ NetNet* PEBinary::elaborate_net_bit_(Design*des, NetScope*scope,
case 'A': // NAND (~&)
for (unsigned idx = 0 ; idx < lsig->pin_count() ; idx += 1) {
NetLogic*gate = new NetLogic(scope, scope->local_hsymbol(),
NetLogic*gate = new NetLogic(scope, scope->local_symbol(),
3, NetLogic::NAND);
connect(gate->pin(1), lsig->pin(idx));
connect(gate->pin(2), rsig->pin(idx));
@ -358,7 +357,7 @@ NetNet* PEBinary::elaborate_net_bit_(Design*des, NetScope*scope,
case '|': // Bitwise OR
for (unsigned idx = 0 ; idx < lsig->pin_count() ; idx += 1) {
NetLogic*gate = new NetLogic(scope, scope->local_hsymbol(),
NetLogic*gate = new NetLogic(scope, scope->local_symbol(),
3, NetLogic::OR);
connect(gate->pin(1), lsig->pin(idx));
connect(gate->pin(2), rsig->pin(idx));
@ -372,7 +371,7 @@ NetNet* PEBinary::elaborate_net_bit_(Design*des, NetScope*scope,
case 'O': // Bitwise NOR
for (unsigned idx = 0 ; idx < lsig->pin_count() ; idx += 1) {
NetLogic*gate = new NetLogic(scope, scope->local_hsymbol(),
NetLogic*gate = new NetLogic(scope, scope->local_symbol(),
3, NetLogic::NOR);
connect(gate->pin(1), lsig->pin(idx));
connect(gate->pin(2), rsig->pin(idx));
@ -424,15 +423,15 @@ NetNet* PEBinary::elaborate_net_cmp_(Design*des, NetScope*scope,
NetNet*zero = 0;
if (lsig->pin_count() != rsig->pin_count()) {
NetConst*tmp = new NetConst(scope, scope->local_hsymbol(),
NetConst*tmp = new NetConst(scope, scope->local_symbol(),
verinum::V0);
des->add_node(tmp);
zero = new NetNet(scope, scope->local_hsymbol(), NetNet::WIRE);
zero = new NetNet(scope, scope->local_symbol(), NetNet::WIRE);
zero->local_flag(true);
connect(tmp->pin(0), zero->pin(0));
}
NetNet*osig = new NetNet(scope, scope->local_hsymbol(), NetNet::WIRE);
NetNet*osig = new NetNet(scope, scope->local_symbol(), NetNet::WIRE);
osig->local_flag(true);
NetNode*gate;
@ -477,13 +476,13 @@ NetNet* PEBinary::elaborate_net_cmp_(Design*des, NetScope*scope,
// The comparison generates gates to bitwise compare
// each pair, and AND all the comparison results.
gate = new NetLogic(scope, scope->local_hsymbol(),
gate = new NetLogic(scope, scope->local_symbol(),
1+dwidth,
(op_ == 'E')? NetLogic::AND : NetLogic::NAND);
connect(gate->pin(0), osig->pin(0));
for (unsigned idx = 0 ; idx < dwidth ; idx += 1) {
NetCaseCmp*cmp = new NetCaseCmp(scope,
scope->local_hsymbol());
scope->local_symbol());
if (idx < lsig->pin_count())
connect(cmp->pin(1), lsig->pin(idx));
@ -499,7 +498,7 @@ NetNet* PEBinary::elaborate_net_cmp_(Design*des, NetScope*scope,
des->add_node(cmp);
// Attach a label to this intermediate wire
NetNet*tmp = new NetNet(scope, scope->local_hsymbol(),
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE);
tmp->local_flag(true);
connect(cmp->pin(0), tmp->pin(0));
@ -512,7 +511,7 @@ NetNet* PEBinary::elaborate_net_cmp_(Design*des, NetScope*scope,
/* Handle the special case of single bit compare with a
single XNOR gate. This is easy and direct. */
if (dwidth == 1) {
gate = new NetLogic(scope, scope->local_hsymbol(),
gate = new NetLogic(scope, scope->local_symbol(),
3, NetLogic::XNOR);
connect(gate->pin(0), osig->pin(0));
connect(gate->pin(1), lsig->pin(0));
@ -546,7 +545,7 @@ NetNet* PEBinary::elaborate_net_cmp_(Design*des, NetScope*scope,
/* Handle the special case of single bit compare with a
single XOR gate. This is easy and direct. */
if (dwidth == 1) {
gate = new NetLogic(scope, scope->local_hsymbol(),
gate = new NetLogic(scope, scope->local_symbol(),
3, NetLogic::XOR);
connect(gate->pin(0), osig->pin(0));
connect(gate->pin(1), lsig->pin(0));
@ -646,7 +645,7 @@ NetNet* PEBinary::elaborate_net_div_(Design*des, NetScope*scope,
// will be no more then the l-value, so it is safe to connect
// all the result pins to the osig.
NetNet*osig = new NetNet(scope, scope->local_hsymbol(),
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, lwidth);
osig->local_flag(true);
@ -661,7 +660,7 @@ NetNet* PEBinary::elaborate_net_div_(Design*des, NetScope*scope,
// wire [7:0] r = a / b;
if (rwidth < osig->pin_count()) {
NetConst*tmp = new NetConst(scope, scope->local_hsymbol(),
NetConst*tmp = new NetConst(scope, scope->local_symbol(),
verinum::V0);
des->add_node(tmp);
for (unsigned idx = rwidth ; idx < osig->pin_count() ; idx += 1)
@ -702,7 +701,7 @@ NetNet* PEBinary::elaborate_net_mod_(Design*des, NetScope*scope,
connect(mod->pin_DataB(idx), rsig->pin(idx));
if (lwidth == 0) lwidth = rwidth;
NetNet*osig = new NetNet(scope, scope->local_hsymbol(),
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, lwidth);
osig->local_flag(true);
@ -715,7 +714,7 @@ NetNet* PEBinary::elaborate_net_mod_(Design*des, NetScope*scope,
/* If the lvalue is larger then the result, then pad the
output with constant 0. */
if (cnt < osig->pin_count()) {
NetConst*tmp = new NetConst(scope, scope->local_hsymbol(),
NetConst*tmp = new NetConst(scope, scope->local_symbol(),
verinum::V0);
des->add_node(tmp);
for (unsigned idx = cnt ; idx < osig->pin_count() ; idx += 1)
@ -750,11 +749,11 @@ NetNet* PEBinary::elaborate_net_log_(Design*des, NetScope*scope,
NetLogic*gate_t;
switch (op_) {
case 'a':
gate = new NetLogic(scope, scope->local_hsymbol(),
gate = new NetLogic(scope, scope->local_symbol(),
3, NetLogic::AND);
break;
case 'o':
gate = new NetLogic(scope, scope->local_hsymbol(),
gate = new NetLogic(scope, scope->local_symbol(),
3, NetLogic::OR);
break;
default:
@ -766,7 +765,7 @@ NetNet* PEBinary::elaborate_net_log_(Design*des, NetScope*scope,
// The first OR gate returns 1 if the left value is true...
if (lsig->pin_count() > 1) {
gate_t = new NetLogic(scope, scope->local_hsymbol(),
gate_t = new NetLogic(scope, scope->local_symbol(),
1+lsig->pin_count(), NetLogic::OR);
for (unsigned idx = 0 ; idx < lsig->pin_count() ; idx += 1)
connect(gate_t->pin(idx+1), lsig->pin(idx));
@ -775,7 +774,7 @@ NetNet* PEBinary::elaborate_net_log_(Design*des, NetScope*scope,
/* The reduced logical value is a new nexus, create a
temporary signal to represent it. */
NetNet*tmp = new NetNet(scope, scope->local_hsymbol(),
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, 1);
tmp->local_flag(true);
connect(gate->pin(1), tmp->pin(0));
@ -788,7 +787,7 @@ NetNet* PEBinary::elaborate_net_log_(Design*des, NetScope*scope,
// The second OR gate returns 1 if the right value is true...
if (rsig->pin_count() > 1) {
gate_t = new NetLogic(scope, scope->local_hsymbol(),
gate_t = new NetLogic(scope, scope->local_symbol(),
1+rsig->pin_count(), NetLogic::OR);
for (unsigned idx = 0 ; idx < rsig->pin_count() ; idx += 1)
connect(gate_t->pin(idx+1), rsig->pin(idx));
@ -796,7 +795,7 @@ NetNet* PEBinary::elaborate_net_log_(Design*des, NetScope*scope,
/* The reduced logical value is a new nexus, create a
temporary signal to represent it. */
NetNet*tmp = new NetNet(scope, scope->local_hsymbol(),
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, 1);
tmp->local_flag(true);
connect(gate->pin(2), tmp->pin(0));
@ -808,7 +807,7 @@ NetNet* PEBinary::elaborate_net_log_(Design*des, NetScope*scope,
}
// The output is the AND/OR of the two logic values.
NetNet*osig = new NetNet(scope, scope->local_hsymbol(), NetNet::WIRE);
NetNet*osig = new NetNet(scope, scope->local_symbol(), NetNet::WIRE);
osig->local_flag(true);
connect(gate->pin(0), osig->pin(0));
des->add_node(gate);
@ -839,8 +838,8 @@ NetNet* PEBinary::elaborate_net_mul_(Design*des, NetScope*scope,
res.set(idx, prod.get(idx));
}
NetConst*odev = new NetConst(scope, scope->local_hsymbol(), res);
NetNet*osig = new NetNet(scope, scope->local_hsymbol(),
NetConst*odev = new NetConst(scope, scope->local_symbol(), res);
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, lwidth);
for (unsigned idx = 0 ; idx < lwidth ; idx += 1)
connect(odev->pin(idx), osig->pin(idx));
@ -871,7 +870,7 @@ NetNet* PEBinary::elaborate_net_mul_(Design*des, NetScope*scope,
connect(mult->pin_DataB(idx), rsig->pin(idx));
if (lwidth == 0) lwidth = rwidth;
NetNet*osig = new NetNet(scope, scope->local_hsymbol(),
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, lwidth);
osig->local_flag(true);
@ -884,7 +883,7 @@ NetNet* PEBinary::elaborate_net_mul_(Design*des, NetScope*scope,
/* If the lvalue is larger then the result, then pad the
output with constant 0. */
if (cnt < osig->pin_count()) {
NetConst*tmp = new NetConst(scope, scope->local_hsymbol(),
NetConst*tmp = new NetConst(scope, scope->local_symbol(),
verinum::V0);
des->add_node(tmp);
for (unsigned idx = cnt ; idx < osig->pin_count() ; idx += 1)
@ -919,11 +918,11 @@ NetNet* PEBinary::elaborate_net_shift_(Design*des, NetScope*scope,
/* Very special case, constant 0 shift. */
if (dist == 0) return lsig;
NetNet*osig = new NetNet(scope, scope->local_hsymbol(),
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE, lwidth);
osig->local_flag(true);
NetConst*zero = new NetConst(scope, scope->local_hsymbol(),
NetConst*zero = new NetConst(scope, scope->local_symbol(),
verinum::V0);
des->add_node(zero);
@ -964,7 +963,7 @@ NetNet* PEBinary::elaborate_net_shift_(Design*des, NetScope*scope,
NetCLShift*gate = new NetCLShift(scope, scope->local_symbol(),
lwidth, rsig->pin_count());
NetNet*osig = new NetNet(scope, scope->local_hsymbol(),
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE, lwidth);
osig->local_flag(true);
@ -977,9 +976,9 @@ NetNet* PEBinary::elaborate_net_shift_(Design*des, NetScope*scope,
connect(lsig->pin(idx), gate->pin_Data(idx));
if (lsig->pin_count() < lwidth) {
NetConst*zero = new NetConst(scope, scope->local_hsymbol(),
NetConst*zero = new NetConst(scope, scope->local_symbol(),
verinum::V0);
NetNet*tmp = new NetNet(scope, scope->local_hsymbol(),
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, 1);
tmp->local_flag(true);
des->add_node(zero);
@ -994,10 +993,10 @@ NetNet* PEBinary::elaborate_net_shift_(Design*des, NetScope*scope,
connect(rsig->pin(idx), gate->pin_Distance(idx));
if (op_ == 'r') {
NetNet*tmp = new NetNet(scope, scope->local_hsymbol(),
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, 1);
tmp->local_flag(true);
NetConst*dir = new NetConst(scope, scope->local_hsymbol(),
NetConst*dir = new NetConst(scope, scope->local_symbol(),
verinum::V1);
connect(dir->pin(0), gate->pin_Direction());
connect(tmp->pin(0), gate->pin_Direction());
@ -1069,13 +1068,13 @@ NetNet* PECallFunction::elaborate_net(Design*des, NetScope*scope, unsigned,
NetUserFunc*net = new NetUserFunc(scope,
scope->local_hsymbol().c_str(),
scope->local_symbol().c_str(),
dscope);
des->add_node(net);
/* Create an output signal and connect it to the output pins
of the function net. */
NetNet*osig = new NetNet(scope, scope->local_hsymbol(),
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE,
def->port(0)->pin_count());
osig->local_flag(true);
@ -1185,7 +1184,7 @@ NetNet* PEConcat::elaborate_net(Design*des, NetScope*scope,
Allow for a repeat count other then 1 by repeating the
connect loop as many times as necessary. */
NetNet*osig = new NetNet(scope, scope->local_hsymbol(),
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, pins * repeat);
pins = 0;
@ -1241,7 +1240,7 @@ NetNet* PEIdent::elaborate_net_bitmux_(Design*des, NetScope*scope,
for (unsigned idx = 0 ; idx < sel->pin_count() ; idx += 1)
connect(mux->pin_Sel(idx), sel->pin(idx));
NetNet*out = new NetNet(scope, scope->local_hsymbol(),
NetNet*out = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, 1);
connect(mux->pin_Result(0), out->pin(0));
@ -1273,10 +1272,9 @@ NetNet* PEIdent::elaborate_net(Design*des, NetScope*scope,
const NetEConst*pc = dynamic_cast<const NetEConst*>(pe);
assert(pc);
verinum pvalue = pc->value();
sig = new NetNet(scope,
scope->name()+"."+path_.peek_name(0),
sig = new NetNet(scope, path_.peek_name(0),
NetNet::IMPLICIT, pc->expr_width());
NetConst*cp = new NetConst(scope, scope->local_hsymbol(),
NetConst*cp = new NetConst(scope, scope->local_symbol(),
pvalue);
des->add_node(cp);
for (unsigned idx = 0; idx < sig->pin_count(); idx += 1)
@ -1284,7 +1282,7 @@ NetNet* PEIdent::elaborate_net(Design*des, NetScope*scope,
} else {
sig = new NetNet(scope, scope->name()+"."+path_.peek_name(0),
sig = new NetNet(scope, path_.peek_name(0),
NetNet::IMPLICIT, 1);
if (error_implicit) {
@ -1415,19 +1413,14 @@ NetNet* PEIdent::elaborate_net_ram_(Design*des, NetScope*scope,
if (adr == 0)
return 0;
// Memory names are only the base names. Since NetObj names
// are still fullnames, and we are deriving such names from
// the memory name, make a fullname here.
string hname = scope->name() + "." + mem->name();
NetRamDq*ram = new NetRamDq(scope, des->local_symbol(hname),
NetRamDq*ram = new NetRamDq(scope, scope->local_symbol(),
mem, adr->pin_count());
des->add_node(ram);
for (unsigned idx = 0 ; idx < adr->pin_count() ; idx += 1)
connect(ram->pin_Address(idx), adr->pin(idx));
NetNet*osig = new NetNet(scope, des->local_symbol(hname),
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, ram->width());
osig->local_flag(true);
@ -1488,7 +1481,7 @@ NetNet* PEConcat::elaborate_lnet(Design*des, NetScope*scope,
operands, and connect it up. Scan the operands of the
concat operator from least significant to most significant,
which is opposite from how they are given in the list. */
NetNet*osig = new NetNet(scope, des->local_symbol(scope->name()),
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, pins);
pins = 0;
for (unsigned idx = nets.count() ; idx > 0 ; idx -= 1) {
@ -1522,7 +1515,7 @@ NetNet* PEIdent::elaborate_lnet(Design*des, NetScope*scope,
if (implicit_net_ok && !error_implicit) {
sig = new NetNet(scope, scope->name()+"."+path_.peek_name(0),
sig = new NetNet(scope, path_.peek_name(0),
NetNet::IMPLICIT, 1);
if (warn_implicit) {
@ -1746,7 +1739,7 @@ NetNet* PENumber::elaborate_net(Design*des, NetScope*scope,
number constant with the correct size and set as many bits
in that constant as make sense. Pad excess with zeros. */
if (lwidth > 0) {
NetNet*net = new NetNet(scope, scope->local_hsymbol(),
NetNet*net = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, lwidth);
net->local_flag(true);
@ -1768,7 +1761,7 @@ NetNet* PENumber::elaborate_net(Design*des, NetScope*scope,
for (idx = 0 ; idx < num.len() && idx < value_->len(); idx += 1)
num.set(idx, value_->get(idx));
NetConst*tmp = new NetConst(scope, scope->local_hsymbol(),
NetConst*tmp = new NetConst(scope, scope->local_symbol(),
num);
for (idx = 0 ; idx < net->pin_count() ; idx += 1) {
tmp->pin(idx).drive0(drive0);
@ -1784,10 +1777,10 @@ NetNet* PENumber::elaborate_net(Design*des, NetScope*scope,
number. Generate a constant object of exactly the user
specified size. */
if (value_->has_len()) {
NetNet*net = new NetNet(scope, scope->local_hsymbol(),
NetNet*net = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, value_->len());
net->local_flag(true);
NetConst*tmp = new NetConst(scope, scope->local_hsymbol(),
NetConst*tmp = new NetConst(scope, scope->local_symbol(),
*value_);
for (unsigned idx = 0 ; idx < value_->len() ; idx += 1)
connect(net->pin(idx), tmp->pin(idx));
@ -1821,10 +1814,10 @@ NetNet* PENumber::elaborate_net(Design*des, NetScope*scope,
for (unsigned idx = 0 ; idx < width ; idx += 1)
num.set(idx, value_->get(idx));
NetNet*net = new NetNet(scope, scope->local_hsymbol(),
NetNet*net = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, width);
net->local_flag(true);
NetConst*tmp = new NetConst(scope, scope->local_hsymbol(), num);
NetConst*tmp = new NetConst(scope, scope->local_symbol(), num);
for (unsigned idx = 0 ; idx < width ; idx += 1)
connect(net->pin(idx), tmp->pin(idx));
@ -1852,11 +1845,11 @@ NetNet* PEString::elaborate_net(Design*des, NetScope*scope,
number constant with the correct size and set as many bits
in that constant as make sense. Pad excess with zeros. */
if (lwidth > 0) {
net = new NetNet(scope, scope->local_hsymbol(),
net = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, lwidth);
} else {
net = new NetNet(scope, scope->local_hsymbol(),
net = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, strbits);
}
net->local_flag(true);
@ -1871,7 +1864,7 @@ NetNet* PEString::elaborate_net(Design*des, NetScope*scope,
num.set(idx, (byte & mask)? verinum::V1 : verinum::V0);
}
NetConst*tmp = new NetConst(scope, scope->local_hsymbol(), num);
NetConst*tmp = new NetConst(scope, scope->local_symbol(), num);
for (idx = 0 ; idx < net->pin_count() ; idx += 1) {
tmp->pin(idx).drive0(drive0);
tmp->pin(idx).drive1(drive1);
@ -1931,13 +1924,13 @@ NetNet* PETernary::elaborate_net(Design*des, NetScope*scope,
by connecting an OR gate to calculate the truth value of
the result. In the end, the result needs to be a single bit. */
if (expr_sig->pin_count() > 1) {
NetLogic*log = new NetLogic(scope, scope->local_hsymbol(),
NetLogic*log = new NetLogic(scope, scope->local_symbol(),
expr_sig->pin_count()+1,
NetLogic::OR);
for (unsigned idx = 0; idx < expr_sig->pin_count(); idx += 1)
connect(log->pin(idx+1), expr_sig->pin(idx));
NetNet*tmp = new NetNet(scope, scope->local_hsymbol(),
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, 1);
tmp->local_flag(true);
connect(tmp->pin(0), log->pin(0));
@ -1958,7 +1951,7 @@ NetNet* PETernary::elaborate_net(Design*des, NetScope*scope,
unsigned dwidth = (iwidth > width)? width : iwidth;
NetNet*sig = new NetNet(scope, scope->local_hsymbol(),
NetNet*sig = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE, width);
sig->local_flag(true);
@ -1989,11 +1982,11 @@ NetNet* PETernary::elaborate_net(Design*des, NetScope*scope,
devices to carry the propagation delays. Otherwise, just
connect the result to the output. */
if (rise || fall || decay) {
NetNet*tmp = new NetNet(scope, scope->local_hsymbol(),
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE, dwidth);
for (unsigned idx = 0 ; idx < dwidth ; idx += 1) {
NetBUFZ*tmpz = new NetBUFZ(scope, scope->local_hsymbol());
NetBUFZ*tmpz = new NetBUFZ(scope, scope->local_symbol());
tmpz->rise_time(rise);
tmpz->fall_time(fall);
tmpz->decay_time(decay);
@ -2018,7 +2011,7 @@ NetNet* PETernary::elaborate_net(Design*des, NetScope*scope,
if (dwidth < width) {
verinum vpad (verinum::V0, width-dwidth);
NetConst*pad = new NetConst(scope, scope->local_hsymbol(), vpad);
NetConst*pad = new NetConst(scope, scope->local_symbol(), vpad);
des->add_node(pad);
for (unsigned idx = dwidth ; idx < width ; idx += 1)
connect(sig->pin(idx), pad->pin(idx-dwidth));
@ -2063,7 +2056,7 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
width = val->len();
assert(width > 0);
sig = new NetNet(scope, scope->local_hsymbol(),
sig = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE, width);
sig->local_flag(true);
@ -2072,7 +2065,7 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
verinum tmp (v_not(*val));
verinum one (1UL, width);
tmp = tmp + one;
NetConst*con = new NetConst(scope, scope->local_hsymbol(), tmp);
NetConst*con = new NetConst(scope, scope->local_symbol(), tmp);
for (unsigned idx = 0 ; idx < width ; idx += 1)
connect(sig->pin(idx), con->pin(idx));
@ -2089,11 +2082,11 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
switch (op_) {
case '~': // Bitwise NOT
sig = new NetNet(scope, scope->local_hsymbol(), NetNet::WIRE,
sig = new NetNet(scope, scope->local_symbol(), NetNet::WIRE,
sub_sig->pin_count());
sig->local_flag(true);
for (unsigned idx = 0 ; idx < sub_sig->pin_count() ; idx += 1) {
gate = new NetLogic(scope, scope->local_hsymbol(),
gate = new NetLogic(scope, scope->local_symbol(),
2, NetLogic::NOT);
connect(gate->pin(1), sub_sig->pin(idx));
connect(gate->pin(0), sig->pin(idx));
@ -2106,9 +2099,9 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
case 'N': // Reduction NOR
case '!': // Reduction NOT
sig = new NetNet(scope, scope->local_hsymbol(), NetNet::WIRE);
sig = new NetNet(scope, scope->local_symbol(), NetNet::WIRE);
sig->local_flag(true);
gate = new NetLogic(scope, scope->local_hsymbol(),
gate = new NetLogic(scope, scope->local_symbol(),
1+sub_sig->pin_count(), NetLogic::NOR);
connect(gate->pin(0), sig->pin(0));
for (unsigned idx = 0 ; idx < sub_sig->pin_count() ; idx += 1)
@ -2121,9 +2114,9 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
break;
case '&': // Reduction AND
sig = new NetNet(scope, scope->local_hsymbol(), NetNet::WIRE);
sig = new NetNet(scope, scope->local_symbol(), NetNet::WIRE);
sig->local_flag(true);
gate = new NetLogic(scope, scope->local_hsymbol(),
gate = new NetLogic(scope, scope->local_symbol(),
1+sub_sig->pin_count(), NetLogic::AND);
connect(gate->pin(0), sig->pin(0));
for (unsigned idx = 0 ; idx < sub_sig->pin_count() ; idx += 1)
@ -2136,9 +2129,9 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
break;
case '|': // Reduction OR
sig = new NetNet(scope, scope->local_hsymbol(), NetNet::WIRE);
sig = new NetNet(scope, scope->local_symbol(), NetNet::WIRE);
sig->local_flag(true);
gate = new NetLogic(scope, scope->local_hsymbol(),
gate = new NetLogic(scope, scope->local_symbol(),
1+sub_sig->pin_count(), NetLogic::OR);
connect(gate->pin(0), sig->pin(0));
for (unsigned idx = 0 ; idx < sub_sig->pin_count() ; idx += 1)
@ -2151,9 +2144,9 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
break;
case '^': // Reduction XOR
sig = new NetNet(scope, scope->local_hsymbol(), NetNet::WIRE);
sig = new NetNet(scope, scope->local_symbol(), NetNet::WIRE);
sig->local_flag(true);
gate = new NetLogic(scope, scope->local_hsymbol(),
gate = new NetLogic(scope, scope->local_symbol(),
1+sub_sig->pin_count(), NetLogic::XOR);
connect(gate->pin(0), sig->pin(0));
for (unsigned idx = 0 ; idx < sub_sig->pin_count() ; idx += 1)
@ -2166,9 +2159,9 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
break;
case 'A': // Reduction NAND (~&)
sig = new NetNet(scope, scope->local_hsymbol(), NetNet::WIRE);
sig = new NetNet(scope, scope->local_symbol(), NetNet::WIRE);
sig->local_flag(true);
gate = new NetLogic(scope, scope->local_hsymbol(),
gate = new NetLogic(scope, scope->local_symbol(),
1+sub_sig->pin_count(), NetLogic::NAND);
connect(gate->pin(0), sig->pin(0));
for (unsigned idx = 0 ; idx < sub_sig->pin_count() ; idx += 1)
@ -2182,9 +2175,9 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
case 'X': // Reduction XNOR (~^)
sig = new NetNet(scope, scope->local_hsymbol(), NetNet::WIRE);
sig = new NetNet(scope, scope->local_symbol(), NetNet::WIRE);
sig->local_flag(true);
gate = new NetLogic(scope, scope->local_hsymbol(),
gate = new NetLogic(scope, scope->local_symbol(),
1+sub_sig->pin_count(), NetLogic::XNOR);
connect(gate->pin(0), sig->pin(0));
for (unsigned idx = 0 ; idx < sub_sig->pin_count() ; idx += 1)
@ -2197,7 +2190,7 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
break;
case '-': // Unary 2's complement.
sig = new NetNet(scope, scope->local_hsymbol(),
sig = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE, owidth);
sig->local_flag(true);
@ -2210,7 +2203,7 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
break;
case 1:
gate = new NetLogic(scope, scope->local_hsymbol(),
gate = new NetLogic(scope, scope->local_symbol(),
2, NetLogic::BUF);
connect(gate->pin(0), sig->pin(0));
connect(gate->pin(1), sub_sig->pin(0));
@ -2221,7 +2214,7 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
break;
case 2:
gate = new NetLogic(scope, scope->local_hsymbol(),
gate = new NetLogic(scope, scope->local_symbol(),
2, NetLogic::BUF);
connect(gate->pin(0), sig->pin(0));
connect(gate->pin(1), sub_sig->pin(0));
@ -2230,7 +2223,7 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
gate->fall_time(fall);
gate->decay_time(decay);
gate = new NetLogic(scope, scope->local_hsymbol(),
gate = new NetLogic(scope, scope->local_symbol(),
3, NetLogic::XOR);
connect(gate->pin(0), sig->pin(1));
connect(gate->pin(1), sub_sig->pin(0));
@ -2256,11 +2249,11 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
verinum tmp_num (verinum::V0, sub->width(), true);
NetConst*tmp_con = new NetConst(scope,
scope->local_hsymbol(),
scope->local_symbol(),
tmp_num);
des->add_node(tmp_con);
NetNet*tmp_sig = new NetNet(scope, scope->local_hsymbol(),
NetNet*tmp_sig = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE,
sub_sig->pin_count());
tmp_sig->local_flag(true);
@ -2284,6 +2277,9 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
/*
* $Log: elab_net.cc,v $
* Revision 1.108 2003/03/06 00:28:41 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.107 2003/02/26 01:29:24 steve
* LPM objects store only their base names.
*

View File

@ -17,11 +17,11 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: elab_scope.cc,v 1.19 2003/01/27 05:09:17 steve Exp $"
#ident "$Id: elab_scope.cc,v 1.20 2003/03/06 00:28:41 steve Exp $"
#endif
# include "config.h"
# include "compiler.h"
# include <iostream>
/*
@ -352,7 +352,8 @@ void PGModule::elaborate_scope_mod_(Design*des, Module*mod, NetScope*sc) const
void PData::elaborate_scope(Design*des, NetScope*scope) const
{
assert(hname_.component_count() == 1);
NetVariable*tmp = new NetVariable(hname_.peek_tail_name());
const char*basename = hname_.peek_tail_name();
NetVariable*tmp = new NetVariable(lex_strings.add(basename));
tmp->set_line(*this);
scope->add_variable(tmp);
}
@ -512,6 +513,9 @@ void PWhile::elaborate_scope(Design*des, NetScope*scope) const
/*
* $Log: elab_scope.cc,v $
* Revision 1.20 2003/03/06 00:28:41 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.19 2003/01/27 05:09:17 steve
* Spelling fixes.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: elab_sig.cc,v 1.27 2003/01/30 16:23:07 steve Exp $"
#ident "$Id: elab_sig.cc,v 1.28 2003/03/06 00:28:41 steve Exp $"
#endif
# include "config.h"
@ -508,10 +508,7 @@ void PWire::elaborate_sig(Design*des, NetScope*scope) const
} else {
/* Make a hierarchical make for the signal. */
string name = scope->name();
name = name + "." + hname_.peek_tail_name();
string name = hname_.peek_tail_name();
NetNet*sig = new NetNet(scope, name, wtype, msb, lsb);
sig->set_line(*this);
sig->port_type(port_type_);
@ -525,6 +522,9 @@ void PWire::elaborate_sig(Design*des, NetScope*scope) const
/*
* $Log: elab_sig.cc,v $
* Revision 1.28 2003/03/06 00:28:41 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.27 2003/01/30 16:23:07 steve
* Spelling fixes.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: elaborate.cc,v 1.275 2003/03/01 06:25:30 steve Exp $"
#ident "$Id: elaborate.cc,v 1.276 2003/03/06 00:28:41 steve Exp $"
#endif
# include "config.h"
@ -167,7 +167,7 @@ void PGAssign::elaborate(Design*des, NetScope*scope) const
if (cnt < lval->pin_count()) {
verinum tmpv (0UL, lval->pin_count()-cnt);
NetConst*tmp = new NetConst(scope,
scope->local_hsymbol(),
scope->local_symbol(),
tmpv);
des->add_node(tmp);
for (idx = cnt ; idx < lval->pin_count() ; idx += 1)
@ -180,7 +180,7 @@ void PGAssign::elaborate(Design*des, NetScope*scope) const
unsigned idx;
for (idx = 0 ; idx < cnt ; idx += 1) {
NetBUFZ*dev = new NetBUFZ(scope,
scope->local_hsymbol());
scope->local_symbol());
connect(lval->pin(idx), dev->pin(0));
connect(rid->pin(idx), dev->pin(1));
dev->rise_time(rise_time);
@ -193,7 +193,7 @@ void PGAssign::elaborate(Design*des, NetScope*scope) const
if (cnt < lval->pin_count()) {
NetConst*dev = new NetConst(scope,
scope->local_hsymbol(),
scope->local_symbol(),
verinum::V0);
des->add_node(dev);
@ -250,9 +250,7 @@ void PGBuiltin::elaborate(Design*des, NetScope*scope) const
string name = get_name();
if (name == "")
name = scope->local_hsymbol();
else
name = scope->name()+"."+name;
name = scope->local_symbol();
/* If the Verilog source has a range specification for the
gates, then I am expected to make more then one
@ -745,9 +743,7 @@ void PGModule::elaborate_udp_(Design*des, PUdp*udp, NetScope*scope) const
string my_name = get_name();
if (my_name == "")
my_name = scope->local_hsymbol();
else
my_name = scope->name()+"."+my_name;
my_name = scope->local_symbol();
/* When the parser notices delay expressions in front of a
module or primitive, it interprets them as parameter
@ -1006,7 +1002,6 @@ NetProc* PAssign::elaborate(Design*des, NetScope*scope) const
netlist. The compound statement is exactly equivalent. */
if (delay || event_) {
string n = scope->local_hsymbol();
unsigned wid = lv->lwidth();
rv->set_width(wid);
@ -1020,13 +1015,14 @@ NetProc* PAssign::elaborate(Design*des, NetScope*scope) const
return 0;
}
NetNet*tmp = new NetNet(scope, n, NetNet::REG, wid);
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
NetNet::REG, wid);
tmp->set_line(*this);
NetESignal*sig = new NetESignal(tmp);
/* Generate an assignment of the l-value to the temporary... */
n = scope->local_hsymbol();
string n = scope->local_hsymbol();
NetAssign_*lvt = new NetAssign_(tmp);
NetAssign*a1 = new NetAssign(lvt, rv);
@ -1588,7 +1584,7 @@ NetCAssign* PCAssign::elaborate(Design*des, NetScope*scope) const
if (rval->pin_count() < lval->pin_count())
rval = pad_to_width(des, rval, lval->pin_count());
NetCAssign* dev = new NetCAssign(scope, scope->local_hsymbol(), lval);
NetCAssign* dev = new NetCAssign(scope, scope->local_symbol(), lval);
dev->set_line(*this);
des->add_node(dev);
@ -1813,7 +1809,7 @@ NetProc* PEventStatement::elaborate_st(Design*des, NetScope*scope,
we->add_event(ev);
NetEvProbe*po = new NetEvProbe(scope,
scope->local_hsymbol(),
scope->local_symbol(),
ev, NetEvProbe::POSEDGE, 1);
connect(po->pin(0), ex->pin(0));
@ -1893,7 +1889,7 @@ NetProc* PEventStatement::elaborate_st(Design*des, NetScope*scope,
return enet;
}
NetEvProbe*pr = new NetEvProbe(scope, scope->local_hsymbol(),
NetEvProbe*pr = new NetEvProbe(scope, scope->local_symbol(),
ev, NetEvProbe::ANYEDGE,
nset->count());
for (unsigned idx = 0 ; idx < nset->count() ; idx += 1)
@ -1943,17 +1939,17 @@ NetProc* PEventStatement::elaborate_st(Design*des, NetScope*scope,
NetEvProbe*pr;
switch (expr_[idx]->type()) {
case PEEvent::POSEDGE:
pr = new NetEvProbe(scope, scope->local_hsymbol(), ev,
pr = new NetEvProbe(scope, scope->local_symbol(), ev,
NetEvProbe::POSEDGE, pins);
break;
case PEEvent::NEGEDGE:
pr = new NetEvProbe(scope, scope->local_hsymbol(), ev,
pr = new NetEvProbe(scope, scope->local_symbol(), ev,
NetEvProbe::NEGEDGE, pins);
break;
case PEEvent::ANYEDGE:
pr = new NetEvProbe(scope, scope->local_hsymbol(), ev,
pr = new NetEvProbe(scope, scope->local_symbol(), ev,
NetEvProbe::ANYEDGE, pins);
break;
@ -2029,7 +2025,7 @@ NetProc* PForce::elaborate(Design*des, NetScope*scope) const
if (rval->pin_count() < lval->pin_count())
rval = pad_to_width(des, rval, lval->pin_count());
NetForce* dev = new NetForce(scope, scope->local_hsymbol(), lval);
NetForce* dev = new NetForce(scope, scope->local_symbol(), lval);
des->add_node(dev);
for (unsigned idx = 0 ; idx < dev->pin_count() ; idx += 1)
@ -2502,6 +2498,9 @@ Design* elaborate(list<const char*>roots)
/*
* $Log: elaborate.cc,v $
* Revision 1.276 2003/03/06 00:28:41 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.275 2003/03/01 06:25:30 steve
* Add the lex_strings string handler, and put
* scope names and system task/function names

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: expr_synth.cc,v 1.40 2003/02/26 01:29:24 steve Exp $"
#ident "$Id: expr_synth.cc,v 1.41 2003/03/06 00:28:41 steve Exp $"
#endif
# include "config.h"
@ -48,7 +48,7 @@ NetNet* NetEBAdd::synthesize(Design*des)
assert(lsig->pin_count() == rsig->pin_count());
unsigned width=lsig->pin_count();
string path = lsig->scope()->name()+"."+lsig->scope()->local_symbol();
string path = lsig->scope()->local_symbol();
NetNet*osig = new NetNet(lsig->scope(), path, NetNet::IMPLICIT, width);
osig->local_flag(true);
@ -100,12 +100,12 @@ NetNet* NetEBBits::synthesize(Design*des)
}
assert(lsig->pin_count() == rsig->pin_count());
NetNet*osig = new NetNet(scope, path, NetNet::IMPLICIT,
lsig->pin_count());
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, lsig->pin_count());
osig->local_flag(true);
for (unsigned idx = 0 ; idx < osig->pin_count() ; idx += 1) {
string oname = des->local_symbol(path);
string oname = scope->local_hsymbol();
NetLogic*gate;
/* If the rsig bit is constant, then look for special
@ -175,21 +175,21 @@ NetNet* NetEBComp::synthesize(Design*des)
: right_->synthesize(des);
NetScope*scope = lsig->scope();
assert(scope);
string path = des->local_symbol(scope->name());
NetNet*osig = new NetNet(scope, path, NetNet::IMPLICIT, 1);
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, 1);
osig->local_flag(true);
NetLogic*gate;
switch (op_) {
case 'e':
case 'E':
gate = new NetLogic(scope, des->local_symbol(path),
gate = new NetLogic(scope, scope->local_hsymbol(),
lsig->pin_count()+1, NetLogic::NOR);
break;
case 'n':
case 'N':
gate = new NetLogic(scope, des->local_symbol(path),
gate = new NetLogic(scope, scope->local_hsymbol(),
lsig->pin_count()+1, NetLogic::OR);
break;
@ -198,11 +198,11 @@ NetNet* NetEBComp::synthesize(Design*des)
is very much like sig != 0. (0 > sig) shouldn't
happen. */
if (rcon) {
gate = new NetLogic(scope, des->local_symbol(path),
gate = new NetLogic(scope, scope->local_hsymbol(),
lsig->pin_count()+1, NetLogic::OR);
} else {
assert(0);
gate = new NetLogic(scope, des->local_symbol(path),
gate = new NetLogic(scope, scope->local_hsymbol(),
lsig->pin_count()+1, NetLogic::NOR);
}
break;
@ -210,11 +210,11 @@ NetNet* NetEBComp::synthesize(Design*des)
case '<':
/* 0 < sig is handled like sig > 0. */
if (! rcon) {
gate = new NetLogic(scope, des->local_symbol(path),
gate = new NetLogic(scope, scope->local_hsymbol(),
lsig->pin_count()+1, NetLogic::OR);
} else {
assert(0);
gate = new NetLogic(scope, des->local_symbol(path),
gate = new NetLogic(scope, scope->local_hsymbol(),
lsig->pin_count()+1, NetLogic::NOR);
}
break;
@ -236,7 +236,6 @@ NetNet* NetEBComp::synthesize(Design*des)
NetScope*scope = lsig->scope();
assert(scope);
string path = des->local_symbol(scope->name());
unsigned width = lsig->pin_count();
if (rsig->pin_count() > lsig->pin_count())
@ -245,13 +244,14 @@ NetNet* NetEBComp::synthesize(Design*des)
lsig = pad_to_width(des, lsig, width);
rsig = pad_to_width(des, rsig, width);
NetNet*osig = new NetNet(scope, path, NetNet::IMPLICIT, 1);
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, 1);
osig->local_flag(true);
/* Handle the special case of a single bit equality
operation. Make an XNOR gate instead of a comparator. */
if ((width == 1) && ((op_ == 'e') || (op_ == 'E'))) {
NetLogic*gate = new NetLogic(scope, des->local_symbol(path),
NetLogic*gate = new NetLogic(scope, scope->local_hsymbol(),
3, NetLogic::XNOR);
connect(gate->pin(0), osig->pin(0));
connect(gate->pin(1), lsig->pin(0));
@ -264,7 +264,7 @@ NetNet* NetEBComp::synthesize(Design*des)
operation. This is similar to single bit equality, but uses
an XOR instead of an XNOR gate. */
if ((width == 1) && ((op_ == 'n') || (op_ == 'N'))) {
NetLogic*gate = new NetLogic(scope, des->local_symbol(path),
NetLogic*gate = new NetLogic(scope, scope->local_hsymbol(),
3, NetLogic::XOR);
connect(gate->pin(0), osig->pin(0));
connect(gate->pin(1), lsig->pin(0));
@ -274,7 +274,7 @@ NetNet* NetEBComp::synthesize(Design*des)
}
NetCompare*dev = new NetCompare(scope, des->local_symbol(path), width);
NetCompare*dev = new NetCompare(scope, scope->local_symbol(), width);
des->add_node(dev);
for (unsigned idx = 0 ; idx < lsig->pin_count() ; idx += 1)
@ -337,9 +337,9 @@ NetNet* NetEBLogic::synthesize(Design*des)
NetScope*scope = lsig->scope();
assert(scope);
string path = des->local_symbol(scope->name());
NetNet*osig = new NetNet(scope, path, NetNet::IMPLICIT, 1);
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, 1);
osig->local_flag(true);
@ -349,10 +349,9 @@ NetNet* NetEBLogic::synthesize(Design*des)
comparison with a single wide OR gate. So handle this
magically. */
string oname = des->local_symbol(path);
NetLogic*olog;
string oname = scope->local_hsymbol();
olog = new NetLogic(scope, oname,
NetLogic*olog = new NetLogic(scope, oname,
lsig->pin_count()+rsig->pin_count()+1,
NetLogic::OR);
@ -374,7 +373,7 @@ NetNet* NetEBLogic::synthesize(Design*des)
/* Create the logic AND gate. This is a single bit
output, with inputs for each of the operands. */
NetLogic*olog;
string oname = des->local_symbol(path);
string oname = scope->local_hsymbol();
olog = new NetLogic(scope, oname, 3, NetLogic::AND);
@ -411,7 +410,7 @@ NetNet* NetEConcat::synthesize(Design*des)
assert(scope);
/* Make a NetNet object to carry the output vector. */
string path = scope->name() + "." + scope->local_symbol();
string path = scope->local_symbol();
NetNet*osig = new NetNet(scope, path, NetNet::IMPLICIT, expr_width());
osig->local_flag(true);
@ -439,12 +438,12 @@ NetNet* NetEConst::synthesize(Design*des)
NetScope*scope = des->find_root_scope();
assert(scope);
string path = scope->name() + "." + scope->local_symbol();
string path = scope->local_symbol();
unsigned width=expr_width();
NetNet*osig = new NetNet(scope, path, NetNet::IMPLICIT, width);
osig->local_flag(true);
NetConst*con = new NetConst(scope, des->local_symbol(path), value());
NetConst*con = new NetConst(scope, scope->local_symbol(), value());
for (unsigned idx = 0 ; idx < width; idx += 1)
connect(osig->pin(idx), con->pin(idx));
@ -470,14 +469,13 @@ NetNet* NetEUBits::synthesize(Design*des)
NetScope*scope = isig->scope();
assert(scope);
string path = des->local_symbol(scope->name());
NetNet*osig = new NetNet(scope, path, NetNet::IMPLICIT,
isig->pin_count());
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, isig->pin_count());
osig->local_flag(true);
for (unsigned idx = 0 ; idx < osig->pin_count() ; idx += 1) {
string oname = des->local_symbol(path);
string oname = scope->local_hsymbol();
NetLogic*gate;
switch (op()) {
@ -503,12 +501,12 @@ NetNet* NetEUReduce::synthesize(Design*des)
NetScope*scope = isig->scope();
assert(scope);
string path = des->local_symbol(scope->name());
NetNet*osig = new NetNet(scope, path, NetNet::IMPLICIT, 1);
NetNet*osig = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, 1);
osig->local_flag(true);
string oname = des->local_symbol(path);
string oname = scope->local_hsymbol();
NetLogic*gate;
switch (op()) {
@ -569,7 +567,7 @@ NetNet* NetETernary::synthesize(Design *des)
NetNet*tsig = true_val_->synthesize(des);
NetNet*fsig = false_val_->synthesize(des);
string path = csig->scope()->name()+"."+csig->scope()->local_symbol();
string path = csig->scope()->local_symbol();
assert(csig->pin_count() == 1);
assert(tsig->pin_count() == fsig->pin_count());
@ -631,7 +629,7 @@ NetNet* NetESignal::synthesize(Design*des)
NetScope*scope = net_->scope();
assert(scope);
string name = scope->name() + "." + scope->local_symbol();
string name = scope->local_symbol();
NetNet*tmp = new NetNet(scope, name, NetNet::NetNet::WIRE, wid);
tmp->local_flag(true);
@ -643,6 +641,9 @@ NetNet* NetESignal::synthesize(Design*des)
/*
* $Log: expr_synth.cc,v $
* Revision 1.41 2003/03/06 00:28:41 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.40 2003/02/26 01:29:24 steve
* LPM objects store only their base names.
*

View File

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: ivl_target.h,v 1.112 2003/02/26 01:29:24 steve Exp $"
#ident "$Id: ivl_target.h,v 1.113 2003/03/06 00:28:41 steve Exp $"
#endif
#ifdef __cplusplus
@ -523,7 +523,7 @@ extern ivl_memory_t ivl_expr_memory(ivl_expr_t net);
* This method returns the type of logic gate that the cookie
* represents.
*
* ivl_logic_name
* ivl_logic_name (obsolete)
* This method returns the complete name of the logic gate. Every
* gate has a complete name (that includes the scope) even if the
* Verilog source doesn't include one. The compiler will choose one
@ -1144,6 +1144,9 @@ _END_DECL
/*
* $Log: ivl_target.h,v $
* Revision 1.113 2003/03/06 00:28:41 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.112 2003/02/26 01:29:24 steve
* LPM objects store only their base names.
*

View File

@ -17,12 +17,11 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: net_event.cc,v 1.21 2003/03/01 06:25:30 steve Exp $"
#ident "$Id: net_event.cc,v 1.22 2003/03/06 00:28:41 steve Exp $"
#endif
# include "config.h"
# include "compiler.h"
# include "netlist.h"
/*
@ -242,7 +241,7 @@ const NetEvent* NetEvTrig::event() const
NetEvProbe::NetEvProbe(NetScope*s, const string&n, NetEvent*tgt,
edge_t t, unsigned p)
: NetNode(s, n, p), event_(tgt), edge_(t)
: NetNode(s, lex_strings.add(n.c_str()), p), event_(tgt), edge_(t)
{
for (unsigned idx = 0 ; idx < p ; idx += 1) {
pin(idx).set_dir(Link::INPUT);
@ -444,6 +443,9 @@ NetProc* NetEvWait::statement()
/*
* $Log: net_event.cc,v $
* Revision 1.22 2003/03/06 00:28:41 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.21 2003/03/01 06:25:30 steve
* Add the lex_strings string handler, and put
* scope names and system task/function names

View File

@ -17,10 +17,11 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: net_force.cc,v 1.10 2003/01/27 05:09:17 steve Exp $"
#ident "$Id: net_force.cc,v 1.11 2003/03/06 00:28:41 steve Exp $"
#endif
# include "config.h"
# include "compiler.h"
/*
* This file contains implementation of the NetForce, NetRelease,
@ -45,7 +46,7 @@
* link ring to grow, and that is not quite correct either. Hmm...
*/
NetCAssign::NetCAssign(NetScope*s, const string&n, NetNet*l)
: NetNode(s, n, l->pin_count()), lval_(l)
: NetNode(s, lex_strings.add(n.c_str()), l->pin_count()), lval_(l)
{
lval_->incr_eref();
for (unsigned idx = 0 ; idx < pin_count() ; idx += 1) {
@ -87,7 +88,7 @@ const NetNet*NetDeassign::lval() const
}
NetForce::NetForce(NetScope*s, const string&n, NetNet*l)
: NetNode(s, n, l->pin_count()), lval_(l)
: NetNode(s, lex_strings.add(n.c_str()), l->pin_count()), lval_(l)
{
lval_->incr_eref();
@ -136,6 +137,9 @@ const NetNet*NetRelease::lval() const
/*
* $Log: net_force.cc,v $
* Revision 1.11 2003/03/06 00:28:41 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.10 2003/01/27 05:09:17 steve
* Spelling fixes.
*

View File

@ -17,11 +17,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: net_func.cc,v 1.3 2002/08/12 01:34:59 steve Exp $"
#ident "$Id: net_func.cc,v 1.4 2003/03/06 00:28:41 steve Exp $"
#endif
# include "config.h"
# include "netlist.h"
# include "compiler.h"
# include "PExpr.h"
# include <iostream>
@ -35,7 +36,8 @@ static unsigned count_def_pins(const NetFuncDef*def)
}
NetUserFunc::NetUserFunc(NetScope*s, const char*n, NetScope*d)
: NetNode(s, n, count_def_pins(d->func_def())), def_(d)
: NetNode(s, lex_strings.add(n), count_def_pins(d->func_def())),
def_(d)
{
NetFuncDef*def = def_->func_def();
@ -145,6 +147,9 @@ bool PECallFunction::check_call_matches_definition_(Design*des, NetScope*dscope)
/*
* $Log: net_func.cc,v $
* Revision 1.4 2003/03/06 00:28:41 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.3 2002/08/12 01:34:59 steve
* conditional ident string using autoconfig.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: net_modulo.cc,v 1.5 2002/08/12 01:34:59 steve Exp $"
#ident "$Id: net_modulo.cc,v 1.6 2003/03/06 00:28:41 steve Exp $"
#endif
# include "config.h"
@ -28,11 +28,13 @@
# include <cassert>
# include "netlist.h"
# include "compiler.h"
NetModulo::NetModulo(NetScope*s, const string&n, unsigned wr,
unsigned wa, unsigned wb)
: NetNode(s, n, wr+wa+wb), width_r_(wr), width_a_(wa), width_b_(wb)
: NetNode(s, lex_strings.add(n.c_str()), wr+wa+wb),
width_r_(wr), width_a_(wa), width_b_(wb)
{
unsigned p = 0;
for (unsigned idx = 0 ; idx < width_r_ ; idx += 1, p += 1) {
@ -106,6 +108,9 @@ const Link& NetModulo::pin_DataB(unsigned idx) const
/*
* $Log: net_modulo.cc,v $
* Revision 1.6 2003/03/06 00:28:41 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.5 2002/08/12 01:34:59 steve
* conditional ident string using autoconfig.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: net_scope.cc,v 1.25 2003/03/01 06:25:30 steve Exp $"
#ident "$Id: net_scope.cc,v 1.26 2003/03/06 00:28:41 steve Exp $"
#endif
# include "config.h"
@ -311,10 +311,9 @@ NetNet* NetScope::find_signal(const string&key)
if (signals_ == 0)
return 0;
string fulname = name()+"."+key;
NetNet*cur = signals_;
do {
if (cur->name() == fulname)
if (cur->name() == key)
return cur;
cur = cur->sig_prev_;
} while (cur != signals_);
@ -449,6 +448,9 @@ string NetScope::local_hsymbol()
/*
* $Log: net_scope.cc,v $
* Revision 1.26 2003/03/06 00:28:41 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.25 2003/03/01 06:25:30 steve
* Add the lex_strings string handler, and put
* scope names and system task/function names

View File

@ -18,15 +18,16 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: net_udp.cc,v 1.7 2002/08/12 01:34:59 steve Exp $"
#ident "$Id: net_udp.cc,v 1.8 2003/03/06 00:28:42 steve Exp $"
#endif
# include "config.h"
# include "compiler.h"
# include "netlist.h"
NetUDP::NetUDP(NetScope*s, const string&n, unsigned pins, PUdp *u)
: NetNode(s, n, pins), udp(u)
: NetNode(s, lex_strings.add(n.c_str()), pins), udp(u)
{
pin(0).set_dir(Link::OUTPUT);
pin(0).set_name("O", 0);
@ -91,6 +92,9 @@ char NetUDP::get_initial() const
/*
* $Log: net_udp.cc,v $
* Revision 1.8 2003/03/06 00:28:42 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.7 2002/08/12 01:34:59 steve
* conditional ident string using autoconfig.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: net_variable.cc,v 1.1 2003/01/28 16:23:27 steve Exp $"
#ident "$Id: net_variable.cc,v 1.2 2003/03/06 00:28:42 steve Exp $"
#endif
# include "config.h"
@ -25,14 +25,13 @@
NetVariable::NetVariable(const char*name)
{
name_ = strdup(name);
name_ = name;
scope_ = 0;
snext_ = 0;
}
NetVariable::~NetVariable()
{
free(name_);
}
const char*NetVariable::basename() const
@ -71,6 +70,9 @@ const NetVariable* NetEVariable::variable() const
/*
* $Log: net_variable.cc,v $
* Revision 1.2 2003/03/06 00:28:42 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.1 2003/01/28 16:23:27 steve
* Add missing net_variable.cc to CVS.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: netlist.cc,v 1.206 2003/03/01 06:25:30 steve Exp $"
#ident "$Id: netlist.cc,v 1.207 2003/03/06 00:28:42 steve Exp $"
#endif
# include "config.h"
@ -165,25 +165,9 @@ Link* find_next_output(Link*lnk)
return 0;
}
NetObj::NetObj(NetScope*s, const string&n, unsigned np)
: scope_(s), npins_(np), delay1_(0), delay2_(0), delay3_(0)
{
name_ = new char[n.length()+1];
strcpy(name_, n.c_str());
pins_ = new Link[npins_];
for (unsigned idx = 0 ; idx < npins_ ; idx += 1) {
pins_[idx].node_ = this;
pins_[idx].pin_ = idx;
}
}
NetObj::NetObj(NetScope*s, const char*n, unsigned np)
: scope_(s), npins_(np), delay1_(0), delay2_(0), delay3_(0)
: scope_(s), name_(n), npins_(np), delay1_(0), delay2_(0), delay3_(0)
{
name_ = new char[strlen(n)+1];
strcpy(name_, n);
pins_ = new Link[npins_];
for (unsigned idx = 0 ; idx < npins_ ; idx += 1) {
pins_[idx].node_ = this;
@ -193,7 +177,6 @@ NetObj::NetObj(NetScope*s, const char*n, unsigned np)
NetObj::~NetObj()
{
delete[]name_;
delete[]pins_;
}
@ -219,11 +202,6 @@ const Link& NetObj::pin(unsigned idx) const
return pins_[idx];
}
NetNode::NetNode(NetScope*s, const string&n, unsigned npins)
: NetObj(s, n, npins), node_next_(0), node_prev_(0), design_(0)
{
}
NetNode::NetNode(NetScope*s, const char*n, unsigned npins)
: NetObj(s, n, npins), node_next_(0), node_prev_(0), design_(0)
{
@ -236,7 +214,7 @@ NetNode::~NetNode()
}
NetNet::NetNet(NetScope*s, const string&n, Type t, unsigned npins)
: NetObj(s, n, npins), sig_next_(0), sig_prev_(0),
: NetObj(s, lex_strings.add(n.c_str()), npins), sig_next_(0), sig_prev_(0),
type_(t), port_type_(NOT_A_PORT), signed_(false), msb_(npins-1), lsb_(0),
local_flag_(false), eref_count_(0), lref_count_(0)
{
@ -275,8 +253,8 @@ NetNet::NetNet(NetScope*s, const string&n, Type t, unsigned npins)
}
NetNet::NetNet(NetScope*s, const string&n, Type t, long ms, long ls)
: NetObj(s, n, ((ms>ls)?ms-ls:ls-ms) + 1), sig_next_(0),
sig_prev_(0), type_(t),
: NetObj(s, lex_strings.add(n.c_str()), ((ms>ls)?ms-ls:ls-ms) + 1),
sig_next_(0), sig_prev_(0), type_(t),
port_type_(NOT_A_PORT), signed_(false), msb_(ms), lsb_(ls),
local_flag_(false), eref_count_(0), lref_count_(0)
{
@ -464,7 +442,7 @@ unsigned NetNet::get_refs() const
NetSubnet::NetSubnet(NetNet*sig, unsigned off, unsigned wid)
: NetNet(sig->scope(), sig->scope()->local_hsymbol(), sig->type(), wid)
: NetNet(sig->scope(), sig->scope()->local_symbol(), sig->type(), wid)
{
for (unsigned idx = 0 ; idx < wid ; idx += 1)
connect(sig->pin(idx+off), pin(idx));
@ -529,7 +507,7 @@ const NetScope* NetProcTop::scope() const
*/
NetFF::NetFF(NetScope*s, const char*n, unsigned wid)
: NetNode(s, n, 8 + 2*wid)
: NetNode(s, lex_strings.add(n), 8 + 2*wid)
{
pin_Clock().set_dir(Link::INPUT);
pin_Clock().set_name("Clock", 0);
@ -677,7 +655,7 @@ const verinum& NetFF::aset_value() const
* 8 -- Result[0]
*/
NetAddSub::NetAddSub(NetScope*s, const string&n, unsigned w)
: NetNode(s, n, w*3+6)
: NetNode(s, lex_strings.add(n.c_str()), w*3+6)
{
pin(0).set_dir(Link::INPUT); pin(0).set_name("Add_Sub", 0);
pin(1).set_dir(Link::INPUT); pin(1).set_name("Aclr", 0);
@ -767,7 +745,8 @@ const Link& NetAddSub::pin_Result(unsigned idx) const
*/
NetCLShift::NetCLShift(NetScope*s, const string&n,
unsigned width, unsigned width_dist)
: NetNode(s, n, 3+2*width+width_dist), width_(width), width_dist_(width_dist)
: NetNode(s, lex_strings.add(n.c_str()), 3+2*width+width_dist),
width_(width), width_dist_(width_dist)
{
pin(0).set_dir(Link::INPUT); pin(0).set_name("Direction", 0);
pin(1).set_dir(Link::OUTPUT); pin(1).set_name("Underflow", 0);
@ -868,7 +847,7 @@ const Link& NetCLShift::pin_Distance(unsigned idx) const
}
NetCompare::NetCompare(NetScope*s, const string&n, unsigned wi)
: NetNode(s, n, 8+2*wi), width_(wi)
: NetNode(s, lex_strings.add(n.c_str()), 8+2*wi), width_(wi)
{
pin(0).set_dir(Link::INPUT); pin(0).set_name("Aclr");
pin(1).set_dir(Link::INPUT); pin(1).set_name("Clock");
@ -997,7 +976,8 @@ const Link& NetCompare::pin_DataB(unsigned idx) const
NetDivide::NetDivide(NetScope*sc, const string&n, unsigned wr,
unsigned wa, unsigned wb)
: NetNode(sc, n, wr+wa+wb), width_r_(wr), width_a_(wa), width_b_(wb)
: NetNode(sc, lex_strings.add(n.c_str()), wr+wa+wb),
width_r_(wr), width_a_(wa), width_b_(wb)
{
unsigned p = 0;
for (unsigned idx = 0 ; idx < width_r_ ; idx += 1, p += 1) {
@ -1071,8 +1051,8 @@ const Link& NetDivide::pin_DataB(unsigned idx) const
NetMult::NetMult(NetScope*sc, const string&n, unsigned wr,
unsigned wa, unsigned wb, unsigned ws)
: NetNode(sc, n, 2+wr+wa+wb+ws), width_r_(wr), width_a_(wa), width_b_(wb),
width_s_(ws)
: NetNode(sc, lex_strings.add(n.c_str()), 2+wr+wa+wb+ws),
width_r_(wr), width_a_(wa), width_b_(wb), width_s_(ws)
{
pin(0).set_dir(Link::INPUT); pin(0).set_name("Aclr", 0);
pin(1).set_dir(Link::INPUT); pin(1).set_name("Clock", 0);
@ -1200,7 +1180,8 @@ const Link& NetMult::pin_Sum(unsigned idx) const
NetMux::NetMux(NetScope*s, const string&n,
unsigned wi, unsigned si, unsigned sw)
: NetNode(s, n, 2+wi+sw+wi*si), width_(wi), size_(si), swidth_(sw)
: NetNode(s, lex_strings.add(n.c_str()), 2+wi+sw+wi*si),
width_(wi), size_(si), swidth_(sw)
{
pin(0).set_dir(Link::INPUT); pin(0).set_name("Aclr", 0);
pin(1).set_dir(Link::INPUT); pin(1).set_name("Clock", 0);
@ -1300,7 +1281,8 @@ const Link& NetMux::pin_Data(unsigned w, unsigned s) const
NetRamDq::NetRamDq(NetScope*s, const string&n, NetMemory*mem, unsigned awid)
: NetNode(s, n, 3+2*mem->width()+awid), mem_(mem), awidth_(awid)
: NetNode(s, lex_strings.add(n.c_str()), 3+2*mem->width()+awid),
mem_(mem), awidth_(awid)
{
pin(0).set_dir(Link::INPUT); pin(0).set_name("InClock", 0);
pin(1).set_dir(Link::INPUT); pin(1).set_name("OutClock", 0);
@ -1504,7 +1486,7 @@ const Link& NetRamDq::pin_Q(unsigned idx) const
}
NetBUFZ::NetBUFZ(NetScope*s, const string&n)
: NetNode(s, n, 2)
: NetNode(s, lex_strings.add(n.c_str()), 2)
{
pin(0).set_dir(Link::OUTPUT);
pin(1).set_dir(Link::INPUT);
@ -1518,7 +1500,7 @@ NetBUFZ::~NetBUFZ()
NetCaseCmp::NetCaseCmp(NetScope*s, const string&n)
: NetNode(s, n, 3)
: NetNode(s, lex_strings.add(n.c_str()), 3)
{
pin(0).set_dir(Link::OUTPUT); pin(0).set_name("O",0);
pin(1).set_dir(Link::INPUT); pin(1).set_name("I",0);
@ -1568,7 +1550,7 @@ NetProc* NetCondit::else_clause()
}
NetConst::NetConst(NetScope*s, const string&n, verinum::V v)
: NetNode(s, n, 1)
: NetNode(s, lex_strings.add(n.c_str()), 1)
{
pin(0).set_dir(Link::OUTPUT);
pin(0).set_name("O", 0);
@ -1577,7 +1559,7 @@ NetConst::NetConst(NetScope*s, const string&n, verinum::V v)
}
NetConst::NetConst(NetScope*s, const string&n, const verinum&val)
: NetNode(s, n, val.len())
: NetNode(s, lex_strings.add(n.c_str()), val.len())
{
value_ = new verinum::V[pin_count()];
for (unsigned idx = 0 ; idx < pin_count() ; idx += 1) {
@ -2147,7 +2129,7 @@ NetEUReduce::~NetEUReduce()
}
NetLogic::NetLogic(NetScope*s, const string&n, unsigned pins, TYPE t)
: NetNode(s, n, pins), type_(t)
: NetNode(s, lex_strings.add(n.c_str()), pins), type_(t)
{
pin(0).set_dir(Link::OUTPUT);
pin(0).set_name("O", 0);
@ -2196,6 +2178,9 @@ const NetProc*NetTaskDef::proc() const
/*
* $Log: netlist.cc,v $
* Revision 1.207 2003/03/06 00:28:42 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.206 2003/03/01 06:25:30 steve
* Add the lex_strings string handler, and put
* scope names and system task/function names

View File

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: netlist.h,v 1.278 2003/03/03 02:22:41 steve Exp $"
#ident "$Id: netlist.h,v 1.279 2003/03/06 00:28:42 steve Exp $"
#endif
/*
@ -86,7 +86,8 @@ class NetObj : public Attrib {
public:
public:
explicit NetObj(NetScope*s, const string&n, unsigned npins);
// The name of the object must be a a perallocated string. A
// lex_strings string, for example.
explicit NetObj(NetScope*s, const char*n, unsigned npins);
virtual ~NetObj();
@ -113,7 +114,7 @@ class NetObj : public Attrib {
private:
NetScope*scope_;
char* name_;
const char* name_;
Link*pins_;
const unsigned npins_;
unsigned delay1_;
@ -321,7 +322,7 @@ class NexusSet {
class NetNode : public NetObj {
public:
explicit NetNode(NetScope*s, const string&n, unsigned npins);
// The name paramter must be a permallocated string.
explicit NetNode(NetScope*s, const char*n, unsigned npins);
virtual ~NetNode();
@ -2103,6 +2104,8 @@ class NetVariable : public LineInfo {
friend class NetScope;
public:
// The name must be a permallocated string. This class makes
// no attempt to preserve it.
NetVariable(const char* name);
~NetVariable();
@ -2112,7 +2115,7 @@ class NetVariable : public LineInfo {
const NetScope* scope() const;
private:
char* name_;
const char* name_;
NetScope*scope_;
NetVariable*snext_;
@ -3204,6 +3207,9 @@ extern ostream& operator << (ostream&, NetNet::Type);
/*
* $Log: netlist.h,v $
* Revision 1.279 2003/03/06 00:28:42 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.278 2003/03/03 02:22:41 steve
* Scope names stored only as basename.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: netmisc.cc,v 1.5 2003/02/26 01:29:24 steve Exp $"
#ident "$Id: netmisc.cc,v 1.6 2003/03/06 00:28:42 steve Exp $"
#endif
# include "config.h"
@ -39,11 +39,11 @@ NetNet* add_to_net(Design*des, NetNet*sig, long val)
NetConst*val_c = new NetConst(scope, scope->local_hsymbol(), val_v);
NetNet*val_s = new NetNet(scope, scope->local_hsymbol(),
NetNet*val_s = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, width);
val_s->local_flag(true);
NetNet*res = new NetNet(scope, scope->local_hsymbol(),
NetNet*res = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, width);
res->local_flag(true);
@ -90,6 +90,9 @@ NetExpr* elab_and_eval(Design*des, NetScope*scope, const PExpr*pe)
/*
* $Log: netmisc.cc,v $
* Revision 1.6 2003/03/06 00:28:42 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.5 2003/02/26 01:29:24 steve
* LPM objects store only their base names.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: pad_to_width.cc,v 1.13 2003/01/27 05:09:17 steve Exp $"
#ident "$Id: pad_to_width.cc,v 1.14 2003/03/06 00:28:42 steve Exp $"
#endif
# include "config.h"
@ -85,7 +85,7 @@ NetNet*pad_to_width(Design*des, NetNet*net, unsigned wid)
pad);
des->add_node(con);
NetNet*tmp = new NetNet(scope, path + "." + scope->local_symbol(),
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE, wid);
tmp->local_flag(true);
@ -99,6 +99,9 @@ NetNet*pad_to_width(Design*des, NetNet*net, unsigned wid)
/*
* $Log: pad_to_width.cc,v $
* Revision 1.14 2003/03/06 00:28:42 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.13 2003/01/27 05:09:17 steve
* Spelling fixes.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: synth2.cc,v 1.22 2003/02/26 01:29:24 steve Exp $"
#ident "$Id: synth2.cc,v 1.23 2003/03/06 00:28:42 steve Exp $"
#endif
# include "config.h"
@ -208,7 +208,7 @@ bool NetCase::synth_async(Design*des, NetScope*scope,
verinum gval = ge->value();
unsigned sel_idx = guard2sel[gval.as_ulong()];
NetNet*sig = new NetNet(scope, scope->local_hsymbol(),
NetNet*sig = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE, nex_map->pin_count());
sig->local_flag(true);
items_[item].statement->synth_async(des, scope, nex_map, sig);
@ -239,13 +239,13 @@ bool NetCondit::synth_async(Design*des, NetScope*scope,
assert(if_ != 0);
assert(else_ != 0);
NetNet*asig = new NetNet(scope, scope->local_hsymbol(),
NetNet*asig = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE, nex_map->pin_count());
asig->local_flag(true);
if_->synth_async(des, scope, nex_map, asig);
NetNet*bsig = new NetNet(scope, scope->local_hsymbol(),
NetNet*bsig = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE, nex_map->pin_count());
bsig->local_flag(true);
@ -458,7 +458,7 @@ bool NetCondit::synth_sync(Design*des, NetScope*scope, NetFF*ff,
/* Synthesize the true clause to figure out what
kind of set/reset we have. */
NetNet*asig = new NetNet(scope, scope->local_hsymbol(),
NetNet*asig = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE, nex_map->pin_count());
asig->local_flag(true);
flag = if_->synth_async(des, scope, nex_map, asig) && flag;
@ -540,7 +540,7 @@ bool NetCondit::synth_sync(Design*des, NetScope*scope, NetFF*ff,
ff->pin_Enable().unlink();
connect(ff->pin_Enable(), ce_and->pin(0));
NetNet*tmp = new NetNet(scope, scope->local_hsymbol(),
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
NetNet::IMPLICIT, 1);
tmp->local_flag(true);
connect(ff->pin_Enable(), tmp->pin(0));
@ -638,7 +638,7 @@ bool NetProcTop::synth_sync(Design*des)
/* The D inputs to the DFF device will receive the output from
the statements of the process. */
NetNet*nex_d = new NetNet(scope(), scope()->local_hsymbol().c_str(),
NetNet*nex_d = new NetNet(scope(), scope()->local_symbol(),
NetNet::WIRE, nex_set.count());
nex_d->local_flag(true);
for (unsigned idx = 0 ; idx < nex_set.count() ; idx += 1) {
@ -738,6 +738,9 @@ void synth2(Design*des)
/*
* $Log: synth2.cc,v $
* Revision 1.23 2003/03/06 00:28:42 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.22 2003/02/26 01:29:24 steve
* LPM objects store only their base names.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: t-dll-api.cc,v 1.92 2003/03/03 02:22:41 steve Exp $"
#ident "$Id: t-dll-api.cc,v 1.93 2003/03/06 00:28:42 steve Exp $"
#endif
# include "config.h"
@ -483,12 +483,14 @@ extern "C" ivl_attribute_t ivl_logic_attr_val(ivl_net_logic_t net,
extern "C" const char* ivl_logic_name(ivl_net_logic_t net)
{
assert(net);
cerr << "ANACHRONISM: Call to anachronistic ivl_logic_name." << endl;
return net->name_;
}
extern "C" const char* ivl_logic_basename(ivl_net_logic_t net)
{
return basename(net->scope_, net->name_);
assert(net);
return net->name_;
}
extern "C" ivl_scope_t ivl_logic_scope(ivl_net_logic_t net)
@ -1188,6 +1190,16 @@ extern "C" ivl_memory_t ivl_scope_mem(ivl_scope_t net, unsigned idx)
return net->mem_[idx];
}
static unsigned scope_name_len(ivl_scope_t net)
{
unsigned len = 0;
for (ivl_scope_t cur = net ; cur ; cur = cur->parent)
len += strlen(cur->name_) + 1;
return len;
}
static void push_scope_basename(ivl_scope_t net, char*buf)
{
if (net->parent == 0) {
@ -1210,9 +1222,7 @@ extern "C" const char* ivl_scope_name(ivl_scope_t net)
ivl_scope_t cur;
unsigned needlen = 0;
for (cur = net ; cur ; cur = cur->parent)
needlen += strlen(cur->name_) + 1;
unsigned needlen = scope_name_len(net);
if (name_size < needlen) {
name_buffer = (char*)realloc(name_buffer, needlen);
@ -1305,12 +1315,27 @@ extern "C" ivl_attribute_t ivl_signal_attr_val(ivl_signal_t net, unsigned idx)
extern "C" const char* ivl_signal_basename(ivl_signal_t net)
{
return basename(net->scope_, net->name_);
return net->name_;
}
extern "C" const char* ivl_signal_name(ivl_signal_t net)
{
return net->name_;
static char*name_buffer = 0;
static unsigned name_size = 0;
unsigned needlen = scope_name_len(net->scope_);
needlen += strlen(net->name_) + 2;
if (name_size < needlen) {
name_buffer = (char*)realloc(name_buffer, needlen);
name_size = needlen;
}
push_scope_basename(net->scope_, name_buffer);
strcat(name_buffer, ".");
strcat(name_buffer, net->name_);
return name_buffer;
}
extern "C" ivl_nexus_t ivl_signal_pin(ivl_signal_t net, unsigned idx)
@ -1708,6 +1733,9 @@ extern "C" ivl_variable_type_t ivl_variable_type(ivl_variable_t net)
/*
* $Log: t-dll-api.cc,v $
* Revision 1.93 2003/03/06 00:28:42 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.92 2003/03/03 02:22:41 steve
* Scope names stored only as basename.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: t-dll.cc,v 1.105 2003/03/03 02:22:41 steve Exp $"
#ident "$Id: t-dll.cc,v 1.106 2003/03/06 00:28:42 steve Exp $"
#endif
# include "config.h"
@ -608,7 +608,7 @@ bool dll_target::bufz(const NetBUFZ*net)
obj->scope_ = scope;
obj->name_ = strings_.add(net->name());
obj->name_ = net->name();
logic_attributes(obj, net);
obj->delay[0] = net->rise_time();
@ -665,7 +665,7 @@ void dll_target::variable(const NetVariable*net)
ivl_scope_t scope = find_scope(des_, net->scope());
obj->type = IVL_VT_REAL;
obj->name = strings_.add(net->basename());
obj->name = net->basename();
obj->scope = scope;
scope_add_var(scope, obj);
@ -794,7 +794,7 @@ void dll_target::logic(const NetLogic*net)
assert(scope);
obj->scope_= scope;
obj->name_ = strings_.add(net->name());
obj->name_ = net->name();
logic_attributes(obj, net);
@ -829,7 +829,7 @@ void dll_target::net_case_cmp(const NetCaseCmp*net)
ivl_scope_t scope = des_.roots_[0];
obj->scope_= scope;
obj->name_ = strings_.add(net->name());
obj->name_ = net->name();
obj->delay[0] = net->rise_time();
obj->delay[1] = net->fall_time();
@ -858,7 +858,7 @@ bool dll_target::net_function(const NetUserFunc*net)
{
struct ivl_lpm_s*obj = new struct ivl_lpm_s;
obj->type = IVL_LPM_UFUNC;
obj->name = strings_.add(net->name());
obj->name = net->name();
obj->scope = find_scope(des_, net->scope());
assert(obj->scope);
@ -961,7 +961,7 @@ void dll_target::udp(const NetUDP*net)
assert(scope);
obj->scope_= scope;
obj->name_ = strings_.add(net->name());
obj->name_ = net->name();
obj->delay[0] = net->rise_time();
obj->delay[1] = net->fall_time();
@ -991,7 +991,7 @@ void dll_target::lpm_add_sub(const NetAddSub*net)
obj->type = IVL_LPM_SUB;
else
obj->type = IVL_LPM_ADD;
obj->name = strings_.add(net->name());
obj->name = net->name(); // NetAddSub names are permallocated.
assert(net->scope());
obj->scope = find_scope(des_, net->scope());
assert(obj->scope);
@ -1060,7 +1060,7 @@ void dll_target::lpm_clshift(const NetCLShift*net)
{
ivl_lpm_t obj = new struct ivl_lpm_s;
obj->type = IVL_LPM_SHIFTL;
obj->name = strings_.add(net->name());
obj->name = net->name();
assert(net->scope());
obj->scope = find_scope(des_, net->scope());
assert(obj->scope);
@ -1136,7 +1136,7 @@ void dll_target::lpm_clshift(const NetCLShift*net)
void dll_target::lpm_compare(const NetCompare*net)
{
ivl_lpm_t obj = new struct ivl_lpm_s;
obj->name = strings_.add(net->name());
obj->name = net->name(); // NetCompare names are permallocated
assert(net->scope());
obj->scope = find_scope(des_, net->scope());
assert(obj->scope);
@ -1248,7 +1248,7 @@ void dll_target::lpm_divide(const NetDivide*net)
{
ivl_lpm_t obj = new struct ivl_lpm_s;
obj->type = IVL_LPM_DIVIDE;
obj->name = strings_.add(net->name());
obj->name = net->name();
assert(net->scope());
obj->scope = find_scope(des_, net->scope());
assert(obj->scope);
@ -1306,7 +1306,7 @@ void dll_target::lpm_modulo(const NetModulo*net)
{
ivl_lpm_t obj = new struct ivl_lpm_s;
obj->type = IVL_LPM_MOD;
obj->name = strings_.add(net->name());
obj->name = net->name();
assert(net->scope());
obj->scope = find_scope(des_, net->scope());
assert(obj->scope);
@ -1373,7 +1373,7 @@ void dll_target::lpm_ff(const NetFF*net)
{
ivl_lpm_t obj = new struct ivl_lpm_s;
obj->type = IVL_LPM_FF;
obj->name = strings_.add(net->name());
obj->name = net->name();
obj->scope = find_scope(des_, net->scope());
assert(obj->scope);
@ -1464,7 +1464,7 @@ void dll_target::lpm_ram_dq(const NetRamDq*net)
{
ivl_lpm_t obj = new struct ivl_lpm_s;
obj->type = IVL_LPM_RAM;
obj->name = strings_.add(net->name());
obj->name = net->name();
obj->u_.ff.mem = find_memory(des_, net->mem());
assert(obj->u_.ff.mem);
obj->scope = find_scope(des_, net->mem()->scope());
@ -1578,7 +1578,7 @@ void dll_target::lpm_mult(const NetMult*net)
{
ivl_lpm_t obj = new struct ivl_lpm_s;
obj->type = IVL_LPM_MULT;
obj->name = strings_.add(net->name());
obj->name = net->name();
assert(net->scope());
obj->scope = find_scope(des_, net->scope());
assert(obj->scope);
@ -1640,7 +1640,7 @@ void dll_target::lpm_mux(const NetMux*net)
{
ivl_lpm_t obj = new struct ivl_lpm_s;
obj->type = IVL_LPM_MUX;
obj->name = strings_.add(net->name());
obj->name = net->name(); // The NetMux perallocates its name.
obj->scope = find_scope(des_, net->scope());
assert(obj->scope);
@ -1863,7 +1863,7 @@ void dll_target::signal(const NetNet*net)
{
ivl_signal_t obj = new struct ivl_signal_s;
obj->name_ = strings_.add(net->name());
obj->name_ = net->name();
/* Attach the signal to the ivl_scope_t object that contains
it. This involves growing the sigs_ array in the scope
@ -2023,6 +2023,9 @@ extern const struct target tgt_dll = { "dll", &dll_target_obj };
/*
* $Log: t-dll.cc,v $
* Revision 1.106 2003/03/06 00:28:42 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.105 2003/03/03 02:22:41 steve
* Scope names stored only as basename.
*
@ -2102,53 +2105,5 @@ extern const struct target tgt_dll = { "dll", &dll_target_obj };
*
* Divide signal reference counts between rval
* and lval references.
*
* Revision 1.83 2002/05/24 04:36:23 steve
* Verilog 2001 attriubtes on nets/wires.
*
* Revision 1.82 2002/05/23 03:08:51 steve
* Add language support for Verilog-2001 attribute
* syntax. Hook this support into existing $attribute
* handling, and add number and void value types.
*
* Add to the ivl_target API new functions for access
* of complex attributes attached to gates.
*
* Revision 1.81 2002/04/22 03:15:25 steve
* Keep delays applied to BUFZ devices.
*
* Revision 1.80 2002/03/09 02:10:22 steve
* Add the NetUserFunc netlist node.
*
* Revision 1.79 2002/01/23 04:54:37 steve
* Load modules with RTLD_LAZY
*
* Revision 1.78 2002/01/19 19:02:08 steve
* Pass back target errors processing conditionals.
*
* Revision 1.77 2002/01/12 04:03:09 steve
* Make BUFZ device strengths available.
*
* Revision 1.76 2002/01/06 03:15:43 steve
* Constant values have drive strengths.
*
* Revision 1.75 2002/01/03 04:19:01 steve
* Add structural modulus support down to vvp.
*
* Revision 1.74 2001/12/18 05:34:02 steve
* Comments about MUX synthesis.
*
* Revision 1.73 2001/12/15 02:13:17 steve
* The IVL_SIT_WIRE type does not exist, it is a
* synonym for IVL_SIT_TRI.
*
* Revision 1.72 2001/12/14 02:05:13 steve
* Parse and handle drive strengths of gates to vvp.
*
* Revision 1.71 2001/12/06 03:11:00 steve
* Add ivl_logic_delay function to ivl_target.
*
* Revision 1.70 2001/11/14 03:28:49 steve
* DLL target support for force and release.
*/

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: xnfio.cc,v 1.25 2003/01/30 16:23:08 steve Exp $"
#ident "$Id: xnfio.cc,v 1.26 2003/03/06 00:28:42 steve Exp $"
#endif
# include "config.h"
@ -145,7 +145,7 @@ static NetLogic* make_obuf(Design*des, NetNet*net)
// of the netlist, to create a ring without a signal. Detect
// this case and create a new signal.
if (count_signals(buf->pin(1)) == 0) {
NetNet*tmp = new NetNet(scope, des->local_symbol(scope->name()),
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
NetNet::WIRE);
tmp->local_flag(true);
connect(buf->pin(1), tmp->pin(0));
@ -362,6 +362,9 @@ void xnfio(Design*des)
/*
* $Log: xnfio.cc,v $
* Revision 1.26 2003/03/06 00:28:42 steve
* All NetObj objects have lex_string base names.
*
* Revision 1.25 2003/01/30 16:23:08 steve
* Spelling fixes.
*