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 > Running test designs

TABLE OF CONTENTS

Xilinx FPGA FPGA Forum

Running test designs

FONT SIZE : AAA

The best way to check whether the FPGA board setup is correct is to run different  test designs on the board and check the functionality. By running a familiar small  design which has well-known results, the correct setup of the boards can be  established. Experienced prototypers can often reuse small test designs in this way  and in a matter of hours know that the boards are ready for the introduction of the  real SoC design.  

Board vendors may also be able to supply small designs for this purpose but in house boards will require their own tests and be tested separately before delivery to  the prototypers. Use of custom-written test designs to test these boards in the  context of the overall prototype can then be performed. This also applies to custom  daughter boards for mounting onto a vendor-supplied baseboard. For example, if a  custom board is made to drive a TFT display then a simple design might be written  to display some text or graphics on a connected display in order to test the custom  board’s basic functionality and its interface with the main board. 

In either case, it is recommended to connect all the parts of the prototype platform  including the main board, daughter boards, power supply, external clocks, resets,  etc. as they will be used during the rest of the project. Then configure the assembled  boards to the exact setting with which the actual design will employ during runtime,  including any dip switches and jumpers. Sometimes these items can be controlled  via a supervisory function which will access certain dedicated registers on the board  under command of a remote-host program. It is especially important to configure  any VCO or PLL settings and the voltage settings for each of the different IO banks  of the FPGAs. Off-the-shelf prototyping boards like the HAPS board provide an  easy way of configuring this using dip switches and on-board supervisory programs.  

We are then ready to run some pre-design tests to ensure correct configuration and  operation of the platform. Here are some typical test designs and procedures which  the authors have seen run on various prototyping boards.

Signs-of-life tests are very simple. Reading or writing to registers from an  external port can confirm that the FPGA itself is configuring correctly.  FPGA-Based Prototyping Methodology Manual 317  

Counter test to test clocks and resets are connected and working correctly.  Write a simple counter test-design with the clock and reset as inputs and  connect the outputs to LEDs or FPGA pins which connect to test points in  the board, or read the counter register using an external host program. 

Daughter board reference designs provided by vendors or equivalent  user-written test designs can be used to check the functionality of the addon daughter boards. Testing with these designs would test the proper  functionality of the daughter boards and the interface between the main  board and the daughter boards and links to external ports, such as network  analyzers.  

High-speed IO test: If the prototyping project makes use of advanced  inter FPGA connectivity features like pin multiplexing or high-speed time  division multiplexing (HSTDM), it is advisable to run simple test designs  to test this on the board. Owing to the environmental dependency of LVDS  and other high-speed serial media the test designs should employ the same  physical connections in order to properly replicate the final paths to be use  in the SoC prototype. 

Multi-FPGA test designs: If the design is partitioned across multiple  FPGAs, then it is advisable to test the prototyping board with a simple test  design which is easily partitioned across all the devices. One example of  this would be an FIR filter with each tap partitioned in a different FPGA.  Let’s look at that example in a little more detail.

Filter test design for multiple FPGAs

One example of a simple-to-partition design which tests many aspects of a multiFPGA design configuration is the FIR shown in Figure 134 which would serve to  test four FPGAs on a board.


A 4-tap pre-loadable transposed FIR filter test design.png

An FIR, being a fully synchronous single-clock design helps to check that reset  timing is correct and that clock skew is within an acceptable range.

Figure 135 : RTL code for FIR filter test design

module TransposedFIRFilter ( 

 input Clock, Reset, 

 input signed [17:0] Input, 

 output reg signed [35:0] Output 

 ); 


 reg signed [17:0] InputReg1, InputReg2, InputReg3, InputReg4; 

 reg signed [35:0] TempOutput2, TempOutput3, TempOutput4; 

 parameter signed

Coeff1 = 18'd87256,

Coeff2 = 18'd1256,

Coeff3 = 18'd7344,

Coeff4 = 18'd32353;


 always@(posedge Clock) begin 

 if(Reset == 1'b1) begin 

 InputReg1<= 0; InputReg2<= 0; InputReg3<= 0; InputReg

4<= 0; 

 end 

 else begin 

 InputReg1 <= Input; InputReg2 <= Input; InputReg3 <=

Input; InputReg4 <= Input; 

 end 

 end


 always@(posedge Clock) begin 

 if(Reset == 1'b1) begin 

 TempOutput4 <= 0; TempOutput3 <= 0; TempOutput2 <= 0; 

Output <= 0; 

 end 

 else begin 

 TempOutput4 <= InputReg4*Coeff4 + 0; 

 TempOutput3 <= InputReg3*Coeff3 + TempOutput4; 

 TempOutput2 <= InputReg2*Coeff2 + TempOutput3; 

 Output <= InputReg1*Coeff1 + TempOutput2; 

 end 

 end 

endmodule

The RTL for this design is seen in Figure 135 and this may be synthesized and then split across four FPGAs either manually or by using one of the automated  partitioning methods discussed earlier. The values of the coefficients, although  arbitrary, should all be different.

FIR filter test design partitioned across 4 FPGAs.png

The design is partitioned so that each tap (i.e., multiplier with its coefficient and  adder) is partitioned into its own FPGA, as shown in Figure 136. Care should be  taken with FPGA pinout and use of on-board traces to ensure that connectivity  between the FPGAs is maintained.

A logic analyzer is connected at the output and a pattern generator is connected at  the input. Once the design is configured into the FPGAs then it can be tested by  applying an impulse input as shown in Figure 137. The pattern generator can be  used to apply the impulse input. An impulse input consists of a "1" sample followed  by many "0" samples. i.e., for 8-bit positive integer values, then the input would be  01h for one clock followed by 00h for every clock thereafter. As an alternative to  using an external pattern generator, a synthesizable “pattern generator” can be  designed in one of the FPGA partitions to apply the impulse input. This is a simple  piece of logic to provide a logic ‘1’ on the least significant bit of the input bus for a  single clock period after reset. 

The expected output from FPGA4 should be the same as the chosen filter  coefficients and they should appear sequentially at FPGA4’s output pins as the  pulse has been clocked through the filter (i.e., one clock after impulse input has  applied in this 4-tap example), as shown in Figure 137.

Building a library of bring-up test designs

As the team becomes more familiar with FPGA-based prototyping, common test  designs will be reused for different prototypes. It is advisable to create a way to  share test designs amongst team members and across different projects. Creating a  reusable test infrastructure with a library of known good tests usable on different  boards is an investment that will benefit multiple prototyping projects and increase  efficiency of our FPGA-based prototyping. This library could be considered in  advance, or gradually built up with each new prototyping project.

Expected FIR behavior across four FPGAs.png

By running such simple designs on the prototyping board setup, the whole setup is  tested for its basic functionality and we get comfortable with the FPGA-based  prototyping flow. After running few designs on the board, we would know how to  partition a design, synthesize and place & route them, create bit files, program the  FPGAs with the bit files and do some basic debugging on the board. This  knowledge would help us while debugging the real design on the board setup.  

By testing this design on board, we become familiar with the complete flow of  partitioning a design across multiple FPGAs, managing the connections between  them and running them on board. In fact, during early adoption of FPGA-based  prototyping by any project team, this type of simple design is good for pipecleaning methods to be used in the whole SoC design later.


  • XC2C512-7FT256C

    Manufacturer:Xilinx

  • CPLD CoolRunner -II Family 12K Gates 512 Macro Cells 179MHz 0.18um Technology 1.8V 256-Pin FTBGA
  • Product Categories: Embedded - CPLDs (Complex Programmable Logic Devices)

    Lifecycle:Active Active

    RoHS: No RoHS

  • XC3SD3400A-4CSG484LI

    Manufacturer:Xilinx

  • FPGA Spartan-3A DSP Family 3.4M Gates 53712 Cells 667MHz 90nm Technology 1.2V 484-Pin BGA
  • Product Categories: FPGAs (Field Programmable Gate Array)

    Lifecycle:Unconfirmed -

    RoHS:

  • XC3SD3400A-5CS484C

    Manufacturer:Xilinx

  • FPGA Spartan-3A DSP Family 3.4M Gates 53712 Cells 770MHz 90nm Technology 1.2V 484-Pin LCSBGA
  • Product Categories: FPGAs (Field Programmable Gate Array)

    Lifecycle:Active Active

    RoHS: No RoHS

  • XC3SD3400A-FGG676I

    Manufacturer:Xilinx

  • Xilinx BGA676
  • Product Categories:

    Lifecycle:Any -

    RoHS:

  • XC2C512-7PQ208C

    Manufacturer:Xilinx

  • CPLD CoolRunner -II Family 12K Gates 512 Macro Cells 179MHz 0.18um Technology 1.8V 208-Pin PQFP
  • Product Categories: CPLDs

    Lifecycle:Active Active

    RoHS: No RoHS

Need Help?

Support

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