From 28bc621f115deaf7898b62c0f48d2b264b24f962 Mon Sep 17 00:00:00 2001 From: steve Date: Sat, 11 Nov 2000 01:52:09 +0000 Subject: [PATCH] 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 --- design_dump.cc | 27 +++- elaborate.cc | 33 ++++- ivl_target.h | 13 +- netlist.h | 13 +- pform_dump.cc | 27 +++- t-vvm.cc | 27 +++- vvm/vpi_priv.h | 56 +++++--- vvm/vvm_gates.cc | 365 +++++++++++++++++++++++++++++++++++++++++++---- vvm/vvm_gates.h | 91 +++++++++++- 9 files changed, 602 insertions(+), 50 deletions(-) diff --git a/design_dump.cc b/design_dump.cc index 57e142804..a1d0adc52 100644 --- a/design_dump.cc +++ b/design_dump.cc @@ -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. * diff --git a/elaborate.cc b/elaborate.cc index ad5f06702..589109674 100644 --- a/elaborate.cc +++ b/elaborate.cc @@ -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&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) * diff --git a/ivl_target.h b/ivl_target.h index 47d356167..4bf625807 100644 --- a/ivl_target.h +++ b/ivl_target.h @@ -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. * diff --git a/netlist.h b/netlist.h index 10bd08530..6c3f78569 100644 --- a/netlist.h +++ b/netlist.h @@ -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. * diff --git a/pform_dump.cc b/pform_dump.cc index 738423f25..89e8d6009 100644 --- a/pform_dump.cc +++ b/pform_dump.cc @@ -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) * diff --git a/t-vvm.cc b/t-vvm.cc index fd9dcc757..b76863ada 100644 --- a/t-vvm.cc +++ b/t-vvm.cc @@ -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 @@ -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) * diff --git a/vvm/vpi_priv.h b/vvm/vpi_priv.h index 0a1a4edca..681cd7b09 100644 --- a/vvm/vpi_priv.h +++ b/vvm/vpi_priv.h @@ -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 diff --git a/vvm/vvm_gates.cc b/vvm/vvm_gates.cc index 5737c7413..6e9040865 100644 --- a/vvm/vvm_gates.cc +++ b/vvm/vvm_gates.cc @@ -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 +# include +# include +# include +# include +# include 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. * diff --git a/vvm/vvm_gates.h b/vvm/vvm_gates.h index 41dc1a7ca..2dce5a840 100644 --- a/vvm/vvm_gates.h +++ b/vvm/vvm_gates.h @@ -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 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 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) *