30 "[UNKNOWN TYPE 0]",
"TYPE1",
"TYPE2",
"[UNKNOWN TYPE 3]",
"[UNKNOWN TYPE 4]",
31 "[UNKNOWN TYPE 5]",
"[UNKNOWN TYPE 6]",
"[UNKNOWN TYPE 7]"
35 "NOP",
"READ",
"WRITE",
"RESERVED"
39 "CRC",
"FAR",
"FDRI",
"FDRO",
"CMD",
"CTL0",
"MASK",
"STAT",
"LOUT",
"COR0",
40 "MFWR",
"CBC",
"IDCODE",
"AXSS",
"COR1",
"[UNKNOWN REG 15]",
"WBSTAR",
"TIMER",
41 "[UNKNOWN REG 18]",
"[UNKNOWN REG 19]",
"[UNKNOWN REG 20]",
"[UNKNOWN REG 21]",
42 "BOOTSTS",
"[UNKNOWN REG 23]",
"CTL1"
46 "NULL",
"WCFG",
"MFW",
"DGHIGH/LFRM",
"RCFG",
"START",
"RCAP",
"RCRC",
47 "AGHIGH",
"SWITCH",
"GRESTORE",
"SHUTDOWN",
"GCAPTURE",
"DESYNCH",
"Reserved",
48 "IPROG",
"CRCC",
"LTIMER"
51 #define VALUES (const char*[])
55 {0x00000001, 0,
"GTS_USER_B",
"GTS_USER_B", 0,
58 VALUES{
"IoDisabled",
"IoActive", 0}},
59 {0x00000008, 3,
"Persist",
"PERSIST", 0,
63 {0x00000030, 4,
"Security",
"SBITS", 0,
67 VALUES{
"None",
"Level1",
"Level2",
"Level2", 0}},
68 {0x00000040, 6,
"Encrypt",
"DEC", 0,
72 {0x00000080, 7,
"FARSRC",
"FARSRC", 0,
76 {0x00000100, 8,
"GLUTMASK",
"GLUTMASK", 0,
81 VALUES{
"Masked",
"Dynamic", 0}},
82 {0x00001000, 12,
"OverTempPowerDown",
"OverTempPowerDown", 0,
85 VALUES{
"Disable",
"Enable", 0}},
86 {0x40000000, 30,
"ICAP_sel",
"ICAP_SEL", 0,
89 VALUES{
"Top",
"Bottom", 0}},
90 {0x80000000, 31,
"EFUSE_key",
"EFUSE_KEY", 0,
99 {0x00000001, 0,
"GTS_USER_B",
"GTS_USER_B", 0,
VALUES{
"Protected",
"Writable", 0}},
100 {0x00000008, 3,
"Persist",
"PERSIST", 0,
VALUES{
"Protected",
"Writable", 0}},
101 {0x00000030, 4,
"Security",
"SBITS", 0,
102 VALUES{
"Protected",
"[UNKNOWN 1]",
"[UNKNOWN 2]",
"Writable", 0}},
103 {0x00000040, 6,
"Encrypt",
"DEC", 0,
VALUES{
"Protected",
"Writable", 0}},
104 {0x00000080, 7,
"FARSRC",
"FARSRC", 0,
VALUES{
"Protected",
"Writable", 0}},
105 {0x00000100, 8,
"GLUTMASK",
"GLUTMASK", 0,
VALUES{
"Protected",
"Writable", 0}},
106 {0x00001000, 12,
"OverTempPowerDown",
"OverTempPowerDown", 0,
107 VALUES{
"Protected",
"Writable", 0}},
108 {0x40000000, 30,
"ICAP_sel",
"ICAP_SEL", 0,
VALUES{
"Protected",
"Writable", 0}},
109 {0x80000000, 31,
"EFUSE_key",
"EFUSE_KEY", 0,
VALUES{
"Protected",
"Writable", 0}},
121 {0x00000007, 0,
"GWE_cycle",
"GWE_CYCLE", 5,
125 VALUES{
"1",
"2",
"3",
"4",
"5",
"6",
"Done",
"Keep", 0}},
126 {0x00000038, 3,
"GTS_cycle",
"GTS_CYCLE", 4,
130 VALUES{
"1",
"2",
"3",
"4",
"5",
"6",
"Done",
"Keep", 0}},
131 {0x000001C0, 6,
"LCK_cycle",
"LOCK_CYCLE", 0,
134 VALUES{
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"No Wait", 0}},
135 {0x00000E00, 9,
"Match_cycle",
"MATCH_CYCLE", 0,
138 VALUES{
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"NoWait", 0}},
139 {0x00007000, 12,
"DONE_cycle",
"DONE_CYCLE", 3,
142 VALUES{
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"KEEP", 0}},
143 {0x00018000, 15,
"StartupClk",
"SSCLKSRC", 0,
146 VALUES{
"Cclk",
"UserClk",
"JtagClk",
"JtagClk", 0}},
147 {0x007e0000, 17,
"ConfigRate",
"OSCFSEL", 0,
151 "[UNKNOWN 0]",
"[UNKNOWN 1]",
"[UNKNOWN 2]",
"[UNKNOWN 3]",
152 "[UNKNOWN 4]",
"[UNKNOWN 5]",
"[UNKNOWN 6]",
"[UNKNOWN 7]",
153 "[UNKNOWN 8]",
"[UNKNOWN 9]",
"[UNKNOWN 10]",
"[UNKNOWN 11]",
154 "[UNKNOWN 12]",
"[UNKNOWN 13]",
"[UNKNOWN 14]",
"[UNKNOWN 15]",
155 "[UNKNOWN 16]",
"[UNKNOWN 17]",
"[UNKNOWN 18]",
"[UNKNOWN 19]",
156 "[UNKNOWN 20]",
"[UNKNOWN 21]",
"[UNKNOWN 22]",
"[UNKNOWN 23]",
157 "[UNKNOWN 24]",
"[UNKNOWN 25]",
"[UNKNOWN 26]",
"[UNKNOWN 27]",
158 "[UNKNOWN 28]",
"[UNKNOWN 29]",
"[UNKNOWN 30]",
"[UNKNOWN 31]",
160 {0x00800000, 23,
"Capture",
"SINGLE", 0,
163 VALUES{
"Continuous",
"OneShot", 0}},
164 {0x01000000, 24,
"DriveDone",
"DRIVE_DONE", 0,
168 {0x02000000, 25,
"DonePipe",
"DONE_PIPE", 0,
172 {0x08000000, 27,
"DONE_status",
"PWRDWN_STAT", 0,
175 VALUES{
"DonePin",
"PowerdownPin", 0}},
181 {0x00000003, 0,
"BPI_page_size",
"BPI_PAGE_SIZE", 0,
184 VALUES{
"1",
"4",
"8",
"Reserved", 0}},
185 {0x0000000C, 2,
"BPI_1st_read_cycle",
"BPI_1ST_READ_CYCLES", 0,
188 VALUES{
"1",
"2",
"3",
"4", 0}},
190 {0x00000100, 8,
"ContinuousReadbackCRC",
"RBCRC_EN", 0,
193 VALUES{
"Enabled",
"disabled", 0}},
195 {0x00000200, 9,
"InitAsCRCErrorPin",
"RBCRC_NO_PIN", 0,
198 VALUES{
"Disabled",
"Enabled", 0}},
199 {0x00018000, 15,
"ActionReadbackCRC",
"RBCRC_ACTION", 0,
202 VALUES{
"Continue",
"Halt",
"CorrectAndHalt",
"CorrectAndContinue", 0}},
203 {0x00020000, 17,
"PersistDeassertAtDesynch",
"PERSIST_DEASSERT_AT_DESYNCH", 0,
206 VALUES{
"Disabled",
"Enabled", 0}},
212 {0x40000000, 30,
"NextRevisionSelect",
"RS[1:0]", 0,
214 VALUES{
"00",
"01",
"10",
"11", 0}},
215 {0x20000000, 29,
"RevisionSelectTristate",
"RS_TS_B", 0,
217 VALUES{
"Disabled",
"Enabled", 0}},
223 {0x40000000, 30,
"TimerForConfig",
"TIMER_CFG_MON", 0,
225 VALUES{
"Disabled",
"Enabled", 0}},
226 {0x80000000, 31,
"TimerForUser",
"TIMER_USR_MON", 0,
228 VALUES{
"Disabled",
"Enabled", 0}},
234 {0x00000001, 0,
"RegisterStatus0",
"VALID_0", 0,
236 VALUES{
"Valid",
"Invalid", 0}},
237 {0x00000002, 1,
"FallbackStatus0",
"FALLBACK_0", 0,
240 VALUES{
"Normal",
"Fallback", 0}},
241 {0x00000004, 2,
"InternalTrigger0",
"IPROG_0", 0,
243 VALUES{
"External",
"Internal", 0}},
244 {0x00000008, 3,
"WatchdogTimeout0",
"WTO_ERROR_0", 0,
246 VALUES{
"Valid",
"Invalid", 0}},
247 {0x00000010, 4,
"ID_error0",
"ID_ERROR_0", 0,
249 VALUES{
"NoError",
"Error", 0}},
250 {0x00000020, 5,
"CRC_error0",
"CRC_ERROR_0", 0,
252 VALUES{
"NoError",
"Error", 0}},
253 {0x00000040, 6,
"BPI_wraparound_error0",
"WRAP_ERROR_0", 0,
255 VALUES{
"NoError",
"Error", 0}},
256 {0x00000100, 8,
"RegisterStatus1",
"VALID_1", 0,
258 VALUES{
"Valid",
"Invalid", 0}},
259 {0x00000200, 9,
"FallbackStatus1",
"FALLBACK_1", 0,
262 VALUES{
"Normal",
"Fallback", 0}},
263 {0x00000400, 10,
"InternalTrigger1",
"IPROG_1", 0,
265 VALUES{
"External",
"Internal", 0}},
266 {0x00000800, 11,
"WatchdogTimeout1",
"WTO_ERROR_1", 0,
268 VALUES{
"Valid",
"Invalid", 0}},
269 {0x00001000, 12,
"ID_error1",
"ID_ERROR_1", 0,
271 VALUES{
"NoError",
"Error", 0}},
272 {0x00002000, 13,
"CRC_error1",
"CRC_ERROR_1", 0,
274 VALUES{
"NoError",
"Error", 0}},
275 {0x00004000, 14,
"BPI_wraparound_error1",
"WRAP_ERROR_1", 0,
277 VALUES{
"NoError",
"Error", 0}},
283 {0x00000001, 0,
"CRC_error",
"CRC_ERROR", 0,
287 {0x00000002, 1,
"DecryptorSecuritySet",
"PART_SECURED", 0,
291 {0x00000004, 2,
"MMCM_locked",
"MMCM_LOCK", 0,
295 {0x00000008, 3,
"DCI_matched",
"DCI_MATCH", 0,
299 {0x00000010, 4,
"StartupFinished",
"EOS", 0,
303 {0x00000020, 5,
"GTS_CFG_B",
"GTS_CFG_B", 0,
306 VALUES{
"IoDisabled",
"IoEnabled", 0}},
307 {0x00000040, 6,
"GWE",
"GWE", 0,
311 VALUES{
"WriteDisabled",
"WriteEnabled", 0}},
312 {0x00000080, 7,
"GHIGH_B",
"GHIGH_B", 0,
315 VALUES{
"InterconnectDisabled",
"InterconnectEnabled", 0}},
316 {0x00000700, 8,
"Mode",
"MODE", 0,
319 VALUES{
"MasterSerial",
"MasterSPI",
"MasterBPI-Up",
"MasterBPI-Down",
320 "MasterSelectMap",
"JTAG",
"SlaveSelectMap",
"SlaveSerial", 0}},
321 {0x00000800, 11,
"INIT_complete",
"INIT_COMPLETE", 0,
325 {0x00000800, 11,
"INIT_complete",
"INIT_COMPLETE", 0,
329 {0x00001000, 12,
"INIT_B",
"INIT_B", 0,
332 VALUES{
"Deasserted",
"Asserted", 0}},
333 {0x00002000, 13,
"DONE_released",
"RELEASE_DONE", 0,
336 VALUES{
"DrivenLow",
"Released", 0}},
337 {0x00004000, 14,
"DONE",
"DONE", 0,
340 VALUES{
"NotDone",
"Done", 0}},
341 {0x00008000, 15,
"ID_error",
"ID_ERROR", 0,
344 VALUES{
"NoError",
"Error", 0}},
345 {0x00010000, 16,
"Decrypt_error",
"DEC_ERROR", 0,
348 VALUES{
"NoError",
"Error", 0}},
349 {0x001c0000, 18,
"StartupState",
"STARTUP_STATE", 0,
352 VALUES{
"0",
"1",
"3",
"2",
"7",
"6",
"4",
"5", 0}},
353 {0x06000000, 25,
"BusWidth",
"BUS_WIDTH", 0,
356 VALUES{
"1",
"8",
"16",
"32", 0}},
363 const Subfield* subfields;
376 for(
uint32_t field = 0; subfields[field].mMask != 0; field++){
377 const Subfield& subfield = subfields[field];
378 if(inSubfield != subfield.mBitgenName && inSubfield != subfield.mConfigGuideName)
380 const char** ptr = subfield.
mValues;
381 for(
uint32_t i = 0; *ptr != 0; i++, ptr++){
382 if(inSetting == *ptr)
return (i << subfield.mShift) & subfield.mMask;
389 #ifndef GENERATE_STATIC_DEVICE_INFO
417 using namespace torc::common;
493 ColumnTypeVector columnTypes;
497 typedef std::map<TileTypeIndex, std::string> TileTypeIndexToName;
498 typedef std::map<std::string, TileTypeIndex> TileTypeNameToIndex;
499 TileTypeIndexToName tileTypeIndexToName;
500 TileTypeNameToIndex tileTypeNameToIndex;
502 for(TileTypeIndex tileTypeIndex(0); tileTypeIndex < tileTypeCount; tileTypeIndex++) {
504 tileTypeIndexToName[tileTypeIndex] = tileTypeName;
505 tileTypeNameToIndex[tileTypeName] = tileTypeIndex;
526 for(
uint8_t half = 0; half < 2; half++) {
531 for(
uint32_t farRow = 0; farRow < farRowCount; farRow++) {
533 TileRow xdlBaseRow(topBottom ==
eFarTop
534 ? (xdlCenterRow - (farRow + 1) * eClockRegionRows)
535 : (xdlCenterRow + (farRow + 0) * eClockRegionRows)
539 for(TileCol xdlCol(0); xdlCol < colCount; xdlCol++) {
541 TileRow xdlRow(isArtix200t ? xdlCenterRow : xdlBaseRow);
545 TileTypeIndexToColumnType::iterator ttwp = ttwe;
547 for(
int rowOffset = 0; rowOffset <
eClockRegionRows; rowOffset++, xdlRow++) {
633 columnTypes[baseCol + xdlCol] =
static_cast<EColumnType>(ttwp->second);
646 std::fstream tilemapStream(generatedMap.string().c_str(), std::ios::out);
647 for(TileRow row; row < rowCount; row++) {
648 for(TileCol col; col < colCount; col++) {
653 if(col + 1 < colCount) tilemapStream <<
",";
655 tilemapStream << std::endl;
657 tilemapStream.close();
662 setDeviceInfo(DeviceInfo(tileCount, rowCount, colCount, columnTypes));
676 using namespace torc::common;
703 std::cerr <<
"Bitstream row dimensions are undefined for " <<
mDevice <<
"."
715 if(mFrameRowCount == 0)
return;
726 uint32_t serialFrame = mTopRowCount - 1;
728 for(
uint32_t frameRow = mTopRowCount - 1; ; frameRow--) {
738 if(frameRow == 0)
break;
765 bool blockUsed =
false;
767 for(
uint32_t half = 0; half < 2; half++) {
769 uint32_t farRowCount = (topBottom ==
eFarTop) ? mTopRowCount : mBottomRowCount;
770 for(
uint32_t farRow = 0; farRow < farRowCount; farRow++) {
784 for(
uint32_t farMinor = 0; farMinor < width; farMinor++) {
786 blockType, farRow, farMajor, farMinor);
790 blockFrameIndexBounds++;
807 if(blockUsed && col == finalColumn) {
815 if(blockUsed && col == finalColumn) {
825 if(debug) std::cout <<
"Last frame index: [" << i <<
", " << frameIndex
838 std::cout <<
"Bit Value at index: (" << i <<
", " << j <<
") : "
841 std::cout <<
"Xdl Value at index: (" << i <<
", " << k <<
") : "
896 packets.insert(packets.end(), 8, dummy);
900 packets.push_back(dummy);
901 packets.push_back(dummy);
904 packets.push_back(nop);
911 packets.push_back(nop);
914 packets.push_back(nop);
915 packets.push_back(nop);
945 packets.push_back(nop);
975 packets.insert(packets.end(), 8, nop);
1008 packets.push_back(nop);
1009 packets.push_back(nop);
1012 packets.push_back(nop);
1015 packets.insert(packets.end(), 100, nop);
1018 packets.push_back(nop);
1048 packets.push_back(nop);
1049 packets.push_back(nop);
1052 packets.insert(packets.end(), 400, nop);
1094 packets.insert(packets.end(), 8, dummy);
1098 packets.push_back(dummy);
1099 packets.push_back(dummy);
1102 packets.push_back(nop);
1105 packets.push_back(nop);
1106 packets.push_back(nop);
1127 packets.push_back(nop);
1130 packets.insert(packets.end(), 4, nop);
1133 packets.push_back(nop);
1164 packets.push_back(nop);
1168 packets.insert(packets.end(), 100, nop);
1173 packets.push_back(nop);
1176 packets.push_back(nop);
1185 packets.insert(packets.end(), 16, nop);
1191 boost::shared_array<uint32_t> frameWords;
1193 Virtex7::iterator p = begin();
1194 Virtex7::iterator e = end();
1215 typedef boost::shared_array<uint32_t> WordSharedArray;
1217 Virtex7::iterator p = begin();
1218 Virtex7::iterator e = end();
1222 WordSharedArray words = packet.
getWords();
1224 for(
uint32_t block = 0; block < 8; block++) {
1228 for(
uint32_t index = 0; index < frameLength; index++) *ptr++ = *words++;
1259 outBeginBit = outEndBit = 0;
1280 if(index == 0 || index == 26)
break;
1282 outBeginBit = index * 64;
1283 outEndBit = outBeginBit + 64;
1291 if(index != 5 && index != 10 && index != 15 && index != 20 && index != 25
1292 && index != 31 && index != 36 && index != 41 && index != 46 && index != 51)
break;
1294 outBeginBit = index * 64;
1295 outEndBit = outBeginBit + 320;
1314 int32_t xdlColumnIndex[inBlockCount];
1315 int32_t xdlColumnBound[inBlockCount];
1316 for(
uint32_t i = 0; i < inBlockCount; i++) {
1320 uint32_t col = inColumnVectorBase + inXdlCol;
1330 for(
uint32_t i = 0; i < inBlockCount; i++) {
1331 int startIndex = xdlColumnIndex[i];
1332 for(
int j = 0; j < xdlColumnBound[i]; j++) {
1334 if(!xdlColumnBound[i])
continue;
1336 std::cout <<
"Virtex7::getXdlFrames(): pushing mBlock[" << i <<
"]["
1337 << (startIndex + offset + j) <<
"]: "
1358 ColumnTypeVector::const_iterator b = columnVectorBase + columns.begin();
1359 ColumnTypeVector::const_iterator p = columnVectorBase + columns.begin() + col;
1360 ColumnTypeVector::const_iterator e = columnVectorBase + columns.end();
1367 col++; p++;
if(p == e)
break;
1388 boost::shared_array<uint32_t> frameWords;
1390 uint32_t frameStart[eBlockTypeCount + 1];
1398 for(
uint32_t j = 0; j < mBlockFrameIndexBounds[i]; j++) {
1407 FrameAddress frameAddress;
1409 Virtex7::iterator p = begin();
1410 Virtex7::iterator e = end();
1412 const VirtexPacket& packet = *p++;
1414 if(packet.isWrite() && packet.getAddress() ==
eRegisterFAR) {
1416 frameAddress = FrameAddress(packet[1]);
1422 else if(packet.isWrite()
1429 && packet.getWordCount() > 0)
1432 const uint32_t numWords = packet.getWordCount();
1433 boost::shared_array<uint32_t> frameWords(packet.getWords());
1436 while(position + frameLength <= numWords) {
1439 uint32_t index = frameIndex - frameStart[blockType];
1441 (
new VirtexFrame(frameLength, &frameWords[position]));
1443 position += frameLength;
1448 if(position > numWords) {
1449 std::cerr <<
"Overflowed expected frame counts for device." << std::endl;
1453 if(frameIndex != frameStart[frameAddress.mBlockType + 1]) {
1463 else if(frameIndex == frameStart[frameAddress.mBlockType + 1]) ;
1465 std::cerr <<
"Failed to find the next valid frame address at the end of a "
1466 "packet." << std::endl;
1471 if(packet.isType1()) lastAddress =
ERegister(packet.getAddress());
1480 Virtex7::iterator b = begin();
1481 Virtex7::iterator p = b;
1482 Virtex7::iterator e = end();
1483 Virtex7::iterator start = e;
1484 Virtex7::iterator stop = b;
1485 Virtex7::iterator fdri = b;
1488 const VirtexPacket& packet = *p;
1490 if(start == e && packet.isWrite() && packet.getAddress() ==
eRegisterFAR) {
1494 if(packet.isWrite() && packet.getAddress() ==
eRegisterFDRI) {
1496 if((p+1)->isWrite() && (p+1)->isType2()) fdri++;
1500 if(stop < fdri && packet.isWrite() && packet.isType1()
1510 const VirtexPacket& packet = *p++;
1512 if(start < e && stop > b && !(
1514 packet.isWrite() && (
1522 std::cerr <<
"Unable to safely distinguish frame packets." << std::endl;
1527 if(start < stop && b < stop) {
1547 word_t* pos = frameContents;
1553 VirtexFrameSet::iterator p = frameSet.begin();
1554 VirtexFrameSet::iterator e = frameSet.end();
1559 const word_t* wp = framePtr->getWords();
1560 const word_t* we = wp + framePtr->getLength();
1562 if(wp)
do { *pos++ = *wp++; }
while(wp < we);
1563 else do { *pos++ = 0; wp++; }
while(wp < we);
1570 packets.push_back(nop);
1591 packets.push_back(nop);
1598 blockStart += index;
1600 bool started =
false;
1605 VirtexFrameSet::iterator p = frameSet.begin();
1606 VirtexFrameSet::iterator e = frameSet.end();
1615 bool include = p < e
1625 if((started && !include)) {
1627 uint32_t stopIndex = index + (p == e ? 1 : 0);
1628 uint32_t currentIndex = startIndex;
1642 word_t* pos = frameContents;
1643 while(currentIndex < stopIndex) {
1647 const word_t* wp = framePtr->getWords();
1648 const word_t* we = wp + framePtr->getLength();
1650 if(wp)
do { *pos++ = *wp++; }
while(wp < we);
1651 else do { *pos++ = 0; wp++; }
while(wp < we);
1657 packets.push_back(nop);
1669 if(size) empty =
false;
1671 }
else if(!started && include) {
1682 if(empty) packets.clear();
ColumnDefVector mColumnDefs
Column type widths.
uint32_t mFrameRow
Frame row.
Encapsulation of a tile row in an unsigned 16-bit integer.
TileTypeNameToColumnType mTileTypeNameToColumnType
virtual VirtexPacketVector generatePartialBitstreamSuffix(EBitstreamType inBitstreamType)
Return a packet vector with the partial bitstream suffix.
virtual VirtexPacketVector generateFullBitstreamSuffix(void)
Return a packet vector with the full bitstream suffix.
BitColumnToXdlColumn mBitColumnToXdlColumn
Map of bitstream column indexes to XDL column indexes.
Encapsulation of a tile column in an unsigned 16-bit integer.
Device database, including complete wiring and logic support.
TileTypeCount getTileTypeCount(void) const
Returns the tile type count for this device.
TileRow getRowCount(void) const
Returns the row count for this device.
FrameRowDesignatorVector mXdlRowToFrameRowDesignator
Vector of FrameRowDesignator entries for each XDL row.
Header for the DirectoryTree class.
Frame row designator: top/bottom flag and row index.
virtual void readFramePackets(void)
Read frame data into the frame blocks structure.
VirtexFrameBlocks mFrameBlocks
Input Frame blocks.
virtual void initializeFrameMaps(void)
Initialize the maps between frame indexes and frame addresses. This is generally useful only for int...
static VirtexPacket makeNullType1Write(uint32_t inAddress)
Construct a null type 1 write packet.
virtual VirtexPacketVector generateFullBitstreamPrefix(void)
Return a packet vector with the full bitstream prefix.
uint16_t getRowCount(void) const
Returns the row count.
Frame< uint32_t > VirtexFrame
Virtex frame type.
const TileInfo & getTileInfo(TileIndex inTileIndex) const
Returns the TileInfo object for the specified tile.
TileTypeIndexToColumnType mTileTypeIndexToColumnType
Static device information class for Xilinx bitstreams. This class facilitates the creation of frame ...
uint32_t getPrimaryXdlColumn(uint32_t inXdlRow, uint32_t inXdlCol)
Returns the primary column corresponding to the given tile. If the specified tile falls in an INT_L ...
boost::uint32_t uint32_t
Imported type name.
virtual VirtexPacketVector::iterator deleteFramePackets(void)
Discard the existing frame packets and return an iterator to the start position.
FrameSet< VirtexFrame > VirtexFrameSet
Virtex frame set type.
virtual uint32_t getFrameLength(void) const
Return the frame length for the current device.
uint16_t getColCount(void) const
Returns the column count.
static VirtexPacket makeType2Write(uint32_t inCount, uint32_t *inWords)
Construct a type 2 write packet.
virtual VirtexPacketVector generatePartialBitstreamPackets(EFrameInclude inFrameInclusion)
Return a packet vector with partial frame data.
static const Subfield sMASK0[]
Control Mask Register (MASK) subfields.
TileCount getTileCount(void) const
Returns the tile count for this device.
EDevice mDevice
Bitstream device enumeration.
static const Subfield sSTAT[]
Status Register (STAT) subfields.
static const Subfield sBOOTSTS[]
Boot History Status Register (BOOTSTS) subfields.
EFarBlockType
Frame Address Register block type constants.
boost::uint8_t uint8_t
Imported type name.
ERegister
Configuration register enumeration.
static const Subfield sTIMER[]
Watchdog Timer Register (TIMER) subfields.
uint32_t mXdlBaseRow
Base XDL row.
boost::uint32_t uint32_t
Imported type name.
VirtexFrameBlocks getXdlFrames(uint32_t inXdlRow, uint32_t inXdlCol, uint32_t &outBeginBit, uint32_t &outEndBit, uint32_t inBlockCount=eBlockTypeCount)
Returns frames for specified XDL tile coordinates. inXldRow The XDL row coordinate. inXdlCol The XDL column coordinate. outBeginBit The bit index of the beginning of the requested tile. outEndBit The bit index of the end of the requested tile. inBlockCount The highest block type requested (8 for Xilinx architectures).
static uint32_t makeSubfield(ERegister inRegister, const std::string &inSubfield, const std::string &inSetting)
Return the masked value for a subfield of the specified register.
DEPRECATED void updateFullFrameBlocks(void)
Transfers frame block data into the full bitstream frame packet.
DEPRECATED void initializeFullFrameBlocks(void)
Loads full bitstream frames into block data structure.
VirtexFrame::word_t word_t
FrameSet word type.
static const Subfield sWBSTAR[]
Warm Boot Start Address Register (WBSTAR) subfields.
uint32_t mTopRowCount
The number of top bitstream rows.
string mDeviceName
Header device name.
FrameIndexToAddress mFrameIndexToAddress
Map of frame indexes to frame addresses.
static const Subfield sCOR1[]
Configurations Options Register 1 (COR) subfields.
uint32_t mColumnVectorBase
Offset for this row into the column type vector.
DeviceInfo mDeviceInfo
Device information.
Tile map, tile type, and wire information for the family and device.
FrameSet< FRAME_TYPE > mBlock[Bitstream::eBlockTypeCount]
FrameSets for each of the eight block types.
Encapsulation of a tile count in an unsigned 32-bit integer.
EFarTopBottom
Frame Address Register top and bottom constants.
Encapsulation of a tile within a device tile map.
EBitstreamType
The bitstream type to generate. Use eBitstreamFull to fully reconfigure a device, eBitstreamTypePartialActive to partially reconfigure it while it continues to run, or eBitstreamTypePartialShutdown to partially recongifure it after shutting it down.
static const char * sPacketTypeName[ePacketTypeCount]
Configuration controller registers.
static const char * sCommandName[eCommandCount]
Configuration Command names.
const char * getTileTypeName(TileTypeIndex inTileTypeIndex) const
Returns the tile type name for the given tile type index.
const ColumnTypeVector & getColumnTypes(void) const
Returns the column type vector.
IndexVector mXdlColumnIndexes[Virtex7::eFarBlockTypeCount]
Vector to store frame indexes of Bitstream columns.
boost::filesystem::path path
const TileTypeIndex & getTypeIndex(void) const
Returns the tile type index for this tile.
uint32_t mFrameRowCount
Number of frame rows.
boost::shared_ptr< VirtexFrame > FrameSharedPtr
Shared pointer encapsulation of a Frame.
void setRowCounts(const string &inDeviceName)
Set the number of top and bottom bitstream rows.
std::vector< VirtexPacket > VirtexPacketVector
Vector of Virtex packets.
static const Subfield sCTL1[]
Control Register 1 (CTL) subfields.
virtual uint32_t getFrameRowCount(void) const
Return the number of frame rows for the current device.
static VirtexPacket makeType1Write(uint32_t inAddress, uint32_t inWord)
Construct a type 1 write packet.
static const boost::filesystem::path & getWorkingPath(void)
Returns the absolute path to the working directory.
Encapsulation of a tile type count in an unsigned 16-bit integer.
const WordSharedArray getWords(void) const
brief Returns the raw packet words, including the header word.
TileCol getColCount(void) const
Returns the column count for this device.
boost::shared_ptr< VirtexFrame > VirtexFrameSharedPtr
Virtex frame type.
VirtexFrame::word_t word_t
FrameSet word type.
virtual uint32_t getRowPadFrames(void) const
Return the number of pad frames after each row.
uint32_t mBottomRowCount
The number of bottom bitstream rows.
Encapsulation of a tile type index in an unsigned 16-bit integer.
static const char * sRegisterName[eRegisterCount]
Configuration Register names.
boost::uint16_t uint16_t
Imported type name.
virtual VirtexPacketVector generatePartialBitstreamPrefix(EBitstreamType inBitstreamType)
Return a packet vector with the partial bitstream prefix.
Header for the DDB class.
uint32_t mBlockFrameIndexBounds[Virtex7::eFarBlockTypeCount]
Array to hold frame index boundaries for blocks.
static const Subfield sCTL0[]
Control Register 0 (CTL) subfields.
FrameBlocks< VirtexFrame > VirtexFrameBlocks
Virtex frame blocks type.
EColumnType
Major Column Types.
static const char * sOpcodeName[eOpcodeCount]
Packet Opcode names.
Template base for encapsulated integers, to enforce strong typing.
void setDeviceInfo(const DeviceInfo &rhs)
Assign static device information for the current bitstream.
Bitstream packet for Virtex class architectures.
static uint32_t makeHeader(EPacketType inType, EOpcode inOpcode, uint32_t inAddress, uint32_t inCount)
Construct a packet header.
const char ** mValues
The allowable subfield values.
IndexVector mBitColumnIndexes[Virtex7::eFarBlockTypeCount]
Vector to store frame indexes of XDL columns.
static const Subfield sCOR0[]
Configurations Options Register 0 (COR) subfields.
TileIndex getTileIndex(TileRow inRow, TileCol inCol) const
Returns the tile index for the given [row,column] pair.
FrameAddressToIndex mFrameAddressToIndex
Map of frame addresses to frame indexes.
WORD_TYPE word_t
Frame word type.
Header for the Virtex7 class.
VirtexFrameBlocks getBitstreamFrames(EFarTopBottom inTopBottom, uint32_t inFrameRow, uint32_t inBitCol, uint32_t inBlockCount=eBlockTypeCount)
Returns frames for specified bitstream tile column. inTopBottom The top or bottom half of the device...
virtual void initializeDeviceInfo(const std::string &inDeviceName)
Initialize the Device Information.
virtual VirtexPacketVector generateFullBitstreamPackets(void)
Return a packet vector with full frame data.
Device database types for Xilinx architectures.