2018-07-06 18:15:07 +08:00
|
|
|
/*
|
|
|
|
* nextpnr -- Next Generation Place and Route
|
|
|
|
*
|
|
|
|
* Copyright (C) 2018 Clifford Wolf <clifford@symbioticeda.com>
|
2018-07-25 02:21:31 +08:00
|
|
|
* Copyright (C) 2018 David Shah <david@symbioticeda.com>
|
2018-07-06 18:15:07 +08:00
|
|
|
*
|
|
|
|
* 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.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef NO_PYTHON
|
|
|
|
|
2018-07-25 02:21:31 +08:00
|
|
|
#include "arch_pybindings.h"
|
2018-07-06 18:15:07 +08:00
|
|
|
#include "nextpnr.h"
|
|
|
|
#include "pybindings.h"
|
|
|
|
|
|
|
|
NEXTPNR_NAMESPACE_BEGIN
|
|
|
|
|
2018-07-25 02:21:31 +08:00
|
|
|
void arch_wrap_python()
|
|
|
|
{
|
|
|
|
using namespace PythonConversion;
|
|
|
|
class_<ArchArgs>("ArchArgs").def_readwrite("type", &ArchArgs::type);
|
|
|
|
|
|
|
|
class_<BelId>("BelId").def_readwrite("index", &BelId::index);
|
|
|
|
|
|
|
|
class_<WireId>("WireId").def_readwrite("index", &WireId::index);
|
|
|
|
|
|
|
|
class_<PipId>("PipId").def_readwrite("index", &PipId::index);
|
|
|
|
|
|
|
|
class_<BelPin>("BelPin").def_readwrite("bel", &BelPin::bel).def_readwrite("pin", &BelPin::pin);
|
|
|
|
|
|
|
|
auto arch_cls = class_<Arch, Arch *, bases<BaseCtx>, boost::noncopyable>("Arch", init<ArchArgs>());
|
|
|
|
auto ctx_cls = class_<Context, Context *, bases<Arch>, boost::noncopyable>("Context", no_init)
|
|
|
|
.def("checksum", &Context::checksum)
|
|
|
|
.def("pack", &Context::pack)
|
|
|
|
.def("place", &Context::place)
|
|
|
|
.def("route", &Context::route);
|
|
|
|
|
2020-01-27 03:59:18 +08:00
|
|
|
fn_wrapper_2a<Context, decltype(&Context::isValidBelForCell), &Context::isValidBelForCell, pass_through<bool>,
|
|
|
|
addr_and_unwrap<CellInfo>, conv_from_str<BelId>>::def_wrap(ctx_cls, "isValidBelForCell");
|
|
|
|
|
2018-07-25 02:21:31 +08:00
|
|
|
typedef std::unordered_map<IdString, std::unique_ptr<CellInfo>> CellMap;
|
|
|
|
typedef std::unordered_map<IdString, std::unique_ptr<NetInfo>> NetMap;
|
2019-09-14 00:27:02 +08:00
|
|
|
typedef std::unordered_map<IdString, IdString> AliasMap;
|
2019-11-30 00:25:11 +08:00
|
|
|
typedef std::unordered_map<IdString, HierarchicalCell> HierarchyMap;
|
2018-07-25 02:21:31 +08:00
|
|
|
|
2019-09-15 22:59:16 +08:00
|
|
|
auto belpin_cls = class_<ContextualWrapper<BelPin>>("BelPin", no_init);
|
|
|
|
readonly_wrapper<BelPin, decltype(&BelPin::bel), &BelPin::bel, conv_to_str<BelId>>::def_wrap(belpin_cls, "bel");
|
|
|
|
readonly_wrapper<BelPin, decltype(&BelPin::pin), &BelPin::pin, conv_to_str<IdString>>::def_wrap(belpin_cls, "pin");
|
|
|
|
|
2019-09-15 23:15:07 +08:00
|
|
|
#include "arch_pybindings_shared.h"
|
|
|
|
|
2018-07-25 02:21:31 +08:00
|
|
|
WRAP_RANGE(Bel, conv_to_str<BelId>);
|
|
|
|
WRAP_RANGE(Wire, conv_to_str<WireId>);
|
|
|
|
WRAP_RANGE(AllPip, conv_to_str<PipId>);
|
|
|
|
WRAP_RANGE(Pip, conv_to_str<PipId>);
|
2019-09-15 22:59:16 +08:00
|
|
|
WRAP_RANGE(BelPin, wrap_context<BelPin>);
|
2018-07-25 02:21:31 +08:00
|
|
|
|
|
|
|
WRAP_MAP_UPTR(CellMap, "IdCellMap");
|
|
|
|
WRAP_MAP_UPTR(NetMap, "IdNetMap");
|
2019-11-30 00:25:11 +08:00
|
|
|
WRAP_MAP(HierarchyMap, wrap_context<HierarchicalCell &>, "HierarchyMap");
|
2018-07-25 02:21:31 +08:00
|
|
|
}
|
2018-07-06 18:15:07 +08:00
|
|
|
|
|
|
|
NEXTPNR_NAMESPACE_END
|
|
|
|
|
2018-07-25 02:21:31 +08:00
|
|
|
#endif // NO_PYTHON
|