00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "torc/bitstream/Factory.hpp"
00020 #include "torc/bitstream/Virtex.hpp"
00021 #include "torc/bitstream/VirtexE.hpp"
00022 #include "torc/bitstream/Virtex2.hpp"
00023 #include "torc/bitstream/Virtex2P.hpp"
00024 #include "torc/bitstream/Virtex4.hpp"
00025 #include "torc/bitstream/Virtex5.hpp"
00026 #include "torc/bitstream/Virtex6.hpp"
00027 #include "torc/bitstream/Virtex7.hpp"
00028 #include "torc/bitstream/Spartan3E.hpp"
00029 #include "torc/bitstream/Spartan6.hpp"
00030 #include <fstream>
00031
00032 namespace torc {
00033 namespace bitstream {
00034
00035 using torc::common::DeviceDesignator;
00036
00037 BitstreamSharedPtr Factory::newBitstreamPtr(const boost::filesystem::path& inPath) {
00038
00039 BitstreamSharedPtr bitstreamPtr;
00040 std::fstream fileStream(inPath.string().c_str(), std::ios::binary | std::ios::in);
00041 if(!fileStream.good()) return bitstreamPtr;
00042
00043
00044 Bitstream bitstream;
00045 bitstream.readHeader(fileStream);
00046 DeviceDesignator designator(bitstream.getDeviceName());
00047
00048
00049 switch(designator.getFamily()) {
00050 case DeviceDesignator::eFamilyVirtex:
00051 bitstreamPtr = BitstreamSharedPtr(new Virtex()); break;
00052 case DeviceDesignator::eFamilyVirtexE:
00053 bitstreamPtr = BitstreamSharedPtr(new VirtexE()); break;
00054 case DeviceDesignator::eFamilyVirtex2:
00055 bitstreamPtr = BitstreamSharedPtr(new Virtex2()); break;
00056 case DeviceDesignator::eFamilyVirtex2P:
00057 bitstreamPtr = BitstreamSharedPtr(new Virtex2P()); break;
00058 case DeviceDesignator::eFamilyVirtex4:
00059 bitstreamPtr = BitstreamSharedPtr(new Virtex4()); break;
00060 case DeviceDesignator::eFamilyVirtex5:
00061 bitstreamPtr = BitstreamSharedPtr(new Virtex5()); break;
00062 case DeviceDesignator::eFamilyVirtex6:
00063 case DeviceDesignator::eFamilyVirtex6L:
00064 bitstreamPtr = BitstreamSharedPtr(new Virtex6()); break;
00065 case DeviceDesignator::eFamilyVirtex7:
00066 case DeviceDesignator::eFamilyVirtex7L:
00067 case DeviceDesignator::eFamilyKintex7:
00068 case DeviceDesignator::eFamilyKintex7L:
00069 bitstreamPtr = BitstreamSharedPtr(new Virtex7()); break;
00070 case DeviceDesignator::eFamilySpartan3E:
00071 bitstreamPtr = BitstreamSharedPtr(new Spartan3E()); break;
00072 case DeviceDesignator::eFamilySpartan6:
00073 case DeviceDesignator::eFamilySpartan6L:
00074 bitstreamPtr = BitstreamSharedPtr(new Spartan6()); break;
00075 default:
00076 return bitstreamPtr;
00077 }
00078
00079
00080 fileStream.seekg(0, std::ios::beg);
00081 bitstreamPtr->read(fileStream);
00082
00083
00084 return bitstreamPtr;
00085 }
00086
00087 }
00088 }