00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef TORC_ARCHITECTURE_SITE_HPP
00020 #define TORC_ARCHITECTURE_SITE_HPP
00021
00022 #include "torc/architecture/XilinxDatabaseTypes.hpp"
00023 #include "torc/architecture/PrimitiveDef.hpp"
00024 #include "torc/architecture/Tilewire.hpp"
00025
00026 namespace torc {
00027 namespace architecture {
00028
00029
00030 class Site {
00031 protected:
00032
00033
00034 friend class Sites;
00035
00036 typedef std::string string;
00037 typedef xilinx::PinIndex PinIndex;
00038 typedef xilinx::TileIndex TileIndex;
00039 typedef xilinx::WireIndex WireIndex;
00040 typedef xilinx::SiteFlags SiteFlags;
00041 public:
00042
00043
00044 typedef Array<const WireIndex> WireIndexArray;
00045 protected:
00046
00047
00048 string mName;
00049
00050 const PrimitiveDef* mPrimitiveDefPtr;
00051
00052 TileIndex mTileIndex;
00053
00054 SiteFlags mFlags;
00055
00056 const WireIndexArray* mPinMapPtr;
00057
00058
00059 Site(const string& inName, const PrimitiveDef& inPrimitiveDef,
00060 TileIndex inTileIndex, SiteFlags inFlags, const WireIndexArray& inPinMap)
00061 : mName(inName), mPrimitiveDefPtr(&inPrimitiveDef), mTileIndex(inTileIndex),
00062 mFlags(inFlags), mPinMapPtr(&inPinMap) {
00063 }
00064 public:
00065
00066
00067 Site(void) : mName(), mPrimitiveDefPtr(0), mTileIndex(), mFlags(), mPinMapPtr(0) {}
00068
00069
00070 const Tilewire getPinTilewire(const std::string& inName) const {
00071 if(mPrimitiveDefPtr == 0) return Tilewire::sInvalid;
00072 PinIndex pinIndex = mPrimitiveDefPtr->findPinIndexByName(inName);
00073 if(pinIndex.isUndefined()) return Tilewire::sInvalid;
00074 if(mPinMapPtr == 0) return Tilewire::sInvalid;
00075 return Tilewire(mTileIndex, (*mPinMapPtr)[pinIndex]);
00076 }
00077
00078
00079 const string& getName(void) const { return mName; }
00080
00081 const PrimitiveDef* getPrimitiveDefPtr(void) const { return mPrimitiveDefPtr; }
00082
00083 TileIndex getTileIndex(void) const { return mTileIndex; }
00084
00085 SiteFlags getFlags(void) const { return mFlags; }
00086
00087 const WireIndexArray* getPinMapPtr(void) const { return mPinMapPtr; }
00088 };
00089
00090 }
00091 }
00092
00093 #endif // TORC_ARCHITECTURE_SITE_HPP