This website uses cookies. By using this site, you consent to the use of cookies. For more information, please take a look at our Privacy Policy.
Home > FPGA Technical Tutorials > FPGA-Based Prototyping Methodology > Bring up and debug: the prototype in the lab > Other general tips for debug

TABLE OF CONTENTS

Xilinx FPGA FPGA Forum

Other general tips for debug

FONT SIZE : AAA

One of the aims of the FPMM web forum which accompanies this book is to share  questions and answers on the subject. The authors fully expect some traffic in the  area of bug hunting in the lab and to get us started, here is a miscellaneous list, in no  particular order, of some short but typical bug scenarios and their resolutions.  Many thanks to those who have already contributed to this list. 

Divide and conquer: if there are multiple interfaces to the external  chipsets, we can test them one by one. Start with the obvious and visible  before moving to the obscured and invisible. For example, taking one nonworking interface at a time, the interface signals can be probed to see  whether the protocol is followed as per the expectations. If they were not  followed, we can probe the internal part of the design flow (may be a state  machine) which produces those external signals inside the FPGA using  Identify or ChipScope, to check whether the flow is proper inside the  design. By this way we can test and make sure all the individual interfaces  are operating as expected.  

Check external chipsets: the problem may not be in the FPGAs at all. If  an external chipset is showing unexpected behavior, then we can try to test  the design on the board using synthesizable model of such chipsets implemented temporarily in an FPGA instead. If the synthesizable model is  not available for the chipsets then we can consider creating such models  themselves or use a close equivalent available as open source. If the  functionality is very complex, then at least a model which takes care of the  interface part giving some dummy data would be sufficient to test the main  design. The open source website www.opencores.org is a good source for  synthesizable RTL. Some chipsets have data such as vendor ID or release version hardcoded within them, which can be read through the standard  interface. The testing of those external chipsets can be started by reading  and verifying such hardcoded data first. This way we can make sure that  the interface between the external chipset and the design on the prototyping  board works correctly.  

Tweak IO delays: if the input and output delay requirements are not met then the sampling of data inside the FPGA and external chipset will be  affected, which can cause data corruption. If this is suspected, then we can  try to introduce IODELAY elements present in Xilinx® FPGAs in the data  and clock path. IODELAYs are programmable absolute delay elements  which can be applied in primary IO paths inside FPGAs. By varying the  delay in these blocks, we can make sure that the inputs and outputs are  sampled correctly. 

Tweak clock rate: clock rate can be suspected when the design on board is  not dead but the operation of the design is not as expected. For example,  reading and writing to a memory space might be working but the data read  might not be consistent with the written data. If timing issues are suspected  (and the PLLs etc. allow running at reduced rates) then we may try to run  the system temporarily at reduced clock rate. Often the system can show  more signs of life at the reduced clock. 

Understand critical set-up needs: for the design to behave properly,  internal blocks might have to be configured in a certain way but some are  more critical than others. We should like to be able to rely on  documentation sent from the SoC team which highlights the most critical  setup. For example, there could be an internal register controlling the  software reset of the entire design which might have to be written with a  valid value initially to make the design work. As a further example, there  could be a mode register which, by default, could be in sleep mode that needs to be written with a valid value to make it active. Similarly some of  the external chips might have to be configured in a certain way to make the  whole prototyping system work. For example, to make a camera image  sensor to send proper images to the FPGA, the internal gain registers in the  sensor might have to be configured to a certain non-default value.  

Check built-in security: documentation should record any necessary  security or lock cells in the design or external IP. For example, a security  code which checks for certain values in an internal ID register, but omitting  it means that the prototype will seem alive but unresponsive. As another  example, the boot code running the internal process might expect a key  bitstream to be present in a flash memory or an external ROM in order to  proceed. In such scenarios, it is worth asking again if any such keys are  required in the SoC design, just in case documentation has not kept up with  the RTL.

Challenge basic assumptions: one obstacle to debug can be an  assumption that the obvious is already correct. We are not asking to check  if the power cable is connected (there is a limit) but some basic  assumptions should be re-checked, such as little endian-ness and big  endian-ness between the buses on FPGAs and any external chipsets or  logic analyzers added for prototyping purposes. Another example is to  check if any transmit and receive ports in the design should be connected  to the external chipsets directly or with crossed wires.  

Terminations: many interface formats such as I2C or PCI or SPI, etc. need  the physical lines on the board to be terminated in a certain way. We could check if those lines are terminated as required, if connectors are  intermittent or if there are local voltage rails issues preventing correct  termination.  

Check IP from the outside-in: while testing the IPs, test the interfaces to  the IPs and not the functionality of the IPs themselves. After all, the IPs  should have been tested exhaustively by the IP vendor themselves so at  least we can initially assume that the IP should work as expected on the  FPGA. However, if the IP has been delivered as RTL and not supported for  use on FPGA by the vendor/author then we might need to challenge this  assumption. IP interfaces can be probed out through logic analyzers or  embedded debuggers like Identify or ChipScope. 

Reusing boards allows shortcuts: we could start a debug process from the  IPs or design blocks which were known to be working well on the board in  a previous project. For example, if the design has a processor and many  peripherals we might start with a USB IP which was successfully  prototyped earlier. By making sure that the USB IP works fine along with  the processor, we can get assurance that at least some software code and  the bus through which processor and peripherals communicate is also  functioning properly. Then we can debug the new peripherals from a good  foundation.  

Test GTX pins first, test protocol second: if the design uses any high  speed gigabit transceivers then we can use the integrated bit error ratio  tester (IBERT) built into the Xilinx® ChipScope tools. IBERT helps to  evaluate and monitor the health of the transceivers prior to testing the real  communications through that channel on the board. Only when we are sure  about the physical layer should we move on to use our protocol analyzers  or bus-traffic monitors.  

• Use sophisticated analyzers: these analyzers can offer real-time protocol  checks, bus performance statistics and can monitor bus latencies. We can  also add external bus exercisers to more easily force behavior on the  system buses so interference or other de-rating is taking place on the bus  inside the prototype. If external equipment is not available, then custom written synthesizable bus exercisers and bus analyzers might be used. We  could consider adding a known, simple checker into the design in order to  later use it for checking good bus behavior or forcing traffic.

These are a few of the ideas that Synopsys support staff and end-users have shared  over many years of successful prototyping and at time of writing, the authors look  forward to hearing many more as the FPMM website goes live.


  • XC2C512-FT256I

    Manufacturer:Xilinx

  • Xilinx BGA
  • Product Categories:

    Lifecycle:Any -

    RoHS: -

  • XC2C64-5VQ100C

    Manufacturer:Xilinx

  • This lends power savings to High-end Communication equipment and speed to battery operated devices.
  • Product Categories: Programmable logic array

    Lifecycle:Any -

    RoHS: -

  • XC2C64-7VQ100C

    Manufacturer:Xilinx

  • This lends power savings to High-end Communication equipment and speed to battery operated devices.
  • Product Categories: Programmable logic array

    Lifecycle:Any -

    RoHS: -

  • XC2C64A-5CP56C

    Manufacturer:Xilinx

  • CPLD CoolRunner -II Family 1.5K Gates 64 Macro Cells 263MHz 0.18um Technology 1.8V 56-Pin CSBGA
  • Product Categories: CPLDs

    Lifecycle:Active Active

    RoHS: No RoHS

  • XC2V1500-4FFG896C

    Manufacturer:Xilinx

  • FPGA Virtex-II Family 1.5M Gates 17280 Cells 650MHz 0.15um Technology 1.5V 896-Pin FCBGA
  • Product Categories: FPGAs

    Lifecycle:Obsolete -

    RoHS:

Need Help?

Support

If you have any questions about the product and related issues, Please contact us.