Support MUXR functors.
This commit is contained in:
parent
b69f59f2ec
commit
ad761069c7
83
vvp/logic.cc
83
vvp/logic.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
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: logic.cc,v 1.32 2005/07/06 04:29:25 steve Exp $"
|
#ident "$Id: logic.cc,v 1.33 2005/09/01 04:08:47 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "logic.h"
|
# include "logic.h"
|
||||||
|
|
@ -183,6 +183,81 @@ void vvp_fun_bufz::recv_real(vvp_net_ptr_t ptr, double bit)
|
||||||
vvp_send_real(ptr.ptr()->out, bit);
|
vvp_send_real(ptr.ptr()->out, bit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vvp_fun_muxr::vvp_fun_muxr()
|
||||||
|
: a_(0.0), b_(0.0)
|
||||||
|
{
|
||||||
|
count_functors_table += 1;
|
||||||
|
select_ = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
vvp_fun_muxr::~vvp_fun_muxr()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void vvp_fun_muxr::recv_vec4(vvp_net_ptr_t ptr, const vvp_vector4_t&bit)
|
||||||
|
{
|
||||||
|
/* The real valued mux can only take in the select as a
|
||||||
|
vector4_t. the muxed data is rea. */
|
||||||
|
if (ptr.port() != 2)
|
||||||
|
return;
|
||||||
|
|
||||||
|
assert(bit.size() == 1);
|
||||||
|
|
||||||
|
switch (bit.value(0)) {
|
||||||
|
case BIT4_0:
|
||||||
|
select_ = 0;
|
||||||
|
break;
|
||||||
|
case BIT4_1:
|
||||||
|
select_ = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
select_ = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (select_) {
|
||||||
|
case 0:
|
||||||
|
vvp_send_real(ptr.ptr()->out, a_);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
vvp_send_real(ptr.ptr()->out, b_);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (a_ == b_) {
|
||||||
|
vvp_send_real(ptr.ptr()->out, a_);
|
||||||
|
} else {
|
||||||
|
// Should send NaN?
|
||||||
|
vvp_send_real(ptr.ptr()->out, 0.0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void vvp_fun_muxr::recv_real(vvp_net_ptr_t ptr, double bit)
|
||||||
|
{
|
||||||
|
switch (ptr.port()) {
|
||||||
|
case 0:
|
||||||
|
if (a_ == bit)
|
||||||
|
break;
|
||||||
|
|
||||||
|
a_ = bit;
|
||||||
|
if (select_ == 0)
|
||||||
|
vvp_send_real(ptr.ptr()->out, a_);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
if (b_ == bit)
|
||||||
|
break;
|
||||||
|
|
||||||
|
b_ = bit;
|
||||||
|
if (select_ == 1)
|
||||||
|
vvp_send_real(ptr.ptr()->out, b_);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
assert(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
vvp_fun_muxz::vvp_fun_muxz(unsigned wid)
|
vvp_fun_muxz::vvp_fun_muxz(unsigned wid)
|
||||||
: a_(wid), b_(wid)
|
: a_(wid), b_(wid)
|
||||||
{
|
{
|
||||||
|
|
@ -299,6 +374,9 @@ void compile_functor(char*label, char*type, unsigned width,
|
||||||
} else if (strcmp(type, "BUFZ") == 0) {
|
} else if (strcmp(type, "BUFZ") == 0) {
|
||||||
obj = new vvp_fun_bufz();
|
obj = new vvp_fun_bufz();
|
||||||
|
|
||||||
|
} else if (strcmp(type, "MUXR") == 0) {
|
||||||
|
obj = new vvp_fun_muxr;
|
||||||
|
|
||||||
} else if (strcmp(type, "MUXX") == 0) {
|
} else if (strcmp(type, "MUXX") == 0) {
|
||||||
obj = new table_functor_s(ft_MUXX);
|
obj = new table_functor_s(ft_MUXX);
|
||||||
|
|
||||||
|
|
@ -385,6 +463,9 @@ void compile_functor(char*label, char*type, unsigned width,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: logic.cc,v $
|
* $Log: logic.cc,v $
|
||||||
|
* Revision 1.33 2005/09/01 04:08:47 steve
|
||||||
|
* Support MUXR functors.
|
||||||
|
*
|
||||||
* Revision 1.32 2005/07/06 04:29:25 steve
|
* Revision 1.32 2005/07/06 04:29:25 steve
|
||||||
* Implement real valued signals and arith nodes.
|
* Implement real valued signals and arith nodes.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
20
vvp/logic.h
20
vvp/logic.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
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: logic.h,v 1.22 2005/07/06 04:29:25 steve Exp $"
|
#ident "$Id: logic.h,v 1.23 2005/09/01 04:08:47 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "vvp_net.h"
|
# include "vvp_net.h"
|
||||||
|
|
@ -129,6 +129,21 @@ class vvp_fun_muxz : public vvp_net_fun_t {
|
||||||
int select_;
|
int select_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class vvp_fun_muxr : public vvp_net_fun_t {
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit vvp_fun_muxr();
|
||||||
|
virtual ~vvp_fun_muxr();
|
||||||
|
|
||||||
|
void recv_vec4(vvp_net_ptr_t p, const vvp_vector4_t&bit);
|
||||||
|
void recv_real(vvp_net_ptr_t p, double bit);
|
||||||
|
|
||||||
|
private:
|
||||||
|
double a_;
|
||||||
|
double b_;
|
||||||
|
int select_;
|
||||||
|
};
|
||||||
|
|
||||||
// table functor types
|
// table functor types
|
||||||
|
|
||||||
extern const unsigned char ft_MUXX[];
|
extern const unsigned char ft_MUXX[];
|
||||||
|
|
@ -144,6 +159,9 @@ extern const unsigned char ft_XOR[];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: logic.h,v $
|
* $Log: logic.h,v $
|
||||||
|
* Revision 1.23 2005/09/01 04:08:47 steve
|
||||||
|
* Support MUXR functors.
|
||||||
|
*
|
||||||
* Revision 1.22 2005/07/06 04:29:25 steve
|
* Revision 1.22 2005/07/06 04:29:25 steve
|
||||||
* Implement real valued signals and arith nodes.
|
* Implement real valued signals and arith nodes.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue