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/XdlImporter.hpp"
00021 #include "torc/architecture/DDB.hpp"
00022 #include "torc/router/Trace.hpp"
00023 #include <map>
00024
00025
00026 #include "torc/common/DirectoryTree.hpp"
00027
00028
00029 #include "torc/physical/OutputStreamHelpers.hpp"
00030 #include "torc/common/TestHelpers.hpp"
00031 #include <fstream>
00032
00033 namespace torc {
00034 namespace router {
00035
00036 struct TraceUnitTestFixture {
00037
00038 architecture::DDB ddb;
00039 architecture::Tilewire twSource;
00040 architecture::Tilewire twSink1;
00041 architecture::Tilewire twSink2;
00042 architecture::Tilewire twMid;
00043
00044 TraceUnitTestFixture() : ddb("xc5vlx30") {
00045
00046 BOOST_MESSAGE("CONSTRUCT");
00047 BOOST_MESSAGE(ddb);
00048 ddb.useArc(ddb.tilePipToArc("CLBLL_X16Y42", "SITE_CTRL_B0", "L_CE"));
00049 ddb.useArc(ddb.tilePipToArc("CLBLL_X16Y42", "SITE_IMUX_B5", "L_A1"));
00050 ddb.useArc(ddb.tilePipToArc("INT_X16Y42", "CTRL0", "CTRL_B0"));
00051 ddb.useArc(ddb.tilePipToArc("INT_X16Y42", "FAN6", "FAN_BOUNCE6"));
00052 ddb.useArc(ddb.tilePipToArc("INT_X16Y42", "FAN_BOUNCE6", "GFAN1"));
00053 ddb.useArc(ddb.tilePipToArc("INT_X16Y42", "GFAN1", "CTRL0"));
00054 ddb.useArc(ddb.tilePipToArc("INT_X16Y42", "NL2END2", "FAN6"));
00055 ddb.useArc(ddb.tilePipToArc("INT_X16Y42", "NL2END2", "IMUX_B5"));
00056 ddb.useArc(ddb.tilePipToArc("INT_X16Y40", "NW2MID1", "NL2BEG2"));
00057
00058 twSource = ddb.lookupTilewire("INT_X16Y40", "NW2MID1");
00059 twSink1 = ddb.lookupTilewire("CLBLL_X16Y42", "L_CE");
00060 twSink2 = ddb.lookupTilewire("CLBLL_X16Y42", "L_A1");
00061 twMid = ddb.lookupTilewire("INT_X16Y42", "FAN_BOUNCE6");
00062
00063 BOOST_CHECK_EQUAL(ddb.getArcUsage().getArcUsageCount(), 9u);
00064 }
00065 ~TraceUnitTestFixture() {}
00066 };
00067
00068 BOOST_AUTO_TEST_SUITE(router)
00069
00070 BOOST_FIXTURE_TEST_SUITE(TraceT, TraceUnitTestFixture)
00071
00072 BOOST_AUTO_TEST_CASE(trace_full_net) {
00073 Trace trace(ddb, twMid, Trace::eTraceFullNet);
00074 BOOST_CHECK_EQUAL(trace.getSources().size(), 1u);
00075 BOOST_CHECK_EQUAL(trace.getSinks().size(), 2u);
00076 BOOST_CHECK_EQUAL(trace.getBranchPoints().size(), 1u);
00077 BOOST_CHECK_EQUAL(trace.getArcs().size(), 9u);
00078 }
00079
00080 BOOST_AUTO_TEST_CASE(trace_to_sinks) {
00081 Trace trace(ddb, twMid, Trace::eTraceToSinks);
00082 BOOST_CHECK_EQUAL(trace.getSources().size(), 0u);
00083 BOOST_CHECK_EQUAL(trace.getSinks().size(), 1u);
00084 BOOST_CHECK_EQUAL(trace.getBranchPoints().size(), 0u);
00085 BOOST_CHECK_EQUAL(trace.getArcs().size(), 4u);
00086 }
00087
00088 BOOST_AUTO_TEST_CASE(trace_to_branch) {
00089 Trace trace(ddb, twMid, Trace::eTraceToBranch);
00090 BOOST_CHECK_EQUAL(trace.getSources().size(), 0u);
00091 BOOST_CHECK_EQUAL(trace.getSinks().size(), 1u);
00092 BOOST_CHECK_EQUAL(trace.getBranchPoints().size(), 1u);
00093 BOOST_CHECK_EQUAL(trace.getArcs().size(), 6u);
00094 }
00095
00096 BOOST_AUTO_TEST_CASE(trace_to_sources) {
00097 Trace trace(ddb, twMid, Trace::eTraceToSources);
00098 BOOST_CHECK_EQUAL(trace.getSources().size(), 1u);
00099 BOOST_CHECK_EQUAL(trace.getSinks().size(), 0u);
00100 BOOST_CHECK_EQUAL(trace.getBranchPoints().size(), 1u);
00101 BOOST_CHECK_EQUAL(trace.getArcs().size(), 3u);
00102 }
00103
00104 BOOST_AUTO_TEST_CASE(trace_single_path) {
00105 Trace trace(ddb, twMid, Trace::eTraceSinglePath);
00106 BOOST_CHECK_EQUAL(trace.getSources().size(), 0u);
00107 BOOST_CHECK_EQUAL(trace.getSinks().size(), 1u);
00108 BOOST_CHECK_EQUAL(trace.getBranchPoints().size(), 1u);
00109 BOOST_CHECK_EQUAL(trace.getArcs().size(), 6u);
00110 }
00111
00112 BOOST_AUTO_TEST_SUITE_END()
00113
00114 BOOST_AUTO_TEST_SUITE_END()
00115
00116 }
00117 }