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/bitstream/Spartan6.hpp"
00021 #include "torc/architecture/DDB.hpp"
00022 #include "torc/common/DeviceDesignator.hpp"
00023 #include "torc/bitstream/OutputStreamHelpers.hpp"
00024 #include "torc/common/TestHelpers.hpp"
00025 #include "torc/common/DirectoryTree.hpp"
00026 #include <fstream>
00027 #include <iostream>
00028
00029 namespace torc {
00030 namespace bitstream {
00031
00032 BOOST_AUTO_TEST_SUITE(bitstream)
00033
00034
00035
00036 BOOST_AUTO_TEST_CASE(Spartan6UnitTest) {
00037
00038
00039
00040
00041 boost::uint16_t mask;
00042
00043 mask = Spartan6::ePacketMaskType + Spartan6::ePacketMaskOpcode
00044 + Spartan6::ePacketMaskTypeAddress + Spartan6::ePacketMaskType1Count;
00045 BOOST_CHECK_EQUAL(mask, 0xFFFFu);
00046
00047 mask = Spartan6::ePacketMaskType + Spartan6::ePacketMaskOpcode
00048 + Spartan6::ePacketMaskTypeAddress;
00049 BOOST_CHECK_EQUAL(mask, 0xFFE0u);
00050
00051 mask = Spartan6::eFarMajMaskBlock + Spartan6::eFarMajMaskRow + Spartan6::eFarMajMaskMajor;
00052 BOOST_CHECK_EQUAL(mask, 0xFFFFu);
00053
00054 mask = Spartan6::eFarMinMaskBlock + Spartan6::eFarMinMaskMinor;
00055 BOOST_CHECK_EQUAL(mask, 0xC1FFu);
00056
00057
00058
00059 BOOST_CHECK_EQUAL(Spartan6::sPacketTypeName[0], "[UNKNOWN TYPE 0]");
00060 BOOST_CHECK_EQUAL(Spartan6::sPacketTypeName[Spartan6::ePacketType1], "TYPE1");
00061 BOOST_CHECK_EQUAL(Spartan6::sPacketTypeName[Spartan6::ePacketType2], "TYPE2");
00062 BOOST_CHECK_EQUAL(Spartan6::sPacketTypeName[3], "[UNKNOWN TYPE 3]");
00063 BOOST_CHECK_EQUAL(Spartan6::sPacketTypeName[4], "[UNKNOWN TYPE 4]");
00064 BOOST_CHECK_EQUAL(Spartan6::sPacketTypeName[5], "[UNKNOWN TYPE 5]");
00065 BOOST_CHECK_EQUAL(Spartan6::sPacketTypeName[6], "[UNKNOWN TYPE 6]");
00066 BOOST_CHECK_EQUAL(Spartan6::sPacketTypeName[7], "[UNKNOWN TYPE 7]");
00067
00068
00069
00070 BOOST_CHECK_EQUAL(Spartan6::sOpcodeName[Spartan6::eOpcodeNOP], "NOP");
00071 BOOST_CHECK_EQUAL(Spartan6::sOpcodeName[Spartan6::eOpcodeRead], "READ");
00072 BOOST_CHECK_EQUAL(Spartan6::sOpcodeName[Spartan6::eOpcodeWrite], "WRITE");
00073 BOOST_CHECK_EQUAL(Spartan6::sOpcodeName[Spartan6::eOpcodeReserved], "RESERVED");
00074
00075
00076
00077 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterCRC], "CRC");
00078 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterFARMAJ], "FARMAJ");
00079 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterFARMIN], "FARMIN");
00080 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterFDRI], "FDRI");
00081 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterFDRO], "FDRO");
00082 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterCMD], "CMD");
00083 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterCTL], "CTL");
00084 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterMASK], "MASK");
00085 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterSTAT], "STAT");
00086 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterLOUT], "LOUT");
00087 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterCOR1], "COR1");
00088 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterCOR2], "COR2");
00089 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterPWRDN_REG], "PWRDN_REG");
00090 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterFLR], "FLR");
00091 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterIDCODE], "IDCODE");
00092 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterCWDT], "CWDT");
00093 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterHC_OPT_REG], "HC_OPT_REG");
00094 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterCSBO], "CSBO");
00095 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterGENERAL1], "GENERAL1");
00096 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterGENERAL2], "GENERAL2");
00097 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterGENERAL3], "GENERAL3");
00098 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterGENERAL4], "GENERAL4");
00099 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterGENERAL5], "GENERAL5");
00100 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterMODE_REG], "MODE_REG");
00101 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterPU_GWE], "PU_GWE");
00102 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterPU_GTS], "PU_GTS");
00103 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterMFWR], "MFWR");
00104 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterCCLK_FREQ], "CCLK_FREQ");
00105 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterSEU_OPT], "SEU_OPT");
00106 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterEXP_SIGN], "EXP_SIGN");
00107 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterRDBK_SIGN], "RDBK_SIGN");
00108 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterBOOSTS], "BOOSTS");
00109 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterEYE_MASK], "EYE_MASK");
00110 BOOST_CHECK_EQUAL(Spartan6::sRegisterName[Spartan6::eRegisterCBC_REG], "CBC_REG");
00111
00112
00113
00114 BOOST_CHECK_EQUAL(Spartan6::sCommandName[Spartan6::eCommandNULL], "NULL");
00115 BOOST_CHECK_EQUAL(Spartan6::sCommandName[Spartan6::eCommandWCFG], "WCFG");
00116 BOOST_CHECK_EQUAL(Spartan6::sCommandName[Spartan6::eCommandMFW], "MFW");
00117 BOOST_CHECK_EQUAL(Spartan6::sCommandName[Spartan6::eCommandLFRM], "LFRM");
00118 BOOST_CHECK_EQUAL(Spartan6::sCommandName[Spartan6::eCommandRCFG], "RCFG");
00119 BOOST_CHECK_EQUAL(Spartan6::sCommandName[Spartan6::eCommandSTART], "START");
00120 BOOST_CHECK_EQUAL(Spartan6::sCommandName[6], "[UNKNOWN COMMAND 6]");
00121 BOOST_CHECK_EQUAL(Spartan6::sCommandName[Spartan6::eCommandRCRC], "RCRC");
00122 BOOST_CHECK_EQUAL(Spartan6::sCommandName[Spartan6::eCommandAGHIGH], "AGHIGH");
00123 BOOST_CHECK_EQUAL(Spartan6::sCommandName[9], "[UNKNOWN COMMAND 9]");
00124 BOOST_CHECK_EQUAL(Spartan6::sCommandName[Spartan6::eCommandGRESTORE], "GRESTORE");
00125 BOOST_CHECK_EQUAL(Spartan6::sCommandName[Spartan6::eCommandSHUTDOWN], "SHUTDOWN");
00126 BOOST_CHECK_EQUAL(Spartan6::sCommandName[Spartan6::eCommandDESYNC], "DESYNC");
00127 BOOST_CHECK_EQUAL(Spartan6::sCommandName[Spartan6::eCommandIPROG], "IPROG");
00128
00129
00130 boost::filesystem::path regressionPath
00131 = torc::common::DirectoryTree::getExecutablePath() / "regression";
00132 boost::filesystem::path generatedPath = regressionPath / "Spartan6UnitTest.generated.bit";
00133
00134 boost::filesystem::path referencePath = regressionPath / "Spartan6UnitTest.reference.bit";
00135
00136
00137 std::fstream fileStream(referencePath.string().c_str(), std::ios::binary | std::ios::in);
00138
00139 BOOST_REQUIRE(fileStream.good());
00140 Spartan6 bitstream;
00141 bitstream.read(fileStream, false);
00142
00143
00144
00145 std::string designName = bitstream.getDesignName();
00146 std::string deviceName = bitstream.getDeviceName();
00147 std::string designDate = bitstream.getDesignDate();
00148 std::string designTime = bitstream.getDesignTime();
00149 torc::common::DeviceDesignator deviceDesignator(deviceName);
00150 std::cout << "family of " << deviceName << " is " << deviceDesignator.getFamily() << std::endl;
00151
00152
00153 std::fstream outputStream(generatedPath.string().c_str(), std::ios::binary | std::ios::out);
00154 BOOST_REQUIRE(outputStream.good());
00155 bitstream.write(outputStream);
00156 outputStream.flush();
00157
00158
00159 BOOST_CHECK(torc::common::fileContentsAreEqual(generatedPath, referencePath));
00160 }
00161 BOOST_AUTO_TEST_SUITE_END()
00162
00163 }
00164 }