NetObj constructor finally requires a scope.
This commit is contained in:
parent
21194c909a
commit
874bab10e4
58
cprop.cc
58
cprop.cc
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: cprop.cc,v 1.29 2001/07/25 03:10:48 steve Exp $"
|
#ident "$Id: cprop.cc,v 1.30 2001/10/28 01:14:53 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -153,6 +153,7 @@ void cprop_functor::lpm_compare(Design*des, NetCompare*obj)
|
||||||
|
|
||||||
void cprop_functor::lpm_compare_eq_(Design*des, NetCompare*obj)
|
void cprop_functor::lpm_compare_eq_(Design*des, NetCompare*obj)
|
||||||
{
|
{
|
||||||
|
NetScope*scope = obj->scope();
|
||||||
|
|
||||||
/* First, look for the case where constant bits on matching A
|
/* First, look for the case where constant bits on matching A
|
||||||
and B inputs are different. This this is so, the device can
|
and B inputs are different. This this is so, the device can
|
||||||
|
|
@ -167,7 +168,7 @@ void cprop_functor::lpm_compare_eq_(Design*des, NetCompare*obj)
|
||||||
driven_value(obj->pin_DataB(idx)))
|
driven_value(obj->pin_DataB(idx)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
NetConst*zero = new NetConst(obj->name(), verinum::V0);
|
NetConst*zero = new NetConst(scope, obj->name(), verinum::V0);
|
||||||
connect(zero->pin(0), obj->pin_AEB());
|
connect(zero->pin(0), obj->pin_AEB());
|
||||||
delete obj;
|
delete obj;
|
||||||
des->add_node(zero);
|
des->add_node(zero);
|
||||||
|
|
@ -204,7 +205,7 @@ void cprop_functor::lpm_compare_eq_(Design*des, NetCompare*obj)
|
||||||
/* If we wound up disconnecting all the inputs, then remove
|
/* If we wound up disconnecting all the inputs, then remove
|
||||||
the device and replace it with a constant. */
|
the device and replace it with a constant. */
|
||||||
if (top == 0) {
|
if (top == 0) {
|
||||||
NetConst*one = new NetConst(obj->name(), verinum::V1);
|
NetConst*one = new NetConst(scope, obj->name(), verinum::V1);
|
||||||
connect(one->pin(0), obj->pin_AEB());
|
connect(one->pin(0), obj->pin_AEB());
|
||||||
delete obj;
|
delete obj;
|
||||||
des->add_node(one);
|
des->add_node(one);
|
||||||
|
|
@ -215,7 +216,7 @@ void cprop_functor::lpm_compare_eq_(Design*des, NetCompare*obj)
|
||||||
/* If there is only one bit left, then replace the comparator
|
/* If there is only one bit left, then replace the comparator
|
||||||
with a simple XOR gate. */
|
with a simple XOR gate. */
|
||||||
if (top == 1) {
|
if (top == 1) {
|
||||||
NetLogic*tmp = new NetLogic(obj->scope(), obj->name(), 3,
|
NetLogic*tmp = new NetLogic(scope, obj->name(), 3,
|
||||||
NetLogic::XOR);
|
NetLogic::XOR);
|
||||||
connect(tmp->pin(0), obj->pin_AEB());
|
connect(tmp->pin(0), obj->pin_AEB());
|
||||||
connect(tmp->pin(1), obj->pin_DataA(0));
|
connect(tmp->pin(1), obj->pin_DataA(0));
|
||||||
|
|
@ -230,7 +231,7 @@ void cprop_functor::lpm_compare_eq_(Design*des, NetCompare*obj)
|
||||||
if (top == obj->width())
|
if (top == obj->width())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
NetCompare*tmp = new NetCompare(obj->scope(), obj->name(), top);
|
NetCompare*tmp = new NetCompare(scope, obj->name(), top);
|
||||||
connect(tmp->pin_AEB(), obj->pin_AEB());
|
connect(tmp->pin_AEB(), obj->pin_AEB());
|
||||||
for (unsigned idx = 0 ; idx < top ; idx += 1) {
|
for (unsigned idx = 0 ; idx < top ; idx += 1) {
|
||||||
connect(tmp->pin_DataA(idx), obj->pin_DataA(idx));
|
connect(tmp->pin_DataA(idx), obj->pin_DataA(idx));
|
||||||
|
|
@ -295,6 +296,8 @@ void cprop_functor::lpm_ff(Design*des, NetFF*obj)
|
||||||
|
|
||||||
void cprop_functor::lpm_logic(Design*des, NetLogic*obj)
|
void cprop_functor::lpm_logic(Design*des, NetLogic*obj)
|
||||||
{
|
{
|
||||||
|
NetScope*scope = obj->scope();
|
||||||
|
|
||||||
switch (obj->type()) {
|
switch (obj->type()) {
|
||||||
|
|
||||||
case NetLogic::NAND:
|
case NetLogic::NAND:
|
||||||
|
|
@ -336,10 +339,10 @@ void cprop_functor::lpm_logic(Design*des, NetLogic*obj)
|
||||||
NetConst*tmp;
|
NetConst*tmp;
|
||||||
switch (obj->type()) {
|
switch (obj->type()) {
|
||||||
case NetLogic::AND:
|
case NetLogic::AND:
|
||||||
tmp = new NetConst(obj->name(), verinum::V0);
|
tmp = new NetConst(scope, obj->name(), verinum::V0);
|
||||||
break;
|
break;
|
||||||
case NetLogic::NAND:
|
case NetLogic::NAND:
|
||||||
tmp = new NetConst(obj->name(), verinum::V1);
|
tmp = new NetConst(scope, obj->name(), verinum::V1);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
|
|
@ -361,10 +364,10 @@ void cprop_functor::lpm_logic(Design*des, NetLogic*obj)
|
||||||
NetConst*tmp;
|
NetConst*tmp;
|
||||||
switch (obj->type()) {
|
switch (obj->type()) {
|
||||||
case NetLogic::AND:
|
case NetLogic::AND:
|
||||||
tmp = new NetConst(obj->name(), verinum::V1);
|
tmp = new NetConst(scope, obj->name(), verinum::V1);
|
||||||
break;
|
break;
|
||||||
case NetLogic::NAND:
|
case NetLogic::NAND:
|
||||||
tmp = new NetConst(obj->name(), verinum::V0);
|
tmp = new NetConst(scope, obj->name(), verinum::V0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
|
|
@ -384,7 +387,7 @@ void cprop_functor::lpm_logic(Design*des, NetLogic*obj)
|
||||||
gate with a Vx. */
|
gate with a Vx. */
|
||||||
if (xs == (top-1)) {
|
if (xs == (top-1)) {
|
||||||
NetConst*tmp;
|
NetConst*tmp;
|
||||||
tmp = new NetConst(obj->name(), verinum::Vx);
|
tmp = new NetConst(scope, obj->name(), verinum::Vx);
|
||||||
des->add_node(tmp);
|
des->add_node(tmp);
|
||||||
tmp->pin(0).drive0(obj->pin(0).drive0());
|
tmp->pin(0).drive0(obj->pin(0).drive0());
|
||||||
tmp->pin(0).drive1(obj->pin(0).drive1());
|
tmp->pin(0).drive1(obj->pin(0).drive1());
|
||||||
|
|
@ -401,12 +404,12 @@ void cprop_functor::lpm_logic(Design*des, NetLogic*obj)
|
||||||
NetLogic*tmp;
|
NetLogic*tmp;
|
||||||
switch (obj->type()) {
|
switch (obj->type()) {
|
||||||
case NetLogic::AND:
|
case NetLogic::AND:
|
||||||
tmp = new NetLogic(obj->scope(),
|
tmp = new NetLogic(scope,
|
||||||
obj->name(), 2,
|
obj->name(), 2,
|
||||||
NetLogic::BUF);
|
NetLogic::BUF);
|
||||||
break;
|
break;
|
||||||
case NetLogic::NAND:
|
case NetLogic::NAND:
|
||||||
tmp = new NetLogic(obj->scope(),
|
tmp = new NetLogic(scope,
|
||||||
obj->name(), 2,
|
obj->name(), 2,
|
||||||
NetLogic::NOT);
|
NetLogic::NOT);
|
||||||
break;
|
break;
|
||||||
|
|
@ -427,7 +430,7 @@ void cprop_functor::lpm_logic(Design*des, NetLogic*obj)
|
||||||
new [N]OR gate that has the right number of
|
new [N]OR gate that has the right number of
|
||||||
inputs, connected in the right place. */
|
inputs, connected in the right place. */
|
||||||
if (top < obj->pin_count()) {
|
if (top < obj->pin_count()) {
|
||||||
NetLogic*tmp = new NetLogic(obj->scope(),
|
NetLogic*tmp = new NetLogic(scope,
|
||||||
obj->name(), top,
|
obj->name(), top,
|
||||||
obj->type());
|
obj->type());
|
||||||
des->add_node(tmp);
|
des->add_node(tmp);
|
||||||
|
|
@ -482,10 +485,10 @@ void cprop_functor::lpm_logic(Design*des, NetLogic*obj)
|
||||||
NetConst*tmp;
|
NetConst*tmp;
|
||||||
switch (obj->type()) {
|
switch (obj->type()) {
|
||||||
case NetLogic::OR:
|
case NetLogic::OR:
|
||||||
tmp = new NetConst(obj->name(), verinum::V1);
|
tmp = new NetConst(scope, obj->name(), verinum::V1);
|
||||||
break;
|
break;
|
||||||
case NetLogic::NOR:
|
case NetLogic::NOR:
|
||||||
tmp = new NetConst(obj->name(), verinum::V0);
|
tmp = new NetConst(scope, obj->name(), verinum::V0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
|
|
@ -507,10 +510,10 @@ void cprop_functor::lpm_logic(Design*des, NetLogic*obj)
|
||||||
NetConst*tmp;
|
NetConst*tmp;
|
||||||
switch (obj->type()) {
|
switch (obj->type()) {
|
||||||
case NetLogic::OR:
|
case NetLogic::OR:
|
||||||
tmp = new NetConst(obj->name(), verinum::V0);
|
tmp = new NetConst(scope, obj->name(), verinum::V0);
|
||||||
break;
|
break;
|
||||||
case NetLogic::NOR:
|
case NetLogic::NOR:
|
||||||
tmp = new NetConst(obj->name(), verinum::V1);
|
tmp = new NetConst(scope, obj->name(), verinum::V1);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
|
|
@ -532,12 +535,12 @@ void cprop_functor::lpm_logic(Design*des, NetLogic*obj)
|
||||||
NetLogic*tmp;
|
NetLogic*tmp;
|
||||||
switch (obj->type()) {
|
switch (obj->type()) {
|
||||||
case NetLogic::OR:
|
case NetLogic::OR:
|
||||||
tmp = new NetLogic(obj->scope(),
|
tmp = new NetLogic(scope,
|
||||||
obj->name(), 2,
|
obj->name(), 2,
|
||||||
NetLogic::BUF);
|
NetLogic::BUF);
|
||||||
break;
|
break;
|
||||||
case NetLogic::NOR:
|
case NetLogic::NOR:
|
||||||
tmp = new NetLogic(obj->scope(),
|
tmp = new NetLogic(scope,
|
||||||
obj->name(), 2,
|
obj->name(), 2,
|
||||||
NetLogic::NOT);
|
NetLogic::NOT);
|
||||||
break;
|
break;
|
||||||
|
|
@ -558,7 +561,7 @@ void cprop_functor::lpm_logic(Design*des, NetLogic*obj)
|
||||||
new [N]OR gate that has the right number of
|
new [N]OR gate that has the right number of
|
||||||
inputs, connected in the right place. */
|
inputs, connected in the right place. */
|
||||||
if (top < obj->pin_count()) {
|
if (top < obj->pin_count()) {
|
||||||
NetLogic*tmp = new NetLogic(obj->scope(),
|
NetLogic*tmp = new NetLogic(scope,
|
||||||
obj->name(), top,
|
obj->name(), top,
|
||||||
obj->type());
|
obj->type());
|
||||||
des->add_node(tmp);
|
des->add_node(tmp);
|
||||||
|
|
@ -653,7 +656,7 @@ void cprop_functor::lpm_logic(Design*des, NetLogic*obj)
|
||||||
verinum::V out = obj->type()==NetLogic::XNOR
|
verinum::V out = obj->type()==NetLogic::XNOR
|
||||||
? verinum::V1
|
? verinum::V1
|
||||||
: verinum::V0;
|
: verinum::V0;
|
||||||
NetConst*tmp = new NetConst(obj->name(), out);
|
NetConst*tmp = new NetConst(scope, obj->name(), out);
|
||||||
|
|
||||||
des->add_node(tmp);
|
des->add_node(tmp);
|
||||||
tmp->pin(0).drive0(obj->pin(0).drive0());
|
tmp->pin(0).drive0(obj->pin(0).drive0());
|
||||||
|
|
@ -681,11 +684,11 @@ void cprop_functor::lpm_logic(Design*des, NetLogic*obj)
|
||||||
NetLogic*tmp;
|
NetLogic*tmp;
|
||||||
|
|
||||||
if (obj->type() == NetLogic::XOR)
|
if (obj->type() == NetLogic::XOR)
|
||||||
tmp = new NetLogic(obj->scope(),
|
tmp = new NetLogic(scope,
|
||||||
obj->name(), 2,
|
obj->name(), 2,
|
||||||
NetLogic::NOT);
|
NetLogic::NOT);
|
||||||
else
|
else
|
||||||
tmp = new NetLogic(obj->scope(),
|
tmp = new NetLogic(scope,
|
||||||
obj->name(), 2,
|
obj->name(), 2,
|
||||||
NetLogic::BUF);
|
NetLogic::BUF);
|
||||||
|
|
||||||
|
|
@ -706,11 +709,11 @@ void cprop_functor::lpm_logic(Design*des, NetLogic*obj)
|
||||||
NetLogic*tmp;
|
NetLogic*tmp;
|
||||||
|
|
||||||
if (obj->type() == NetLogic::XOR)
|
if (obj->type() == NetLogic::XOR)
|
||||||
tmp = new NetLogic(obj->scope(),
|
tmp = new NetLogic(scope,
|
||||||
obj->name(), 2,
|
obj->name(), 2,
|
||||||
NetLogic::BUF);
|
NetLogic::BUF);
|
||||||
else
|
else
|
||||||
tmp = new NetLogic(obj->scope(),
|
tmp = new NetLogic(scope,
|
||||||
obj->name(), 2,
|
obj->name(), 2,
|
||||||
NetLogic::NOT);
|
NetLogic::NOT);
|
||||||
|
|
||||||
|
|
@ -728,7 +731,7 @@ void cprop_functor::lpm_logic(Design*des, NetLogic*obj)
|
||||||
new XOR gate that has the right number of
|
new XOR gate that has the right number of
|
||||||
inputs, connected in the right place. */
|
inputs, connected in the right place. */
|
||||||
if (top < obj->pin_count()) {
|
if (top < obj->pin_count()) {
|
||||||
NetLogic*tmp = new NetLogic(obj->scope(),
|
NetLogic*tmp = new NetLogic(scope,
|
||||||
obj->name(), top,
|
obj->name(), top,
|
||||||
obj->type());
|
obj->type());
|
||||||
des->add_node(tmp);
|
des->add_node(tmp);
|
||||||
|
|
@ -939,6 +942,9 @@ void cprop(Design*des)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: cprop.cc,v $
|
* $Log: cprop.cc,v $
|
||||||
|
* Revision 1.30 2001/10/28 01:14:53 steve
|
||||||
|
* NetObj constructor finally requires a scope.
|
||||||
|
*
|
||||||
* Revision 1.29 2001/07/25 03:10:48 steve
|
* Revision 1.29 2001/07/25 03:10:48 steve
|
||||||
* Create a config.h.in file to hold all the config
|
* Create a config.h.in file to hold all the config
|
||||||
* junk, and support gcc 3.0. (Stephan Boettcher)
|
* junk, and support gcc 3.0. (Stephan Boettcher)
|
||||||
|
|
|
||||||
195
elab_net.cc
195
elab_net.cc
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: elab_net.cc,v 1.76 2001/10/16 02:19:26 steve Exp $"
|
#ident "$Id: elab_net.cc,v 1.77 2001/10/28 01:14:53 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -385,7 +385,8 @@ NetNet* PEBinary::elaborate_net_cmp_(Design*des, const string&path,
|
||||||
|
|
||||||
NetNet*zero = 0;
|
NetNet*zero = 0;
|
||||||
if (lsig->pin_count() != rsig->pin_count()) {
|
if (lsig->pin_count() != rsig->pin_count()) {
|
||||||
NetConst*tmp = new NetConst(des->local_symbol(path), verinum::V0);
|
NetConst*tmp = new NetConst(scope, des->local_symbol(path),
|
||||||
|
verinum::V0);
|
||||||
des->add_node(tmp);
|
des->add_node(tmp);
|
||||||
zero = new NetNet(scope, des->local_symbol(path), NetNet::WIRE);
|
zero = new NetNet(scope, des->local_symbol(path), NetNet::WIRE);
|
||||||
connect(tmp->pin(0), zero->pin(0));
|
connect(tmp->pin(0), zero->pin(0));
|
||||||
|
|
@ -441,7 +442,8 @@ NetNet* PEBinary::elaborate_net_cmp_(Design*des, const string&path,
|
||||||
(op_ == 'E')? NetLogic::AND : NetLogic::NAND);
|
(op_ == 'E')? NetLogic::AND : NetLogic::NAND);
|
||||||
connect(gate->pin(0), osig->pin(0));
|
connect(gate->pin(0), osig->pin(0));
|
||||||
for (unsigned idx = 0 ; idx < dwidth ; idx += 1) {
|
for (unsigned idx = 0 ; idx < dwidth ; idx += 1) {
|
||||||
NetCaseCmp*cmp = new NetCaseCmp(des->local_symbol(path));
|
NetCaseCmp*cmp = new NetCaseCmp(scope,
|
||||||
|
des->local_symbol(path));
|
||||||
|
|
||||||
if (idx < lsig->pin_count())
|
if (idx < lsig->pin_count())
|
||||||
connect(cmp->pin(1), lsig->pin(idx));
|
connect(cmp->pin(1), lsig->pin(idx));
|
||||||
|
|
@ -621,7 +623,8 @@ NetNet* PEBinary::elaborate_net_div_(Design*des, const string&path,
|
||||||
// wire [7:0] r = a / b;
|
// wire [7:0] r = a / b;
|
||||||
|
|
||||||
if (rwidth < osig->pin_count()) {
|
if (rwidth < osig->pin_count()) {
|
||||||
NetConst*tmp = new NetConst(des->local_symbol(path), verinum::V0);
|
NetConst*tmp = new NetConst(scope, des->local_symbol(path),
|
||||||
|
verinum::V0);
|
||||||
des->add_node(tmp);
|
des->add_node(tmp);
|
||||||
for (unsigned idx = rwidth ; idx < osig->pin_count() ; idx += 1)
|
for (unsigned idx = rwidth ; idx < osig->pin_count() ; idx += 1)
|
||||||
connect(osig->pin(idx), tmp->pin(0));
|
connect(osig->pin(idx), tmp->pin(0));
|
||||||
|
|
@ -649,7 +652,7 @@ NetNet* PEBinary::elaborate_net_mod_(Design*des, const string&path,
|
||||||
unsigned rwidth = lsig->pin_count();
|
unsigned rwidth = lsig->pin_count();
|
||||||
if (rsig->pin_count() > rwidth)
|
if (rsig->pin_count() > rwidth)
|
||||||
rwidth = rsig->pin_count();
|
rwidth = rsig->pin_count();
|
||||||
NetModulo*mod = new NetModulo(des->local_symbol(path), rwidth,
|
NetModulo*mod = new NetModulo(scope, des->local_symbol(path), rwidth,
|
||||||
lsig->pin_count(),
|
lsig->pin_count(),
|
||||||
rsig->pin_count());
|
rsig->pin_count());
|
||||||
des->add_node(mod);
|
des->add_node(mod);
|
||||||
|
|
@ -673,7 +676,8 @@ NetNet* PEBinary::elaborate_net_mod_(Design*des, const string&path,
|
||||||
/* If the lvalue is larger then the result, then pad the
|
/* If the lvalue is larger then the result, then pad the
|
||||||
output with constant 0. */
|
output with constant 0. */
|
||||||
if (cnt < osig->pin_count()) {
|
if (cnt < osig->pin_count()) {
|
||||||
NetConst*tmp = new NetConst(des->local_symbol(path), verinum::V0);
|
NetConst*tmp = new NetConst(scope, des->local_symbol(path),
|
||||||
|
verinum::V0);
|
||||||
des->add_node(tmp);
|
des->add_node(tmp);
|
||||||
for (unsigned idx = cnt ; idx < osig->pin_count() ; idx += 1)
|
for (unsigned idx = cnt ; idx < osig->pin_count() ; idx += 1)
|
||||||
connect(osig->pin(idx), tmp->pin(0));
|
connect(osig->pin(idx), tmp->pin(0));
|
||||||
|
|
@ -810,7 +814,8 @@ NetNet* PEBinary::elaborate_net_mul_(Design*des, const string&path,
|
||||||
/* If the lvalue is larger then the result, then pad the
|
/* If the lvalue is larger then the result, then pad the
|
||||||
output with constant 0. */
|
output with constant 0. */
|
||||||
if (cnt < osig->pin_count()) {
|
if (cnt < osig->pin_count()) {
|
||||||
NetConst*tmp = new NetConst(des->local_symbol(path), verinum::V0);
|
NetConst*tmp = new NetConst(scope, des->local_symbol(path),
|
||||||
|
verinum::V0);
|
||||||
des->add_node(tmp);
|
des->add_node(tmp);
|
||||||
for (unsigned idx = cnt ; idx < osig->pin_count() ; idx += 1)
|
for (unsigned idx = cnt ; idx < osig->pin_count() ; idx += 1)
|
||||||
connect(osig->pin(idx), tmp->pin(0));
|
connect(osig->pin(idx), tmp->pin(0));
|
||||||
|
|
@ -851,7 +856,8 @@ NetNet* PEBinary::elaborate_net_shift_(Design*des, const string&path,
|
||||||
NetNet::WIRE, lwidth);
|
NetNet::WIRE, lwidth);
|
||||||
osig->local_flag(true);
|
osig->local_flag(true);
|
||||||
|
|
||||||
NetConst*zero = new NetConst(des->local_symbol(path), verinum::V0);
|
NetConst*zero = new NetConst(scope, des->local_symbol(path),
|
||||||
|
verinum::V0);
|
||||||
des->add_node(zero);
|
des->add_node(zero);
|
||||||
|
|
||||||
if (op_ == 'l') {
|
if (op_ == 'l') {
|
||||||
|
|
@ -904,7 +910,8 @@ NetNet* PEBinary::elaborate_net_shift_(Design*des, const string&path,
|
||||||
connect(lsig->pin(idx), gate->pin_Data(idx));
|
connect(lsig->pin(idx), gate->pin_Data(idx));
|
||||||
|
|
||||||
if (lsig->pin_count() < lwidth) {
|
if (lsig->pin_count() < lwidth) {
|
||||||
NetConst*zero = new NetConst(des->local_symbol(path), verinum::V0);
|
NetConst*zero = new NetConst(scope, des->local_symbol(path),
|
||||||
|
verinum::V0);
|
||||||
NetTmp*tmp = new NetTmp(scope, des->local_symbol(path));
|
NetTmp*tmp = new NetTmp(scope, des->local_symbol(path));
|
||||||
des->add_node(zero);
|
des->add_node(zero);
|
||||||
connect(zero->pin(0), tmp->pin(0));
|
connect(zero->pin(0), tmp->pin(0));
|
||||||
|
|
@ -919,7 +926,8 @@ NetNet* PEBinary::elaborate_net_shift_(Design*des, const string&path,
|
||||||
|
|
||||||
if (op_ == 'r') {
|
if (op_ == 'r') {
|
||||||
NetTmp*tmp = new NetTmp(scope, des->local_symbol(path));
|
NetTmp*tmp = new NetTmp(scope, des->local_symbol(path));
|
||||||
NetConst*dir = new NetConst(des->local_symbol(path), verinum::V1);
|
NetConst*dir = new NetConst(scope, des->local_symbol(path),
|
||||||
|
verinum::V1);
|
||||||
connect(dir->pin(0), gate->pin_Direction());
|
connect(dir->pin(0), gate->pin_Direction());
|
||||||
connect(tmp->pin(0), gate->pin_Direction());
|
connect(tmp->pin(0), gate->pin_Direction());
|
||||||
des->add_node(dir);
|
des->add_node(dir);
|
||||||
|
|
@ -1063,7 +1071,8 @@ NetNet* PEIdent::elaborate_net(Design*des, const string&path,
|
||||||
verinum pvalue = pc->value();
|
verinum pvalue = pc->value();
|
||||||
sig = new NetNet(scope, path+"."+text_, NetNet::IMPLICIT,
|
sig = new NetNet(scope, path+"."+text_, NetNet::IMPLICIT,
|
||||||
pc->expr_width());
|
pc->expr_width());
|
||||||
NetConst*cp = new NetConst(des->local_symbol(path), pvalue);
|
NetConst*cp = new NetConst(scope, des->local_symbol(path),
|
||||||
|
pvalue);
|
||||||
des->add_node(cp);
|
des->add_node(cp);
|
||||||
for (unsigned idx = 0; idx < sig->pin_count(); idx += 1)
|
for (unsigned idx = 0; idx < sig->pin_count(); idx += 1)
|
||||||
connect(sig->pin(idx), cp->pin(idx));
|
connect(sig->pin(idx), cp->pin(idx));
|
||||||
|
|
@ -1207,7 +1216,7 @@ NetNet* PEIdent::elaborate_net_ram_(Design*des, const string&path,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
||||||
NetRamDq*ram = new NetRamDq(des->local_symbol(mem->name()),
|
NetRamDq*ram = new NetRamDq(scope, des->local_symbol(mem->name()),
|
||||||
mem, adr->pin_count());
|
mem, adr->pin_count());
|
||||||
des->add_node(ram);
|
des->add_node(ram);
|
||||||
|
|
||||||
|
|
@ -1480,7 +1489,8 @@ NetNet* PENumber::elaborate_net(Design*des, const string&path,
|
||||||
for (idx = 0 ; idx < num.len() && idx < value_->len(); idx += 1)
|
for (idx = 0 ; idx < num.len() && idx < value_->len(); idx += 1)
|
||||||
num.set(idx, value_->get(idx));
|
num.set(idx, value_->get(idx));
|
||||||
|
|
||||||
NetConst*tmp = new NetConst(des->local_symbol(path), num);
|
NetConst*tmp = new NetConst(scope, des->local_symbol(path),
|
||||||
|
num);
|
||||||
for (idx = 0 ; idx < net->pin_count() ; idx += 1) {
|
for (idx = 0 ; idx < net->pin_count() ; idx += 1) {
|
||||||
tmp->pin(idx).drive0(drive0);
|
tmp->pin(idx).drive0(drive0);
|
||||||
tmp->pin(idx).drive1(drive1);
|
tmp->pin(idx).drive1(drive1);
|
||||||
|
|
@ -1498,7 +1508,8 @@ NetNet* PENumber::elaborate_net(Design*des, const string&path,
|
||||||
NetNet*net = new NetNet(scope, des->local_symbol(path),
|
NetNet*net = new NetNet(scope, des->local_symbol(path),
|
||||||
NetNet::IMPLICIT, value_->len());
|
NetNet::IMPLICIT, value_->len());
|
||||||
net->local_flag(true);
|
net->local_flag(true);
|
||||||
NetConst*tmp = new NetConst(des->local_symbol(path), *value_);
|
NetConst*tmp = new NetConst(scope, des->local_symbol(path),
|
||||||
|
*value_);
|
||||||
for (unsigned idx = 0 ; idx < value_->len() ; idx += 1)
|
for (unsigned idx = 0 ; idx < value_->len() ; idx += 1)
|
||||||
connect(net->pin(idx), tmp->pin(idx));
|
connect(net->pin(idx), tmp->pin(idx));
|
||||||
|
|
||||||
|
|
@ -1506,15 +1517,6 @@ NetNet* PENumber::elaborate_net(Design*des, const string&path,
|
||||||
return net;
|
return net;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* This warning is trying to catch the cases where an unsized
|
|
||||||
integer in a netlist causes the netlist to explode in width
|
|
||||||
even when it need not. This proved to be spurious and
|
|
||||||
caused lots of false alarms, so it is commented out. */
|
|
||||||
cerr << get_line() << ": warning: Number with indefinite size "
|
|
||||||
<< "in self-determined context." << endl;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* None of the above tight constraints are present, so make a
|
/* None of the above tight constraints are present, so make a
|
||||||
plausible choice for the width. Try to reduce the width as
|
plausible choice for the width. Try to reduce the width as
|
||||||
much as possible by eliminating high zeros of unsigned
|
much as possible by eliminating high zeros of unsigned
|
||||||
|
|
@ -1543,7 +1545,7 @@ NetNet* PENumber::elaborate_net(Design*des, const string&path,
|
||||||
NetNet*net = new NetNet(scope, des->local_symbol(path),
|
NetNet*net = new NetNet(scope, des->local_symbol(path),
|
||||||
NetNet::IMPLICIT, width);
|
NetNet::IMPLICIT, width);
|
||||||
net->local_flag(true);
|
net->local_flag(true);
|
||||||
NetConst*tmp = new NetConst(des->local_symbol(path), num);
|
NetConst*tmp = new NetConst(scope, des->local_symbol(path), num);
|
||||||
for (unsigned idx = 0 ; idx < width ; idx += 1)
|
for (unsigned idx = 0 ; idx < width ; idx += 1)
|
||||||
connect(net->pin(idx), tmp->pin(idx));
|
connect(net->pin(idx), tmp->pin(idx));
|
||||||
|
|
||||||
|
|
@ -1663,7 +1665,7 @@ NetNet* PETernary::elaborate_net(Design*des, const string&path,
|
||||||
|
|
||||||
if (dwidth < width) {
|
if (dwidth < width) {
|
||||||
verinum vpad (verinum::V0, width-dwidth);
|
verinum vpad (verinum::V0, width-dwidth);
|
||||||
NetConst*pad = new NetConst(des->local_symbol(path), vpad);
|
NetConst*pad = new NetConst(scope, des->local_symbol(path), vpad);
|
||||||
des->add_node(pad);
|
des->add_node(pad);
|
||||||
for (unsigned idx = dwidth ; idx < width ; idx += 1)
|
for (unsigned idx = dwidth ; idx < width ; idx += 1)
|
||||||
connect(sig->pin(idx), pad->pin(idx-dwidth));
|
connect(sig->pin(idx), pad->pin(idx-dwidth));
|
||||||
|
|
@ -1711,7 +1713,7 @@ NetNet* PEUnary::elaborate_net(Design*des, const string&path,
|
||||||
sig->local_flag(true);
|
sig->local_flag(true);
|
||||||
|
|
||||||
verinum tmp(v_not(*val) + verinum(1UL, width), width);
|
verinum tmp(v_not(*val) + verinum(1UL, width), width);
|
||||||
NetConst*con = new NetConst(des->local_symbol(path), tmp);
|
NetConst*con = new NetConst(scope, des->local_symbol(path), tmp);
|
||||||
for (unsigned idx = 0 ; idx < width ; idx += 1)
|
for (unsigned idx = 0 ; idx < width ; idx += 1)
|
||||||
connect(sig->pin(idx), con->pin(idx));
|
connect(sig->pin(idx), con->pin(idx));
|
||||||
|
|
||||||
|
|
@ -1897,6 +1899,9 @@ NetNet* PEUnary::elaborate_net(Design*des, const string&path,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: elab_net.cc,v $
|
* $Log: elab_net.cc,v $
|
||||||
|
* Revision 1.77 2001/10/28 01:14:53 steve
|
||||||
|
* NetObj constructor finally requires a scope.
|
||||||
|
*
|
||||||
* Revision 1.76 2001/10/16 02:19:26 steve
|
* Revision 1.76 2001/10/16 02:19:26 steve
|
||||||
* Support IVL_LPM_DIVIDE for structural divide.
|
* Support IVL_LPM_DIVIDE for structural divide.
|
||||||
*
|
*
|
||||||
|
|
@ -2024,143 +2029,5 @@ NetNet* PEUnary::elaborate_net(Design*des, const string&path,
|
||||||
* Module ports are really special PEIdent
|
* Module ports are really special PEIdent
|
||||||
* expressions, because a name can be used
|
* expressions, because a name can be used
|
||||||
* many places in the port list.
|
* many places in the port list.
|
||||||
*
|
|
||||||
* Revision 1.36 2000/05/07 20:48:14 steve
|
|
||||||
* Properly elaborate repeat concatenations.
|
|
||||||
*
|
|
||||||
* Revision 1.35 2000/05/07 19:40:26 steve
|
|
||||||
* Fix connection of Direction of LMP_CLSHIFT
|
|
||||||
* to constant values. Remember to add a signal
|
|
||||||
* to the nexus and connect the receiver in vvm.
|
|
||||||
*
|
|
||||||
* Revision 1.34 2000/05/07 04:37:56 steve
|
|
||||||
* Carry strength values from Verilog source to the
|
|
||||||
* pform and netlist for gates.
|
|
||||||
*
|
|
||||||
* Change vvm constants to use the driver_t to drive
|
|
||||||
* a constant value. This works better if there are
|
|
||||||
* multiple drivers on a signal.
|
|
||||||
*
|
|
||||||
* Revision 1.33 2000/05/03 21:21:36 steve
|
|
||||||
* Allow ternary result to be padded to result width.
|
|
||||||
*
|
|
||||||
* Revision 1.32 2000/05/02 03:13:31 steve
|
|
||||||
* Move memories to the NetScope object.
|
|
||||||
*
|
|
||||||
* Revision 1.31 2000/05/02 00:58:11 steve
|
|
||||||
* Move signal tables to the NetScope class.
|
|
||||||
*
|
|
||||||
* Revision 1.30 2000/04/28 21:00:29 steve
|
|
||||||
* Over agressive signal elimination in constant probadation.
|
|
||||||
*
|
|
||||||
* Revision 1.29 2000/04/01 21:40:22 steve
|
|
||||||
* Add support for integer division.
|
|
||||||
*
|
|
||||||
* Revision 1.28 2000/03/27 04:38:15 steve
|
|
||||||
* Speling error.
|
|
||||||
*
|
|
||||||
* Revision 1.27 2000/03/20 17:54:10 steve
|
|
||||||
* Remove dangerous tmp signal delete.
|
|
||||||
*
|
|
||||||
* Revision 1.26 2000/03/17 21:50:25 steve
|
|
||||||
* Switch to control warnings.
|
|
||||||
*
|
|
||||||
* Revision 1.25 2000/03/16 19:03:03 steve
|
|
||||||
* Revise the VVM backend to use nexus objects so that
|
|
||||||
* drivers and resolution functions can be used, and
|
|
||||||
* the t-vvm module doesn't need to write a zillion
|
|
||||||
* output functions.
|
|
||||||
*
|
|
||||||
* Revision 1.24 2000/03/08 04:36:53 steve
|
|
||||||
* Redesign the implementation of scopes and parameters.
|
|
||||||
* I now generate the scopes and notice the parameters
|
|
||||||
* in a separate pass over the pform. Once the scopes
|
|
||||||
* are generated, I can process overrides and evalutate
|
|
||||||
* paremeters before elaboration begins.
|
|
||||||
*
|
|
||||||
* Revision 1.23 2000/02/23 02:56:54 steve
|
|
||||||
* Macintosh compilers do not support ident.
|
|
||||||
*
|
|
||||||
* Revision 1.22 2000/02/16 03:58:27 steve
|
|
||||||
* Fix up width matching in structural bitwise operators.
|
|
||||||
*
|
|
||||||
* Revision 1.21 2000/02/14 06:04:52 steve
|
|
||||||
* Unary reduction operators do not set their operand width
|
|
||||||
*
|
|
||||||
* Revision 1.20 2000/01/18 04:53:40 steve
|
|
||||||
* Support structural XNOR.
|
|
||||||
*
|
|
||||||
* Revision 1.19 2000/01/13 03:35:35 steve
|
|
||||||
* Multiplication all the way to simulation.
|
|
||||||
*
|
|
||||||
* Revision 1.18 2000/01/11 04:20:57 steve
|
|
||||||
* Elaborate net widths of constants to as small
|
|
||||||
* as is possible, obeying context constraints.
|
|
||||||
*
|
|
||||||
* Comparison operators can handle operands with
|
|
||||||
* different widths.
|
|
||||||
*
|
|
||||||
* Revision 1.17 2000/01/02 22:07:09 steve
|
|
||||||
* Add a signal to nexus of padding constant.
|
|
||||||
*
|
|
||||||
* Revision 1.16 2000/01/02 21:45:31 steve
|
|
||||||
* Add structural reduction NAND,
|
|
||||||
* Fix size coercion of structural shifts.
|
|
||||||
*
|
|
||||||
* Revision 1.15 2000/01/02 19:39:03 steve
|
|
||||||
* Structural reduction XNOR.
|
|
||||||
*
|
|
||||||
* Revision 1.14 1999/12/17 03:38:46 steve
|
|
||||||
* NetConst can now hold wide constants.
|
|
||||||
*
|
|
||||||
* Revision 1.13 1999/12/16 03:46:39 steve
|
|
||||||
* Structural logical or.
|
|
||||||
*
|
|
||||||
* Revision 1.12 1999/12/16 02:42:14 steve
|
|
||||||
* Simulate carry output on adders.
|
|
||||||
*
|
|
||||||
* Revision 1.11 1999/12/02 04:08:10 steve
|
|
||||||
* Elaborate net repeat concatenations.
|
|
||||||
*
|
|
||||||
* Revision 1.10 1999/11/30 04:33:41 steve
|
|
||||||
* Put implicitly defined signals in the scope.
|
|
||||||
*
|
|
||||||
* Revision 1.9 1999/11/27 19:07:57 steve
|
|
||||||
* Support the creation of scopes.
|
|
||||||
*
|
|
||||||
* Revision 1.8 1999/11/21 17:35:37 steve
|
|
||||||
* Memory name lookup handles scopes.
|
|
||||||
*
|
|
||||||
* Revision 1.7 1999/11/21 00:13:08 steve
|
|
||||||
* Support memories in continuous assignments.
|
|
||||||
*
|
|
||||||
* Revision 1.6 1999/11/14 23:43:45 steve
|
|
||||||
* Support combinatorial comparators.
|
|
||||||
*
|
|
||||||
* Revision 1.5 1999/11/14 20:24:28 steve
|
|
||||||
* Add support for the LPM_CLSHIFT device.
|
|
||||||
*
|
|
||||||
* Revision 1.4 1999/11/05 23:36:31 steve
|
|
||||||
* Forgot to return the mux for use after elaboration.
|
|
||||||
*
|
|
||||||
* Revision 1.3 1999/11/05 21:45:19 steve
|
|
||||||
* Fix NetConst being set to zero width, and clean
|
|
||||||
* up elaborate_set_cmp_ for NetEBinary.
|
|
||||||
*
|
|
||||||
* Revision 1.2 1999/11/04 03:53:26 steve
|
|
||||||
* Patch to synthesize unary ~ and the ternary operator.
|
|
||||||
* Thanks to Larry Doolittle <LRDoolittle@lbl.gov>.
|
|
||||||
*
|
|
||||||
* Add the LPM_MUX device, and integrate it with the
|
|
||||||
* ternary synthesis from Larry. Replace the lpm_mux
|
|
||||||
* generator in t-xnf.cc to use XNF EQU devices to
|
|
||||||
* put muxs into function units.
|
|
||||||
*
|
|
||||||
* Rewrite elaborate_net for the PETernary class to
|
|
||||||
* also use the LPM_MUX device.
|
|
||||||
*
|
|
||||||
* Revision 1.1 1999/10/31 20:08:24 steve
|
|
||||||
* Include subtraction in LPM_ADD_SUB device.
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
||||||
24
elaborate.cc
24
elaborate.cc
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: elaborate.cc,v 1.226 2001/10/22 23:26:37 steve Exp $"
|
#ident "$Id: elaborate.cc,v 1.227 2001/10/28 01:14:53 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -128,7 +128,8 @@ void PGAssign::elaborate(Design*des, const string&path) const
|
||||||
|
|
||||||
if (cnt < lval->pin_count()) {
|
if (cnt < lval->pin_count()) {
|
||||||
verinum tmpv (0UL, lval->pin_count()-cnt);
|
verinum tmpv (0UL, lval->pin_count()-cnt);
|
||||||
NetConst*tmp = new NetConst(des->local_symbol(path),
|
NetConst*tmp = new NetConst(scope,
|
||||||
|
des->local_symbol(path),
|
||||||
tmpv);
|
tmpv);
|
||||||
des->add_node(tmp);
|
des->add_node(tmp);
|
||||||
for (idx = cnt ; idx < lval->pin_count() ; idx += 1)
|
for (idx = cnt ; idx < lval->pin_count() ; idx += 1)
|
||||||
|
|
@ -151,7 +152,8 @@ void PGAssign::elaborate(Design*des, const string&path) const
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cnt < lval->pin_count()) {
|
if (cnt < lval->pin_count()) {
|
||||||
NetConst*dev = new NetConst(des->local_symbol(path),
|
NetConst*dev = new NetConst(scope,
|
||||||
|
des->local_symbol(path),
|
||||||
verinum::V0);
|
verinum::V0);
|
||||||
|
|
||||||
des->add_node(dev);
|
des->add_node(dev);
|
||||||
|
|
@ -1511,7 +1513,7 @@ NetCAssign* PCAssign::elaborate(Design*des, const string&path) const
|
||||||
if (rval->pin_count() < lval->pin_count())
|
if (rval->pin_count() < lval->pin_count())
|
||||||
rval = pad_to_width(des, rval, lval->pin_count());
|
rval = pad_to_width(des, rval, lval->pin_count());
|
||||||
|
|
||||||
NetCAssign* dev = new NetCAssign(des->local_symbol(path), lval);
|
NetCAssign* dev = new NetCAssign(scope, des->local_symbol(path), lval);
|
||||||
dev->set_line(*this);
|
dev->set_line(*this);
|
||||||
des->add_node(dev);
|
des->add_node(dev);
|
||||||
|
|
||||||
|
|
@ -1762,7 +1764,8 @@ NetProc* PEventStatement::elaborate_st(Design*des, const string&path,
|
||||||
NetEvWait*we = new NetEvWait(0);
|
NetEvWait*we = new NetEvWait(0);
|
||||||
we->add_event(ev);
|
we->add_event(ev);
|
||||||
|
|
||||||
NetEvProbe*po = new NetEvProbe(path+"."+scope->local_symbol(),
|
NetEvProbe*po = new NetEvProbe(scope,
|
||||||
|
path+"."+scope->local_symbol(),
|
||||||
ev, NetEvProbe::POSEDGE, 1);
|
ev, NetEvProbe::POSEDGE, 1);
|
||||||
connect(po->pin(0), ex->pin(0));
|
connect(po->pin(0), ex->pin(0));
|
||||||
|
|
||||||
|
|
@ -1856,17 +1859,17 @@ NetProc* PEventStatement::elaborate_st(Design*des, const string&path,
|
||||||
NetEvProbe*pr;
|
NetEvProbe*pr;
|
||||||
switch (expr_[idx]->type()) {
|
switch (expr_[idx]->type()) {
|
||||||
case PEEvent::POSEDGE:
|
case PEEvent::POSEDGE:
|
||||||
pr = new NetEvProbe(des->local_symbol(path), ev,
|
pr = new NetEvProbe(scope, des->local_symbol(path), ev,
|
||||||
NetEvProbe::POSEDGE, pins);
|
NetEvProbe::POSEDGE, pins);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PEEvent::NEGEDGE:
|
case PEEvent::NEGEDGE:
|
||||||
pr = new NetEvProbe(des->local_symbol(path), ev,
|
pr = new NetEvProbe(scope, des->local_symbol(path), ev,
|
||||||
NetEvProbe::NEGEDGE, pins);
|
NetEvProbe::NEGEDGE, pins);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PEEvent::ANYEDGE:
|
case PEEvent::ANYEDGE:
|
||||||
pr = new NetEvProbe(des->local_symbol(path), ev,
|
pr = new NetEvProbe(scope, des->local_symbol(path), ev,
|
||||||
NetEvProbe::ANYEDGE, pins);
|
NetEvProbe::ANYEDGE, pins);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -1945,7 +1948,7 @@ NetProc* PForce::elaborate(Design*des, const string&path) const
|
||||||
if (rval->pin_count() < lval->pin_count())
|
if (rval->pin_count() < lval->pin_count())
|
||||||
rval = pad_to_width(des, rval, lval->pin_count());
|
rval = pad_to_width(des, rval, lval->pin_count());
|
||||||
|
|
||||||
NetForce* dev = new NetForce(des->local_symbol(path), lval);
|
NetForce* dev = new NetForce(scope, des->local_symbol(path), lval);
|
||||||
des->add_node(dev);
|
des->add_node(dev);
|
||||||
|
|
||||||
for (unsigned idx = 0 ; idx < dev->pin_count() ; idx += 1)
|
for (unsigned idx = 0 ; idx < dev->pin_count() ; idx += 1)
|
||||||
|
|
@ -2401,6 +2404,9 @@ Design* elaborate(list<const char*>roots)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: elaborate.cc,v $
|
* $Log: elaborate.cc,v $
|
||||||
|
* Revision 1.227 2001/10/28 01:14:53 steve
|
||||||
|
* NetObj constructor finally requires a scope.
|
||||||
|
*
|
||||||
* Revision 1.226 2001/10/22 23:26:37 steve
|
* Revision 1.226 2001/10/22 23:26:37 steve
|
||||||
* Better error message for mising root module.
|
* Better error message for mising root module.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: expr_synth.cc,v 1.27 2001/10/20 05:21:51 steve Exp $"
|
#ident "$Id: expr_synth.cc,v 1.28 2001/10/28 01:14:53 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -396,7 +396,7 @@ NetNet* NetEConst::synthesize(Design*des)
|
||||||
|
|
||||||
NetNet*osig = new NetNet(scope, path, NetNet::IMPLICIT, width);
|
NetNet*osig = new NetNet(scope, path, NetNet::IMPLICIT, width);
|
||||||
osig->local_flag(true);
|
osig->local_flag(true);
|
||||||
NetConst*con = new NetConst(des->local_symbol(path), value());
|
NetConst*con = new NetConst(scope, des->local_symbol(path), value());
|
||||||
for (unsigned idx = 0 ; idx < width; idx += 1)
|
for (unsigned idx = 0 ; idx < width; idx += 1)
|
||||||
connect(osig->pin(idx), con->pin(idx));
|
connect(osig->pin(idx), con->pin(idx));
|
||||||
|
|
||||||
|
|
@ -562,6 +562,9 @@ NetNet* NetESignal::synthesize(Design*des)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: expr_synth.cc,v $
|
* $Log: expr_synth.cc,v $
|
||||||
|
* Revision 1.28 2001/10/28 01:14:53 steve
|
||||||
|
* NetObj constructor finally requires a scope.
|
||||||
|
*
|
||||||
* Revision 1.27 2001/10/20 05:21:51 steve
|
* Revision 1.27 2001/10/20 05:21:51 steve
|
||||||
* Scope/module names are char* instead of string.
|
* Scope/module names are char* instead of string.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: net_event.cc,v 1.15 2001/07/25 03:10:49 steve Exp $"
|
#ident "$Id: net_event.cc,v 1.16 2001/10/28 01:14:53 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -283,9 +283,9 @@ const NetEvent* NetEvTrig::event() const
|
||||||
return event_;
|
return event_;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetEvProbe::NetEvProbe(const string&n, NetEvent*tgt,
|
NetEvProbe::NetEvProbe(NetScope*s, const string&n, NetEvent*tgt,
|
||||||
edge_t t, unsigned p)
|
edge_t t, unsigned p)
|
||||||
: NetNode(n, p), event_(tgt), edge_(t)
|
: NetNode(s, n, p), event_(tgt), edge_(t)
|
||||||
{
|
{
|
||||||
for (unsigned idx = 0 ; idx < p ; idx += 1) {
|
for (unsigned idx = 0 ; idx < p ; idx += 1) {
|
||||||
pin(idx).set_dir(Link::INPUT);
|
pin(idx).set_dir(Link::INPUT);
|
||||||
|
|
@ -451,6 +451,9 @@ NetProc* NetEvWait::statement()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: net_event.cc,v $
|
* $Log: net_event.cc,v $
|
||||||
|
* Revision 1.16 2001/10/28 01:14:53 steve
|
||||||
|
* NetObj constructor finally requires a scope.
|
||||||
|
*
|
||||||
* Revision 1.15 2001/07/25 03:10:49 steve
|
* Revision 1.15 2001/07/25 03:10:49 steve
|
||||||
* Create a config.h.in file to hold all the config
|
* Create a config.h.in file to hold all the config
|
||||||
* junk, and support gcc 3.0. (Stephan Boettcher)
|
* junk, and support gcc 3.0. (Stephan Boettcher)
|
||||||
|
|
|
||||||
13
net_force.cc
13
net_force.cc
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: net_force.cc,v 1.3 2001/07/25 03:10:49 steve Exp $"
|
#ident "$Id: net_force.cc,v 1.4 2001/10/28 01:14:53 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -44,8 +44,8 @@
|
||||||
* output pins to connect to the netlist? But that would cause the
|
* output pins to connect to the netlist? But that would cause the
|
||||||
* link ring to grow, and that is not quite correct either. Hmm...
|
* link ring to grow, and that is not quite correct either. Hmm...
|
||||||
*/
|
*/
|
||||||
NetCAssign::NetCAssign(const string&n, NetNet*l)
|
NetCAssign::NetCAssign(NetScope*s, const string&n, NetNet*l)
|
||||||
: NetNode(n, l->pin_count()), lval_(l)
|
: NetNode(s, n, l->pin_count()), lval_(l)
|
||||||
{
|
{
|
||||||
lval_->incr_eref();
|
lval_->incr_eref();
|
||||||
for (unsigned idx = 0 ; idx < pin_count() ; idx += 1) {
|
for (unsigned idx = 0 ; idx < pin_count() ; idx += 1) {
|
||||||
|
|
@ -81,8 +81,8 @@ const NetNet*NetDeassign::lval() const
|
||||||
return lval_;
|
return lval_;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetForce::NetForce(const string&n, NetNet*l)
|
NetForce::NetForce(NetScope*s, const string&n, NetNet*l)
|
||||||
: NetNode(n, l->pin_count()), lval_(l)
|
: NetNode(s, n, l->pin_count()), lval_(l)
|
||||||
{
|
{
|
||||||
for (unsigned idx = 0 ; idx < pin_count() ; idx += 1) {
|
for (unsigned idx = 0 ; idx < pin_count() ; idx += 1) {
|
||||||
pin(idx).set_dir(Link::INPUT);
|
pin(idx).set_dir(Link::INPUT);
|
||||||
|
|
@ -117,6 +117,9 @@ const NetNet*NetRelease::lval() const
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: net_force.cc,v $
|
* $Log: net_force.cc,v $
|
||||||
|
* Revision 1.4 2001/10/28 01:14:53 steve
|
||||||
|
* NetObj constructor finally requires a scope.
|
||||||
|
*
|
||||||
* Revision 1.3 2001/07/25 03:10:49 steve
|
* Revision 1.3 2001/07/25 03:10:49 steve
|
||||||
* Create a config.h.in file to hold all the config
|
* Create a config.h.in file to hold all the config
|
||||||
* junk, and support gcc 3.0. (Stephan Boettcher)
|
* junk, and support gcc 3.0. (Stephan Boettcher)
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: net_modulo.cc,v 1.2 2001/07/25 03:10:49 steve Exp $"
|
#ident "$Id: net_modulo.cc,v 1.3 2001/10/28 01:14:53 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -30,9 +30,9 @@
|
||||||
# include "netlist.h"
|
# include "netlist.h"
|
||||||
|
|
||||||
|
|
||||||
NetModulo::NetModulo(const string&n, unsigned wr,
|
NetModulo::NetModulo(NetScope*s, const string&n, unsigned wr,
|
||||||
unsigned wa, unsigned wb)
|
unsigned wa, unsigned wb)
|
||||||
: NetNode(n, wr+wa+wb), width_r_(wr), width_a_(wa), width_b_(wb)
|
: NetNode(s, n, wr+wa+wb), width_r_(wr), width_a_(wa), width_b_(wb)
|
||||||
{
|
{
|
||||||
unsigned p = 0;
|
unsigned p = 0;
|
||||||
for (unsigned idx = 0 ; idx < width_r_ ; idx += 1, p += 1) {
|
for (unsigned idx = 0 ; idx < width_r_ ; idx += 1, p += 1) {
|
||||||
|
|
|
||||||
39
netlist.cc
39
netlist.cc
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: netlist.cc,v 1.173 2001/10/16 02:19:27 steve Exp $"
|
#ident "$Id: netlist.cc,v 1.174 2001/10/28 01:14:53 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -163,19 +163,6 @@ Link* find_next_output(Link*lnk)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetObj::NetObj(const string&n, unsigned np)
|
|
||||||
: scope_(0), 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 string&n, unsigned np)
|
NetObj::NetObj(NetScope*s, const string&n, unsigned np)
|
||||||
: scope_(s), npins_(np), delay1_(0), delay2_(0), delay3_(0)
|
: scope_(s), npins_(np), delay1_(0), delay2_(0), delay3_(0)
|
||||||
{
|
{
|
||||||
|
|
@ -266,11 +253,6 @@ const Link& NetObj::pin(unsigned idx) const
|
||||||
return pins_[idx];
|
return pins_[idx];
|
||||||
}
|
}
|
||||||
|
|
||||||
NetNode::NetNode(const string&n, unsigned npins)
|
|
||||||
: NetObj(n, npins), node_next_(0), node_prev_(0), design_(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
NetNode::NetNode(NetScope*s, const string&n, unsigned npins)
|
NetNode::NetNode(NetScope*s, const string&n, unsigned npins)
|
||||||
: NetObj(s, n, npins), node_next_(0), node_prev_(0), design_(0)
|
: NetObj(s, n, npins), node_next_(0), node_prev_(0), design_(0)
|
||||||
{
|
{
|
||||||
|
|
@ -1277,8 +1259,8 @@ const Link& NetMux::pin_Data(unsigned w, unsigned s) const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NetRamDq::NetRamDq(const string&n, NetMemory*mem, unsigned awid)
|
NetRamDq::NetRamDq(NetScope*s, const string&n, NetMemory*mem, unsigned awid)
|
||||||
: NetNode(n, 3+2*mem->width()+awid), mem_(mem), awidth_(awid)
|
: NetNode(s, n, 3+2*mem->width()+awid), mem_(mem), awidth_(awid)
|
||||||
{
|
{
|
||||||
pin(0).set_dir(Link::INPUT); pin(0).set_name("InClock", 0);
|
pin(0).set_dir(Link::INPUT); pin(0).set_name("InClock", 0);
|
||||||
pin(1).set_dir(Link::INPUT); pin(1).set_name("OutClock", 0);
|
pin(1).set_dir(Link::INPUT); pin(1).set_name("OutClock", 0);
|
||||||
|
|
@ -1589,8 +1571,8 @@ void NetCase::set_case(unsigned idx, NetExpr*e, NetProc*p)
|
||||||
items_[idx].guard->set_width(expr_->expr_width());
|
items_[idx].guard->set_width(expr_->expr_width());
|
||||||
}
|
}
|
||||||
|
|
||||||
NetCaseCmp::NetCaseCmp(const string&n)
|
NetCaseCmp::NetCaseCmp(NetScope*s, const string&n)
|
||||||
: NetNode(n, 3)
|
: NetNode(s, n, 3)
|
||||||
{
|
{
|
||||||
pin(0).set_dir(Link::OUTPUT); pin(0).set_name("O",0);
|
pin(0).set_dir(Link::OUTPUT); pin(0).set_name("O",0);
|
||||||
pin(1).set_dir(Link::INPUT); pin(1).set_name("I",0);
|
pin(1).set_dir(Link::INPUT); pin(1).set_name("I",0);
|
||||||
|
|
@ -1639,8 +1621,8 @@ NetProc* NetCondit::else_clause()
|
||||||
return else_;
|
return else_;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetConst::NetConst(const string&n, verinum::V v)
|
NetConst::NetConst(NetScope*s, const string&n, verinum::V v)
|
||||||
: NetNode(n, 1)
|
: NetNode(s, n, 1)
|
||||||
{
|
{
|
||||||
pin(0).set_dir(Link::OUTPUT);
|
pin(0).set_dir(Link::OUTPUT);
|
||||||
pin(0).set_name("O", 0);
|
pin(0).set_name("O", 0);
|
||||||
|
|
@ -1648,8 +1630,8 @@ NetConst::NetConst(const string&n, verinum::V v)
|
||||||
value_[0] = v;
|
value_[0] = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetConst::NetConst(const string&n, const verinum&val)
|
NetConst::NetConst(NetScope*s, const string&n, const verinum&val)
|
||||||
: NetNode(n, val.len())
|
: NetNode(s, n, val.len())
|
||||||
{
|
{
|
||||||
value_ = new verinum::V[pin_count()];
|
value_ = new verinum::V[pin_count()];
|
||||||
for (unsigned idx = 0 ; idx < pin_count() ; idx += 1) {
|
for (unsigned idx = 0 ; idx < pin_count() ; idx += 1) {
|
||||||
|
|
@ -2429,6 +2411,9 @@ const NetProc*NetTaskDef::proc() const
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: netlist.cc,v $
|
* $Log: netlist.cc,v $
|
||||||
|
* Revision 1.174 2001/10/28 01:14:53 steve
|
||||||
|
* NetObj constructor finally requires a scope.
|
||||||
|
*
|
||||||
* Revision 1.173 2001/10/16 02:19:27 steve
|
* Revision 1.173 2001/10/16 02:19:27 steve
|
||||||
* Support IVL_LPM_DIVIDE for structural divide.
|
* Support IVL_LPM_DIVIDE for structural divide.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
26
netlist.h
26
netlist.h
|
|
@ -19,7 +19,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: netlist.h,v 1.218 2001/10/20 05:21:51 steve Exp $"
|
#ident "$Id: netlist.h,v 1.219 2001/10/28 01:14:53 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -80,7 +80,6 @@ class NetObj {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
public:
|
public:
|
||||||
explicit NetObj(const string&n, unsigned npins);
|
|
||||||
explicit NetObj(NetScope*s, const string&n, unsigned npins);
|
explicit NetObj(NetScope*s, const string&n, unsigned npins);
|
||||||
explicit NetObj(NetScope*s, const char*n, unsigned npins);
|
explicit NetObj(NetScope*s, const char*n, unsigned npins);
|
||||||
virtual ~NetObj();
|
virtual ~NetObj();
|
||||||
|
|
@ -284,7 +283,6 @@ class NetNode : public NetObj {
|
||||||
public:
|
public:
|
||||||
explicit NetNode(NetScope*s, const string&n, unsigned npins);
|
explicit NetNode(NetScope*s, const string&n, unsigned npins);
|
||||||
explicit NetNode(NetScope*s, const char*n, unsigned npins);
|
explicit NetNode(NetScope*s, const char*n, unsigned npins);
|
||||||
explicit NetNode(const string&n, unsigned npins);
|
|
||||||
|
|
||||||
virtual ~NetNode();
|
virtual ~NetNode();
|
||||||
|
|
||||||
|
|
@ -563,7 +561,8 @@ class NetDivide : public NetNode {
|
||||||
class NetModulo : public NetNode {
|
class NetModulo : public NetNode {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NetModulo(const string&n, unsigned width, unsigned wa, unsigned wb);
|
NetModulo(NetScope*s, const string&n,
|
||||||
|
unsigned width, unsigned wa, unsigned wb);
|
||||||
~NetModulo();
|
~NetModulo();
|
||||||
|
|
||||||
unsigned width_r() const;
|
unsigned width_r() const;
|
||||||
|
|
@ -776,7 +775,7 @@ class NetMux : public NetNode {
|
||||||
class NetRamDq : public NetNode {
|
class NetRamDq : public NetNode {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NetRamDq(const string&name, NetMemory*mem, unsigned awid);
|
NetRamDq(NetScope*s, const string&name, NetMemory*mem, unsigned awid);
|
||||||
~NetRamDq();
|
~NetRamDq();
|
||||||
|
|
||||||
unsigned width() const;
|
unsigned width() const;
|
||||||
|
|
@ -959,7 +958,7 @@ class NetBUFZ : public NetNode {
|
||||||
class NetCaseCmp : public NetNode {
|
class NetCaseCmp : public NetNode {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit NetCaseCmp(const string&n);
|
explicit NetCaseCmp(NetScope*s, const string&n);
|
||||||
~NetCaseCmp();
|
~NetCaseCmp();
|
||||||
|
|
||||||
virtual void dump_node(ostream&, unsigned ind) const;
|
virtual void dump_node(ostream&, unsigned ind) const;
|
||||||
|
|
@ -977,8 +976,8 @@ class NetCaseCmp : public NetNode {
|
||||||
class NetConst : public NetNode {
|
class NetConst : public NetNode {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit NetConst(const string&n, verinum::V v);
|
explicit NetConst(NetScope*s, const string&n, verinum::V v);
|
||||||
explicit NetConst(const string&n, const verinum&val);
|
explicit NetConst(NetScope*s, const string&n, const verinum&val);
|
||||||
~NetConst();
|
~NetConst();
|
||||||
|
|
||||||
verinum::V value(unsigned idx) const;
|
verinum::V value(unsigned idx) const;
|
||||||
|
|
@ -1416,7 +1415,7 @@ class NetCase : public NetProc {
|
||||||
class NetCAssign : public NetProc, public NetNode {
|
class NetCAssign : public NetProc, public NetNode {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit NetCAssign(const string&n, NetNet*l);
|
explicit NetCAssign(NetScope*s, const string&n, NetNet*l);
|
||||||
~NetCAssign();
|
~NetCAssign();
|
||||||
|
|
||||||
const Link& lval_pin(unsigned) const;
|
const Link& lval_pin(unsigned) const;
|
||||||
|
|
@ -1661,8 +1660,8 @@ class NetEvProbe : public NetNode {
|
||||||
public:
|
public:
|
||||||
enum edge_t { ANYEDGE, POSEDGE, NEGEDGE };
|
enum edge_t { ANYEDGE, POSEDGE, NEGEDGE };
|
||||||
|
|
||||||
explicit NetEvProbe(const string&n, NetEvent*tgt,
|
explicit NetEvProbe(NetScope*s, const string&n,
|
||||||
edge_t t, unsigned p);
|
NetEvent*tgt, edge_t t, unsigned p);
|
||||||
~NetEvProbe();
|
~NetEvProbe();
|
||||||
|
|
||||||
edge_t edge() const;
|
edge_t edge() const;
|
||||||
|
|
@ -1692,7 +1691,7 @@ class NetEvProbe : public NetNode {
|
||||||
class NetForce : public NetProc, public NetNode {
|
class NetForce : public NetProc, public NetNode {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit NetForce(const string&n, NetNet*l);
|
explicit NetForce(NetScope*s, const string&n, NetNet*l);
|
||||||
~NetForce();
|
~NetForce();
|
||||||
|
|
||||||
const Link& lval_pin(unsigned) const;
|
const Link& lval_pin(unsigned) const;
|
||||||
|
|
@ -2850,6 +2849,9 @@ extern ostream& operator << (ostream&, NetNet::Type);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: netlist.h,v $
|
* $Log: netlist.h,v $
|
||||||
|
* Revision 1.219 2001/10/28 01:14:53 steve
|
||||||
|
* NetObj constructor finally requires a scope.
|
||||||
|
*
|
||||||
* Revision 1.218 2001/10/20 05:21:51 steve
|
* Revision 1.218 2001/10/20 05:21:51 steve
|
||||||
* Scope/module names are char* instead of string.
|
* Scope/module names are char* instead of string.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: pad_to_width.cc,v 1.8 2001/07/25 03:10:49 steve Exp $"
|
#ident "$Id: pad_to_width.cc,v 1.9 2001/10/28 01:14:53 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -57,7 +57,9 @@ NetNet*pad_to_width(Design*des, NetNet*net, unsigned wid)
|
||||||
return net;
|
return net;
|
||||||
|
|
||||||
verinum pad(verinum::V0, wid - net->pin_count());
|
verinum pad(verinum::V0, wid - net->pin_count());
|
||||||
NetConst*con = new NetConst(path + "." + scope->local_symbol(), pad);
|
NetConst*con = new NetConst(scope,
|
||||||
|
path + "." + scope->local_symbol(),
|
||||||
|
pad);
|
||||||
des->add_node(con);
|
des->add_node(con);
|
||||||
|
|
||||||
NetNet*tmp = new NetNet(scope, path + "." + scope->local_symbol(),
|
NetNet*tmp = new NetNet(scope, path + "." + scope->local_symbol(),
|
||||||
|
|
@ -74,6 +76,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.9 2001/10/28 01:14:53 steve
|
||||||
|
* NetObj constructor finally requires a scope.
|
||||||
|
*
|
||||||
* Revision 1.8 2001/07/25 03:10:49 steve
|
* Revision 1.8 2001/07/25 03:10:49 steve
|
||||||
* Create a config.h.in file to hold all the config
|
* Create a config.h.in file to hold all the config
|
||||||
* junk, and support gcc 3.0. (Stephan Boettcher)
|
* junk, and support gcc 3.0. (Stephan Boettcher)
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: syn-rules.y,v 1.14 2001/08/25 23:50:03 steve Exp $"
|
#ident "$Id: syn-rules.y,v 1.15 2001/10/28 01:14:53 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -178,14 +178,17 @@ static void make_RAM_CE(Design*des, NetProcTop*top, NetEvWait*wclk,
|
||||||
NetNet*adr = adr_e->synthesize(des);
|
NetNet*adr = adr_e->synthesize(des);
|
||||||
assert(adr);
|
assert(adr);
|
||||||
|
|
||||||
|
NetScope*scope = adr->scope();
|
||||||
|
assert(scope);
|
||||||
|
|
||||||
NetEvProbe*pclk = eclk->probe(0);
|
NetEvProbe*pclk = eclk->probe(0);
|
||||||
NetESignal*d = dynamic_cast<NetESignal*> (asn->rval());
|
NetESignal*d = dynamic_cast<NetESignal*> (asn->rval());
|
||||||
NetNet*ce = cexp? cexp->synthesize(des) : 0;
|
NetNet*ce = cexp? cexp->synthesize(des) : 0;
|
||||||
|
|
||||||
assert(d);
|
assert(d);
|
||||||
|
|
||||||
NetRamDq*ram = new NetRamDq(des->local_symbol(mem->name()), mem,
|
NetRamDq*ram = new NetRamDq(scope, des->local_symbol(mem->name()),
|
||||||
adr->pin_count());
|
mem, adr->pin_count());
|
||||||
|
|
||||||
for (unsigned idx = 0 ; idx < adr->pin_count() ; idx += 1)
|
for (unsigned idx = 0 ; idx < adr->pin_count() ; idx += 1)
|
||||||
connect(adr->pin(idx), ram->pin_Address(idx));
|
connect(adr->pin(idx), ram->pin_Address(idx));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue