change set for support of nmos, pmos, rnmos, rpmos, notif0, and notif1

change set to correct behavior of bufif0 and bufif1
 (Tim Leight)

 Also includes fix for PR#27
This commit is contained in:
steve 2000-11-11 01:52:09 +00:00
parent 197ed46b26
commit 28bc621f11
9 changed files with 602 additions and 50 deletions

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: design_dump.cc,v 1.103 2000/11/11 00:03:36 steve Exp $"
#ident "$Id: design_dump.cc,v 1.104 2000/11/11 01:52:09 steve Exp $"
#endif
/*
@ -276,15 +276,33 @@ void NetLogic::dump_node(ostream&o, unsigned ind) const
case NAND:
o << "nand";
break;
case NMOS:
o << "nmos";
break;
case NOR:
o << "nor";
break;
case NOT:
o << "not";
break;
case NOTIF0:
o << "notif0";
break;
case NOTIF1:
o << "notif1";
break;
case OR:
o << "or";
break;
case RNMOS:
o << "rnmos";
break;
case RPMOS:
o << "rpmos";
break;
case PMOS:
o << "pmos";
break;
case XNOR:
o << "xnor";
break;
@ -977,6 +995,13 @@ void Design::dump(ostream&o) const
/*
* $Log: design_dump.cc,v $
* Revision 1.104 2000/11/11 01:52:09 steve
* change set for support of nmos, pmos, rnmos, rpmos, notif0, and notif1
* change set to correct behavior of bufif0 and bufif1
* (Tim Leight)
*
* Also includes fix for PR#27
*
* Revision 1.103 2000/11/11 00:03:36 steve
* Add support for the t-dll backend grabing flip-flops.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: elaborate.cc,v 1.196 2000/11/05 06:05:59 steve Exp $"
#ident "$Id: elaborate.cc,v 1.197 2000/11/11 01:52:09 steve Exp $"
#endif
/*
@ -296,6 +296,10 @@ void PGBuiltin::elaborate(Design*des, const string&path) const
cur[idx] = new NetLogic(scope, inm, pin_count(),
NetLogic::NAND);
break;
case NMOS:
cur[idx] = new NetLogic(scope, inm, pin_count(),
NetLogic::NMOS);
break;
case NOR:
cur[idx] = new NetLogic(scope, inm, pin_count(),
NetLogic::NOR);
@ -304,10 +308,30 @@ void PGBuiltin::elaborate(Design*des, const string&path) const
cur[idx] = new NetLogic(scope, inm, pin_count(),
NetLogic::NOT);
break;
case NOTIF0:
cur[idx] = new NetLogic(scope, inm, pin_count(),
NetLogic::NOTIF0);
break;
case NOTIF1:
cur[idx] = new NetLogic(scope, inm, pin_count(),
NetLogic::NOTIF1);
break;
case OR:
cur[idx] = new NetLogic(scope, inm, pin_count(),
NetLogic::OR);
break;
case RNMOS:
cur[idx] = new NetLogic(scope, inm, pin_count(),
NetLogic::RNMOS);
break;
case RPMOS:
cur[idx] = new NetLogic(scope, inm, pin_count(),
NetLogic::RPMOS);
break;
case PMOS:
cur[idx] = new NetLogic(scope, inm, pin_count(),
NetLogic::PMOS);
break;
case XNOR:
cur[idx] = new NetLogic(scope, inm, pin_count(),
NetLogic::XNOR);
@ -2300,6 +2324,13 @@ Design* elaborate(const map<string,Module*>&modules,
/*
* $Log: elaborate.cc,v $
* Revision 1.197 2000/11/11 01:52:09 steve
* change set for support of nmos, pmos, rnmos, rpmos, notif0, and notif1
* change set to correct behavior of bufif0 and bufif1
* (Tim Leight)
*
* Also includes fix for PR#27
*
* Revision 1.196 2000/11/05 06:05:59 steve
* Handle connectsion to internally unconnected modules (PR#38)
*

View File

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: ivl_target.h,v 1.27 2000/11/11 00:03:36 steve Exp $"
#ident "$Id: ivl_target.h,v 1.28 2000/11/11 01:52:09 steve Exp $"
#endif
#ifdef __cplusplus
@ -165,11 +165,15 @@ typedef enum ivl_logic_e {
IVL_LO_BUFIF1,
IVL_LO_BUFZ,
IVL_LO_NAND,
IVL_LO_NMOS,
IVL_LO_NOR,
IVL_LO_NOT,
IVL_LO_NOTIF0,
IVL_LO_NOTIF1,
IVL_LO_OR,
IVL_LO_RNMOS,
IVL_LO_RPMOS,
IVL_LO_PMOS,
IVL_LO_XNOR,
IVL_LO_XOR
} ivl_logic_t;
@ -594,6 +598,13 @@ _END_DECL
/*
* $Log: ivl_target.h,v $
* Revision 1.28 2000/11/11 01:52:09 steve
* change set for support of nmos, pmos, rnmos, rpmos, notif0, and notif1
* change set to correct behavior of bufif0 and bufif1
* (Tim Leight)
*
* Also includes fix for PR#27
*
* Revision 1.27 2000/11/11 00:03:36 steve
* Add support for the t-dll backend grabing flip-flops.
*

View File

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: netlist.h,v 1.178 2000/11/11 00:03:36 steve Exp $"
#ident "$Id: netlist.h,v 1.179 2000/11/11 01:52:09 steve Exp $"
#endif
/*
@ -975,8 +975,8 @@ class NetConst : public NetNode {
class NetLogic : public NetNode {
public:
enum TYPE { AND, BUF, BUFIF0, BUFIF1, NAND, NOR, NOT, NOTIF0,
NOTIF1, OR, XNOR, XOR };
enum TYPE { AND, BUF, BUFIF0, BUFIF1, NAND, NMOS, NOR, NOT, NOTIF0,
NOTIF1, OR, RNMOS, RPMOS, PMOS, XNOR, XOR };
explicit NetLogic(NetScope*s, const string&n, unsigned pins, TYPE t);
@ -2812,6 +2812,13 @@ extern ostream& operator << (ostream&, NetNet::Type);
/*
* $Log: netlist.h,v $
* Revision 1.179 2000/11/11 01:52:09 steve
* change set for support of nmos, pmos, rnmos, rpmos, notif0, and notif1
* change set to correct behavior of bufif0 and bufif1
* (Tim Leight)
*
* Also includes fix for PR#27
*
* Revision 1.178 2000/11/11 00:03:36 steve
* Add support for the t-dll backend grabing flip-flops.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: pform_dump.cc,v 1.62 2000/10/14 02:23:02 steve Exp $"
#ident "$Id: pform_dump.cc,v 1.63 2000/11/11 01:52:09 steve Exp $"
#endif
/*
@ -297,9 +297,27 @@ void PGBuiltin::dump(ostream&out) const
case PGBuiltin::BUFIF1:
out << " bufif1 ";
break;
case PGBuiltin::NOTIF0:
out << " bufif0 ";
break;
case PGBuiltin::NOTIF1:
out << " bufif1 ";
break;
case PGBuiltin::NAND:
out << " nand ";
break;
case PGBuiltin::NMOS:
out << " nmos ";
break;
case PGBuiltin::RNMOS:
out << " rnmos ";
break;
case PGBuiltin::RPMOS:
out << " rpmos ";
break;
case PGBuiltin::PMOS:
out << " pmos ";
break;
default:
out << " builtin gate ";
}
@ -783,6 +801,13 @@ void PUdp::dump(ostream&out) const
/*
* $Log: pform_dump.cc,v $
* Revision 1.63 2000/11/11 01:52:09 steve
* change set for support of nmos, pmos, rnmos, rpmos, notif0, and notif1
* change set to correct behavior of bufif0 and bufif1
* (Tim Leight)
*
* Also includes fix for PR#27
*
* Revision 1.62 2000/10/14 02:23:02 steve
* Check for missing concat subexpressions (PR#11)
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: t-vvm.cc,v 1.183 2000/11/04 06:36:24 steve Exp $"
#ident "$Id: t-vvm.cc,v 1.184 2000/11/11 01:52:09 steve Exp $"
#endif
# include <iostream>
@ -1786,6 +1786,9 @@ void target_vvm::logic(const NetLogic*gate)
case NetLogic::NAND:
out << "static vvm_nand" << "<" << gate->pin_count()-1 << "> ";
break;
case NetLogic::NMOS:
out << "static vvm_nmos ";
break;
case NetLogic::NOR:
if ((gate->pin_count()-1) == 2)
out << "static vvm_nor2 ";
@ -1795,9 +1798,24 @@ void target_vvm::logic(const NetLogic*gate)
case NetLogic::NOT:
out << "static vvm_not ";
break;
case NetLogic::NOTIF0:
out << "static vvm_notif0 ";
break;
case NetLogic::NOTIF1:
out << "static vvm_notif1 ";
break;
case NetLogic::OR:
out << "static vvm_or" << "<" << gate->pin_count()-1 << "> ";
break;
case NetLogic::RNMOS:
out << "static vvm_rnmos ";
break;
case NetLogic::RPMOS:
out << "static vvm_rpmos ";
break;
case NetLogic::PMOS:
out << "static vvm_pmos ";
break;
case NetLogic::XNOR:
out << "static vvm_xnor" << "<" << gate->pin_count()-1 << "> ";
break;
@ -3329,6 +3347,13 @@ extern const struct target tgt_vvm = {
};
/*
* $Log: t-vvm.cc,v $
* Revision 1.184 2000/11/11 01:52:09 steve
* change set for support of nmos, pmos, rnmos, rpmos, notif0, and notif1
* change set to correct behavior of bufif0 and bufif1
* (Tim Leight)
*
* Also includes fix for PR#27
*
* Revision 1.183 2000/11/04 06:36:24 steve
* Apply sequential UDP rework from Stephan Boettcher (PR#39)
*

View File

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: vpi_priv.h,v 1.29 2000/10/28 00:51:42 steve Exp $"
#ident "$Id: vpi_priv.h,v 1.30 2000/11/11 01:52:09 steve Exp $"
#endif
/*
@ -70,22 +70,37 @@ struct __vpirt;
*/
typedef unsigned char vpip_bit_t;
# define Su1 0xff
# define St1 0xee
# define Pu1 0xdd
# define La1 0xcc
# define We1 0xbb
# define Me1 0xaa
# define Sm1 0x99
# define Su0 0x77
# define St0 0x66
# define Pu0 0x55
# define La0 0x44
# define We0 0x33
# define Me0 0x22
# define Sm0 0x11
# define StX 0xe6
# define HiZ 0x08
# define Su1 0xff //supply1
# define St1 0xee //strong1
# define Pu1 0xdd //pull1
# define La1 0xcc //large1
# define We1 0xbb //weak1
# define Me1 0xaa //medium1
# define Sm1 0x99 //samll1
# define Su0 0x77 //supply0
# define St0 0x66 //strong0
# define Pu0 0x55 //pull0
# define La0 0x44 //large0
# define We0 0x33 //weak0
# define Me0 0x22 //medium0
# define Sm0 0x11 //small0
# define SuX 0xf7 //supplyx
# define StX 0xe6 //strongx
# define PuX 0xd5 //pullx
# define LaX 0xc4 //largex
# define WeX 0xb3 //weakx
# define MeX 0xa2 //mediumx
# define SmX 0x91 //smallx
# define HiZ 0x08 //highz
# define HiZ0 0x08 //highz
# define HiZ1 0x08 //highz
# define StH 0xe8 //strong 1 highz
# define StL 0x06 //highz strong0
/* Compare the logic values of two vpip_bit_t variables. This
is like the === operator of Verilog, it ignored strengths. */
@ -392,6 +407,13 @@ extern int vpip_finished();
/*
* $Log: vpi_priv.h,v $
* Revision 1.30 2000/11/11 01:52:09 steve
* change set for support of nmos, pmos, rnmos, rpmos, notif0, and notif1
* change set to correct behavior of bufif0 and bufif1
* (Tim Leight)
*
* Also includes fix for PR#27
*
* Revision 1.29 2000/10/28 00:51:42 steve
* Add scope to threads in vvm, pass that scope
* to vpi sysTaskFunc objects, and add vpi calls

View File

@ -17,10 +17,16 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: vvm_gates.cc,v 1.18 2000/07/11 23:08:33 steve Exp $"
#ident "$Id: vvm_gates.cc,v 1.19 2000/11/11 01:52:09 steve Exp $"
#endif
# include "vvm_gates.h"
# include <stdlib.h>
# include <typeinfo>
# include <string>
# include <map>
# include <sys/time.h>
# include <unistd.h>
vvm_out_event::vvm_out_event(vpip_bit_t v, vvm_nexus::drive_t*o)
: output_(o), val_(v)
@ -68,15 +74,6 @@ void vvm_1bit_out::driveZ(vpip_bit_t v)
void vvm_1bit_out::output(vpip_bit_t val)
{
if (B_IS0(val))
val = drive0_;
else if (B_IS1(val))
val = drive1_;
else if (B_ISZ(val))
val = driveZ_;
else
val = driveX_;
if (delay_) {
vvm_event*ev = new vvm_out_event(val, this);
ev -> schedule(delay_);
@ -128,6 +125,55 @@ vpip_bit_t compute_xnor(const vpip_bit_t*inp, unsigned count)
return B_NOT(compute_xor(inp,count));
}
vpip_bit_t reduce_strength(vpip_bit_t val)
{
if (B_IS0(val)) {
if ((val == Su0) ||
(val == St0))
return(Pu0);
else if (val == Pu0)
return(We0);
else if ((val == We0) ||
(val == La0))
return(Me0);
else if ((val == Me0) ||
(val == Sm0))
return(Sm0);
} else if (B_IS1(val)) {
if ((val == Su1) ||
(val == St1))
return(Pu1);
else if (val == Pu1)
return(We1);
else if ((val == We1) ||
(val == La1))
return(Me1);
else if ((val == Me1) ||
(val == Sm1))
return(Sm1);
} else if (B_ISX(val)) {
if ((val == SuX) ||
(val == StX))
return(PuX);
else if (val == PuX)
return(WeX);
else if ((val == WeX) ||
(val == LaX))
return(MeX);
else if ((val == MeX) ||
(val == SmX))
return(SmX);
}
return(HiZ);
}
vvm_and2::vvm_and2(unsigned long d)
: vvm_1bit_out(d)
{
@ -205,14 +251,24 @@ void vvm_bufif0::take_value(unsigned key, vpip_bit_t val)
if (input_[key] == val) return;
input_[key] = val;
if (! B_IS0(input_[1]))
if ( B_IS1(input_[1]))
output(HiZ);
else if (B_ISXZ(input_[0]))
else if ( B_ISX(input_[0]) ||
B_ISZ(input_[0]))
output(StX);
else if (B_IS1(input_[0]))
output(St1);
else
output(St0);
else if (B_IS0(input_[0])) {
if (B_IS0(input_[1])) {
output(St0);
} else {
output(StL);
}
} else {
if (B_IS0(input_[1])) {
output(St1);
} else {
output(StH);
}
}
}
vvm_bufif1::vvm_bufif1(unsigned long d)
@ -237,14 +293,24 @@ void vvm_bufif1::take_value(unsigned key, vpip_bit_t val)
if (input_[key] == val) return;
input_[key] = val;
if (! B_IS1(input_[1]))
if ( B_IS0(input_[1]))
output(HiZ);
else if (B_ISXZ(input_[0]))
else if ( B_ISX(input_[0]) ||
B_ISZ(input_[0]))
output(StX);
else if (B_IS1(input_[0]))
output(St1);
else
output(St0);
else if (B_IS0(input_[0])) {
if (B_IS1(input_[1])) {
output(St0);
} else {
output(StL);
}
} else {
if (B_IS1(input_[1])) {
output(St1);
} else {
output(StH);
}
}
}
vvm_bufz::vvm_bufz()
@ -301,13 +367,165 @@ vpip_bit_t vvm_eeq::compute_() const
return outval;
}
vvm_nor2::vvm_nor2(unsigned long d)
vvm_nmos::vvm_nmos(unsigned long d)
: vvm_1bit_out(d)
{
input_[0] = StX;
input_[1] = StX;
}
vvm_nor2::~vvm_nor2()
void vvm_nmos::init_I(unsigned key, vpip_bit_t val)
{
assert(key < 2);
input_[key] = val;
}
void vvm_nmos::take_value(unsigned key, vpip_bit_t val)
{
if (input_[key] == val) {
return;
}
input_[key] = val;
if ( B_IS0(input_[1])) {
output(HiZ);
} else if (B_ISX(input_[0]))
output(StX);
else if (B_ISZ(input_[0])) {
output(HiZ);
} else if (B_IS0(input_[0])) {
if (B_IS1(input_[1])) {
output(St0);
} else {
output(StL);
}
} else {
if (B_IS1(input_[1])) {
output(St1);
} else {
output(StH);
}
}
}
vvm_rnmos::vvm_rnmos(unsigned long d)
: vvm_1bit_out(d)
{
input_[0] = StX;
input_[1] = StX;
}
void vvm_rnmos::init_I(unsigned key, vpip_bit_t val)
{
assert(key < 2);
input_[key] = val;
}
void vvm_rnmos::take_value(unsigned key, vpip_bit_t val)
{
if (input_[key] == val) return;
input_[key] = val;
if ( B_IS0(input_[1]))
output(HiZ);
else if (B_ISX(input_[0]))
output(reduce_strength(input_[0]));
else if (B_ISZ(input_[0]))
output(HiZ);
else if (B_IS0(input_[0])) {
if (B_IS1(input_[1])) {
output(reduce_strength(input_[0]));
} else {
output(StL);
}
} else {
if (B_IS1(input_[1])) {
output(reduce_strength(input_[0]));
} else {
output(StH);
}
}
}
vvm_pmos::vvm_pmos(unsigned long d)
: vvm_1bit_out(d)
{
input_[0] = StX;
input_[1] = StX;
}
void vvm_pmos::init_I(unsigned key, vpip_bit_t val)
{
assert(key < 2);
input_[key] = val;
}
void vvm_pmos::take_value(unsigned key, vpip_bit_t val)
{
if (input_[key] == val) return;
input_[key] = val;
if ( B_IS1(input_[1]))
output(HiZ);
else if (B_ISX(input_[0]))
output(StX);
else if (B_ISZ(input_[0]))
output(HiZ);
else if (B_IS0(input_[0])) {
if (B_IS0(input_[1])) {
output(St0);
} else {
output(StL);
}
} else {
if (B_IS0(input_[1])) {
output(St1);
} else {
output(StH);
}
}
}
vvm_rpmos::vvm_rpmos(unsigned long d)
: vvm_1bit_out(d)
{
input_[0] = StX;
input_[1] = StX;
}
void vvm_rpmos::init_I(unsigned key, vpip_bit_t val)
{
assert(key < 2);
input_[key] = val;
}
void vvm_rpmos::take_value(unsigned key, vpip_bit_t val)
{
if (input_[key] == val) return;
input_[key] = val;
if ( B_IS1(input_[1]))
output(HiZ);
else if (B_ISX(input_[0]))
output(reduce_strength(input_[0]));
else if (B_ISZ(input_[0]))
output(HiZ);
else if (B_IS0(input_[0])) {
if (B_IS0(input_[1])) {
output(reduce_strength(input_[0]));
} else {
output(StL);
}
} else {
if (B_IS0(input_[1])) {
output(reduce_strength(input_[0]));
} else {
output(StH);
}
}
}
void vvm_nor2::init_I(unsigned idx, vpip_bit_t val)
@ -321,6 +539,15 @@ void vvm_nor2::start()
output(B_NOT(B_OR(input_[0], input_[1])));
}
vvm_nor2::vvm_nor2(unsigned long d)
: vvm_1bit_out(d)
{
}
vvm_nor2::~vvm_nor2()
{
}
void vvm_nor2::take_value(unsigned key, vpip_bit_t val)
{
if (input_[key] == val)
@ -352,9 +579,99 @@ void vvm_not::take_value(unsigned, vpip_bit_t val)
output(B_NOT(val));
}
vvm_notif0::vvm_notif0(unsigned long d)
: vvm_1bit_out(d)
{
input_[0] = StX;
input_[1] = StX;
}
vvm_notif0::~vvm_notif0()
{
}
void vvm_notif0::init_I(unsigned key, vpip_bit_t val)
{
assert(key < 2);
input_[key] = val;
}
void vvm_notif0::take_value(unsigned key, vpip_bit_t val)
{
if (input_[key] == val) return;
input_[key] = val;
if ( B_IS1(input_[1]))
output(HiZ);
else if ( B_ISX(input_[0]) ||
B_ISZ(input_[0]))
output(StX);
else if (B_IS0(input_[0])) {
if (B_IS0(input_[1])) {
output(St1);
} else {
output(StH);
}
} else {
if (B_IS0(input_[1])) {
output(St0);
} else {
output(StL);
}
}
}
vvm_notif1::vvm_notif1(unsigned long d)
: vvm_1bit_out(d)
{
input_[0] = StX;
input_[1] = StX;
}
vvm_notif1::~vvm_notif1()
{
}
void vvm_notif1::init_I(unsigned key, vpip_bit_t val)
{
assert(key < 2);
input_[key] = val;
}
void vvm_notif1::take_value(unsigned key, vpip_bit_t val)
{
if (input_[key] == val) return;
input_[key] = val;
if ( B_IS0(input_[1]))
output(HiZ);
else if ( B_ISX(input_[0]) ||
B_ISZ(input_[0]))
output(StX);
else if (B_IS0(input_[0])) {
if (B_IS1(input_[1])) {
output(St1);
} else {
output(StH);
}
} else {
if (B_IS1(input_[1])) {
output(St0);
} else {
output(StL);
}
}
}
/*
* $Log: vvm_gates.cc,v $
* Revision 1.19 2000/11/11 01:52:09 steve
* change set for support of nmos, pmos, rnmos, rpmos, notif0, and notif1
* change set to correct behavior of bufif0 and bufif1
* (Tim Leight)
*
* Also includes fix for PR#27
*
* Revision 1.18 2000/07/11 23:08:33 steve
* proper init method for bufz devices.
*

View File

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: vvm_gates.h,v 1.66 2000/11/04 06:36:24 steve Exp $"
#ident "$Id: vvm_gates.h,v 1.67 2000/11/11 01:52:09 steve Exp $"
#endif
# include "vvm.h"
@ -33,6 +33,8 @@ extern vpip_bit_t compute_or(const vpip_bit_t*inp, unsigned count);
extern vpip_bit_t compute_xor(const vpip_bit_t*inp, unsigned count);
extern vpip_bit_t compute_xnor(const vpip_bit_t*inp, unsigned count);
extern vpip_bit_t reduce_strength(vpip_bit_t);
extern void compute_mux(vpip_bit_t*out, unsigned wid,
const vpip_bit_t*sel, unsigned swid,
const vpip_bit_t*dat, unsigned size);
@ -641,6 +643,34 @@ class vvm_bufif1 : public vvm_1bit_out, public vvm_nexus::recvr_t {
void take_value(unsigned key, vpip_bit_t val);
};
class vvm_notif0 : public vvm_1bit_out, public vvm_nexus::recvr_t {
public:
explicit vvm_notif0(unsigned long d);
~vvm_notif0();
void init_I(unsigned, vpip_bit_t);
void start() { }
private:
vpip_bit_t input_[2];
void take_value(unsigned key, vpip_bit_t val);
};
class vvm_notif1 : public vvm_1bit_out, public vvm_nexus::recvr_t {
public:
explicit vvm_notif1(unsigned long d);
~vvm_notif1();
void init_I(unsigned, vpip_bit_t);
void start() { }
private:
vpip_bit_t input_[2];
void take_value(unsigned key, vpip_bit_t val);
};
template <unsigned WIDTH>
class vvm_nand : public vvm_1bit_out, public vvm_nexus::recvr_t {
@ -682,6 +712,58 @@ class vvm_not : public vvm_1bit_out, public vvm_nexus::recvr_t {
void take_value(unsigned key, vpip_bit_t val);
};
class vvm_nmos : public vvm_1bit_out, public vvm_nexus::recvr_t {
public:
explicit vvm_nmos(unsigned long d);
void init_I(unsigned, vpip_bit_t);
void start() { }
private:
vpip_bit_t input_[2];
void take_value(unsigned key, vpip_bit_t val);
};
class vvm_rnmos : public vvm_1bit_out, public vvm_nexus::recvr_t {
public:
explicit vvm_rnmos(unsigned long d);
void init_I(unsigned, vpip_bit_t);
void start() { }
private:
vpip_bit_t input_[2];
void take_value(unsigned key, vpip_bit_t val);
};
class vvm_pmos : public vvm_1bit_out, public vvm_nexus::recvr_t {
public:
explicit vvm_pmos(unsigned long d);
void init_I(unsigned, vpip_bit_t);
void start() { }
private:
vpip_bit_t input_[2];
void take_value(unsigned key, vpip_bit_t val);
};
class vvm_rpmos : public vvm_1bit_out, public vvm_nexus::recvr_t {
public:
explicit vvm_rpmos(unsigned long d);
void init_I(unsigned, vpip_bit_t);
void start() { }
private:
vpip_bit_t input_[2];
void take_value(unsigned key, vpip_bit_t val);
};
template <unsigned WIDTH>
class vvm_xnor : public vvm_1bit_out, public vvm_nexus::recvr_t {
@ -924,6 +1006,13 @@ class vvm_posedge : public vvm_nexus::recvr_t {
/*
* $Log: vvm_gates.h,v $
* Revision 1.67 2000/11/11 01:52:09 steve
* change set for support of nmos, pmos, rnmos, rpmos, notif0, and notif1
* change set to correct behavior of bufif0 and bufif1
* (Tim Leight)
*
* Also includes fix for PR#27
*
* Revision 1.66 2000/11/04 06:36:24 steve
* Apply sequential UDP rework from Stephan Boettcher (PR#39)
*