Add the functor interface for functor transforms.
This commit is contained in:
parent
a5921ceae8
commit
9754507eb0
11
Makefile.in
11
Makefile.in
|
|
@ -18,7 +18,7 @@
|
||||||
# 59 Temple Place - Suite 330
|
# 59 Temple Place - Suite 330
|
||||||
# Boston, MA 02111-1307, USA
|
# Boston, MA 02111-1307, USA
|
||||||
#
|
#
|
||||||
#ident "$Id: Makefile.in,v 1.7 1999/07/03 20:50:28 steve Exp $"
|
#ident "$Id: Makefile.in,v 1.8 1999/07/17 22:01:13 steve Exp $"
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
SHELL = /bin/sh
|
SHELL = /bin/sh
|
||||||
|
|
@ -53,11 +53,12 @@ clean:
|
||||||
cd ivlpp ; make clean
|
cd ivlpp ; make clean
|
||||||
|
|
||||||
TT = t-null.o t-verilog.o t-vvm.o t-xnf.o
|
TT = t-null.o t-verilog.o t-vvm.o t-xnf.o
|
||||||
FF = nobufz.o propinit.o sigfold.o stupid.o xnfio.o
|
FF = nobufz.o propinit.o sigfold.o xnfio.o
|
||||||
|
|
||||||
O = main.o cprop.o design_dump.o elaborate.o emit.o eval.o lexor.o mangle.o \
|
O = main.o cprop.o design_dump.o elaborate.o emit.o eval.o functor.o \
|
||||||
netlist.o parse.o parse_misc.o pform.o pform_dump.o verinum.o verireal.o \
|
lexor.o mangle.o netlist.o parse.o parse_misc.o pform.o pform_dump.o \
|
||||||
target.o targets.o Module.o PExpr.o PGate.o PTask.o PWire.o Statement.o \
|
verinum.o verireal.o target.o targets.o Module.o PExpr.o PGate.o \
|
||||||
|
PTask.o PWire.o Statement.o \
|
||||||
$(FF) $(TT)
|
$(FF) $(TT)
|
||||||
|
|
||||||
Makefile: Makefile.in config.status
|
Makefile: Makefile.in config.status
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998 Stephen Williams (steve@icarus.com)
|
* Copyright (c) 1999 Stephen Williams (steve@icarus.com)
|
||||||
*
|
*
|
||||||
* This source code is free software; you can redistribute it
|
* This source code is free software; you can redistribute it
|
||||||
* and/or modify it in source code form under the terms of the GNU
|
* and/or modify it in source code form under the terms of the GNU
|
||||||
|
|
@ -17,24 +17,44 @@
|
||||||
* 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)
|
#if !defined(WINNT)
|
||||||
#ident "$Id: stupid.cc,v 1.2 1998/11/13 06:23:17 steve Exp $"
|
#ident "$Id: functor.cc,v 1.1 1999/07/17 22:01:13 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
# include "functor.h"
|
||||||
# include "netlist.h"
|
# include "netlist.h"
|
||||||
|
|
||||||
|
functor_t::~functor_t()
|
||||||
void stupid(Design*des)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void functor_t::signal(class Design*, class NetNet*)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void functor_t::process(class Design*, class NetProcTop*)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void Design::functor(functor_t*fun)
|
||||||
|
{
|
||||||
|
// apply to signals
|
||||||
|
if (signals_) {
|
||||||
|
NetNet*cur = signals_->sig_next_;
|
||||||
|
do {
|
||||||
|
fun->signal(this, cur);
|
||||||
|
cur = cur->sig_next_;
|
||||||
|
} while (cur != signals_->sig_next_);
|
||||||
|
}
|
||||||
|
|
||||||
|
// apply to processes
|
||||||
|
for (NetProcTop*idx = procs_ ; idx ; idx = idx->next_)
|
||||||
|
fun->process(this, idx);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: stupid.cc,v $
|
* $Log: functor.cc,v $
|
||||||
* Revision 1.2 1998/11/13 06:23:17 steve
|
* Revision 1.1 1999/07/17 22:01:13 steve
|
||||||
* Introduce netlist optimizations with the
|
* Add the functor interface for functor transforms.
|
||||||
* cprop function to do constant propogation.
|
|
||||||
*
|
|
||||||
* Revision 1.1 1998/11/03 23:29:05 steve
|
|
||||||
* Introduce verilog to CVS.
|
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
#ifndef __functor_H
|
||||||
|
#define __functor_H
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1999 Stephen Williams (steve@icarus.com)
|
||||||
|
*
|
||||||
|
* This source code is free software; you can redistribute it
|
||||||
|
* and/or modify it in source code form under the terms of the GNU
|
||||||
|
* General Public License as published by the Free Software
|
||||||
|
* Foundation; either version 2 of the License, or (at your option)
|
||||||
|
* any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
|
*/
|
||||||
|
#if !defined(WINNT)
|
||||||
|
#ident "$Id: functor.h,v 1.1 1999/07/17 22:01:13 steve Exp $"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The functor is an object that can be applied to a design to
|
||||||
|
* transform it. This is different from the target_t, which can only
|
||||||
|
* scan the design but not transform it in any way.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Design;
|
||||||
|
class NetNet;
|
||||||
|
class NetProcTop;
|
||||||
|
|
||||||
|
struct functor_t {
|
||||||
|
virtual ~functor_t();
|
||||||
|
|
||||||
|
/* Signals are scanned first. This is called once for each
|
||||||
|
signal in the design. */
|
||||||
|
virtual void signal(class Design*des, class NetNet*);
|
||||||
|
|
||||||
|
/* This method is called for each process in the design. */
|
||||||
|
virtual void process(class Design*des, class NetProcTop*);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* $Log: functor.h,v $
|
||||||
|
* Revision 1.1 1999/07/17 22:01:13 steve
|
||||||
|
* Add the functor interface for functor transforms.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#endif
|
||||||
7
main.cc
7
main.cc
|
|
@ -19,7 +19,7 @@ const char COPYRIGHT[] =
|
||||||
* 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)
|
#if !defined(WINNT)
|
||||||
#ident "$Id: main.cc,v 1.19 1999/07/10 23:29:21 steve Exp $"
|
#ident "$Id: main.cc,v 1.20 1999/07/17 22:01:13 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char NOTICE[] =
|
const char NOTICE[] =
|
||||||
|
|
@ -80,7 +80,6 @@ extern void emit(ostream&o, const Design*, const char*);
|
||||||
extern void cprop(Design*des);
|
extern void cprop(Design*des);
|
||||||
extern void propinit(Design*des);
|
extern void propinit(Design*des);
|
||||||
extern void sigfold(Design*des);
|
extern void sigfold(Design*des);
|
||||||
extern void stupid(Design*des);
|
|
||||||
extern void nobufz(Design*des);
|
extern void nobufz(Design*des);
|
||||||
extern void xnfio(Design*des);
|
extern void xnfio(Design*des);
|
||||||
|
|
||||||
|
|
@ -93,7 +92,6 @@ static struct net_func_map {
|
||||||
{ "nobufz", &nobufz },
|
{ "nobufz", &nobufz },
|
||||||
{ "propinit", &propinit },
|
{ "propinit", &propinit },
|
||||||
{ "sigfold", &sigfold },
|
{ "sigfold", &sigfold },
|
||||||
{ "stupid", &stupid },
|
|
||||||
{ "xnfio", &xnfio },
|
{ "xnfio", &xnfio },
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
@ -272,6 +270,9 @@ int main(int argc, char*argv[])
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: main.cc,v $
|
* $Log: main.cc,v $
|
||||||
|
* Revision 1.20 1999/07/17 22:01:13 steve
|
||||||
|
* Add the functor interface for functor transforms.
|
||||||
|
*
|
||||||
* Revision 1.19 1999/07/10 23:29:21 steve
|
* Revision 1.19 1999/07/10 23:29:21 steve
|
||||||
* pform even on parse errors.
|
* pform even on parse errors.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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)
|
#if !defined(WINNT)
|
||||||
#ident "$Id: netlist.h,v 1.47 1999/07/17 19:51:00 steve Exp $"
|
#ident "$Id: netlist.h,v 1.48 1999/07/17 22:01:13 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -44,6 +44,7 @@ class ostream;
|
||||||
|
|
||||||
|
|
||||||
struct target;
|
struct target;
|
||||||
|
struct functor_t;
|
||||||
|
|
||||||
/* =========
|
/* =========
|
||||||
* A NetObj is anything that has any kind of behavior in the
|
* A NetObj is anything that has any kind of behavior in the
|
||||||
|
|
@ -1278,6 +1279,7 @@ class Design {
|
||||||
|
|
||||||
// Iterate over the design...
|
// Iterate over the design...
|
||||||
void dump(ostream&) const;
|
void dump(ostream&) const;
|
||||||
|
void functor(struct functor_t*);
|
||||||
void emit(ostream&, struct target_t*) const;
|
void emit(ostream&, struct target_t*) const;
|
||||||
|
|
||||||
void clear_node_marks();
|
void clear_node_marks();
|
||||||
|
|
@ -1366,6 +1368,9 @@ extern ostream& operator << (ostream&, NetNet::Type);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: netlist.h,v $
|
* $Log: netlist.h,v $
|
||||||
|
* Revision 1.48 1999/07/17 22:01:13 steve
|
||||||
|
* Add the functor interface for functor transforms.
|
||||||
|
*
|
||||||
* Revision 1.47 1999/07/17 19:51:00 steve
|
* Revision 1.47 1999/07/17 19:51:00 steve
|
||||||
* netlist support for ternary operator.
|
* netlist support for ternary operator.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
64
xnfio.cc
64
xnfio.cc
|
|
@ -17,11 +17,20 @@
|
||||||
* 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)
|
#if !defined(WINNT)
|
||||||
#ident "$Id: xnfio.cc,v 1.1 1998/12/07 04:53:17 steve Exp $"
|
#ident "$Id: xnfio.cc,v 1.2 1999/07/17 22:01:14 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
# include "functor.h"
|
||||||
# include "netlist.h"
|
# include "netlist.h"
|
||||||
|
|
||||||
|
class xnfio_f : public functor_t {
|
||||||
|
|
||||||
|
public:
|
||||||
|
void signal(Design*des, NetNet*sig);
|
||||||
|
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
static bool is_a_pad(const NetNet*net)
|
static bool is_a_pad(const NetNet*net)
|
||||||
{
|
{
|
||||||
if (net->attribute("PAD") == "")
|
if (net->attribute("PAD") == "")
|
||||||
|
|
@ -153,35 +162,42 @@ static void make_ibuf(Design*des, NetNet*net)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void xnfio_f::signal(Design*des, NetNet*net)
|
||||||
|
{
|
||||||
|
if (! is_a_pad(net))
|
||||||
|
return;
|
||||||
|
|
||||||
|
assert(net->pin_count() == 1);
|
||||||
|
string pattr = net->attribute("PAD");
|
||||||
|
|
||||||
|
switch (pattr[0]) {
|
||||||
|
case 'i':
|
||||||
|
case 'I':
|
||||||
|
make_ibuf(des, net);
|
||||||
|
break;
|
||||||
|
case 'o':
|
||||||
|
case 'O':
|
||||||
|
make_obuf(des, net);
|
||||||
|
break;
|
||||||
|
// FIXME: Only IPAD and OPAD supported. Need to
|
||||||
|
// add support for IOPAD.
|
||||||
|
default:
|
||||||
|
assert(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void xnfio(Design*des)
|
void xnfio(Design*des)
|
||||||
{
|
{
|
||||||
des->clear_signal_marks();
|
xnfio_f xnfio_obj;
|
||||||
while (NetNet*net = des->find_signal(&is_a_pad)) {
|
des->functor(&xnfio_obj);
|
||||||
|
|
||||||
assert(net->pin_count() == 1);
|
|
||||||
string pattr = net->attribute("PAD");
|
|
||||||
|
|
||||||
switch (pattr[0]) {
|
|
||||||
case 'i':
|
|
||||||
case 'I':
|
|
||||||
make_ibuf(des, net);
|
|
||||||
break;
|
|
||||||
case 'o':
|
|
||||||
case 'O':
|
|
||||||
make_obuf(des, net);
|
|
||||||
break;
|
|
||||||
// FIXME: Only IPAD and OPAD supported. Need to
|
|
||||||
// add support for IOPAD.
|
|
||||||
default:
|
|
||||||
assert(0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
net->set_mark();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: xnfio.cc,v $
|
* $Log: xnfio.cc,v $
|
||||||
|
* Revision 1.2 1999/07/17 22:01:14 steve
|
||||||
|
* Add the functor interface for functor transforms.
|
||||||
|
*
|
||||||
* Revision 1.1 1998/12/07 04:53:17 steve
|
* Revision 1.1 1998/12/07 04:53:17 steve
|
||||||
* Generate OBUF or IBUF attributes (and the gates
|
* Generate OBUF or IBUF attributes (and the gates
|
||||||
* to garry them) where a wire is a pad. This involved
|
* to garry them) where a wire is a pad. This involved
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue