Add Xilinx support for A/B MUX devices.
This commit is contained in:
parent
7b933eddd4
commit
253f3bc660
|
|
@ -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: d-virtex.c,v 1.25 2003/06/25 02:55:57 steve Exp $"
|
#ident "$Id: d-virtex.c,v 1.26 2003/06/26 03:57:05 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "device.h"
|
# include "device.h"
|
||||||
|
|
@ -670,7 +670,7 @@ const struct device_s d_virtex_edif = {
|
||||||
virtex_eq,
|
virtex_eq,
|
||||||
virtex_eq,
|
virtex_eq,
|
||||||
virtex_ge,
|
virtex_ge,
|
||||||
0,
|
xilinx_mux,
|
||||||
virtex_add,
|
virtex_add,
|
||||||
virtex_add,
|
virtex_add,
|
||||||
xilinx_shiftl,
|
xilinx_shiftl,
|
||||||
|
|
@ -680,6 +680,9 @@ const struct device_s d_virtex_edif = {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: d-virtex.c,v $
|
* $Log: d-virtex.c,v $
|
||||||
|
* Revision 1.26 2003/06/26 03:57:05 steve
|
||||||
|
* Add Xilinx support for A/B MUX devices.
|
||||||
|
*
|
||||||
* Revision 1.25 2003/06/25 02:55:57 steve
|
* Revision 1.25 2003/06/25 02:55:57 steve
|
||||||
* Virtex and Virtex2 share much code.
|
* Virtex and Virtex2 share much code.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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: d-virtex2.c,v 1.14 2003/06/25 02:55:57 steve Exp $"
|
#ident "$Id: d-virtex2.c,v 1.15 2003/06/26 03:57:05 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "device.h"
|
# include "device.h"
|
||||||
|
|
@ -141,7 +141,7 @@ const struct device_s d_virtex2_edif = {
|
||||||
virtex_eq,
|
virtex_eq,
|
||||||
virtex_eq,
|
virtex_eq,
|
||||||
virtex_ge,
|
virtex_ge,
|
||||||
0,
|
xilinx_mux,
|
||||||
virtex_add,
|
virtex_add,
|
||||||
virtex_add,
|
virtex_add,
|
||||||
xilinx_shiftl, /* show_shiftl */
|
xilinx_shiftl, /* show_shiftl */
|
||||||
|
|
@ -151,6 +151,9 @@ const struct device_s d_virtex2_edif = {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: d-virtex2.c,v $
|
* $Log: d-virtex2.c,v $
|
||||||
|
* Revision 1.15 2003/06/26 03:57:05 steve
|
||||||
|
* Add Xilinx support for A/B MUX devices.
|
||||||
|
*
|
||||||
* Revision 1.14 2003/06/25 02:55:57 steve
|
* Revision 1.14 2003/06/25 02:55:57 steve
|
||||||
* Virtex and Virtex2 share much code.
|
* Virtex and Virtex2 share much code.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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: xilinx.c,v 1.2 2003/06/25 02:55:57 steve Exp $"
|
#ident "$Id: xilinx.c,v 1.3 2003/06/26 03:57:05 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "edif.h"
|
# include "edif.h"
|
||||||
|
|
@ -485,6 +485,56 @@ void xilinx_logic(ivl_net_logic_t net)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A fully generic Xilinx MUX is implemented entirely from LUT
|
||||||
|
* devices.
|
||||||
|
*/
|
||||||
|
void xilinx_mux(ivl_lpm_t net)
|
||||||
|
{
|
||||||
|
unsigned idx;
|
||||||
|
|
||||||
|
edif_cellref_t lut;
|
||||||
|
edif_joint_t jnt;
|
||||||
|
|
||||||
|
assert(ivl_lpm_selects(net) == 1);
|
||||||
|
|
||||||
|
/* A/B Mux devices are made from LUT3 devices. I0 is connected
|
||||||
|
to A, I1 to B, and I2 to the Select input. Create as many
|
||||||
|
as are needed to implement the requested width.
|
||||||
|
|
||||||
|
S B A | Q
|
||||||
|
------+--
|
||||||
|
0 0 0 | 0
|
||||||
|
0 0 1 | 1
|
||||||
|
0 1 0 | 0
|
||||||
|
0 1 1 | 1
|
||||||
|
1 0 0 | 0
|
||||||
|
1 0 1 | 0
|
||||||
|
1 1 0 | 1
|
||||||
|
1 1 1 | 1
|
||||||
|
|
||||||
|
INIT = "CA" */
|
||||||
|
|
||||||
|
for (idx = 0 ; idx < ivl_lpm_width(net) ; idx += 1) {
|
||||||
|
|
||||||
|
lut = edif_cellref_create(edf, xilinx_cell_lut3(xlib));
|
||||||
|
|
||||||
|
jnt = edif_joint_of_nexus(edf, ivl_lpm_q(net, idx));
|
||||||
|
edif_add_to_joint(jnt, lut, LUT_O);
|
||||||
|
|
||||||
|
jnt = edif_joint_of_nexus(edf, ivl_lpm_data2(net, 0, idx));
|
||||||
|
edif_add_to_joint(jnt, lut, LUT_I0);
|
||||||
|
|
||||||
|
jnt = edif_joint_of_nexus(edf, ivl_lpm_data2(net, 1, idx));
|
||||||
|
edif_add_to_joint(jnt, lut, LUT_I1);
|
||||||
|
|
||||||
|
jnt = edif_joint_of_nexus(edf, ivl_lpm_select(net, 0));
|
||||||
|
edif_add_to_joint(jnt, lut, LUT_I2);
|
||||||
|
|
||||||
|
edif_cellref_pstring(lut, "INIT", "CA");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Any Xilinx device works with this adder.
|
* Any Xilinx device works with this adder.
|
||||||
* Generic Xilinx add only works for single bit slices.
|
* Generic Xilinx add only works for single bit slices.
|
||||||
|
|
@ -682,6 +732,9 @@ void xilinx_shiftl(ivl_lpm_t net)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: xilinx.c,v $
|
* $Log: xilinx.c,v $
|
||||||
|
* Revision 1.3 2003/06/26 03:57:05 steve
|
||||||
|
* Add Xilinx support for A/B MUX devices.
|
||||||
|
*
|
||||||
* Revision 1.2 2003/06/25 02:55:57 steve
|
* Revision 1.2 2003/06/25 02:55:57 steve
|
||||||
* Virtex and Virtex2 share much code.
|
* Virtex and Virtex2 share much code.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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: xilinx.h,v 1.2 2003/06/25 02:55:57 steve Exp $"
|
#ident "$Id: xilinx.h,v 1.3 2003/06/26 03:57:05 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -104,11 +104,15 @@ extern void virtex_add(ivl_lpm_t net);
|
||||||
extern void xilinx_show_scope(ivl_scope_t scope);
|
extern void xilinx_show_scope(ivl_scope_t scope);
|
||||||
extern void xilinx_pad(ivl_signal_t, const char*str);
|
extern void xilinx_pad(ivl_signal_t, const char*str);
|
||||||
extern void xilinx_logic(ivl_net_logic_t net);
|
extern void xilinx_logic(ivl_net_logic_t net);
|
||||||
|
extern void xilinx_mux(ivl_lpm_t net);
|
||||||
extern void xilinx_add(ivl_lpm_t net);
|
extern void xilinx_add(ivl_lpm_t net);
|
||||||
extern void xilinx_shiftl(ivl_lpm_t net);
|
extern void xilinx_shiftl(ivl_lpm_t net);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: xilinx.h,v $
|
* $Log: xilinx.h,v $
|
||||||
|
* Revision 1.3 2003/06/26 03:57:05 steve
|
||||||
|
* Add Xilinx support for A/B MUX devices.
|
||||||
|
*
|
||||||
* Revision 1.2 2003/06/25 02:55:57 steve
|
* Revision 1.2 2003/06/25 02:55:57 steve
|
||||||
* Virtex and Virtex2 share much code.
|
* Virtex and Virtex2 share much code.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue