Using System Generator to program Xilinx Spartan I

advertisement
Using System Generator to program Xilinx Spartan I
Introduction
The parallel computing power of the field programmable gate array (FPGA) is extremely useful
in the modern world of demanding applications like digital signal processing and video editing.
However, configuring this power can be difficult. So MatLab has created a package called
System Generator which allows Xilinx chips to be programmed with the common MatLab
programming environment Simulink.
This tutorial will walk you through the basic steps of using Simulink to program a Xilinx III
starter board.
Overview
To program the FPGA, you will be using two distinct software packages in Matlab and Xilinx
ISE. Matlab is the software where the brunt of the programming will take place, and ISE is
where the program will be configured to run on the FPGA. The main bridge between the two
packages is System Generator which is added as a part of Matlab to convert the Simulink math
code to VHDL code that the ISE recognizes.
Simulink
The starting place for this programming progress is in MatLab. So once the programming
package is open, create a new model by clicking the File tab and dragging to the New tab and
then the Model Tab.
Once you have a new model, click on the Simulink icon and the Simulink GUI pops up.
The System Generator has its own Simulink models that are in three tabs called the Xilinx blockset.
The first thing to add to any new model is the System Generator block. This is what tells MatLab
that you are using this project to program a FPGA. The block is found in the Xilinx block-set
under basic elements. It can just be dragged over to the new model as shown.
The next key parts of the model are the Gateway in and out blocks. This is what allows actual
inputs and outputs to be added to the project. They are in the same location as the System
Generator.
The actual pins the gateways correspond to will be configured in Xilinx ISE, but the actual
number of bits the gateway will be is configured in Matlab. To do this, just double click on the
gateway in icon in the model and the following GUI pops up.
The main areas of concern are the output type. So depending on the application, the number of
bits will be chosen here. The binary point is not crucial for simple programming, but it has to be
smaller then the number of bits.
For testing purposes, the gateway will be configured to 1 bit input with the binary point at 0.
Once the model has the System Generator and gateway pins, it is ready for programming.
For this tutorial, a simple inverter will be created.
So the inverter gate is located in the Xilinx block-set and is dragged to the model just like the
gateway blocks.
The blocks are then connected simply by dragging wire between the input and outputs of the
blocks.
Then once the model is built and the gateways are configured, the VHDL code needs to be
created. This is accomplished by double clicking the system generator icon in the model.
Then click generate and the code will be created in the directory specified (the clock pin may be
set here if desired = T9).
Xilinx ISE 8.2i
Now that the code has been created for the program, all that left to do it put it on the chip. To do
this, a new project must be created in Xilinx ISE.
This is accomplished by clicking on the ISE project file generated by System Generator.
Once the file is open, only thing that needs to be done is to assign the pins to the output ports on
the FPGA board. So click to expand (+) the user constraints in the processes window and
double click on create area constraints.
This will start to assemble the program, but will ask to add a UCF file halfway though
implementing the design. After clicking yes, the PACE window will open as follows.
In this window, al the pins from the Simulink gateways show up as I/O pins. To route them out
of the board, all that need to be done is type in the I/O pin number (the pins numbers can be
found written on the board for switches and LED’s and in the users guide pg 49-51 for the I/O
connectors). Set the input pin to K13 and the output to K12.
From this point, the project is complete and ready to be assembled and implemented as a normal
Xilinx program.
To do this expand ‘Generate Programming File’ under the Processes tab and double click on
‘Configure Device (impact).’ Click FINISH on the pop-up ‘Welcome to IMPACT.’ Two Xilinx
icons appear on the screen along with the ‘Assign New Configuration File’ pop-up. Open
filename_cw.bit. For the next pop-up just cancel. Now highlight the first Xilinx icon and right
click and Program. This should download your program to the Xilinx board. Demonstration the
operation of your program with SW7 and LD0.
See Xilinx tutorial for more info.
We’ve created companion boards to go with the Xilinx boards. Since the FPGA only has digital
inputs and outputs separate A/D and D/A chips are needed in order to work with analog signals.
On the bread boards are 2 12 bit A/D converters and 1 D/A converter. The data sheets for each
are available from the lab website. Pin 10 is the input to the A/D and pin 16 is the output of the
D/A. The goal of the next part of the lab is to determine how fast the boards are sampling and
observe the aliasing effects.
Copy from the wismer/public/ELEC472/SPRING07/lab5 directory the ADC_DAC.mdl and the
adc_dac_cw.ucf files. Open the .mdl file in Simulink. These are the basic blocks to interface the
Xilinx boards with A/D, D/A chips. Click on some of the blocks to get a sense of how the
gateways, inputs and outputs are connected. In simulink generate an .ISE file by double clicking
the System Generator block and clicking Generate.
In the current directory double open the .ISE file by double clicking on it. After the project has
opened you need to include the .ucf file which has the mapping from the A/D bits to the Xilinx
pins. In Sources expand filename_cw and in Processes click Add Existing Source and open
adc_dac_cw.ucf. Now you can Generate Program File and Configure Device (iMPACT) as
before. Once you’ve downloaded the program into Xilinx connect your signal generator to the
A/D input. Show the input and output on your scope. Vary the frequency of the sine wave until
aliasing starts to occur. How fast does your system sample? Increase the frequency above the
sampling frequency to observe the effects of aliasing.
In simulink modify the system by amplifying your signal by 2. Use the multiplication block.
Demonstrate this system to me.
Special thanks to Jake Krizan, 2008
Download