From 5908b57413f83077f082cf566d0dfbf5e76703b1 Mon Sep 17 00:00:00 2001 From: Eddie Hung Date: Thu, 7 Feb 2019 13:00:26 -0800 Subject: Copy of existing nextpnr/tests subdir --- ice40/hx1k.cc | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 ice40/hx1k.cc (limited to 'ice40/hx1k.cc') diff --git a/ice40/hx1k.cc b/ice40/hx1k.cc new file mode 100644 index 0000000..741c954 --- /dev/null +++ b/ice40/hx1k.cc @@ -0,0 +1,106 @@ +/* + * nextpnr -- Next Generation Place and Route + * + * Copyright (C) 2018 Clifford Wolf + * Copyright (C) 2018 Miodrag Milanovic + * + * 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 +#include "gtest/gtest.h" +#include "nextpnr.h" + +USING_NEXTPNR_NAMESPACE + +class HX1KTest : public ::testing::Test +{ + protected: + virtual void SetUp() + { + chipArgs.type = ArchArgs::HX1K; + chipArgs.package = "tq144"; + ctx = new Context(chipArgs); + } + + virtual void TearDown() { delete ctx; } + + ArchArgs chipArgs; + Context *ctx; +}; + +TEST_F(HX1KTest, bel_names) +{ + int bel_count = 0; + for (auto bel : ctx->getBels()) { + auto name = ctx->getBelName(bel); + ASSERT_EQ(bel, ctx->getBelByName(name)); + bel_count++; + } + ASSERT_EQ(bel_count, 1418); +} + +TEST_F(HX1KTest, wire_names) +{ + int wire_count = 0; + for (auto wire : ctx->getWires()) { + auto name = ctx->getWireName(wire); + assert(wire == ctx->getWireByName(name)); + wire_count++; + } + ASSERT_EQ(wire_count, 32802); +} + +TEST_F(HX1KTest, pip_names) +{ + int pip_count = 0; + for (auto pip : ctx->getPips()) { + auto name = ctx->getPipName(pip); + assert(pip == ctx->getPipByName(name)); + pip_count++; + } + ASSERT_EQ(pip_count, 345504); +} + +TEST_F(HX1KTest, uphill_to_downhill) +{ + for (auto dst : ctx->getWires()) { + for (auto uphill_pip : ctx->getPipsUphill(dst)) { + bool found_downhill = false; + for (auto downhill_pip : ctx->getPipsDownhill(ctx->getPipSrcWire(uphill_pip))) { + if (uphill_pip == downhill_pip) { + ASSERT_FALSE(found_downhill); + found_downhill = true; + } + } + ASSERT_TRUE(found_downhill); + } + } +} + +TEST_F(HX1KTest, downhill_to_uphill) +{ + for (auto dst : ctx->getWires()) { + for (auto downhill_pip : ctx->getPipsDownhill(dst)) { + bool found_uphill = false; + for (auto uphill_pip : ctx->getPipsUphill(ctx->getPipDstWire(downhill_pip))) { + if (uphill_pip == downhill_pip) { + ASSERT_FALSE(found_uphill); + found_uphill = true; + } + } + ASSERT_TRUE(found_uphill); + } + } +} -- cgit v1.2.3