aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/pybindings.cc4
-rw-r--r--dummy/pybindings.cc20
-rw-r--r--ice40/pybindings.cc37
-rw-r--r--python_test.py6
4 files changed, 65 insertions, 2 deletions
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<Iterator, Iterator> containing (current, end)
*/
+
template<typename T>
struct iterator_wrapper {
typedef decltype(*(std::declval<T>())) value_t;
@@ -56,7 +57,7 @@ struct iterator_wrapper {
static void wrap(const char *python_name) {
class_<std::pair<T, T>>(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<typename T>
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 <clifford@clifford.at>
+ * Copyright (C) 2018 David Shah <dave@ds0.me>
+ *
+ * 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 <utility>
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 <clifford@clifford.at>
+ * Copyright (C) 2018 David Shah <dave@ds0.me>
+ *
+ * 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 <utility>
@@ -24,4 +44,21 @@ void arch_wrap_python() {
.value("UP5K", ChipArgs::UP5K)
.export_values();
+ class_<BelId>("BelId")
+ .def_readwrite("index", &BelId::index)
+ .def("nil", &BelId::nil);
+
+ class_<WireId>("WireId")
+ .def_readwrite("index", &WireId::index)
+ .def("nil", &WireId::nil);
+
+ class_<Chip>("Chip", init<ChipArgs>())
+ .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))