00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <boost/test/unit_test.hpp>
00020 #include "torc/architecture/DDB.hpp"
00021 #include "torc/architecture/ArcUsage.hpp"
00022
00023 namespace torc {
00024 namespace architecture {
00025
00026 BOOST_AUTO_TEST_SUITE(architecture)
00027
00028 using namespace torc::architecture::xilinx;
00029
00030
00031 BOOST_AUTO_TEST_CASE(ArcUsageUnitTest) {
00032
00033 DDB ddb("xcv50");
00034 const Tiles& tiles = ddb.getTiles();
00035 Tilewire tilewire1 = ddb.lookupTilewire("R1C1", "S0_X");
00036 Tilewire tilewire2 = ddb.lookupTilewire("R1C1", "OUT0");
00037 Tilewire tilewire3(tilewire2.getTileIndex(), WireIndex(10000));
00038 Arc arc1(tilewire1, tilewire2);
00039 uint32_t virtexCenterArcCount = 1511u;
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 ArcUsage arcUsage(tiles);
00052 arcUsage.autosize();
00053 BOOST_CHECK(arcUsage.mBitsets.getSize() > 0);
00054 BOOST_CHECK(arcUsage.getArcUsageCount() == 0);
00055 BOOST_CHECK(arcUsage.getTileUsageCount() == TileCount(0));
00056 BOOST_CHECK(arcUsage.getBitCount() == 0);
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071 BOOST_CHECK_EQUAL(arcUsage.isUsed(arc1), false);
00072 arcUsage.use(arc1);
00073 BOOST_CHECK_EQUAL(arcUsage.isUsed(arc1), true);
00074 BOOST_CHECK_EQUAL(arcUsage.getArcUsageCount(), 1u);
00075 BOOST_CHECK_EQUAL(arcUsage.getTileUsageCount(), TileCount(1));
00076 BOOST_CHECK_EQUAL(arcUsage.getBitCount(), virtexCenterArcCount);
00077 arcUsage.release(arc1);
00078 BOOST_CHECK_EQUAL(arcUsage.isUsed(arc1), false);
00079 BOOST_CHECK_EQUAL(arcUsage.getArcUsageCount(), 0u);
00080 BOOST_CHECK_EQUAL(arcUsage.getTileUsageCount(), TileCount(1));
00081 BOOST_CHECK_EQUAL(arcUsage.getBitCount(), virtexCenterArcCount);
00082
00083
00084
00085
00086
00087 bool threwInvalidArcException = false;
00088 try {
00089
00090 (void) arcUsage.getArcOffset(Tilewire(), Tilewire());
00091 }
00092 catch(InvalidArcException iae) {
00093 threwInvalidArcException = true;
00094 }
00095 BOOST_CHECK_EQUAL(threwInvalidArcException, true);
00096 threwInvalidArcException = false;
00097 try {
00098
00099 (void) arcUsage.getArcOffset(tilewire1, tilewire2);
00100 }
00101 catch(InvalidArcException iae) {
00102 threwInvalidArcException = true;
00103 }
00104 BOOST_CHECK_EQUAL(threwInvalidArcException, false);
00105 threwInvalidArcException = false;
00106 try {
00107
00108 (void) arcUsage.getArcOffset(tilewire1, tilewire3);
00109 }
00110 catch(InvalidArcException iae) {
00111 threwInvalidArcException = true;
00112 }
00113 BOOST_CHECK_EQUAL(threwInvalidArcException, true);
00114
00115
00116
00117 arcUsage.use(arc1);
00118 arcUsage.clear();
00119 BOOST_CHECK_EQUAL(arcUsage.getArcUsageCount(), 0u);
00120 BOOST_CHECK_EQUAL(arcUsage.getTileUsageCount(), TileCount(1));
00121 BOOST_CHECK_EQUAL(arcUsage.getBitCount(), virtexCenterArcCount);
00122
00123
00124
00125 ArcUsage* arcUsagePtr = new ArcUsage(tiles);
00126 arcUsagePtr->autosize();
00127 arcUsagePtr->use(arc1);
00128 arcUsagePtr->~ArcUsage();
00129 uint32_t bitsetsAfterDestruction = 0;
00130 for(uint32_t i = 0; i < arcUsagePtr->mBitsets.getSize(); i++) {
00131 bitsetsAfterDestruction += (arcUsagePtr->mBitsets[i] != 0);
00132 }
00133 BOOST_CHECK_EQUAL(bitsetsAfterDestruction, 0u);
00134 }
00135
00136 BOOST_AUTO_TEST_SUITE_END()
00137
00138 }
00139 }