00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef TORC_PACKER_UNPACKER_HPP
00017 #define TORC_PACKER_UNPACKER_HPP
00018
00019 #include "torc/physical/Design.hpp"
00020 #include "torc/physical/Instance.hpp"
00021 #include "torc/physical/ConfigMap.hpp"
00022 #include "torc/architecture/DDB.hpp"
00023 #include "PrimitiveStructure.hpp"
00024 #include <boost/smart_ptr.hpp>
00025 #include <iostream>
00026 #include <string>
00027 #include <map>
00028
00029 namespace torc {
00030 namespace packer {
00031
00032 namespace packer { class UnpackerUnitTest; }
00033
00034 class Unpacker {
00035
00036 protected:
00037
00038 friend class torc::packer::packer::UnpackerUnitTest;
00039
00040
00041
00042 typedef std::string string;
00043
00044 typedef torc::physical::DesignSharedPtr DesignSharedPtr;
00045 typedef torc::physical::InstanceSharedPtrVector InstanceSharedPtrVector;
00046 typedef torc::physical::Circuit::InstanceSharedPtrConstIterator
00047 InstanceSharedPtrConstIterator;
00048 typedef torc::architecture::DDB DDB;
00049 typedef torc::physical::ConfigMap ConfigMap;
00050
00051 typedef std::map<std::string, PrimitiveStructureSharedPtr>
00052 PrimitiveStructuresSharedPtrMap;
00053
00054 typedef std::vector<const torc::architecture::PrimitiveElementPin*>
00055 PrimitiveElementPinPtrVector;
00056
00057 typedef std::map<const torc::architecture::PrimitiveElementPin*,
00058 PrimitiveElementPinPtrVector> CandidateNet;
00059
00060 typedef std::map<std::string, const PrimitiveStructure::PrimitiveElement*>
00061 NameToElementPtrMap;
00062
00063 typedef std::map<const torc::architecture::PrimitiveElement*,
00064 torc::physical::InstanceSharedPtr> ElementPtrToInstancePtrMap;
00065
00066
00067 PrimitiveStructuresSharedPtrMap mPrimitiveStructures;
00068 InstanceSharedPtrVector mInstances;
00069 DesignSharedPtr mDesignPtr;
00070 DDB* mDDBPtr;
00071
00072
00073 virtual void initialize(void);
00074
00075 void unpack(void);
00076
00077 void unpack(InstanceSharedPtrConstIterator inBegin, InstanceSharedPtrConstIterator inEnd);
00078
00079 bool findNextElement(const PrimitiveStructure& inPrimitiveStructure,
00080 const torc::architecture::PrimitiveElement& element,
00081 torc::physical::InstanceSharedPtr& inInstancePtr,
00082 NameToElementPtrMap& inUsedElements,
00083 std::vector<std::string> inInstanceInputPins,
00084 CandidateNet& inElementPinsForNet,
00085 const torc::architecture::PrimitiveElementPin*
00086 &outNetSourcePin,
00087 std::vector<torc::physical::InstanceSharedPtr>
00088 &outNewInstances,
00089 ElementPtrToInstancePtrMap &elementToInstanceMap);
00090
00091 public:
00092
00093 Unpacker(DesignSharedPtr& inDesignPtr) : mDesignPtr(inDesignPtr), mDDBPtr(0) {
00094 initialize();
00095 }
00096
00097
00098 virtual ~Unpacker(void) {}
00099
00100 };
00101
00102 }
00103 }
00104
00105 #endif // TORC_PACKER_UNPACKER_HPP