From d3f74eb0567b557f261018131a04ab5eed3ddb7e Mon Sep 17 00:00:00 2001 From: David Shah Date: Fri, 1 Jun 2018 15:53:46 +0200 Subject: [PATCH] Simple Python test working Signed-off-by: David Shah --- common/pybindings.cc | 4 ++-- dummy/pybindings.cc | 20 ++++++++++++++++++++ ice40/pybindings.cc | 37 +++++++++++++++++++++++++++++++++++++ python_test.py | 6 ++++++ 4 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 python_test.py diff --git a/common/pybindings.cc b/common/pybindings.cc index 22c06c2e..839ba7df 100644 --- a/common/pybindings.cc +++ b/common/pybindings.cc @@ -37,6 +37,7 @@ using namespace boost::python; A wrapper for a Pythonised nextpnr Iterator. The actual class wrapped is a pair containing (current, end) */ + template struct iterator_wrapper { typedef decltype(*(std::declval())) value_t; @@ -56,7 +57,7 @@ struct iterator_wrapper { static void wrap(const char *python_name) { class_>(python_name, no_init) - .def("next", next); + .def("__next__", next); } }; @@ -65,7 +66,6 @@ A wrapper for a nextpnr Range. Ranges should have two functions, begin() and end() which return iterator-like objects supporting ++, * and != Full STL iterator semantics are not required, unlike the standard Boost wrappers */ -inline object pass_through(object const &o) { return o; } template struct range_wrapper { diff --git a/dummy/pybindings.cc b/dummy/pybindings.cc index 5e49eaa5..eaecaa3b 100644 --- a/dummy/pybindings.cc +++ b/dummy/pybindings.cc @@ -1,3 +1,23 @@ +/* + * nextpnr -- Next Generation Place and Route + * + * Copyright (C) 2018 Clifford Wolf + * Copyright (C) 2018 David Shah + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + #include "design.h" #include "chip.h" #include diff --git a/ice40/pybindings.cc b/ice40/pybindings.cc index 4f409194..a1906366 100644 --- a/ice40/pybindings.cc +++ b/ice40/pybindings.cc @@ -1,3 +1,23 @@ +/* + * nextpnr -- Next Generation Place and Route + * + * Copyright (C) 2018 Clifford Wolf + * Copyright (C) 2018 David Shah + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + #include "design.h" #include "chip.h" #include @@ -24,4 +44,21 @@ void arch_wrap_python() { .value("UP5K", ChipArgs::UP5K) .export_values(); + class_("BelId") + .def_readwrite("index", &BelId::index) + .def("nil", &BelId::nil); + + class_("WireId") + .def_readwrite("index", &WireId::index) + .def("nil", &WireId::nil); + + class_("Chip", init()) + .def("getBelByName", &Chip::getBelByName) + .def("getWireByName", &Chip::getWireByName) + .def("getBelName", &Chip::getBelName) + .def("getWireName", &Chip::getWireName) + .def("getBels", &Chip::getBels) + .def("getWires", &Chip::getWires); + + } diff --git a/python_test.py b/python_test.py new file mode 100644 index 00000000..1a6ebfc6 --- /dev/null +++ b/python_test.py @@ -0,0 +1,6 @@ +from nextpnrpy_ice40 import Chip, ChipArgs, iCE40Type +args = ChipArgs() +args.type = iCE40Type.LP384 +chip = Chip(args) +for wire in chip.getWires(): + print(chip.getWireName(wire))