Implement the vvp_fun_muxz functor.
This commit is contained in:
parent
d74177634c
commit
85d9ebded8
|
|
@ -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: draw_tt.c,v 1.18 2005/01/29 17:52:06 steve Exp $"
|
#ident "$Id: draw_tt.c,v 1.19 2005/02/12 22:50:52 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include <stdio.h>
|
# include <stdio.h>
|
||||||
|
|
@ -328,6 +328,7 @@ static void draw_MUXX(void)
|
||||||
printf("};\n");
|
printf("};\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
static void draw_MUXZ(void)
|
static void draw_MUXZ(void)
|
||||||
{
|
{
|
||||||
unsigned i0, i1, i2, i3;
|
unsigned i0, i1, i2, i3;
|
||||||
|
|
@ -368,6 +369,7 @@ static void draw_MUXZ(void)
|
||||||
|
|
||||||
printf("};\n");
|
printf("};\n");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void draw_EEQ(void)
|
static void draw_EEQ(void)
|
||||||
{
|
{
|
||||||
|
|
@ -744,7 +746,6 @@ main()
|
||||||
draw_PMOS();
|
draw_PMOS();
|
||||||
draw_NMOS();
|
draw_NMOS();
|
||||||
draw_MUXX();
|
draw_MUXX();
|
||||||
draw_MUXZ();
|
|
||||||
draw_EEQ();
|
draw_EEQ();
|
||||||
draw_NAND();
|
draw_NAND();
|
||||||
draw_NOR();
|
draw_NOR();
|
||||||
|
|
@ -761,6 +762,9 @@ main()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: draw_tt.c,v $
|
* $Log: draw_tt.c,v $
|
||||||
|
* Revision 1.19 2005/02/12 22:50:52 steve
|
||||||
|
* Implement the vvp_fun_muxz functor.
|
||||||
|
*
|
||||||
* Revision 1.18 2005/01/29 17:52:06 steve
|
* Revision 1.18 2005/01/29 17:52:06 steve
|
||||||
* move AND to buitin instead of table.
|
* move AND to buitin instead of table.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
77
vvp/logic.cc
77
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.18 2005/02/07 22:42:42 steve Exp $"
|
#ident "$Id: logic.cc,v 1.19 2005/02/12 22:50:52 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "logic.h"
|
# include "logic.h"
|
||||||
|
|
@ -148,6 +148,76 @@ void vvp_fun_bufz::recv_vec4(vvp_net_ptr_t ptr, vvp_vector4_t bit)
|
||||||
vvp_send_vec4(ptr.ptr()->out, bit);
|
vvp_send_vec4(ptr.ptr()->out, bit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vvp_fun_muxz::vvp_fun_muxz()
|
||||||
|
{
|
||||||
|
count_functors_table += 1;
|
||||||
|
select_ = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
vvp_fun_muxz::~vvp_fun_muxz()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void vvp_fun_muxz::recv_vec4(vvp_net_ptr_t ptr, vvp_vector4_t bit)
|
||||||
|
{
|
||||||
|
switch (ptr.port()) {
|
||||||
|
case 0:
|
||||||
|
a_ = bit;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
b_ = bit;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
assert(bit.size() == 1);
|
||||||
|
switch (bit.value(0)) {
|
||||||
|
case BIT4_0:
|
||||||
|
select_ = 0;
|
||||||
|
break;
|
||||||
|
case BIT4_1:
|
||||||
|
select_ = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
select_ = 2;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (select_) {
|
||||||
|
case 0:
|
||||||
|
vvp_send_vec4(ptr.ptr()->out, a_);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
vvp_send_vec4(ptr.ptr()->out, b_);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
unsigned min_size = a_.size();
|
||||||
|
unsigned max_size = a_.size();
|
||||||
|
if (b_.size() < min_size)
|
||||||
|
min_size = b_.size();
|
||||||
|
if (b_.size() > max_size)
|
||||||
|
max_size = b_.size();
|
||||||
|
|
||||||
|
vvp_vector4_t res (max_size);
|
||||||
|
|
||||||
|
for (unsigned idx = 0 ; idx < min_size ; idx += 1) {
|
||||||
|
if (a_.value(idx) == b_.value(idx))
|
||||||
|
res.set_bit(idx, a_.value(idx));
|
||||||
|
else
|
||||||
|
res.set_bit(idx, BIT4_X);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned idx = min_size ; idx < max_size ; idx += 1)
|
||||||
|
res.set_bit(idx, BIT4_X);
|
||||||
|
|
||||||
|
vvp_send_vec4(ptr.ptr()->out, res);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The parser calls this function to create a logic functor. I allocate a
|
* The parser calls this function to create a logic functor. I allocate a
|
||||||
* functor, and map the name to the vvp_ipoint_t address for the
|
* functor, and map the name to the vvp_ipoint_t address for the
|
||||||
|
|
@ -194,7 +264,7 @@ void compile_functor(char*label, char*type,
|
||||||
obj = new table_functor_s(ft_MUXX);
|
obj = new table_functor_s(ft_MUXX);
|
||||||
|
|
||||||
} else if (strcmp(type, "MUXZ") == 0) {
|
} else if (strcmp(type, "MUXZ") == 0) {
|
||||||
obj = new table_functor_s(ft_MUXZ);
|
obj = new vvp_fun_muxz();
|
||||||
|
|
||||||
} else if (strcmp(type, "EEQ") == 0) {
|
} else if (strcmp(type, "EEQ") == 0) {
|
||||||
obj = new table_functor_s(ft_EEQ);
|
obj = new table_functor_s(ft_EEQ);
|
||||||
|
|
@ -244,6 +314,9 @@ void compile_functor(char*label, char*type,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: logic.cc,v $
|
* $Log: logic.cc,v $
|
||||||
|
* Revision 1.19 2005/02/12 22:50:52 steve
|
||||||
|
* Implement the vvp_fun_muxz functor.
|
||||||
|
*
|
||||||
* Revision 1.18 2005/02/07 22:42:42 steve
|
* Revision 1.18 2005/02/07 22:42:42 steve
|
||||||
* Add .repeat functor and BIFIF functors.
|
* Add .repeat functor and BIFIF functors.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
26
vvp/logic.h
26
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.11 2005/01/29 17:52:06 steve Exp $"
|
#ident "$Id: logic.h,v 1.12 2005/02/12 22:50:52 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "vvp_net.h"
|
# include "vvp_net.h"
|
||||||
|
|
@ -91,13 +91,28 @@ class vvp_fun_bufz: public vvp_net_fun_t {
|
||||||
private:
|
private:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The muxz functor is an A-B mux device, with the data inputs on
|
||||||
|
* ports 0 and 1. port 2 is the select input.
|
||||||
|
*/
|
||||||
|
class vvp_fun_muxz : public vvp_net_fun_t {
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit vvp_fun_muxz();
|
||||||
|
virtual ~vvp_fun_muxz();
|
||||||
|
|
||||||
|
void recv_vec4(vvp_net_ptr_t p, vvp_vector4_t bit);
|
||||||
|
|
||||||
|
private:
|
||||||
|
vvp_vector4_t a_;
|
||||||
|
vvp_vector4_t b_;
|
||||||
|
int select_;
|
||||||
|
};
|
||||||
|
|
||||||
// table functor types
|
// table functor types
|
||||||
|
|
||||||
extern const unsigned char ft_AND[];
|
|
||||||
extern const unsigned char ft_BUF[];
|
|
||||||
extern const unsigned char ft_BUFIF0[];
|
extern const unsigned char ft_BUFIF0[];
|
||||||
extern const unsigned char ft_BUFIF1[];
|
extern const unsigned char ft_BUFIF1[];
|
||||||
extern const unsigned char ft_BUFZ[];
|
|
||||||
extern const unsigned char ft_PMOS[];
|
extern const unsigned char ft_PMOS[];
|
||||||
extern const unsigned char ft_NMOS[];
|
extern const unsigned char ft_NMOS[];
|
||||||
extern const unsigned char ft_MUXX[];
|
extern const unsigned char ft_MUXX[];
|
||||||
|
|
@ -115,6 +130,9 @@ extern const unsigned char ft_var[];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: logic.h,v $
|
* $Log: logic.h,v $
|
||||||
|
* Revision 1.12 2005/02/12 22:50:52 steve
|
||||||
|
* Implement the vvp_fun_muxz functor.
|
||||||
|
*
|
||||||
* Revision 1.11 2005/01/29 17:52:06 steve
|
* Revision 1.11 2005/01/29 17:52:06 steve
|
||||||
* move AND to buitin instead of table.
|
* move AND to buitin instead of table.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue