byteman  1.3 (Build #225)
Bitstream relocation and manipulation tool
Public Member Functions | Public Attributes | List of all members
XilinxSeries7 Class Reference

#include "XilinxSeries7.h"

Inheritance diagram for XilinxSeries7:
Inheritance graph
[legend]
Collaboration diagram for XilinxSeries7:
Collaboration graph
[legend]

Public Member Functions

void assembler (std::string, std::string)
 
void assemblerAsmTo (std::ifstream &, std::ofstream &)
 
void assemblerAsmToBin (std::ifstream &, std::ofstream &)
 
void assemblerAsmToBit (std::ifstream &, std::ofstream &)
 
void assemblerParseHeader (std::ifstream &)
 
void blank (std::string)
 
void change (std::string)
 
void deviceHelp ()
 
void disassemblerBinToAsm (std::string, std::ifstream &, std::ofstream &)
 
void disassemblerBitToAsm (std::ifstream &, std::ofstream &)
 
void disassemblerToAsm (std::ifstream &, std::ofstream &)
 
void disassemblerWriteHeader (std::ofstream &)
 
void ensureInitializedBitstreamArrays () override
 
int getDeviceByIDCODE (int) override
 
int getDeviceByIDCODEorThrow (int) override
 
int getDeviceByName (std::string) override
 
int getDeviceByNameOrThrow (std::string) override
 
std::string getFrameType (int, int, int) override
 
void initFabric ()
 
void initializeResourceStringParameters () override
 
void merge (XilinxSeries7 *, std::string, Rect2D, Coord2D)
 
void outputBitstreamEmptySLRHeaderSequence (std::ofstream &, int, bool, Endianness) override
 
void outputBitstreamEmptySLRWrapUpSequence (std::ofstream &, int, bool, Endianness) override
 
void outputBitstreamGlobalFooterSequence (std::ofstream &, bool, Endianness) override
 
void outputBitstreamGlobalHeaderSequence (std::ofstream &, bool, Endianness) override
 Written by outputBitstreamSLRHeaderAfterBitstreamSequence(), outputBitstreamEmptySLRHeaderSequence() and used by outputBitstreamSLRWrapUpSequence(), outputBitstreamEmptySLRWrapUpSequence() More...
 
void outputBitstreamSLRFooterBitstreamSequence (std::ofstream &, int, bool, Endianness) override
 
void outputBitstreamSLRHeaderAfterBitstreamSequence (std::ofstream &, int, bool, Endianness) override
 
void outputBitstreamSLRHeaderBitstreamSequence (std::ofstream &, int, bool, Endianness) override
 
void outputBitstreamSLRWrapUpSequence (std::ofstream &, int, bool, Endianness) override
 
void readBitstream (std::string)
 
void setDevice (int, std::string="") override
 
void setDeviceByIDCODEOrThrow (int) override
 
void setDeviceByNameOrThrow (std::string) override
 
void setDeviceByPartNameOrThrow () override
 
void test (bool, bool, uint32_t)
 
void writeBitstream (std::string, std::string, Rect2D)
 
 XilinxSeries7 ()
 
virtual ~XilinxSeries7 ()
 
- Public Member Functions inherited from CommonDevice2D
 CommonDevice2D ()
 
void region (std::string, Rect2D)
 
virtual ~CommonDevice2D ()
 
- Public Member Functions inherited from CommonDevice
 CommonDevice ()
 
void log (std::string message)
 
void printMessage (std::string message)
 
void warn (std::string message)
 
virtual ~CommonDevice ()
 
- Public Member Functions inherited from XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >
 XilinxConfigurationAccessPort ()
 
virtual ~XilinxConfigurationAccessPort ()
 

Public Attributes

std::streamoff slrMagicInstrLocation [5]
 
- Public Attributes inherited from CommonDevice2D
std::vector< Rect2DregionSelection
 
- Public Attributes inherited from CommonDevice
int enableLog
 
int enableWarn
 
std::string instanceName
 
- Public Attributes inherited from XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >
uint32_t * bitstreamBegin
 
uint32_t * bitstreamBRAM [MAX_ROWS][MAX_BRAM_COLS]
 
uint32_t * bitstreamCLB [MAX_ROWS][MAX_COLS]
 
uint32_t * bitstreamEnd
 
bool bitstreamHasValidData
 
std::string designName
 
std::string fileDate
 
std::string fileTime
 
int fromRow
 
std::streamoff headerLocationOfRemainingFileLength
 gets set by outputBITheader() and gets used by outputBITheaderLengthField(). More...
 
uint32_t IDCODE
 
std::string initializedBitstreamParamsShortPartName
 the partName of currently initialized resource string parameters More...
 
std::string initializedBitstreamShortPartName
 The partName of currently initialized bitstream buffers. More...
 
std::string initializedResourceStringShortPartName
 the partName of currently initialized resource string parameters More...
 
Endianness loadedBitstreamEndianness
 The endianess of the currently loaded bitstream. More...
 
bool LUT_isFrameUnusedForResourceLetter [256]
 
int LUT_numberOfFramesForResourceLetter [256]
 
std::string LUT_typeOfFrameForResourceLetter [256]
 
int maxNumberOfBRAMCols
 
int maxNumberOfCols
 
int numberOfBRAMCols [MAX_ROWS]
 
int numberOfBRAMsBeforeCol [MAX_ROWS][MAX_COLS]
 
int numberOfCols [MAX_ROWS]
 
int numberOfFramesBeforeCol [MAX_ROWS][MAX_COLS]
 
int numberOfFramesPerRow [MAX_ROWS]
 
int numberOfRows
 
int numberOfSLRs
 
int numberOfWordsPerRow [MAX_ROWS]
 
std::string partName
 
char resourceString [MAX_ROWS][MAX_COLS]
 
int rowsInBottomHalf
 
int rowsInTopHalf
 
struct XilinxConfigurationAccessPort::SelectedOptions selectedOptions
 
struct {
   int   fromRow
 
   uint32_t   IDCODE
 
   int   rowsInBottomHalf
 
   int   rowsInTopHalf
 
   int   toRow
 
SLRinfo [MAX_SLRS]
 
int toRow
 

Additional Inherited Members

- Public Types inherited from XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >
enum class  MergeOP
 

Detailed Description

Definition at line 31 of file XilinxSeries7.h.

Constructor & Destructor Documentation

◆ XilinxSeries7()

XilinxSeries7::XilinxSeries7 ( )

Definition at line 31 of file XilinxSeries7.cpp.

32 {
33  initFabric();
34 }
void initFabric()
Definition: XS7_Fabric.cpp:22

◆ ~XilinxSeries7()

XilinxSeries7::~XilinxSeries7 ( )
virtual

Definition at line 36 of file XilinxSeries7.cpp.

37 {
38 }

Member Function Documentation

◆ assembler()

void XilinxSeries7::assembler ( std::string  ,
std::string   
)

Definition at line 32 of file XS7_Assembler.cpp.

33 {
34  enum FILEFORMAT {FILE_NULL = 0, FILE_BIT, FILE_BIN, FILE_BIT_ASM};
35  FILEFORMAT fileformatIn = FILE_NULL, fileformatOut = FILE_NULL;
36 
37  if(str::iff::stringEndsWith(filenameIn, ".bit"))
38  fileformatIn = FILE_BIT;
39  if(str::iff::stringEndsWith(filenameIn, ".bin"))
40  fileformatIn = FILE_BIN;
41  if(str::iff::stringEndsWith(filenameIn, ".bitasm"))
42  fileformatIn = FILE_BIT_ASM;
43  if(str::iff::stringEndsWith(filenameOut, ".bit"))
44  fileformatOut = FILE_BIT;
45  if(str::iff::stringEndsWith(filenameOut, ".bin"))
46  fileformatOut = FILE_BIN;
47  if(str::iff::stringEndsWith(filenameOut, ".bitasm"))
48  fileformatOut = FILE_BIT_ASM;
49 
50  ifstream fin (filenameIn, ifstream::binary);
51  if(!fin.good())
52  throw runtime_error(string("Could not open file: \"").append(filenameIn).append("\" .\n"));
53 
54  ofstream fout (filenameOut, ofstream::binary | ofstream::trunc);
55  if(!fout.good())
56  throw runtime_error(string("Could not open file: \"").append(filenameOut).append("\"!\n"));
57 
58  if(fileformatIn == FILE_BIT && fileformatOut == FILE_BIT_ASM)
59  disassemblerBitToAsm(fin, fout);
60  else if(fileformatIn == FILE_BIN && fileformatOut == FILE_BIT_ASM)
61  disassemblerBinToAsm(filenameIn, fin, fout);
62  else if(fileformatIn == FILE_BIT_ASM && fileformatOut == FILE_BIT)
63  assemblerAsmToBit(fin, fout);
64  else if(fileformatIn == FILE_BIT_ASM && fileformatOut == FILE_BIN)
65  assemblerAsmToBin(fin, fout);
66  else
67  throw runtime_error(string("Unknown Xilinx Series 7 assembler operation between file formats. See \"byteman -h assembly\".\n"));
68  fin.close();
69  fout.close();
70 }
void disassemblerBitToAsm(std::ifstream &, std::ofstream &)
void assemblerAsmToBin(std::ifstream &, std::ofstream &)
void assemblerAsmToBit(std::ifstream &, std::ofstream &)
void disassemblerBinToAsm(std::string, std::ifstream &, std::ofstream &)
bool stringEndsWith(std::string checkedString)
Returns false. End of recursion for template.
Definition: iff.h:32

References str::iff::stringEndsWith().

Here is the call graph for this function:

◆ assemblerAsmTo()

void XilinxSeries7::assemblerAsmTo ( std::ifstream &  ,
std::ofstream &   
)

Definition at line 125 of file XS7_Assembler.cpp.

126 {
128 
130  int frameCount = 0;
131  int slr = 0, b = 7, r = 0, c = 0, m = 0;
132  for (string line; getline(fin, line); ) {
133  if(line.at(line.find_first_not_of(" \t")) == '#')// if #, skip that line as comment
134  continue;
135  transform(line.begin(), line.end(), line.begin(), ::toupper);
136  replace(line.begin(), line.end(), '=',' ');
137  replace(line.begin(), line.end(), '#',' ');
138  replace(line.begin(), line.end(), ',', ' ');
139  if(str::iff::stringContains(line, "SYNC") && (!str::iff::stringContains(line, "DESYNC"))){
141  }
142  else if(str::iff::stringContains(line, ".WORD")){
143  uint32_t wordValue;
144  if(!str::parse::multipleUints(line, wordValue))wordValue = 0;
145  FileIO::write32(fout, wordValue, loadedBitstreamEndianness);
146  }
147  else if(str::iff::stringContains(line, ".BYTE")){
148  uint32_t value;
149  if(!str::parse::multipleUints(line, value))value = 0;
150  uint32_t byteValue = value % 256;
151  FileIO::write8(fout, byteValue, loadedBitstreamEndianness);
152  }
153  else if(str::iff::stringContains(line, "NOP")){
154  int nopHiddenValue;
155  if(!str::parse::multipleInts(line, nopHiddenValue))nopHiddenValue = 0;
156  XCAP_writeNOP(fout, 1, nopHiddenValue, loadedBitstreamEndianness);
157  }
158  else if(str::iff::stringContains(line, "RESERVED")){
159  int reservedHiddenValue;
160  if(!str::parse::multipleInts(line, reservedHiddenValue))reservedHiddenValue = 0;
161  XCAP_writeRESERVED(fout, 1, reservedHiddenValue, loadedBitstreamEndianness);
162  }
163  else if(str::iff::stringContains(line, "SELECT NEXT SLR")){
164  slr++;
165  int magic1size;
166  if(!str::parse::multipleInts(line, magic1size))magic1size = 0;
168  XCAP_writeType2(fout, magic1size, loadedBitstreamEndianness);
169  }
170  else if(str::iff::stringContains(line, "@")){
171  XCAP::Register newRegAddr = getXCAPregister(line);
172  if(str::iff::stringContains(line, "READ REG @")){
173  int readLength;
174  if(!str::parse::multipleInts(line, readLength)) readLength = 1; // default read length is 1 if unspecified
175  XCAP_writeReadRegister(fout, newRegAddr, readLength, loadedBitstreamEndianness);
176  } else {// must be a write then ¯\_(ツ)_/¯
177 
178  if(newRegAddr == XCAP::Register::UNDEFINED){
179  throw runtime_error(string("Couldn't parse assembly command: \"").append(line).append("\"!"));
180  } else if(str::iff::stringContains(line, "SELECT REGISTER")){
182  } else if(newRegAddr == XCAP::Register::FDRI){
183  if(!str::parse::multipleInts(line, frameCount))
184  throw runtime_error(string("FDRI command needs size: \"").append(line).append("\"!"));
185  int wordCount = frameCount * XS7_WORDS_PER_FRAME;
186  if(regAddr == XCAP::Register::FDRI) {
187  XCAP_writeType2(fout, wordCount, loadedBitstreamEndianness);
188  } else {
189  XCAP_writeFDRI1(fout, wordCount, loadedBitstreamEndianness);
190  }
191  if(frameCount > 0){
192  string frameLine;
193  for (string frameLine; getline(fin, frameLine); ) {
194  if(frameLine.at(frameLine.find_first_not_of(" \t")) == '#')// if #, skip that line as comment
195  continue;
196  uint32_t frameData[XS7_WORDS_PER_FRAME];
197  if(!str::parse::arrayOfUints(frameLine, XS7_WORDS_PER_FRAME, &frameData[0]))
198  throw runtime_error(string("Was expecting the data for a full frame on this line: \"").append(frameLine).append("\", because I think there are ").append(to_string(frameCount)).append(" frames left."));
199  //first 3 words are clk, next 90 are the 0-45 and 48-93 data words
200  for (int w = XS7_WORDS_AT_CLK; w < (XS7_WORDS_AT_CLK + XS7_WORDS_BEFORE_CLK) ; w++){
201  FileIO::write32(fout, frameData[w], loadedBitstreamEndianness);
202  }
203  for (int w = 0; w < XS7_WORDS_AT_CLK ; w++){
204  FileIO::write32(fout, frameData[w], loadedBitstreamEndianness);
205  }
206  for (int w = (XS7_WORDS_AT_CLK + XS7_WORDS_BEFORE_CLK); w < XS7_WORDS_PER_FRAME ; w++){
207  FileIO::write32(fout, frameData[w], loadedBitstreamEndianness);
208  }
209 
210  frameCount--;
211  if(frameCount == 0)
212  break;
213  }
214  if(frameCount != 0)
215  throw runtime_error(string("End of file reached while performing FDRI frame writes.!"));
216  }
217  } else if(newRegAddr == XCAP::Register::FAR){
218  if(!str::parse::multipleInts(line, b, r, c, m))
219  throw runtime_error(string("Could not parse the new FAR value: \"").append(line).append("\"!"));
220  r += SLRinfo[slr].fromRow;
221  uint32_t farValue = XCAP_getFAR(slr, b, r, c, m);
223  } else {
224  uint32_t newValue;
225  if(!str::parse::multipleUints(line, newValue))
226  throw runtime_error(string("Could not parse the new register value: \"").append(line).append("\"!"));
227  XCAP_writeRegister(fout, newRegAddr, newValue, loadedBitstreamEndianness);
228  }
229  }
230  regAddr = newRegAddr;
231  } else {// ! str::iff::stringContains(line, "@")
232  //must have been a command then
233  XCAP::Command cmdID = getXCAPcommand(line);
234  if(cmdID == XCAP::Command::UNDEFINED)
235  throw runtime_error(string("Couldn't parse assembly command: \"").append(line).append("\"!"));
237  }
238  }
240 }
#define XS7_WORDS_PER_FRAME
Definition: XS7_Fabric.h:41
#define XS7_WORDS_BEFORE_CLK
Definition: XS7_Fabric.h:38
#define XS7_WORDS_AT_CLK
Definition: XS7_Fabric.h:39
void XCAP_writeRegister(std::ofstream &fout, XCAP::Register reg, int writeValue, Endianness e)
Generate the encoding for writing a CAP register and write it to file ofstream.
Definition: inlineCAP.h:382
void XCAP_writeFDRI1(std::ofstream &fout, int wordCount, Endianness e)
Generate and write only a type 1 FDRI command.
Definition: inlineCAP.h:403
XCAP::Command getXCAPcommand(std::string s)
Definition: inlineCAP.h:67
void XCAP_writeCommand(std::ofstream &fout, XCAP::Command cmd, Endianness e)
Generate the encoding for writing a CAP command and write it to file ofstream.
Definition: inlineCAP.h:390
void XCAP_writeSYNQ(std::ofstream &fout, Endianness e)
Generate and write an SYNQ command.
Definition: inlineCAP.h:436
void XCAP_writeSelectRegister(std::ofstream &fout, XCAP::Register reg, Endianness e)
Generate the encoding for "selecting" a CAP register and write it to file ofstream.
Definition: inlineCAP.h:368
void XCAP_writeRESERVED(std::ofstream &fout, int cnt, int payload, Endianness e)
Generate the encoding for Reserved instructions and write them to file ofstream.
Definition: inlineCAP.h:360
void XCAP_writeType2(std::ofstream &fout, int wordCount, Endianness e)
Generate and write only a type 2 FDRI command.
Definition: inlineCAP.h:410
void XCAP_writeNOP(std::ofstream &fout, int cnt, int payload, Endianness e)
Generate the encoding for NOP instructions and write them to file ofstream.
Definition: inlineCAP.h:352
void XCAP_writeReadRegister(std::ofstream &fout, XCAP::Register reg, int readLength, Endianness e)
Generate the encoding for reading a CAP register and write it to file ofstream.
Definition: inlineCAP.h:375
XCAP::Register getXCAPregister(std::string s)
Definition: inlineCAP.h:19
uint32_t XCAP_getFAR(int slr, int blockType, int globalRowAddress, int columnAddress, int minorAddress)
Definition: inlineFAR.h:174
void outputCAPheaderConstant(std::ofstream &fout, Endianness e)
Definition: inlineOutput.h:60
void outputBITheaderLengthField(std::ofstream &fout, Endianness e)
Definition: inlineOutput.h:52
std::string to_string(Endianness e)
Definition: Endianness.h:56
void write8(std::ofstream &fout, uint8_t writeValue, Endianness e=Endianness::NATIVE)
Definition: FileIO.h:445
void write32(std::ofstream &fout, uint32_t writeValue, Endianness e=Endianness::NATIVE)
Definition: FileIO.h:419
Register
Definition: XCAP.h:20
Command
Definition: XCAP.h:46
bool stringContains(std::string checkedString)
Returns false. End of recursion for template.
Definition: iff.h:57
bool arrayOfUints(std::string s, int arrsize, uint32_t *arr)
Removes all string words from a given string s and returns the parsed arrsize number of integers into...
Definition: parse.h:160
bool multipleUints(std::stringstream &ss)
Definition: parse.h:229
bool multipleInts(std::stringstream &ss)
Definition: parse.h:192
std::string replace(std::string str, char oldChar, char newChar)
Replaces all instances of oldChar in string str with newChar and returns the resulting string.
Definition: str.h:41

References str::parse::arrayOfUints(), XCAP::FAR, XCAP::FDRI, getXCAPcommand(), getXCAPregister(), XCAP::MAGIC1, str::parse::multipleInts(), str::parse::multipleUints(), outputBITheaderLengthField(), outputCAPheaderConstant(), str::replace(), str::iff::stringContains(), Endian::to_string(), XCAP::UNDEFINED, FileIO::write32(), FileIO::write8(), XCAP_getFAR(), XCAP_writeCommand(), XCAP_writeFDRI1(), XCAP_writeNOP(), XCAP_writeReadRegister(), XCAP_writeRegister(), XCAP_writeRESERVED(), XCAP_writeSelectRegister(), XCAP_writeSYNQ(), XCAP_writeType2(), XS7_WORDS_AT_CLK, XS7_WORDS_BEFORE_CLK, and XS7_WORDS_PER_FRAME.

Here is the call graph for this function:

◆ assemblerAsmToBin()

void XilinxSeries7::assemblerAsmToBin ( std::ifstream &  ,
std::ofstream &   
)

Definition at line 98 of file XS7_Assembler.cpp.

98  {
100 
103 
104  assemblerAsmTo(fin, fout);
105 }
void setDeviceByPartNameOrThrow() override
Definition: XS7_Devices.cpp:44
void assemblerAsmTo(std::ifstream &, std::ofstream &)
void initializeResourceStringParameters() override
void assemblerParseHeader(std::ifstream &)

◆ assemblerAsmToBit()

void XilinxSeries7::assemblerAsmToBit ( std::ifstream &  ,
std::ofstream &   
)

Definition at line 89 of file XS7_Assembler.cpp.

89  {
91 
95 
96  assemblerAsmTo(fin, fout);
97 }
void outputBITheader(std::ofstream &fout, Endianness e)
Definition: inlineOutput.h:34

References outputBITheader().

Here is the call graph for this function:

◆ assemblerParseHeader()

void XilinxSeries7::assemblerParseHeader ( std::ifstream &  )

Definition at line 107 of file XS7_Assembler.cpp.

108 {
109  for (string line; getline(fin, line); ) {
110  auto firstEqPos = line.find_first_of('=');
111  if(firstEqPos != string::npos)
112  line.replace(firstEqPos, 1, '=',' ');
113 
118  if(str::iff::stringContains(line, "HEADER END"))break;
119  }
120  log("Design name: " + designName);
121  log("FPGA: " + partName);
122  log("Date: " + fileDate);
123  log("Time: " + fileTime);
124 }
void log(std::string message)
Definition: CommonDevice.h:51
std::string lastStringWord(std::string s)
Parses a string s, removes all integers and returns the last of all string words.
Definition: parse.h:81

References str::parse::lastStringWord(), and str::iff::stringContains().

Here is the call graph for this function:

◆ blank()

void XilinxSeries7::blank ( std::string  )

Definition at line 22 of file XS7_Blank.cpp.

22  {
24  parseParams(params);
25 
26  blankBuffers();
27 }
void ensureInitializedBitstreamArrays() override
void blankBuffers()
Definition: inlineBlank.h:23
void parseParams(std::string params)

References blankBuffers(), and parseParams().

Here is the call graph for this function:

◆ change()

void XilinxSeries7::change ( std::string  )

◆ deviceHelp()

void XilinxSeries7::deviceHelp ( )

Definition at line 661 of file XS7_Devices.cpp.

662 {
663  if(initializedResourceStringShortPartName == "") {//if no device is initialized
664  cout << "A list of currently supported Xilinx Series 7 devices: " << endl;
665  #ifdef XS7SPARTAN
666  cout << " Series 7 Spartan: " << endl;
667  cout << " XC7S6, XA7S6, XC7S15, XA7S15, XC7S25, XA7S25, XC7S50, XA7S50, XC7S75, XA7S75, XC7S100, XA7S100" << endl;
668  #endif
669  #ifdef XS7ARTIX
670  cout << " Series 7 Artix: " << endl;
671  cout << " XC7A12, XA7A12, XC7A15, XA7A15, XC7A25, XA7A25, XC7A35, XA7A35, XC7A50, XQ7A50, XA7A50, " << endl;
672  cout << " XC7A75, XA7A75, XC7A100, XQ7A100, XA7A100, XC7A200, XQ7A200" << endl;
673  #endif
674  #ifdef XS7ZYNQ
675  cout << " Series 7 Zynq: " << endl;
676  cout << " XC7Z007, XC7Z010, XA7Z010, XC7Z012, XC7Z014, XC7Z015, XC7Z020, XQ7Z020, XA7Z020, " << endl;
677  cout << " XC7Z030, XQ7Z030, XA7Z030, XC7Z035, XC7Z045, XQ7Z045, XC7Z100, XQ7Z100" << endl;
678  #endif
679  #ifdef XS7KINTEX
680  cout << " Series 7 Kintex: " << endl;
681  cout << " XC7K70, XC7K160, XA7K160, XC7K325, XQ7K325, XC7K355, XC7K410, XQ7K410, XC7K420, XC7K480" << endl;
682  #endif
683  #ifdef XS7VIRTEX
684  cout << " Series 7 Virtex: " << endl;
685  cout << " XC7V585, XQ7V585, XC7V2000, XC7VX330, XQ7VX330, XC7VX415, XC7VX485, XQ7VX485, XC7VX550, " << endl;
686  cout << " XC7VX690, XQ7VX690, XC7VX980, XQ7VX980, XC7VX1140" << endl;
687  #endif
688  #ifdef XS7BOARDS
689  cout << " Series 7 Boards: " << endl;
690  cout << " Wizarde, Kintex-7 Connectivity Kit, KC705, KC724, SP701, AC701, Arty A7-35, Arty A7-100, Arty Z7-10, Arty Z7-20, " << endl;
691  cout << " Arty S7-25, Arty S7-50, Basys 3, Pynq Z1, Pynq Z2, Nexys A7-50, Nexys A7-100, Zybo Z7-10, Zybo Z7-20, Cmod A7-15, " << endl;
692  cout << " Cmod A7-35, Cmod S7, ZedBoard, Cora Z7-07, Cora Z7-10, Nexys Video, Genesys 2, Eclypse Z7, USB104, NetFPGA-SUME, " << endl;
693  cout << " VC707, VC709, VC7203, VC7215, VC7222, ZC702, ZC706" << endl;
694  #endif
695  } else {
697  }
698 }
void printResourceStringInfo()

References printResourceStringInfo().

Here is the call graph for this function:

◆ disassemblerBinToAsm()

void XilinxSeries7::disassemblerBinToAsm ( std::string  ,
std::ifstream &  ,
std::ofstream &   
)

Definition at line 72 of file XS7_Assembler.cpp.

72  {
74  uint32_t idcode = parseBitstreamIDCODE(fin, loadedBitstreamEndianness);
76  designName = filenameIn;
78 
79  disassemblerToAsm(fin, fout);
80 }
void disassemblerToAsm(std::ifstream &, std::ofstream &)
void setDeviceByIDCODEOrThrow(int) override
Definition: XS7_Devices.cpp:53
Endianness parseBitstreamEndianness(std::ifstream &fin)
Definition: inlineInput.h:83
uint32_t parseBitstreamIDCODE(std::ifstream &fin, Endianness e)
Definition: inlineInput.h:181
void updateDateAndTime()
Definition: inlineOutput.h:17

References parseBitstreamEndianness(), parseBitstreamIDCODE(), and updateDateAndTime().

Here is the call graph for this function:

◆ disassemblerBitToAsm()

void XilinxSeries7::disassemblerBitToAsm ( std::ifstream &  ,
std::ofstream &   
)

Definition at line 82 of file XS7_Assembler.cpp.

82  {
86 
87  disassemblerToAsm(fin, fout);
88 }
void parseBITheader(std::ifstream &fin, Endianness e)
Definition: inlineInput.h:24

References parseBITheader(), and parseBitstreamEndianness().

Here is the call graph for this function:

◆ disassemblerToAsm()

void XilinxSeries7::disassemblerToAsm ( std::ifstream &  ,
std::ofstream &   
)

Definition at line 252 of file XS7_Assembler.cpp.

252  {
255 
257  bool synched = false;
258  bool aligned = false;
259  int wordCount = 0;
260  int shadowFrameValid = 0;
261  int slr = 0, b = 7, r = 0, c = 0, m = 0;
262  //Parse bitstream
263  for( ; ; ){
264  if(!fin.good()){
265  break; // done with the bitstream
266  } else {
267  if(!synched){
268  streamoff startFileOffset = fin.tellg();
269  streamoff endFileOffset;
270  if(!aligned){
272  endFileOffset = fin.tellg() - (streamoff)4;
273  synched = true;
274  aligned = true;
275  } else {//end of bitstream
276  endFileOffset = fin.tellg();
277  }
278  } else { //already aligned
280  endFileOffset = fin.tellg() - (streamoff)4;
281  synched = true;
282  } else {//end of bitstream
283  endFileOffset = fin.tellg();
284  }
285  }
286  fin.seekg(startFileOffset, fin.beg);
287  assemblyOutputData(fin, fout, (endFileOffset - startFileOffset));
288  if(synched){
289  FileIO::read32(fin);//discard sync command
290  fout << "SYNC" << endl;
291  } else {
292  break; //if still not synched, then we reached end of file
293  }
294  } else {
295  uint32_t instruction = FileIO::read32(fin, loadedBitstreamEndianness);
296  int instructionType = XCAP_getInstructionType(instruction);
297  XCAP::Operation instructionOPCODE = XCAP_getInstructionOperation(instruction);
298  int instructionPayload = XCAP_getInstructionPayload(instruction);
299  if(instructionType == 1) {
300  wordCount = XCAP_getInstructionWordCount(instruction);
301  regAddr = XCAP_getInstructionRegister(instruction);
302  } else if(instructionType == 2) {
303  wordCount = instructionPayload;
304  } else {
305  fout << "0x" << uppercase << hex << setw(8) << setfill('0') << instruction << " (Invalid instruction [invalid type])" << endl;
306  continue;
307  }
308 
309  if(instructionOPCODE == XCAP::Operation::NOP) {
310  if(instructionPayload != 0)
311  fout << "NOP #" << instructionPayload << endl;
312  else
313  fout << "NOP" << endl;
314  } else if(instructionOPCODE == XCAP::Operation::RESERVED) {
315  if(instructionPayload != 0)
316  fout << "RESERVED #" << instructionPayload << endl;
317  else
318  fout << "RESERVED" << endl;
319  } else if(instructionOPCODE == XCAP::Operation::READ) {
320  fout << "Read Reg @";
321  writeXCAPregisterName(fout, regAddr);
322  fout << " for length #" << wordCount << endl;
323  } else { // XCAP::Operation::WRITE
324  if((regAddr == XCAP::Register::FDRI) && (wordCount > 0) && (wordCount % XS7_WORDS_PER_FRAME == 0)) {
325  if(shadowFrameValid) {
326  fout << dec << "# Shadow register contents are written to frame (BlockType=" << b << ", GlobalRowAddress=" << r << ", MajorAddress=" << c << ", MinorAddress=" << m << ") (Frame type: " << getFrameType(b, r, c) << ")." << endl;
327  XCAP_IncrementFAR(slr, b, r, c, m);
328  }
329  shadowFrameValid = 1;
330  int frameCount = (wordCount/XS7_WORDS_PER_FRAME);
331  fout << dec << "@FDRI for #" << frameCount << " frames:" << endl;
332  for(int i = 0 ; i < frameCount ; i++){
333  fout << "# ";
334  if(i == (frameCount-1)) fout << "(This frame data is written to shadow register!)";
335  fout << dec << "Writing frame #" << i << " (BlockType=" << b << ", GlobalRowAddress=" << r << ", MajorAddress=" << c << ", MinorAddress=" << m << ") (Frame type: " << getFrameType(b, r, c) << ") hex data:" << endl;
336  uint32_t frameData[XS7_WORDS_PER_FRAME];
337  for(int w = 0 ; w < XS7_WORDS_PER_FRAME ; w++){
338  frameData[w] = FileIO::read32(fin, loadedBitstreamEndianness);
339  }
340  fout << "CLOCK: ";
341  for(int w = XS7_WORDS_BEFORE_CLK ; w < (XS7_WORDS_BEFORE_CLK + XS7_WORDS_AT_CLK) ; w++){
342  fout << "0x" << uppercase << hex << setw(8) << setfill('0') << frameData[w] << " ";
343  }
344  fout << " ;DATA: ";
345  for(int w = 0 ; w < XS7_WORDS_BEFORE_CLK ; w++){
346  fout << "0x" << uppercase << hex << setw(8) << setfill('0') << frameData[w] << " ";
347  }
348  for(int w = (XS7_WORDS_BEFORE_CLK + XS7_WORDS_AT_CLK) ; w < XS7_WORDS_PER_FRAME ; w++){
349  fout << "0x" << uppercase << hex << setw(8) << setfill('0') << frameData[w] << " ";
350  }
351  fout << endl;
352  XCAP_IncrementFAR(slr, b, r, c, m);
353  }
354  } else if(regAddr == XCAP::Register::CMD && wordCount == 1){
355  uint32_t writeData = FileIO::read32(fin, loadedBitstreamEndianness);
356  writeXCAPcommandName(fout, static_cast<XCAP::Command>(writeData));
357  fout << ";";
358  if(XCAP::Command::DESYNC == static_cast<XCAP::Command>(writeData)){
359  shadowFrameValid = 0;
360  synched = false;
361  }
362  if(XCAP::Command::WCFG == static_cast<XCAP::Command>(writeData)){
363  shadowFrameValid = 0;
364  fout << " (also clears shadow register)";
365  }
366  fout << endl;
367  } else if(regAddr == XCAP::Register::MAGIC1){
368  uint32_t nextInstr = FileIO::read32(fin, loadedBitstreamEndianness);
369  int nextInstrType = XCAP_getInstructionType(nextInstr);
370  XCAP::Operation nextInstrOP = XCAP_getInstructionOperation(nextInstr);
371  int nextInstrPayload = XCAP_getInstructionPayload(nextInstr);
372  if(2 == nextInstrType && XCAP::Operation::WRITE == nextInstrOP && 0 < nextInstrPayload){
373  slr++;
374  synched = false;
375  aligned = false;
376  fout << "Select next SLR for the next #" << dec << nextInstrPayload << " words." << endl;
377  } else {
378  fout << "Bad MAGIC1 instruction" << endl;
379  fin.seekg(-4, ios::cur);//rewind next instruction if not
380  }
381  } else if((instructionType == 1) && (wordCount == 0)){
382  fout << "Select register @";
383  writeXCAPregisterName(fout, regAddr);
384  fout << endl;
385  } else if(wordCount == 1){
386  uint32_t writeData = FileIO::read32(fin, loadedBitstreamEndianness);
387  fout << "@";
388  writeXCAPregisterName(fout, regAddr);
389  if(regAddr == XCAP::Register::FAR) {
390  XCAP_parseFAR(writeData, slr, b, r, c, m);
391  fout << " = BlockType=" << dec << b << " RowAddress=" << (r-SLRinfo[slr].fromRow) << " MajorAddress=" << c << " MinorAddress=" << m << endl;
392  } else {
393  fout << " = 0x" << uppercase << hex << setw(8) << setfill('0') << writeData << endl;
394  }
395  } else {
396  fout << "0x" << uppercase << hex << setw(8) << setfill('0') << instruction << "(Bad instruction)" << endl;
397  }
398  } // OP_WRITE
399  }// if synched
400  } // if fin is still good
401  } // for(;;)
402 }
std::string getFrameType(int, int, int) override
void disassemblerWriteHeader(std::ofstream &)
void assemblyOutputData(std::ifstream &fin, std::ofstream &fout, std::streamoff sizeInBytes)
XCAP::Register XCAP_getInstructionRegister(uint32_t instruction)
Parses and returns instruction register. This is the register being addressed if the instruction is o...
Definition: inlineCAP.h:271
XCAP::Operation XCAP_getInstructionOperation(uint32_t instruction)
Parses and returns instruction operation. Most Xil instructions will NOP or write.
Definition: inlineCAP.h:259
uint32_t XCAP_getInstructionPayload(uint32_t instruction)
Parses and returns instruction payload. This is the immediate value after instruction type and operat...
Definition: inlineCAP.h:265
uint32_t XCAP_getInstructionWordCount(uint32_t instruction)
Parses and returns instruction word count. This is the number of words to be read/written if the inst...
Definition: inlineCAP.h:277
uint32_t XCAP_getInstructionType(uint32_t instruction)
Parses and returns instruction type. Valid Xil instructions will be of types 1 and 2.
Definition: inlineCAP.h:253
void writeXCAPcommandName(std::ofstream &fout, XCAP::Command commandID)
Definition: inlineCAP.h:111
void writeXCAPregisterName(std::ofstream &fout, XCAP::Register registerID)
Definition: inlineCAP.h:177
void XCAP_parseFAR(int farValue, int slr, int &blockType, int &globalRowAddress, int &columnAddress, int &minorAddress)
Definition: inlineFAR.h:153
void XCAP_IncrementFAR(int slrID, int &blockType, int &globalRowAddress, int &columnAddress, int &minorAddress)
Definition: inlineFAR.h:144
bool findBitstreamSyncSequence(std::ifstream &fin, Endianness e)
Definition: inlineInput.h:154
bool findBitstreamSyncWord(std::ifstream &fin, Endianness e)
Definition: inlineInput.h:131
uint32_t read32(std::ifstream &fin, Endianness e=Endianness::NATIVE)
Definition: FileIO.h:131
Operation
Definition: XCAP.h:69

References assemblyOutputData(), XCAP::CMD, XCAP::DESYNC, XCAP::FAR, XCAP::FDRI, findBitstreamSyncSequence(), findBitstreamSyncWord(), XCAP::MAGIC1, XCAP::NOP, XCAP::READ, FileIO::read32(), XCAP::RESERVED, XCAP::UNDEFINED, XCAP::WCFG, XCAP::WRITE, writeXCAPcommandName(), writeXCAPregisterName(), XCAP_getInstructionOperation(), XCAP_getInstructionPayload(), XCAP_getInstructionRegister(), XCAP_getInstructionType(), XCAP_getInstructionWordCount(), XCAP_IncrementFAR(), XCAP_parseFAR(), XS7_WORDS_AT_CLK, XS7_WORDS_BEFORE_CLK, and XS7_WORDS_PER_FRAME.

Here is the call graph for this function:

◆ disassemblerWriteHeader()

void XilinxSeries7::disassemblerWriteHeader ( std::ofstream &  )

Definition at line 242 of file XS7_Assembler.cpp.

243 {
244  fout << "--- HEADER BEGIN ---" << endl;
245  fout << "Name = \"" << designName << "\"" << endl;
246  fout << "FPGA = \"" << partName << "\"" << endl;
247  fout << "Date = \"" << fileDate << "\"" << endl;
248  fout << "Time = \"" << fileTime << "\"" << endl;
249  fout << "--- HEADER END ---" << endl;
250 }

◆ ensureInitializedBitstreamArrays()

void XilinxSeries7::ensureInitializedBitstreamArrays ( )
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 74 of file XilinxSeries7.cpp.

74  {
76  throw runtime_error("The target device needs to be known, before you can manipulate any bitstream!");
79  if(bitstreamBegin != nullptr)
80  delete bitstreamBegin;
81 
83  //Allocate
84  int bramPlaneSize = 0;
85  int clbPlaneSize = 0;
86  for(int r = 0 ; r < numberOfRows ; r++){
88  clbPlaneSize += numberOfWordsPerRow[r];
89  }
90  bitstreamBegin = new uint32_t[clbPlaneSize + bramPlaneSize];
91 
92  //Calc pointers
93  int offset = 0;
94 
95  for(int slr = 0 ; slr < numberOfSLRs ; slr++){
96  int fromGlobalRowTop = SLRinfo[slr].fromRow + SLRinfo[slr].rowsInBottomHalf;
97  int toGlobalRowTop = SLRinfo[slr].toRow;
98  int fromGlobalRowBottom = SLRinfo[slr].fromRow + SLRinfo[slr].rowsInBottomHalf - 1;
99  int toGlobalRowBottom = SLRinfo[slr].fromRow;
100  for(int r = fromGlobalRowTop ; r <= toGlobalRowTop ; r++){
101  for(int c = 0 ; c < numberOfCols[r] ; c++){
102  bitstreamCLB[r][c] = &bitstreamBegin[offset];
104  }
105  }
106  for(int r = fromGlobalRowBottom ; r >= toGlobalRowBottom ; r--){
107  for(int c = 0 ; c < numberOfCols[r] ; c++){
108  bitstreamCLB[r][c] = &bitstreamBegin[offset];
110  }
111  }
112  for(int r = fromGlobalRowTop ; r <= toGlobalRowTop ; r++){
113  for(int c = 0 ; c < numberOfBRAMCols[r] ; c++){
114  bitstreamBRAM[r][c] = &bitstreamBegin[offset];
116  }
119  }
120  for(int r = fromGlobalRowBottom ; r >= toGlobalRowBottom ; r--){
121  for(int c = 0 ; c < numberOfBRAMCols[r] ; c++){
122  bitstreamBRAM[r][c] = &bitstreamBegin[offset];
124  }
127  }
128  }
129 
130  bitstreamEnd = &bitstreamBegin[offset];
131  bitstreamHasValidData = false;
132  log("Reserved " + to_string(clbPlaneSize + bramPlaneSize) + " words for the bitstream buffers of device \"" + partName + "\"");
133  }
134 }
#define XS7_EXTRA_FRAMES_PER_ROW
Definition: XS7_Fabric.h:46
#define XS7_FRAMES_PER_BRAM_CONTENT_COLUMN
Definition: XS7_Fabric.h:42

References Endian::to_string(), XS7_EXTRA_FRAMES_PER_ROW, XS7_FRAMES_PER_BRAM_CONTENT_COLUMN, and XS7_WORDS_PER_FRAME.

Here is the call graph for this function:

◆ getDeviceByIDCODE()

int XilinxSeries7::getDeviceByIDCODE ( int  IDCODE)
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 58 of file XS7_Devices.cpp.

59 {
60  //Series 7 Spartan
61  #ifdef XS7SPARTAN
62  if(IDCODE == XC7S6_IDCODE)
63  return XS7_DEVICE_XC7S6;
64  if(IDCODE == XC7S15_IDCODE)
65  return XS7_DEVICE_XC7S15;
66  if(IDCODE == XC7S25_IDCODE)
67  return XS7_DEVICE_XC7S25;
68  if(IDCODE == XC7S50_IDCODE)
69  return XS7_DEVICE_XC7S50;
70  if(IDCODE == XC7S75_IDCODE)
71  return XS7_DEVICE_XC7S75;
72  if(IDCODE == XC7S100_IDCODE)
73  return XS7_DEVICE_XC7S100;
74  #endif
75  //Series 7 Artix
76  #ifdef XS7ARTIX
77  if(IDCODE == XC7A12_IDCODE)
78  return XS7_DEVICE_XC7A12;
79  if(IDCODE == XC7A15_IDCODE)
80  return XS7_DEVICE_XC7A15;
81  if(IDCODE == XC7A25_IDCODE)
82  return XS7_DEVICE_XC7A25;
83  if(IDCODE == XC7A35_IDCODE)
84  return XS7_DEVICE_XC7A35;
85  if(IDCODE == XC7A50_IDCODE)
86  return XS7_DEVICE_XC7A50;
87  if(IDCODE == XC7A75_IDCODE)
88  return XS7_DEVICE_XC7A75;
89  if(IDCODE == XC7A100_IDCODE)
90  return XS7_DEVICE_XC7A100;
91  if(IDCODE == XC7A200_IDCODE)
92  return XS7_DEVICE_XC7A200;
93  #endif
94  //Series 7 Zynq
95  #ifdef XS7ZYNQ
96  if(IDCODE == XC7Z007_IDCODE)
97  return XS7_DEVICE_XC7Z007;
98  if(IDCODE == XC7Z010_IDCODE)
99  return XS7_DEVICE_XC7Z010;
100  if(IDCODE == XC7Z012_IDCODE)
101  return XS7_DEVICE_XC7Z012;
102  if(IDCODE == XC7Z014_IDCODE)
103  return XS7_DEVICE_XC7Z014;
104  if(IDCODE == XC7Z015_IDCODE)
105  return XS7_DEVICE_XC7Z015;
106  if(IDCODE == XC7Z020_IDCODE)
107  return XS7_DEVICE_XC7Z020;
108  if(IDCODE == XC7Z030_IDCODE)
109  return XS7_DEVICE_XC7Z030;
110  if(IDCODE == XC7Z035_IDCODE)
111  return XS7_DEVICE_XC7Z035;
112  if(IDCODE == XC7Z045_IDCODE)
113  return XS7_DEVICE_XC7Z045;
114  if(IDCODE == XC7Z100_IDCODE)
115  return XS7_DEVICE_XC7Z100;
116  #endif
117  //Series 7 Kintex
118  #ifdef XS7KINTEX
119  if(IDCODE == XC7K70_IDCODE)
120  return XS7_DEVICE_XC7K70;
121  if(IDCODE == XC7K160_IDCODE)
122  return XS7_DEVICE_XC7K160;
123  if(IDCODE == XC7K325_IDCODE)
124  return XS7_DEVICE_XC7K325;
125  if(IDCODE == XC7K355_IDCODE)
126  return XS7_DEVICE_XC7K355;
127  if(IDCODE == XC7K410_IDCODE)
128  return XS7_DEVICE_XC7K410;
129  if(IDCODE == XC7K420_IDCODE)
130  return XS7_DEVICE_XC7K420;
131  if(IDCODE == XC7K480_IDCODE)
132  return XS7_DEVICE_XC7K480;
133  #endif
134  //Series 7 Virtex
135  #ifdef XS7VIRTEX
136  if(IDCODE == XC7V585_IDCODE)
137  return XS7_DEVICE_XC7V585;
138  if(IDCODE == XC7V2000_IDCODE)
139  return XS7_DEVICE_XC7V2000;
140  if(IDCODE == XC7VH580_IDCODE)
141  return XS7_DEVICE_XC7VH580;
142  if(IDCODE == XC7VH870_IDCODE)
143  return XS7_DEVICE_XC7VH870;
144  if(IDCODE == XC7VX330_IDCODE)
145  return XS7_DEVICE_XC7VX330;
146  if(IDCODE == XC7VX415_IDCODE)
147  return XS7_DEVICE_XC7VX415;
148  if(IDCODE == XC7VX485_IDCODE)
149  return XS7_DEVICE_XC7VX485;
150  if(IDCODE == XC7VX550_IDCODE)
151  return XS7_DEVICE_XC7VX550;
152  if(IDCODE == XC7VX690_IDCODE)
153  return XS7_DEVICE_XC7VX690;
154  if(IDCODE == XC7VX980_IDCODE)
155  return XS7_DEVICE_XC7VX980;
156  if(IDCODE == XC7VX1140_IDCODE)
157  return XS7_DEVICE_XC7VX1140;
158  #endif
159 
160  return XS7_DEVICE_NULL;
161 }
#define XC7VX330_IDCODE
Definition: XS7_Devices.h:760
#define XC7VH580_IDCODE
Definition: XS7_Devices.h:705
#define XC7VX980_IDCODE
Definition: XS7_Devices.h:856
#define XC7A75_IDCODE
Definition: XS7_Devices.h:321
#define XC7S75_IDCODE
Definition: XS7_Devices.h:218
#define XC7VX415_IDCODE
Definition: XS7_Devices.h:778
#define XC7A12_IDCODE
Definition: XS7_Devices.h:250
#define XC7Z007_IDCODE
Definition: XS7_Devices.h:369
#define XC7S6_IDCODE
Definition: XS7_Devices.h:164
#define XC7VX485_IDCODE
Definition: XS7_Devices.h:795
#define XC7A35_IDCODE
Definition: XS7_Devices.h:292
#define XC7K410_IDCODE
Definition: XS7_Devices.h:590
#define XC7S50_IDCODE
Definition: XS7_Devices.h:203
#define XC7K355_IDCODE
Definition: XS7_Devices.h:573
#define XC7Z015_IDCODE
Definition: XS7_Devices.h:425
#define XC7Z014_IDCODE
Definition: XS7_Devices.h:411
#define XC7Z030_IDCODE
Definition: XS7_Devices.h:453
#define XC7Z012_IDCODE
Definition: XS7_Devices.h:396
#define XC7S15_IDCODE
Definition: XS7_Devices.h:176
@ XS7_DEVICE_XC7V2000
Definition: XS7_Devices.h:62
@ XS7_DEVICE_XC7A100
Definition: XS7_Devices.h:39
@ XS7_DEVICE_XC7A15
Definition: XS7_Devices.h:34
@ XS7_DEVICE_XC7K70
Definition: XS7_Devices.h:53
@ XS7_DEVICE_XC7K325
Definition: XS7_Devices.h:55
@ XS7_DEVICE_XC7K480
Definition: XS7_Devices.h:59
@ XS7_DEVICE_XC7K420
Definition: XS7_Devices.h:58
@ XS7_DEVICE_XC7Z045
Definition: XS7_Devices.h:50
@ XS7_DEVICE_XC7A12
Definition: XS7_Devices.h:33
@ XS7_DEVICE_XC7A200
Definition: XS7_Devices.h:40
@ XS7_DEVICE_XC7Z030
Definition: XS7_Devices.h:48
@ XS7_DEVICE_XC7Z014
Definition: XS7_Devices.h:45
@ XS7_DEVICE_XC7A35
Definition: XS7_Devices.h:36
@ XS7_DEVICE_XC7K410
Definition: XS7_Devices.h:57
@ XS7_DEVICE_XC7K355
Definition: XS7_Devices.h:56
@ XS7_DEVICE_XC7S75
Definition: XS7_Devices.h:30
@ XS7_DEVICE_XC7S15
Definition: XS7_Devices.h:27
@ XS7_DEVICE_XC7VX1140
Definition: XS7_Devices.h:71
@ XS7_DEVICE_XC7VX690
Definition: XS7_Devices.h:69
@ XS7_DEVICE_XC7A75
Definition: XS7_Devices.h:38
@ XS7_DEVICE_XC7V585
Definition: XS7_Devices.h:61
@ XS7_DEVICE_XC7VH870
Definition: XS7_Devices.h:64
@ XS7_DEVICE_XC7Z100
Definition: XS7_Devices.h:51
@ XS7_DEVICE_XC7S50
Definition: XS7_Devices.h:29
@ XS7_DEVICE_XC7Z012
Definition: XS7_Devices.h:44
@ XS7_DEVICE_XC7Z035
Definition: XS7_Devices.h:49
@ XS7_DEVICE_XC7K160
Definition: XS7_Devices.h:54
@ XS7_DEVICE_XC7Z015
Definition: XS7_Devices.h:46
@ XS7_DEVICE_XC7A25
Definition: XS7_Devices.h:35
@ XS7_DEVICE_NULL
Definition: XS7_Devices.h:24
@ XS7_DEVICE_XC7S6
Definition: XS7_Devices.h:26
@ XS7_DEVICE_XC7S100
Definition: XS7_Devices.h:31
@ XS7_DEVICE_XC7Z010
Definition: XS7_Devices.h:43
@ XS7_DEVICE_XC7Z007
Definition: XS7_Devices.h:42
@ XS7_DEVICE_XC7S25
Definition: XS7_Devices.h:28
@ XS7_DEVICE_XC7VX330
Definition: XS7_Devices.h:65
@ XS7_DEVICE_XC7A50
Definition: XS7_Devices.h:37
@ XS7_DEVICE_XC7VX980
Definition: XS7_Devices.h:70
@ XS7_DEVICE_XC7VX550
Definition: XS7_Devices.h:68
@ XS7_DEVICE_XC7Z020
Definition: XS7_Devices.h:47
@ XS7_DEVICE_XC7VX485
Definition: XS7_Devices.h:67
@ XS7_DEVICE_XC7VX415
Definition: XS7_Devices.h:66
@ XS7_DEVICE_XC7VH580
Definition: XS7_Devices.h:63
#define XC7S100_IDCODE
Definition: XS7_Devices.h:233
#define XC7A15_IDCODE
Definition: XS7_Devices.h:264
#define XC7K420_IDCODE
Definition: XS7_Devices.h:609
#define XC7K325_IDCODE
Definition: XS7_Devices.h:555
#define XC7VX1140_IDCODE
Definition: XS7_Devices.h:876
#define XC7Z020_IDCODE
Definition: XS7_Devices.h:439
#define XC7A50_IDCODE
Definition: XS7_Devices.h:306
#define XC7Z010_IDCODE
Definition: XS7_Devices.h:382
#define XC7A100_IDCODE
Definition: XS7_Devices.h:336
#define XC7A200_IDCODE
Definition: XS7_Devices.h:351
#define XC7VX550_IDCODE
Definition: XS7_Devices.h:814
#define XC7Z045_IDCODE
Definition: XS7_Devices.h:487
#define XC7Z035_IDCODE
Definition: XS7_Devices.h:469
#define XC7V2000_IDCODE
Definition: XS7_Devices.h:668
#define XC7S25_IDCODE
Definition: XS7_Devices.h:189
#define XC7K70_IDCODE
Definition: XS7_Devices.h:524
#define XC7K160_IDCODE
Definition: XS7_Devices.h:539
#define XC7Z100_IDCODE
Definition: XS7_Devices.h:505
#define XC7V585_IDCODE
Definition: XS7_Devices.h:648
#define XC7VH870_IDCODE
Definition: XS7_Devices.h:729
#define XC7VX690_IDCODE
Definition: XS7_Devices.h:835
#define XC7A25_IDCODE
Definition: XS7_Devices.h:278
#define XC7K480_IDCODE
Definition: XS7_Devices.h:628

References XC7A100_IDCODE, XC7A12_IDCODE, XC7A15_IDCODE, XC7A200_IDCODE, XC7A25_IDCODE, XC7A35_IDCODE, XC7A50_IDCODE, XC7A75_IDCODE, XC7K160_IDCODE, XC7K325_IDCODE, XC7K355_IDCODE, XC7K410_IDCODE, XC7K420_IDCODE, XC7K480_IDCODE, XC7K70_IDCODE, XC7S100_IDCODE, XC7S15_IDCODE, XC7S25_IDCODE, XC7S50_IDCODE, XC7S6_IDCODE, XC7S75_IDCODE, XC7V2000_IDCODE, XC7V585_IDCODE, XC7VH580_IDCODE, XC7VH870_IDCODE, XC7VX1140_IDCODE, XC7VX330_IDCODE, XC7VX415_IDCODE, XC7VX485_IDCODE, XC7VX550_IDCODE, XC7VX690_IDCODE, XC7VX980_IDCODE, XC7Z007_IDCODE, XC7Z010_IDCODE, XC7Z012_IDCODE, XC7Z014_IDCODE, XC7Z015_IDCODE, XC7Z020_IDCODE, XC7Z030_IDCODE, XC7Z035_IDCODE, XC7Z045_IDCODE, XC7Z100_IDCODE, XS7_DEVICE_NULL, XS7_DEVICE_XC7A100, XS7_DEVICE_XC7A12, XS7_DEVICE_XC7A15, XS7_DEVICE_XC7A200, XS7_DEVICE_XC7A25, XS7_DEVICE_XC7A35, XS7_DEVICE_XC7A50, XS7_DEVICE_XC7A75, XS7_DEVICE_XC7K160, XS7_DEVICE_XC7K325, XS7_DEVICE_XC7K355, XS7_DEVICE_XC7K410, XS7_DEVICE_XC7K420, XS7_DEVICE_XC7K480, XS7_DEVICE_XC7K70, XS7_DEVICE_XC7S100, XS7_DEVICE_XC7S15, XS7_DEVICE_XC7S25, XS7_DEVICE_XC7S50, XS7_DEVICE_XC7S6, XS7_DEVICE_XC7S75, XS7_DEVICE_XC7V2000, XS7_DEVICE_XC7V585, XS7_DEVICE_XC7VH580, XS7_DEVICE_XC7VH870, XS7_DEVICE_XC7VX1140, XS7_DEVICE_XC7VX330, XS7_DEVICE_XC7VX415, XS7_DEVICE_XC7VX485, XS7_DEVICE_XC7VX550, XS7_DEVICE_XC7VX690, XS7_DEVICE_XC7VX980, XS7_DEVICE_XC7Z007, XS7_DEVICE_XC7Z010, XS7_DEVICE_XC7Z012, XS7_DEVICE_XC7Z014, XS7_DEVICE_XC7Z015, XS7_DEVICE_XC7Z020, XS7_DEVICE_XC7Z030, XS7_DEVICE_XC7Z035, XS7_DEVICE_XC7Z045, and XS7_DEVICE_XC7Z100.

◆ getDeviceByIDCODEorThrow()

int XilinxSeries7::getDeviceByIDCODEorThrow ( int  IDCODE)
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 28 of file XS7_Devices.cpp.

29 {
30  int deviceID = getDeviceByIDCODE(IDCODE);
31  if(deviceID == XS7_DEVICE_NULL)
32  throw runtime_error(string("Unknown device with IDCODE = ").append(to_string(IDCODE)).append(" . Maybe the device is not Xilinx Series 7 device?"));
33  return deviceID;
34 }
int getDeviceByIDCODE(int) override
Definition: XS7_Devices.cpp:58

References Endian::to_string(), and XS7_DEVICE_NULL.

Here is the call graph for this function:

◆ getDeviceByName()

int XilinxSeries7::getDeviceByName ( std::string  )
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 162 of file XS7_Devices.cpp.

163 {
164  name = str::removeSpaces(name);
165  name = str::stringToLower(name);
166 
167  //Series 7 Spartan
168  #ifdef XS7SPARTAN
170  return XS7_DEVICE_XC7S6;
172  return XS7_DEVICE_XC7S15;
174  return XS7_DEVICE_XC7S25;
176  return XS7_DEVICE_XC7S50;
178  return XS7_DEVICE_XC7S75;
180  return XS7_DEVICE_XC7S100;
181  #endif
182  //Series 7 Artix
183  #ifdef XS7ARTIX
185  return XS7_DEVICE_XC7A12;
187  return XS7_DEVICE_XC7A15;
189  return XS7_DEVICE_XC7A25;
191  return XS7_DEVICE_XC7A35;
193  return XS7_DEVICE_XC7A50;
195  return XS7_DEVICE_XC7A75;
197  return XS7_DEVICE_XC7A100;
199  return XS7_DEVICE_XC7A200;
200  #endif
201  //Series 7 Zynq
202  #ifdef XS7ZYNQ
204  return XS7_DEVICE_XC7Z007;
206  return XS7_DEVICE_XC7Z010;
208  return XS7_DEVICE_XC7Z012;
210  return XS7_DEVICE_XC7Z014;
212  return XS7_DEVICE_XC7Z015;
214  return XS7_DEVICE_XC7Z020;
216  return XS7_DEVICE_XC7Z030;
218  return XS7_DEVICE_XC7Z035;
220  return XS7_DEVICE_XC7Z045;
222  return XS7_DEVICE_XC7Z100;
223  #endif
224  //Series 7 Kintex
225  #ifdef XS7KINTEX
227  return XS7_DEVICE_XC7K70;
229  return XS7_DEVICE_XC7K160;
231  return XS7_DEVICE_XC7K325;
233  return XS7_DEVICE_XC7K355;
235  return XS7_DEVICE_XC7K410;
237  return XS7_DEVICE_XC7K420;
239  return XS7_DEVICE_XC7K480;
240  #endif
241  //Series 7 Virtex
242  #ifdef XS7VIRTEX
244  return XS7_DEVICE_XC7V585;
246  return XS7_DEVICE_XC7V2000;
248  return XS7_DEVICE_XC7VH580;
250  return XS7_DEVICE_XC7VH870;
252  return XS7_DEVICE_XC7VX330;
254  return XS7_DEVICE_XC7VX415;
256  return XS7_DEVICE_XC7VX485;
258  return XS7_DEVICE_XC7VX550;
260  return XS7_DEVICE_XC7VX690;
262  return XS7_DEVICE_XC7VX980;
264  return XS7_DEVICE_XC7VX1140;
265  #endif
266  //Series 7 Boards
267  #ifdef XS7BOARDS
268  if(str::iff::stringContains(name, "wizarde"))
269  return XS7_DEVICE_WIZARDE;
270  if(str::iff::stringContains(name, "kintex-7connectivity", "kintex7connectivity"))
272  if(str::iff::stringContains(name, "kc705", "kintex-7evaluation", "kintex7evaluation", "kintex-7embedded", "kintex7embedded"))
273  return XS7_DEVICE_KC705;
274  if(str::iff::stringContains(name, "kc724", "kintex-7characterization", "kintex7characterization"))
275  return XS7_DEVICE_KC724;
276  if(str::iff::stringContains(name, "sp701"))
277  return XS7_DEVICE_SP701;
278  if(str::iff::stringContains(name, "ac701"))
279  return XS7_DEVICE_AC701;
280  if(str::iff::stringContains(name, "artya7-35", "artya735", "arty35"))
281  return XS7_DEVICE_ARTY_A35;
282  if(str::iff::stringContains(name, "artya7-100", "artya7100", "arty100"))
283  return XS7_DEVICE_ARTY_A100;
284  if(str::iff::stringContains(name, "artyz7-10", "artyz710", "arty10"))
285  return XS7_DEVICE_ARTY_Z10;
286  if(str::iff::stringContains(name, "artyz7-20", "artyz720", "arty20"))
287  return XS7_DEVICE_ARTY_Z20;
288  if(str::iff::stringContains(name, "artys7-25", "artys725", "arty25"))
289  return XS7_DEVICE_ARTY_S25;
290  if(str::iff::stringContains(name, "artys7-50", "artys750", "arty50"))
291  return XS7_DEVICE_ARTY_S50;
292  if(str::iff::stringContains(name, "basys3"))
293  return XS7_DEVICE_BASYS3;
294  if(str::iff::stringContains(name, "pynq-z1", "pynqz1"))
295  return XS7_DEVICE_PYNQ_Z1;
296  if(str::iff::stringContains(name, "pynq-z2", "pynqz2"))
297  return XS7_DEVICE_PYNQ_Z2;
298  if(str::iff::stringContains(name, "nexysa7-50", "nexysa750", "nexys50"))
299  return XS7_DEVICE_NEXYS_A50;
300  if(str::iff::stringContains(name, "nexysa7-100", "nexysa7100", "nexys100"))
301  return XS7_DEVICE_NEXYS_A100;
302  if(str::iff::stringContains(name, "zyboz7-10", "zyboz710", "zybo10"))
303  return XS7_DEVICE_ZYBO_Z10;
304  if(str::iff::stringContains(name, "zyboz7-20", "zyboz720", "zybo20"))
305  return XS7_DEVICE_ZYBO_Z20;
306  if(str::iff::stringContains(name, "cmoda7-15", "cmoda715", "cmod15"))
307  return XS7_DEVICE_CMOD_A15;
308  if(str::iff::stringContains(name, "cmoda7-35", "cmoda735", "cmod35"))
309  return XS7_DEVICE_CMOD_A35;
310  if(str::iff::stringContains(name, "cmods7-25", "cmods725", "cmod25", "cmods"))
311  return XS7_DEVICE_CMOD_S25;
312  if(str::iff::stringContains(name, "zedboard"))
313  return XS7_DEVICE_ZEDBOARD;
314  if(str::iff::stringContains(name, "coraz7-07", "coraz707", "cora07", "cora7"))
315  return XS7_DEVICE_CORA_Z7;
316  if(str::iff::stringContains(name, "coraz7-10", "coraz710", "cora10"))
317  return XS7_DEVICE_CORA_Z10;
318  if(str::iff::stringContains(name, "nexysvideo"))
319  return XS7_DEVICE_NEXYS_VIDEO;
320  if(str::iff::stringContains(name, "genesys2"))
322  if(str::iff::stringContains(name, "eclypsez7"))
323  return XS7_DEVICE_ECLYPSE_Z7;
324  if(str::iff::stringContains(name, "usb104"))
325  return XS7_DEVICE_USB104;
326  if(str::iff::stringContains(name, "netfpga-sume", "netfpgasume"))
328  if(str::iff::stringContains(name, "vc707"))
329  return XS7_DEVICE_VC707;
330  if(str::iff::stringContains(name, "vc709"))
331  return XS7_DEVICE_VC709;
332  if(str::iff::stringContains(name, "vc7215"))
333  return XS7_DEVICE_VC7215;
334  if(str::iff::stringContains(name, "vc7203"))
335  return XS7_DEVICE_VC7203;
336  if(str::iff::stringContains(name, "vc7222"))
337  return XS7_DEVICE_VC7222;
338  if(str::iff::stringContains(name, "zc702"))
339  return XS7_DEVICE_ZC702;
340  if(str::iff::stringContains(name, "zc706"))
341  return XS7_DEVICE_ZC706;
342 
343 
344  #endif
345  return XS7_DEVICE_NULL;
346 }
#define XC7S100_NAME
Definition: XS7_Devices.h:230
#define XC7VX690_NAME
Definition: XS7_Devices.h:832
#define XC7A200_NAME
Definition: XS7_Devices.h:348
#define XC7S6_NAME
Definition: XS7_Devices.h:161
#define XC7Z020_NAME
Definition: XS7_Devices.h:436
#define XC7VX485_NAME
Definition: XS7_Devices.h:792
#define XC7A25_NAME
Definition: XS7_Devices.h:275
#define XC7Z100_NAME
Definition: XS7_Devices.h:502
#define XC7V585_NAME
Definition: XS7_Devices.h:645
#define XC7K420_NAME
Definition: XS7_Devices.h:606
#define XC7K480_NAME
Definition: XS7_Devices.h:625
#define XC7Z030_NAME
Definition: XS7_Devices.h:450
#define XC7VX550_NAME
Definition: XS7_Devices.h:811
#define XC7S75_NAME
Definition: XS7_Devices.h:215
#define XC7Z012_NAME
Definition: XS7_Devices.h:393
#define XC7Z035_NAME
Definition: XS7_Devices.h:466
#define XC7K355_NAME
Definition: XS7_Devices.h:570
#define XC7VX980_NAME
Definition: XS7_Devices.h:853
#define XC7K410_NAME
Definition: XS7_Devices.h:587
#define XC7Z007_NAME
Definition: XS7_Devices.h:366
#define XC7VX330_NAME
Definition: XS7_Devices.h:757
#define XC7K325_NAME
Definition: XS7_Devices.h:552
#define XC7A100_NAME
Definition: XS7_Devices.h:333
@ XS7_DEVICE_CMOD_A15
Definition: XS7_Devices.h:92
@ XS7_DEVICE_ZEDBOARD
Definition: XS7_Devices.h:95
@ XS7_DEVICE_VC7215
Definition: XS7_Devices.h:105
@ XS7_DEVICE_KC705
Definition: XS7_Devices.h:75
@ XS7_DEVICE_CORA_Z10
Definition: XS7_Devices.h:97
@ XS7_DEVICE_BASYS3
Definition: XS7_Devices.h:85
@ XS7_DEVICE_SP701
Definition: XS7_Devices.h:77
@ XS7_DEVICE_ARTY_A35
Definition: XS7_Devices.h:79
@ XS7_DEVICE_ARTY_S25
Definition: XS7_Devices.h:83
@ XS7_DEVICE_ARTY_Z10
Definition: XS7_Devices.h:81
@ XS7_DEVICE_ZYBO_Z10
Definition: XS7_Devices.h:90
@ XS7_DEVICE_NEXYS_A100
Definition: XS7_Devices.h:89
@ XS7_DEVICE_USB104
Definition: XS7_Devices.h:101
@ XS7_DEVICE_ARTY_S50
Definition: XS7_Devices.h:84
@ XS7_DEVICE_ZYBO_Z20
Definition: XS7_Devices.h:91
@ XS7_DEVICE_ARTY_Z20
Definition: XS7_Devices.h:82
@ XS7_DEVICE_VC7203
Definition: XS7_Devices.h:106
@ XS7_DEVICE_KINTEX7CONNECTIVITY
Definition: XS7_Devices.h:74
@ XS7_DEVICE_NETFPGA_SUME
Definition: XS7_Devices.h:102
@ XS7_DEVICE_ZC702
Definition: XS7_Devices.h:108
@ XS7_DEVICE_KC724
Definition: XS7_Devices.h:76
@ XS7_DEVICE_ARTY_GENESYS2
Definition: XS7_Devices.h:99
@ XS7_DEVICE_NEXYS_A50
Definition: XS7_Devices.h:88
@ XS7_DEVICE_ZC706
Definition: XS7_Devices.h:109
@ XS7_DEVICE_VC707
Definition: XS7_Devices.h:103
@ XS7_DEVICE_CORA_Z7
Definition: XS7_Devices.h:96
@ XS7_DEVICE_WIZARDE
Definition: XS7_Devices.h:73
@ XS7_DEVICE_VC709
Definition: XS7_Devices.h:104
@ XS7_DEVICE_PYNQ_Z1
Definition: XS7_Devices.h:86
@ XS7_DEVICE_VC7222
Definition: XS7_Devices.h:107
@ XS7_DEVICE_PYNQ_Z2
Definition: XS7_Devices.h:87
@ XS7_DEVICE_AC701
Definition: XS7_Devices.h:78
@ XS7_DEVICE_CMOD_A35
Definition: XS7_Devices.h:93
@ XS7_DEVICE_ECLYPSE_Z7
Definition: XS7_Devices.h:100
@ XS7_DEVICE_ARTY_A100
Definition: XS7_Devices.h:80
@ XS7_DEVICE_NEXYS_VIDEO
Definition: XS7_Devices.h:98
@ XS7_DEVICE_CMOD_S25
Definition: XS7_Devices.h:94
#define XC7K70_NAME
Definition: XS7_Devices.h:521
#define XC7VH870_NAME
Definition: XS7_Devices.h:726
#define XC7Z010_NAME
Definition: XS7_Devices.h:379
#define XC7Z045_NAME
Definition: XS7_Devices.h:484
#define XC7V2000_NAME
Definition: XS7_Devices.h:665
#define XC7A50_NAME
Definition: XS7_Devices.h:303
#define XC7S15_NAME
Definition: XS7_Devices.h:173
#define XC7VX1140_NAME
Definition: XS7_Devices.h:873
#define XC7VX415_NAME
Definition: XS7_Devices.h:775
#define XC7Z014_NAME
Definition: XS7_Devices.h:408
#define XC7A12_NAME
Definition: XS7_Devices.h:247
#define XC7S50_NAME
Definition: XS7_Devices.h:200
#define XC7VH580_NAME
Definition: XS7_Devices.h:702
#define XC7A15_NAME
Definition: XS7_Devices.h:261
#define XC7A75_NAME
Definition: XS7_Devices.h:318
#define XC7Z015_NAME
Definition: XS7_Devices.h:422
#define XC7A35_NAME
Definition: XS7_Devices.h:289
#define XC7S25_NAME
Definition: XS7_Devices.h:186
#define XC7K160_NAME
Definition: XS7_Devices.h:536
std::string stringToLower(std::string str)
Replaces all uppercase characters in str with lowercase and returns the resulting string.
Definition: str.h:59
std::string removeSpaces(std::string str)
Removes all space chars of str returns the resulting string.
Definition: str.h:47

References str::removeSpaces(), str::iff::stringContains(), str::stringToLower(), XC7A100_NAME, XC7A12_NAME, XC7A15_NAME, XC7A200_NAME, XC7A25_NAME, XC7A35_NAME, XC7A50_NAME, XC7A75_NAME, XC7K160_NAME, XC7K325_NAME, XC7K355_NAME, XC7K410_NAME, XC7K420_NAME, XC7K480_NAME, XC7K70_NAME, XC7S100_NAME, XC7S15_NAME, XC7S25_NAME, XC7S50_NAME, XC7S6_NAME, XC7S75_NAME, XC7V2000_NAME, XC7V585_NAME, XC7VH580_NAME, XC7VH870_NAME, XC7VX1140_NAME, XC7VX330_NAME, XC7VX415_NAME, XC7VX485_NAME, XC7VX550_NAME, XC7VX690_NAME, XC7VX980_NAME, XC7Z007_NAME, XC7Z010_NAME, XC7Z012_NAME, XC7Z014_NAME, XC7Z015_NAME, XC7Z020_NAME, XC7Z030_NAME, XC7Z035_NAME, XC7Z045_NAME, XC7Z100_NAME, XS7_DEVICE_AC701, XS7_DEVICE_ARTY_A100, XS7_DEVICE_ARTY_A35, XS7_DEVICE_ARTY_GENESYS2, XS7_DEVICE_ARTY_S25, XS7_DEVICE_ARTY_S50, XS7_DEVICE_ARTY_Z10, XS7_DEVICE_ARTY_Z20, XS7_DEVICE_BASYS3, XS7_DEVICE_CMOD_A15, XS7_DEVICE_CMOD_A35, XS7_DEVICE_CMOD_S25, XS7_DEVICE_CORA_Z10, XS7_DEVICE_CORA_Z7, XS7_DEVICE_ECLYPSE_Z7, XS7_DEVICE_KC705, XS7_DEVICE_KC724, XS7_DEVICE_KINTEX7CONNECTIVITY, XS7_DEVICE_NETFPGA_SUME, XS7_DEVICE_NEXYS_A100, XS7_DEVICE_NEXYS_A50, XS7_DEVICE_NEXYS_VIDEO, XS7_DEVICE_NULL, XS7_DEVICE_PYNQ_Z1, XS7_DEVICE_PYNQ_Z2, XS7_DEVICE_SP701, XS7_DEVICE_USB104, XS7_DEVICE_VC707, XS7_DEVICE_VC709, XS7_DEVICE_VC7203, XS7_DEVICE_VC7215, XS7_DEVICE_VC7222, XS7_DEVICE_WIZARDE, XS7_DEVICE_XC7A100, XS7_DEVICE_XC7A12, XS7_DEVICE_XC7A15, XS7_DEVICE_XC7A200, XS7_DEVICE_XC7A25, XS7_DEVICE_XC7A35, XS7_DEVICE_XC7A50, XS7_DEVICE_XC7A75, XS7_DEVICE_XC7K160, XS7_DEVICE_XC7K325, XS7_DEVICE_XC7K355, XS7_DEVICE_XC7K410, XS7_DEVICE_XC7K420, XS7_DEVICE_XC7K480, XS7_DEVICE_XC7K70, XS7_DEVICE_XC7S100, XS7_DEVICE_XC7S15, XS7_DEVICE_XC7S25, XS7_DEVICE_XC7S50, XS7_DEVICE_XC7S6, XS7_DEVICE_XC7S75, XS7_DEVICE_XC7V2000, XS7_DEVICE_XC7V585, XS7_DEVICE_XC7VH580, XS7_DEVICE_XC7VH870, XS7_DEVICE_XC7VX1140, XS7_DEVICE_XC7VX330, XS7_DEVICE_XC7VX415, XS7_DEVICE_XC7VX485, XS7_DEVICE_XC7VX550, XS7_DEVICE_XC7VX690, XS7_DEVICE_XC7VX980, XS7_DEVICE_XC7Z007, XS7_DEVICE_XC7Z010, XS7_DEVICE_XC7Z012, XS7_DEVICE_XC7Z014, XS7_DEVICE_XC7Z015, XS7_DEVICE_XC7Z020, XS7_DEVICE_XC7Z030, XS7_DEVICE_XC7Z035, XS7_DEVICE_XC7Z045, XS7_DEVICE_XC7Z100, XS7_DEVICE_ZC702, XS7_DEVICE_ZC706, XS7_DEVICE_ZEDBOARD, XS7_DEVICE_ZYBO_Z10, and XS7_DEVICE_ZYBO_Z20.

Here is the call graph for this function:

◆ getDeviceByNameOrThrow()

int XilinxSeries7::getDeviceByNameOrThrow ( std::string  )
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 36 of file XS7_Devices.cpp.

37 {
38  int deviceID = getDeviceByName(name);
39  if(deviceID == XS7_DEVICE_NULL)
40  throw runtime_error(string("Unknown device: ").append(name).append(". Maybe the device is not Xilinx Series 7 device?"));
41  return deviceID;
42 }
int getDeviceByName(std::string) override

References XS7_DEVICE_NULL.

◆ getFrameType()

string XilinxSeries7::getFrameType ( int  blockType,
int  rowAddress,
int  columnAddress 
)
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 136 of file XilinxSeries7.cpp.

136  {
137  if(XS7_BLOCKTYPE_BLOCKRAM == blockType)
138  return "BlockRAM Contents";
139  else if(XS7_BLOCKTYPE_LOGIC == blockType)
140  return LUT_typeOfFrameForResourceLetter[(uint8_t)resourceString[rowAddress][columnAddress]];
141  else
142  return "Unknown";
143 }
#define XS7_BLOCKTYPE_BLOCKRAM
Definition: XS7_Fabric.h:35
#define XS7_BLOCKTYPE_LOGIC
Definition: XS7_Fabric.h:34

References XS7_BLOCKTYPE_BLOCKRAM, and XS7_BLOCKTYPE_LOGIC.

◆ initFabric()

void XilinxSeries7::initFabric ( )

Definition at line 22 of file XS7_Fabric.cpp.

22  {
23  setFabricChar(char(0), 0, "EndedLine", true);
24  setFabricChar(char(1), XS7_EXTRA_FRAMES_PER_ROW, "EndOfLine", true);
25  //The Xilinx Series7 fabric in byteman is encoded in the following letters:
26 
27  //A-G are brams
28  setFabricChar('A', 28, "BRAM_R"); //"BRAM_R + NULL + NULL + NULL + NULL + BRAM_R + NULL + NULL + NULL + NULL + BRAM_R + NULL + NULL + NULL + NULL + BRAM_R + NULL + NULL + NULL + NULL + BRAM_R + NULL + NULL + NULL + NULL + BRAM_R + NULL + NULL + NULL + NULL + BRAM_R + NULL + NULL + NULL + NULL + BRAM_R + NULL + NULL + NULL + NULL + BRAM_R + NULL + NULL + NULL + NULL + BRAM_R + NULL + NULL + NULL + NULL/HCLK_BRAM";
29  setFabricChar('B', 28, "BRAM_L"); //"BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL/HCLK_BRAM";
30  setFabricChar('C', 28, "PCIE_NULL + BRAM_L"); //"PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL/HCLK_BRAM";
31  setFabricChar('D', 28, "L_TERM_INT_BRAM + BRAM_L"); //"L_TERM_INT_BRAM + L_TERM_INT_BRAM + L_TERM_INT_BRAM + L_TERM_INT_BRAM + L_TERM_INT_BRAM + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL/HCLK_BRAM";
32  setFabricChar('E', 28, "BRAM_L + L_TERM_INT_BRAM"); //"BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + L_TERM_INT_BRAM + L_TERM_INT_BRAM + L_TERM_INT_BRAM + L_TERM_INT_BRAM + L_TERM_INT_BRAM/HCLK_BRAM";
33  setFabricChar('F', 28, "BRAM_L + PCIE_NULL"); //"BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + BRAM_L + NULL + NULL + NULL + NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL/HCLK_BRAM";
34  setFabricChar('G', 28, "PCIE_BOT_LEFT + BRAM_R"); //"PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_BOT_LEFT + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_TOP_LEFT + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + BRAM_R + NULL + NULL + NULL + NULL + BRAM_R + NULL + NULL + NULL + NULL + BRAM_R + NULL + NULL + NULL + NULL + BRAM_R + NULL + NULL + NULL + NULL + BRAM_R + NULL + NULL + NULL + NULL/HCLK_BRAM";
35 
36  //H-I are DSPs
37  setFabricChar('H', 28, "DSP_L"); //"DSP_L + NULL + NULL + NULL + NULL + DSP_L + NULL + NULL + NULL + NULL + DSP_L + NULL + NULL + NULL + NULL + DSP_L + NULL + NULL + NULL + NULL + DSP_L + NULL + NULL + NULL + NULL + DSP_L + NULL + NULL + NULL + NULL + DSP_L + NULL + NULL + NULL + NULL + DSP_L + NULL + NULL + NULL + NULL + DSP_L + NULL + NULL + NULL + NULL + DSP_L + NULL + NULL + NULL + NULL/HCLK_DSP_L";
38  setFabricChar('I', 28, "DSP_R"); //"DSP_R + NULL + NULL + NULL + NULL + DSP_R + NULL + NULL + NULL + NULL + DSP_R + NULL + NULL + NULL + NULL + DSP_R + NULL + NULL + NULL + NULL + DSP_R + NULL + NULL + NULL + NULL + DSP_R + NULL + NULL + NULL + NULL + DSP_R + NULL + NULL + NULL + NULL + DSP_R + NULL + NULL + NULL + NULL + DSP_R + NULL + NULL + NULL + NULL + DSP_R + NULL + NULL + NULL + NULL/HCLK_DSP_R";
39 
40  //L-Z are clb columns
41  setFabricChar('L', 36, "CLBLL_L"); //"CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L/HCLK_CLB";
42  setFabricChar('M', 36, "CLBLM_R"); //"CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R/HCLK_CLB";
43  setFabricChar('N', 36, "CLBLM_L"); //"CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L/HCLK_CLB";
44  setFabricChar('O', 36, "CLBLM_L"); //"CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R + CLBLL_R/HCLK_CLB";
45  setFabricChar('P', 36, "PCIE_INT_INTERFACE_R + CLBLM_R"); //"PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + PCIE_INT_INTERFACE_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R/HCLK_CLB";
46  setFabricChar('Q', 36, "PCIE_TOP + CLBLL"); //"PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_BOT + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_TOP + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L/HCLK_CLB";
47  setFabricChar('R', 36, "PCIE_NULL + CLBLM_R"); //"PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R/HCLK_CLB";
48  setFabricChar('S', 36, "CLBLM_R + PCIE3_INT_INTERFACE_R"); //"CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R/HCLK_CLB";
49  setFabricChar('T', 36, "CLBLL_L + PCIE3_BOT_RIGHT"); //"CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE3_BOT_RIGHT + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL/HCLK_CLB";
50  setFabricChar('U', 36, "CLBLM_R + PCIE_NULL"); //"CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL/HCLK_CLB";
51  setFabricChar('V', 36, "CLBLL_L + PCIE_NULL"); //"CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL/HCLK_CLB";
52  setFabricChar('W', 36, "PCIE3_INT_INTERFACE_R + CLBLM_R"); //"PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + PCIE3_INT_INTERFACE_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R + CLBLM_R/HCLK_CLB";
53  setFabricChar('X', 36, "PCIE3_RIGHT + CLBLL_L"); //"PCIE3_RIGHT + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE3_TOP_RIGHT + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L/HCLK_CLB";
54  setFabricChar('Y', 36, "PCIE_NULL + CLBLL_"); //"PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L + CLBLL_L/HCLK_CLB";
55  setFabricChar('Z', 36, "PCIE_INT_INTERFACE_LEFT_L + CLBLM_L"); //"PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + PCIE_INT_INTERFACE_LEFT_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L + CLBLM_L/HCLK_CLB";
56 
57  //a-z _' + J-K are I/O and misc
58  setFabricChar('a', 42, "LIOB33_SING"); //"LIOB33_SING + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33 + NULL + LIOB33_SING/HCLK_IOB";
59  setFabricChar('b', 30, "CMT_PMV"); //"CMT_PMV + NULL + NULL + NULL + NULL + NULL + NULL + CMT_FIFO_R + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CMT_FIFO_R + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CMT_FIFO_R + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CMT_FIFO_R + NULL + NULL + NULL + NULL + NULL + CMT_PMV/HCLK_FIFO_L";
60  setFabricChar('c', 30, "CLK_PMV + CLK_FEED"); //"CLK_PMV + NULL + NULL + NULL + NULL + NULL + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_BUFG_REBUF + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_PMVIOB + CLK_FEED + CLK_FEED + CLK_FEED + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_PMV2_SVT + CLK_FEED + CLK_FEED + CLK_FEED + CLK_BUFG_REBUF + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_PMV2 + CLK_FEED + CLK_FEED + CLK_FEED + CLK_MTBF2 + CLK_BUFG_BOT_R + NULL + NULL + NULL/CLK_HROW_BOT_R";
61  setFabricChar('d', 36, "INT_FEEDTHRU_1"); //"INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1/HCLK_FEEDTHRU_1";
62  setFabricChar('f', 36, "CFG_CENTER_MID"); //"NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CFG_CENTER_BOT + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CFG_CENTER_MID + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CFG_CENTER_TOP + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL/NULL";
63  setFabricChar('g', 30, "VFRAME"); //"VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME + VFRAME/HCLK_VFRAME";
64  setFabricChar('h', 30, "CMT_PMV_L"); //"CMT_PMV_L + NULL + NULL + NULL + NULL + NULL + NULL + CMT_FIFO_L + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CMT_FIFO_L + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CMT_FIFO_L + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CMT_FIFO_L + NULL + NULL + NULL + NULL + NULL + CMT_PMV_L/HCLK_FIFO_L";
65  setFabricChar('i', 42, "RIOB33_SING"); //"RIOB33_SING + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33 + NULL + RIOB33_SING/HCLK_IOB";
66  setFabricChar('j', 30, "CLK_FEED + CLK_PMV"); //"CLK_FEED + CLK_PMV + NULL + NULL + NULL + NULL + NULL + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_BUFG_REBUF + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_PMVIOB + CLK_FEED + CLK_FEED + CLK_FEED + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_PMV2_SVT + CLK_FEED + CLK_FEED + CLK_FEED + CLK_BUFG_REBUF + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_PMV2 + CLK_FEED + CLK_FEED + CLK_FEED + CLK_MTBF2 + CLK_BUFG_BOT_R + NULL + NULL + NULL/CLK_HROW_BOT_R";
67  setFabricChar('k', 36, "INT_FEEDTHRU_1 + MONITOR_BOT_FUJI2"); //"INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + MONITOR_BOT_FUJI2 + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + MONITOR_MID_FUJI2 + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + MONITOR_TOP_FUJI2 + NULL + NULL + NULL + NULL/HCLK_FEEDTHRU_1";
68  setFabricChar('l', 30, "CLK_FEED"); //"CLK_BUFG_TOP_R + NULL + NULL + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_BUFG_REBUF + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_BUFG_REBUF + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED/CLK_HROW_TOP_R";
69  setFabricChar('m', 32, "GTP_CHANNEL_0"); //"NULL + NULL + NULL + NULL + NULL + GTP_CHANNEL_0 + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + GTP_CHANNEL_1 + NULL + NULL + NULL + NULL + NULL + GTP_COMMON + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + GTP_CHANNEL_2 + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + GTP_CHANNEL_3 + NULL + NULL + NULL + NULL + NULL/NULL";
70  setFabricChar('n', 36, "INT_FEEDTHRU_1 + MONITOR_BOT"); //"INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + MONITOR_BOT + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + MONITOR_MID + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + MONITOR_TOP + NULL + NULL + NULL + NULL/HCLK_FEEDTHRU_1";
71  setFabricChar('o', 30, "CLK_FEED + CLK_BUFG_REBUF/CLK_HROW_TOP_R"); //"CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_BUFG_REBUF + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_BUFG_REBUF + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED/CLK_HROW_TOP_R";
72  setFabricChar('p', 30, "CLK_FEED + CLK_BUFG_REBUF/CLK_HROW_BOT_R"); //"CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_BUFG_REBUF + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_BUFG_REBUF + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED/CLK_HROW_BOT_R";
73  setFabricChar('q', 36, "GTP_CHANNEL_0_MID_LEFT"); //"NULL + NULL + NULL + NULL + NULL + GTP_CHANNEL_0_MID_LEFT + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + GTP_CHANNEL_1_MID_LEFT + NULL + NULL + NULL + NULL + NULL + GTP_COMMON_MID_LEFT + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + GTP_CHANNEL_2_MID_LEFT + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + GTP_CHANNEL_3_MID_LEFT + NULL + NULL + NULL + NULL + NULL/NULL";
74  setFabricChar('r', 36, "GTP_CHANNEL_0_MID_RIGHT"); //"NULL + NULL + NULL + NULL + NULL + GTP_CHANNEL_0_MID_RIGHT + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + GTP_CHANNEL_1_MID_RIGHT + NULL + NULL + NULL + NULL + NULL + GTP_COMMON_MID_RIGHT + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + GTP_CHANNEL_2_MID_RIGHT + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + GTP_CHANNEL_3_MID_RIGHT + NULL + NULL + NULL + NULL + NULL/NULL";
75  setFabricChar('t', 36, "PSS0"); //"PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PSS0 + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PSS1 + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL/NULL";
76  setFabricChar('u', 36, "PSS2"); //"PSS2 + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PSS3 + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PSS4 + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL + PCIE_NULL/NULL";
77  setFabricChar('v', 36, "CFG_SECURITY_BOT_PELE1"); //"CFG_SECURITY_BOT_PELE1 + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CFG_SECURITY_MID_PELE1 + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CFG_SECURITY_TOP_PELE1 + NULL + NULL + NULL + NULL + MONITOR_BOT_PELE1 + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + MONITOR_MID_PELE1 + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + MONITOR_TOP_PELE1 + NULL + NULL + NULL + NULL/HCLK_FEEDTHRU_1_PELE";
78  setFabricChar('w', 32, "GTX_CHANNEL_0"); //"NULL + NULL + NULL + NULL + NULL + GTX_CHANNEL_0 + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + GTX_CHANNEL_1 + NULL + NULL + NULL + NULL + NULL + GTX_COMMON + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + GTX_CHANNEL_2 + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + GTX_CHANNEL_3 + NULL + NULL + NULL + NULL + NULL/NULL";
79  setFabricChar('x', 42, "RIOB18_SING"); //"RIOB18_SING + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18 + NULL + RIOB18_SING/HCLK_IOB";
80  setFabricChar('y', 42, "LIOB18_SING"); //"LIOB18_SING + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18 + NULL + LIOB18_SING/HCLK_IOB";
81  setFabricChar('z', 36, "CFG_CENTER_MID_SLAVE"); //"NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CFG_CENTER_BOT + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CFG_CENTER_MID_SLAVE + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CFG_CENTER_TOP_SLAVE + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL/NULL";
82  setFabricChar('J', 30, "CLK_BALI_REBUF + CLK_FEED"); //"CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_BALI_REBUF + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_FEED + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_BUFG_REBUF + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED/CLK_HROW_BOT_R";
83  setFabricChar('K', 36, "INT_FEEDTHRU_1 + MONITOR_BOT_SLAVE"); //"INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + INT_FEEDTHRU_1 + MONITOR_BOT_SLAVE + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + MONITOR_MID + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + MONITOR_TOP + NULL + NULL + NULL + NULL/HCLK_FEEDTHRU_1";
84  setFabricChar('_', 32, "GTH_CHANNEL_0"); //"NULL + NULL + NULL + NULL + NULL + GTH_CHANNEL_0 + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + GTH_CHANNEL_1 + NULL + NULL + NULL + NULL + NULL + GTH_COMMON + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + GTH_CHANNEL_2 + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + GTH_CHANNEL_3 + NULL + NULL + NULL + NULL + NULL/NULL";
85  setFabricChar('e', 30, "CLK_FEED + CLK_BALI_REBUF"); //"CLK_BUFG_TOP_R + NULL + NULL + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_BUFG_REBUF + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_FEED + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_BALI_REBUF + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED/CLK_HROW_TOP_R";
86  setFabricChar('s', 30, "CLK_FEED + CLK_BALI_REBUF_GTZ_TOP"); //"CLK_BUFG_TOP_R + NULL + NULL + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_BUFG_REBUF + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_FEED + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_BALI_REBUF_GTZ_TOP + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED/CLK_HROW_TOP_R";
87  setFabricChar('#', 30, "CLK_FEED + CLK_BALI_REBUF_GTZ_BOT"); //"CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_BALI_REBUF_GTZ_BOT + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_FEED + NULL + NULL + NULL + NULL + NULL + NULL + NULL + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_BUFG_REBUF + NULL + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED + CLK_FEED/CLK_HROW_BOT_R";
88 
89  //Also in the fabric exist frames that are mapped in bitstreams, but do not physically exist on the device. We encode these as follows:
90 
91  setFabricChar('0', 36, "EMPTY36", true);
92  setFabricChar('1', 28, "EMPTY28", true);
93  setFabricChar('2', 42, "EMPTY42", true);
94  setFabricChar('3', 30, "EMPTY30", true);
95  setFabricChar('4', 28, "EMPTYBRAM28", true);
96 }
void setFabricChar(char character, int frameNumber, std::string tileName, bool isUnused=false)

References setFabricChar(), and XS7_EXTRA_FRAMES_PER_ROW.

Here is the call graph for this function:

◆ initializeResourceStringParameters()

void XilinxSeries7::initializeResourceStringParameters ( )
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 40 of file XilinxSeries7.cpp.

40  {
42  throw runtime_error("The target device needs to be known, before you can manipulate any bitstream!");
45  for(int r = 0 ; r < numberOfRows ; r++){
46  for((numberOfCols[r] = 0, numberOfFramesBeforeCol[r][0] = 0, numberOfBRAMCols[r] = 0) ; (uint8_t)resourceString[r][numberOfCols[r]] ; numberOfCols[r]++){
49  if(str::iff::charIs(resourceString[r][numberOfCols[r]], 'A','B','C','D','E','F','G','4')) //A-G are BlockRAM columns, '4' is empty blockram column
50  numberOfBRAMCols[r]++;
51  }
54  for(int c = numberOfCols[r] + 1 ; c < XS7_MAX_COLS ; c++){
56  }
57  for(int c = numberOfCols[r] ; c < XS7_MAX_COLS ; c++){
59  }
60  }
61 
62 
65  for(int r = 1 ; r < numberOfRows ; r++){
70  }
71  }
72 }
#define XS7_MAX_COLS
Definition: XS7_Fabric.h:27
bool charIs(char checkedChar)
Returns false. End of recursion for template.
Definition: iff.h:101

References str::iff::charIs(), XS7_MAX_COLS, and XS7_WORDS_PER_FRAME.

Here is the call graph for this function:

◆ merge()

void XilinxSeries7::merge ( XilinxSeries7 ,
std::string  ,
Rect2D  ,
Coord2D   
)

Definition at line 24 of file XS7_Merge.cpp.

24  {
25  log("Merging bitstreams.");
26  //This function uses a pointer to the second XUSP instance, but this pointer should get optimized as it is statically provided in the main function
27  parseParams(params);
28 
30  log("Merging the whole FPGA");
31  src.position = {0, 0};
32  dst = {0, 0};
33  src.size.row = numberOfRows * XS7_CLB_PER_CLOCK_REGION;
34  src.size.col = maxNumberOfCols;
35  }
36 
37  ensureRegionCompatibility(src, dst);
38 
39  if(src.position.row%XS7_CLB_PER_CLOCK_REGION != 0)
40  throw runtime_error(string("Currently only full clock region height relocations are supported (use row numbers multiple of ").append(to_string(XS7_CLB_PER_CLOCK_REGION)).append(")."));
41  if(src.size.row%XS7_CLB_PER_CLOCK_REGION != 0)
42  throw runtime_error(string("Currently only full clock region height relocations are supported (use row numbers multiple of ").append(to_string(XS7_CLB_PER_CLOCK_REGION)).append(")."));
43  if(dst.row%XS7_CLB_PER_CLOCK_REGION != 0)
44  throw runtime_error(string("Currently only full clock region height relocations are supported (use row numbers multiple of ").append(to_string(XS7_CLB_PER_CLOCK_REGION)).append(")."));
45 
46  Endianness endianDifference = Endian::diff(loadedBitstreamEndianness, srcBitstream->loadedBitstreamEndianness);
47 
48  if((Endianness::NATIVE == endianDifference) && MergeOP::SET == selectedOptions.op)
49  fastMerge(srcBitstream, src, dst);
50  else
51  flexiMerge(srcBitstream, endianDifference, src, dst);
52  log("Merging bitstreams complete.");
53 }
Endianness
< Endianness in byteman is represented not only by big/little endian, but also by potential bit swapp...
Definition: Endianness.h:47
@ NATIVE
System native will always be the fastest endianess to process.
#define XS7_CLB_PER_CLOCK_REGION
Definition: XS7_Fabric.h:43
void ensureRegionCompatibility(Rect2D src, Coord2D dst)
Definition: inlineMerge.h:33
void fastMerge(XilinxConfigurationAccessPort *srcBitstream, Rect2D src, Coord2D dst)
Definition: inlineMerge.h:51
void flexiMerge(XilinxConfigurationAccessPort *srcBitstream, Endianness endianConversionNeeded, Rect2D src, Coord2D dst)
Definition: inlineMerge.h:86
Endianness diff(Endianness e1, Endianness e2)
Definition: Endianness.h:117

References Coord2D::col, Endian::diff(), ensureRegionCompatibility(), fastMerge(), flexiMerge(), XilinxConfigurationAccessPort< MAX_SLRS, MAX_ROWS, MAX_COLS, MAX_BRAM_COLS, BLOCKTYPE_MAX, BLOCKTYPE_LOGIC, BLOCKTYPE_BLOCKRAM, WORDS_BEFORE_CLK, WORDS_AT_CLK, WORDS_AFTER_CLK, WORDS_PER_FRAME, FRAMES_PER_BRAM_CONTENT_COLUMN, CLB_PER_CLOCK_REGION, BRAM_PER_CLOCK_REGION, EXTRA_FRAMES_PER_ROW, FAR_ENABLE_TOP_BOTTOM_BIT, FAR_TOP_BOTTOM_BIT_SHIFT, FAR_BLOCKTYPE_SHIFT, FAR_BLOCKTYPE_MASK, FAR_ROWADDRESS_SHIFT, FAR_ROWADDRESS_MASK, FAR_COLUMNADDRESS_SHIFT, FAR_COLUMNADDRESS_MASK, FAR_MINORADDRESS_SHIFT, FAR_MINORADDRESS_MASK >::loadedBitstreamEndianness, NATIVE, parseParams(), Rect2D::position, Coord2D::row, Rect2D::size, Endian::to_string(), and XS7_CLB_PER_CLOCK_REGION.

Here is the call graph for this function:

◆ outputBitstreamEmptySLRHeaderSequence()

void XilinxSeries7::outputBitstreamEmptySLRHeaderSequence ( std::ofstream &  ,
int  ,
bool  ,
Endianness   
)
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 107 of file XS7_Output.cpp.

108 {
109  XCAP_writeNOP(fout, 132, 0, e);
110  //Optional Shutdown + 1 NOP ?
112  XCAP_writeNOP(fout, 2, 0, e);
115 
116  if((slr + 1) < numberOfSLRs) { // If there are more SLRs, output the magic
118  slrMagicInstrLocation[slr] = fout.tellp();
119  XCAP_writeType2(fout, 0, e);
120  }
121 }
std::streamoff slrMagicInstrLocation[5]
Definition: XilinxSeries7.h:51

References XCAP::IDCODE, XCAP::MAGIC1, XCAP::NULLCMD, XCAP::RCRC, XCAP_writeCommand(), XCAP_writeNOP(), XCAP_writeRegister(), XCAP_writeSelectRegister(), and XCAP_writeType2().

Here is the call graph for this function:

◆ outputBitstreamEmptySLRWrapUpSequence()

void XilinxSeries7::outputBitstreamEmptySLRWrapUpSequence ( std::ofstream &  ,
int  ,
bool  ,
Endianness   
)
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 123 of file XS7_Output.cpp.

124 {
125  streamoff currentStreamHead = fout.tellp();
126  streamoff bypassSize = (currentStreamHead - slrMagicInstrLocation[slr])/4 - 1;
127  fout.seekp(slrMagicInstrLocation[slr]);
128  FileIO::write32(fout, static_cast<uint32_t>(bypassSize), e);
129  fout.seekp(currentStreamHead);
135 }

References XCAP::DESYNC, XCAP::START, FileIO::write32(), XCAP_writeCommand(), and XCAP_writeNOP().

Here is the call graph for this function:

◆ outputBitstreamGlobalFooterSequence()

void XilinxSeries7::outputBitstreamGlobalFooterSequence ( std::ofstream &  ,
bool  ,
Endianness   
)
overridevirtual

◆ outputBitstreamGlobalHeaderSequence()

void XilinxSeries7::outputBitstreamGlobalHeaderSequence ( std::ofstream &  ,
bool  ,
Endianness   
)
overridevirtual

◆ outputBitstreamSLRFooterBitstreamSequence()

void XilinxSeries7::outputBitstreamSLRFooterBitstreamSequence ( std::ofstream &  ,
int  ,
bool  ,
Endianness   
)
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 52 of file XS7_Output.cpp.

53 {
54  if(fullBitstream) // Add GRESTORE since it is full device bitstream.
55  {
57  XCAP_writeNOP(fout, 1, 0, e);
58  }
59 
60  XCAP_writeNOP(fout, 1, 0, e);
61  uint32_t ctrl0 = XCAP_getCTRL0value(0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0);
62  XCAP_writeMaskAndRegister(fout, XCAP::Register::CTRL0, ctrl0, ctrl0, e);
63 
65  XCAP_writeNOP(fout, 100, 0, e);
66 
68  XCAP_writeNOP(fout, 1, 0, e);
69 
71  XCAP_writeNOP(fout, 1, 0, e);
73  XCAP_writeNOP(fout, 1, 0, e);
75  XCAP_writeNOP(fout, 16, 0, e);
76 }
void XCAP_writeMaskAndRegister(std::ofstream &fout, XCAP::Register reg, int writeMask, int writeValue, Endianness e)
Generate the encoding for writing a CAP register with a mask and write it to file ofstream.
Definition: inlineCAP.h:396
uint32_t XCAP_getCTRL0value(int EFUSE_KEY, int ICAP_SELECT, int Reserved_29_13, int OverTempShutDown, int Reserved_11, int ConfigFallback, int Reserved_9, int GLUTMASK_B, int Reserved_7, int DEC, int SBITS, int PERSIST, int Reserved_2_1, int GTS_USR_B)
Generate CTRL0 register write value.
Definition: inlineCAP.h:513
uint32_t XCAP_getFarFarInstruction()
Generate and return the encoding for a Far FAR instruction.
Definition: inlineFAR.h:194

References XCAP::CTRL0, XCAP::DESYNC, XCAP::DGHIGH, XCAP::FAR, XCAP::GRESTORE, XCAP::RCRC, XCAP::START, XCAP_getCTRL0value(), XCAP_getFarFarInstruction(), XCAP_writeCommand(), XCAP_writeMaskAndRegister(), XCAP_writeNOP(), and XCAP_writeRegister().

Here is the call graph for this function:

◆ outputBitstreamSLRHeaderAfterBitstreamSequence()

void XilinxSeries7::outputBitstreamSLRHeaderAfterBitstreamSequence ( std::ofstream &  ,
int  ,
bool  ,
Endianness   
)
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 78 of file XS7_Output.cpp.

79 {
80  if((slr + 1) < numberOfSLRs) { // If there are more SLRs, output the magic
81  XCAP_writeNOP(fout, 400, 0, e);
82  XCAP_writeSYNQ(fout, e);
83  XCAP_writeNOP(fout, 1, 0, e);
85  XCAP_writeNOP(fout, 2, 0, e);
86 
88  slrMagicInstrLocation[slr] = fout.tellp();
89  XCAP_writeType2(fout, 0, e);
90  }
91 }

References XCAP::MAGIC1, XCAP::RCRC, XCAP_writeCommand(), XCAP_writeNOP(), XCAP_writeSelectRegister(), XCAP_writeSYNQ(), and XCAP_writeType2().

Here is the call graph for this function:

◆ outputBitstreamSLRHeaderBitstreamSequence()

void XilinxSeries7::outputBitstreamSLRHeaderBitstreamSequence ( std::ofstream &  ,
int  ,
bool  ,
Endianness   
)
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 39 of file XS7_Output.cpp.

40 {
41  XCAP_writeNOP(fout, 132, 0, e);
42  //Optional Shutdown + 1 NOP ?
44  XCAP_writeNOP(fout, 2, 0, e);
47  uint32_t ctrl0 = XCAP_getCTRL0value(0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0); //disable fallback bitstream, enable overwriting of LUTs
48  XCAP_writeMaskAndRegister(fout, XCAP::Register::CTRL0, ctrl0, ctrl0, e);
50 }

References XCAP::CTRL0, XCAP::CTRL1, XCAP::IDCODE, XCAP::NULLCMD, XCAP::RCRC, XCAP_getCTRL0value(), XCAP_writeCommand(), XCAP_writeMaskAndRegister(), XCAP_writeNOP(), and XCAP_writeRegister().

Here is the call graph for this function:

◆ outputBitstreamSLRWrapUpSequence()

void XilinxSeries7::outputBitstreamSLRWrapUpSequence ( std::ofstream &  ,
int  ,
bool  ,
Endianness   
)
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 93 of file XS7_Output.cpp.

94 {
95  streamoff currentStreamHead = fout.tellp();
96  streamoff bypassSize = (currentStreamHead - slrMagicInstrLocation[slr])/4 - 1;
97  fout.seekp(slrMagicInstrLocation[slr]);
98  FileIO::write32(fout, static_cast<uint32_t>(bypassSize), e);
99  fout.seekp(currentStreamHead);
105 }

References XCAP::DESYNC, XCAP::START, FileIO::write32(), XCAP_writeCommand(), and XCAP_writeNOP().

Here is the call graph for this function:

◆ readBitstream()

void XilinxSeries7::readBitstream ( std::string  )

Definition at line 27 of file XS7_Input.cpp.

28 {
29  ifstream fin (filename, ifstream::binary);
30  if(!fin.good())
31  throw runtime_error(string("Could not open file: \"").append(filename).append("\" .\n"));
32  log("Reading Xilinx Series 7 bitstream from file \"" + filename + "\"");
33 
34  if(str::iff::stringEndsWith(filename, ".bit"))
35  readBitstreamBIT(fin);
36  else if(str::iff::stringEndsWith(filename, ".bin"))
37  readBitstreamBIN(fin);
38  else if(str::iff::stringEndsWith(filename, ".rbd"))
39  readBitstreamRBD(fin);
40  else
41  throw runtime_error(string("Unknown Xilinx Series 7 file format tried to be read.\n"));
42  fin.close();
43  log("Xilinx Series 7 bitstream file \"" + filename + "\" read successfully.");
44 }
void readBitstreamBIN(std::ifstream &fin)
Definition: inlineInput.h:346
void readBitstreamRBD(std::ifstream &fin)
Definition: inlineInput.h:379
void readBitstreamBIT(std::ifstream &fin)
Definition: inlineInput.h:334

References readBitstreamBIN(), readBitstreamBIT(), readBitstreamRBD(), and str::iff::stringEndsWith().

Here is the call graph for this function:

◆ setDevice()

void XilinxSeries7::setDevice ( int  ,
std::string  = "" 
)
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 351 of file XS7_Devices.cpp.

352 {
354  bool customNameSet = false;
355  #define setCustomPartName(x) {customNameSet = true; partName = x;}
356  switch(deviceID){
357  //Series 7 Spartan
358  #ifdef XS7SPARTAN
359  case XS7_DEVICE_XC7S6:
360  XC7S6();
361  break;
362  case XS7_DEVICE_XC7S15:
363  XC7S15();
364  break;
365  case XS7_DEVICE_XC7S25:
366  XC7S25();
367  break;
368  case XS7_DEVICE_XC7S50:
369  XC7S50();
370  break;
371  case XS7_DEVICE_XC7S75:
372  XC7S75();
373  break;
374  case XS7_DEVICE_XC7S100:
375  XC7S100();
376  break;
377  #endif
378  //Series 7 Artix
379  #ifdef XS7ARTIX
380  case XS7_DEVICE_XC7A12:
381  XC7A12();
382  break;
383  case XS7_DEVICE_XC7A15:
384  XC7A15();
385  break;
386  case XS7_DEVICE_XC7A25:
387  XC7A25();
388  break;
389  case XS7_DEVICE_XC7A35:
390  XC7A35();
391  break;
392  case XS7_DEVICE_XC7A50:
393  XC7A50();
394  break;
395  case XS7_DEVICE_XC7A75:
396  XC7A75();
397  break;
398  case XS7_DEVICE_XC7A100:
399  XC7A100();
400  break;
401  case XS7_DEVICE_XC7A200:
402  XC7A200();
403  break;
404  #endif
405  //Series 7 Zynq
406  #ifdef XS7ZYNQ
407  case XS7_DEVICE_XC7Z007:
408  XC7Z007();
409  break;
410  case XS7_DEVICE_XC7Z010:
411  XC7Z010();
412  break;
413  case XS7_DEVICE_XC7Z012:
414  XC7Z012();
415  break;
416  case XS7_DEVICE_XC7Z014:
417  XC7Z014();
418  break;
419  case XS7_DEVICE_XC7Z015:
420  XC7Z015();
421  break;
422  case XS7_DEVICE_XC7Z020:
423  XC7Z020();
424  break;
425  case XS7_DEVICE_XC7Z030:
426  XC7Z030();
427  break;
428  case XS7_DEVICE_XC7Z035:
429  XC7Z035();
430  break;
431  case XS7_DEVICE_XC7Z045:
432  XC7Z045();
433  break;
434  case XS7_DEVICE_XC7Z100:
435  XC7Z100();
436  break;
437  #endif
438  //Series 7 Kintex
439  #ifdef XS7KINTEX
440  case XS7_DEVICE_XC7K70:
441  XC7K70();
442  break;
443  case XS7_DEVICE_XC7K160:
444  XC7K160();
445  break;
446  case XS7_DEVICE_XC7K325:
447  XC7K325();
448  break;
449  case XS7_DEVICE_XC7K355:
450  XC7K355();
451  break;
452  case XS7_DEVICE_XC7K410:
453  XC7K410();
454  break;
455  case XS7_DEVICE_XC7K420:
456  XC7K420();
457  break;
458  case XS7_DEVICE_XC7K480:
459  XC7K480();
460  break;
461  #endif
462  //Series 7 Virtex
463  #ifdef XS7VIRTEX
464  case XS7_DEVICE_XC7V585:
465  XC7V585();
466  break;
467  case XS7_DEVICE_XC7V2000:
468  XC7V2000();
469  break;
470  case XS7_DEVICE_XC7VH580:
471  throw runtime_error("XC7VH580 needs special handling for GTZ SLRs, which is not yet implemented.");
472  XC7VH580();
473  break;
474  case XS7_DEVICE_XC7VH870:
475  throw runtime_error("XCV7VH870 needs special handling for GTZ SLRs, which is not yet implemented.");
476  XC7VH870();
477  break;
478  case XS7_DEVICE_XC7VX330:
479  XC7VX330();
480  break;
481  case XS7_DEVICE_XC7VX415:
482  XC7VX415();
483  break;
484  case XS7_DEVICE_XC7VX485:
485  XC7VX485();
486  break;
487  case XS7_DEVICE_XC7VX550:
488  XC7VX550();
489  break;
490  case XS7_DEVICE_XC7VX690:
491  XC7VX690();
492  break;
493  case XS7_DEVICE_XC7VX980:
494  XC7VX980();
495  break;
497  XC7VX1140();
498  break;
499  #endif
500  //Series 7 Boards
501  #ifdef XS7BOARDS
502  case XS7_DEVICE_WIZARDE:
503  XC7Z045();
504  setCustomPartName("xc7z045ffg900-2");
505  break;
507  XC7K325();
508  setCustomPartName("xc7k325t-2ffg900c");
509  break;
510  case XS7_DEVICE_KC705:
511  XC7K325();
512  setCustomPartName("xc7k325t-2ffg900c");
513  break;
514  case XS7_DEVICE_KC724:
515  XC7K325();
516  setCustomPartName("xc7k325t-3ffg900e");
517  break;
518  case XS7_DEVICE_SP701:
519  XC7S100();
520  setCustomPartName("xc7s100-2fgga676c");
521  break;
522  case XS7_DEVICE_AC701:
523  XC7A200();
524  setCustomPartName("xc7a200t-2fbg676c");
525  break;
526  case XS7_DEVICE_ARTY_A35:
527  XC7A35();
528  setCustomPartName("xc7a35ticsg324-1l");
529  break;
531  XC7A100();
532  setCustomPartName("xc7a100tcsg324-1");
533  break;
534  case XS7_DEVICE_ARTY_Z10:
535  XC7Z010();
536  setCustomPartName("xc7z010-1clg400c");
537  break;
538  case XS7_DEVICE_ARTY_Z20:
539  XC7Z020();
540  setCustomPartName("xc7z020-1clg400c");
541  break;
542  case XS7_DEVICE_ARTY_S25:
543  XC7S25();
544  setCustomPartName("xc7s25-csga324");
545  break;
546  case XS7_DEVICE_ARTY_S50:
547  XC7S50();
548  setCustomPartName("xc7s50-csga324");
549  break;
550  case XS7_DEVICE_BASYS3:
551  XC7A35();
552  setCustomPartName("xc7a35t-1cpg236c");
553  break;
554  case XS7_DEVICE_PYNQ_Z1:
555  XC7Z020();
556  setCustomPartName("xc7z020-1clg400c");
557  break;
558  case XS7_DEVICE_PYNQ_Z2:
559  XC7Z020();
560  setCustomPartName("xc7z020-1clg400c");
561  break;
563  XC7A50();
564  setCustomPartName("xc7a50t-1csg324c");
565  break;
567  XC7A100();
568  setCustomPartName("xc7a100t-1csg324c");
569  break;
570  case XS7_DEVICE_ZYBO_Z10:
571  XC7Z010();
572  setCustomPartName("xc7z010-1clg400c");
573  break;
574  case XS7_DEVICE_ZYBO_Z20:
575  XC7Z020();
576  setCustomPartName("xc7z020-1clg400c");
577  break;
578  case XS7_DEVICE_CMOD_A15:
579  XC7A15();
580  setCustomPartName("xc7a15t-1cpg236c");
581  break;
582  case XS7_DEVICE_CMOD_A35:
583  XC7A35();
584  setCustomPartName("xc7a35t-1cpg236c");
585  break;
586  case XS7_DEVICE_CMOD_S25:
587  XC7S25();
588  setCustomPartName("xc7s25-1csga225c");
589  break;
590  case XS7_DEVICE_ZEDBOARD:
591  XC7Z020();
592  setCustomPartName("xc7z020-clg484");
593  break;
594  case XS7_DEVICE_CORA_Z7:
595  XC7Z007();
596  setCustomPartName("xc7z007s-1clg400c");
597  break;
598  case XS7_DEVICE_CORA_Z10:
599  XC7Z010();
600  setCustomPartName("xc7z010-1clg400c");
601  break;
603  XC7A200();
604  setCustomPartName("xc7a200t-1sbg484c");
605  break;
607  XC7K325();
608  setCustomPartName("xc7k325t-2ffg900c");
609  break;
611  XC7Z020();
612  setCustomPartName("xc7z020-1clg484c");
613  break;
614  case XS7_DEVICE_USB104:
615  XC7A100();
616  setCustomPartName("xc7a100t-1csg324i");
617  break;
619  XC7VX690();
620  setCustomPartName("xc7vx690t-3ffg1761c");
621  break;
622  case XS7_DEVICE_VC707:
623  XC7VX485();
624  setCustomPartName("xc7vx485t-2ffg1761");
625  break;
626  case XS7_DEVICE_VC709:
627  XC7VX690();
628  setCustomPartName("xc7vx690t-2ffg1761c");
629  break;
630  case XS7_DEVICE_VC7215:
631  XC7VX690();
632  setCustomPartName("xc7vx690t-3ffg1927e");
633  break;
634  case XS7_DEVICE_VC7203:
635  XC7VX485();
636  setCustomPartName("xc7vx485t-3ffg1761e");
637  break;
638  case XS7_DEVICE_VC7222:
639  XC7VH580();
640  setCustomPartName("xc7vh580t-g2hcg1155e");
641  break;
642  case XS7_DEVICE_ZC702:
643  XC7Z020();
644  setCustomPartName("xc7z020-clg484-1");
645  break;
646  case XS7_DEVICE_ZC706:
647  XC7Z045();
648  setCustomPartName("xc7z045-2ffg900c");
649  break;
650  #endif
651  default:throw runtime_error("Unknown device ID.");
652  }
653  #undef setCustomPartName
654  if(!customNameSet) // if we didn't set already a good full name
655  if(customPartName != "")// if not empty string
656  partName = customPartName;
657 
658  log("Initialized device resource string for \"" + initializedResourceStringShortPartName + "\"");
659 }
#define XC7Z035()
Definition: XS7_Devices.h:479
#define XC7S6()
Definition: XS7_Devices.h:168
#define XC7V585()
Definition: XS7_Devices.h:660
#define XC7K420()
Definition: XS7_Devices.h:620
#define XC7VX550()
Definition: XS7_Devices.h:827
#define XC7A25()
Definition: XS7_Devices.h:283
#define XC7S25()
Definition: XS7_Devices.h:194
#define XC7S50()
Definition: XS7_Devices.h:209
#define XC7Z045()
Definition: XS7_Devices.h:497
#define XC7A15()
Definition: XS7_Devices.h:270
#define XC7Z030()
Definition: XS7_Devices.h:460
#define XC7K410()
Definition: XS7_Devices.h:600
#define XC7A50()
Definition: XS7_Devices.h:312
#define XC7K160()
Definition: XS7_Devices.h:547
#define XC7A200()
Definition: XS7_Devices.h:359
#define XC7S15()
Definition: XS7_Devices.h:180
#define XC7VX980()
Definition: XS7_Devices.h:868
#define XC7VX1140()
Definition: XS7_Devices.h:902
#define XC7VH870()
Definition: XS7_Devices.h:751
#define XC7K70()
Definition: XS7_Devices.h:531
#define XC7VH580()
Definition: XS7_Devices.h:719
#define XC7Z007()
Definition: XS7_Devices.h:374
#define XC7K480()
Definition: XS7_Devices.h:639
#define XC7Z020()
Definition: XS7_Devices.h:445
#define XC7VX415()
Definition: XS7_Devices.h:787
#define XC7A100()
Definition: XS7_Devices.h:343
#define XC7Z012()
Definition: XS7_Devices.h:402
#define XC7A35()
Definition: XS7_Devices.h:298
#define XC7S100()
Definition: XS7_Devices.h:240
#define XC7S75()
Definition: XS7_Devices.h:225
#define XC7Z100()
Definition: XS7_Devices.h:515
#define XC7V2000()
Definition: XS7_Devices.h:694
#define XC7Z010()
Definition: XS7_Devices.h:387
#define XC7VX330()
Definition: XS7_Devices.h:770
#define XC7K355()
Definition: XS7_Devices.h:582
#define XC7A12()
Definition: XS7_Devices.h:255
#define XC7A75()
Definition: XS7_Devices.h:328
#define XC7VX690()
Definition: XS7_Devices.h:848
#define XC7K325()
Definition: XS7_Devices.h:565
#define XC7Z014()
Definition: XS7_Devices.h:417
#define XC7VX485()
Definition: XS7_Devices.h:805
#define XC7Z015()
Definition: XS7_Devices.h:431
void clearResourceStringArrays()
Definition: inlineBlank.h:17

References clearResourceStringArrays(), XC7A100, XC7A12, XC7A15, XC7A200, XC7A25, XC7A35, XC7A50, XC7A75, XC7K160, XC7K325, XC7K355, XC7K410, XC7K420, XC7K480, XC7K70, XC7S100, XC7S15, XC7S25, XC7S50, XC7S6, XC7S75, XC7V2000, XC7V585, XC7VH580, XC7VH870, XC7VX1140, XC7VX330, XC7VX415, XC7VX485, XC7VX550, XC7VX690, XC7VX980, XC7Z007, XC7Z010, XC7Z012, XC7Z014, XC7Z015, XC7Z020, XC7Z030, XC7Z035, XC7Z045, XC7Z100, XS7_DEVICE_AC701, XS7_DEVICE_ARTY_A100, XS7_DEVICE_ARTY_A35, XS7_DEVICE_ARTY_GENESYS2, XS7_DEVICE_ARTY_S25, XS7_DEVICE_ARTY_S50, XS7_DEVICE_ARTY_Z10, XS7_DEVICE_ARTY_Z20, XS7_DEVICE_BASYS3, XS7_DEVICE_CMOD_A15, XS7_DEVICE_CMOD_A35, XS7_DEVICE_CMOD_S25, XS7_DEVICE_CORA_Z10, XS7_DEVICE_CORA_Z7, XS7_DEVICE_ECLYPSE_Z7, XS7_DEVICE_KC705, XS7_DEVICE_KC724, XS7_DEVICE_KINTEX7CONNECTIVITY, XS7_DEVICE_NETFPGA_SUME, XS7_DEVICE_NEXYS_A100, XS7_DEVICE_NEXYS_A50, XS7_DEVICE_NEXYS_VIDEO, XS7_DEVICE_PYNQ_Z1, XS7_DEVICE_PYNQ_Z2, XS7_DEVICE_SP701, XS7_DEVICE_USB104, XS7_DEVICE_VC707, XS7_DEVICE_VC709, XS7_DEVICE_VC7203, XS7_DEVICE_VC7215, XS7_DEVICE_VC7222, XS7_DEVICE_WIZARDE, XS7_DEVICE_XC7A100, XS7_DEVICE_XC7A12, XS7_DEVICE_XC7A15, XS7_DEVICE_XC7A200, XS7_DEVICE_XC7A25, XS7_DEVICE_XC7A35, XS7_DEVICE_XC7A50, XS7_DEVICE_XC7A75, XS7_DEVICE_XC7K160, XS7_DEVICE_XC7K325, XS7_DEVICE_XC7K355, XS7_DEVICE_XC7K410, XS7_DEVICE_XC7K420, XS7_DEVICE_XC7K480, XS7_DEVICE_XC7K70, XS7_DEVICE_XC7S100, XS7_DEVICE_XC7S15, XS7_DEVICE_XC7S25, XS7_DEVICE_XC7S50, XS7_DEVICE_XC7S6, XS7_DEVICE_XC7S75, XS7_DEVICE_XC7V2000, XS7_DEVICE_XC7V585, XS7_DEVICE_XC7VH580, XS7_DEVICE_XC7VH870, XS7_DEVICE_XC7VX1140, XS7_DEVICE_XC7VX330, XS7_DEVICE_XC7VX415, XS7_DEVICE_XC7VX485, XS7_DEVICE_XC7VX550, XS7_DEVICE_XC7VX690, XS7_DEVICE_XC7VX980, XS7_DEVICE_XC7Z007, XS7_DEVICE_XC7Z010, XS7_DEVICE_XC7Z012, XS7_DEVICE_XC7Z014, XS7_DEVICE_XC7Z015, XS7_DEVICE_XC7Z020, XS7_DEVICE_XC7Z030, XS7_DEVICE_XC7Z035, XS7_DEVICE_XC7Z045, XS7_DEVICE_XC7Z100, XS7_DEVICE_ZC702, XS7_DEVICE_ZC706, XS7_DEVICE_ZEDBOARD, XS7_DEVICE_ZYBO_Z10, and XS7_DEVICE_ZYBO_Z20.

Here is the call graph for this function:

◆ setDeviceByIDCODEOrThrow()

void XilinxSeries7::setDeviceByIDCODEOrThrow ( int  idcode)
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 53 of file XS7_Devices.cpp.

53  {
54  int deviceID = getDeviceByIDCODEorThrow(idcode);
55  setDevice(deviceID);
56 }
int getDeviceByIDCODEorThrow(int) override
Definition: XS7_Devices.cpp:28
void setDevice(int, std::string="") override

◆ setDeviceByNameOrThrow()

void XilinxSeries7::setDeviceByNameOrThrow ( std::string  )
overridevirtual

Implements XilinxConfigurationAccessPort< 5, 12, 512, 32, 2, 0, 1, 50, 1, 50,(50+1+50), 128, 50, 10, 2, 1, 22, 23, 0x7, 17, 0x1F, 7, 0x3FF, 0, 0x7F >.

Definition at line 48 of file XS7_Devices.cpp.

48  {
49  int deviceID = getDeviceByNameOrThrow(name);
50  setDevice(deviceID, name);
51 }
int getDeviceByNameOrThrow(std::string) override
Definition: XS7_Devices.cpp:36

◆ setDeviceByPartNameOrThrow()

void XilinxSeries7::setDeviceByPartNameOrThrow ( )
overridevirtual

◆ test()

void XilinxSeries7::test ( bool  usableFramesOnly,
bool  testValueEqual,
uint32_t  testValue 
)

Definition at line 22 of file XS7_Test.cpp.

22  {
23  log("Testing bitstream against value" + to_string(testValue) + ".");
25  ensureFramesAre(usableFramesOnly, testValueEqual, testValue);
26  log("Testing finished successfully.");
27 }
void ensureFramesAre(bool usableFramesOnly, bool testValueEqual, uint32_t testValue)
Definition: inlineTest.h:18

References ensureFramesAre(), and Endian::to_string().

Here is the call graph for this function:

◆ writeBitstream()

void XilinxSeries7::writeBitstream ( std::string  ,
std::string  ,
Rect2D   
)

Creates a new bitstream file and writes the selected regions in it.

  • filename Name of the output file.
    Exceptions
    runtime_errorif args don't define a correct region.

Definition at line 144 of file XS7_Output.cpp.

145 {
146  size_t dotpos = filename.rfind(".");
147  if(dotpos == string::npos)
148  throw runtime_error(string("Invalid file name: \"").append(filename).append("\"!\n"));
149  designName = filename.substr(0, dotpos);
150 
151  log("Writing Xilinx Series 7 bitstream to file \"" + filename + "\":");
152 
153  parseParams(params);
154 
156  if((cmdRect.position.row % XS7_CLB_PER_CLOCK_REGION != 0) || (cmdRect.size.row % XS7_CLB_PER_CLOCK_REGION != 0))
157  throw runtime_error("Currently only full clock region height relocations are supported (use row numbers multiple of 60).");
158  if(cmdRect.size.row <= 0 || cmdRect.size.col <= 0)
159  throw runtime_error("Invalid output size dimentions.");
160  }
161 
162  ofstream fout (filename, ofstream::binary | ofstream::trunc);
163  if(!fout.good())
164  throw runtime_error(string("Could not open file: \"").append(filename).append("\"!\n"));
165  if(str::iff::stringEndsWith(filename, ".bit"))
166  writeBitstreamBIT(fout, cmdRect);
167  else if(str::iff::stringEndsWith(filename, ".bin"))
168  writeBitstreamBIN(fout, cmdRect);
169  else
170  throw runtime_error(string("Unknown Xilinx Series 7 file format tried to be written.\n"));
171  fout.close();
172  log("Xilinx Series 7 bitstream file \"" + filename + "\" written successfully.");
173 }
void writeBitstreamBIT(std::ofstream &fout, Rect2D cmdRect)
Definition: inlineOutput.h:189
void writeBitstreamBIN(std::ofstream &fout, Rect2D cmdRect)
Definition: inlineOutput.h:207

References Coord2D::col, parseParams(), Rect2D::position, Coord2D::row, Rect2D::size, str::iff::stringEndsWith(), writeBitstreamBIN(), writeBitstreamBIT(), and XS7_CLB_PER_CLOCK_REGION.

Here is the call graph for this function:

Member Data Documentation

◆ slrMagicInstrLocation

std::streamoff XilinxSeries7::slrMagicInstrLocation[5]

Definition at line 51 of file XilinxSeries7.h.


The documentation for this class was generated from the following files: