Getting Started with FPGA Turnkey Workflow
This example shows how to program a standalone FPGA with your MATLAB® design, using the FPGA Turnkey workflow.
The target device in this example is a Xilinx® Virtex-5 ML506 development board.
In this example, the function
mlhdlc_ip_core_led_blinking models a counter that blinks the LEDs on an FPGA board.
Two input ports,
Blink_direction, are control ports that determine the LED blink frequency and direction.
You can adjust the input values of the hardware via push-buttons on Xilinx Virtex-5 ML506 development board. The output port of the design function, 'LED', connects to the LED hardware.
design_name = 'mlhdlc_turnkey_led_blinking'; testbench_name = 'mlhdlc_turnkey_led_blinking_tb';
Take a look at the MATLAB design:
function [LED, Read_back] = mlhdlc_turnkey_led_blinking(Blink_frequency, Blink_direction) % % Copyright 2013-2015 The MathWorks, Inc. persistent freqCounter LEDCounter if isempty(freqCounter) freqCounter = 0; LEDCounter = 255; end if Blink_frequency <= 0 Blink_frequency = 0; elseif Blink_frequency >= 15 Blink_frequency = 15; end blinkFrequencyOut = LookupTable(Blink_frequency); if blinkFrequencyOut == freqCounter freqMatch = 1; else freqMatch = 0; end freqCounter = freqCounter + 1; if freqMatch freqCounter = 0; end if Blink_direction LED = 255 - LEDCounter; else LED = LEDCounter; end if LEDCounter == 255 LEDCounter = 0; elseif freqMatch LEDCounter = LEDCounter + 1; end Read_back = LED; end function y = LookupTable(idx) s = 2.^(26:-1:11)'; y = s(idx+1); end
% % Copyright 2013-2015 The MathWorks, Inc. for i=1:16 [yout, ~] = mlhdlc_turnkey_led_blinking(i-1, 0); [yout2, ~] = mlhdlc_turnkey_led_blinking(i-1, 1); end
Create a New HDL Coder™ Project
coder -hdlcoder -new mlhdlc_turnkey_led_blinking_prj
Next, add the file
mlhdlc_turnkey_led_blinking.m to the project as the MATLAB Function and
mlhdlc_turnkey_led_blinking_tb.m as the MATLAB Test Bench.
For a more complete tutorial on creating and populating MATLAB HDL Coder projects, see Get Started with MATLAB to HDL Workflow.
Convert Design To Fixed-Point
1. Right-click the Define Input Types task and select Run This Task.
2. In the Fixed-Point Conversion task, click Advanced and set the Safety margin for sim min/max (%) to 0.
3. Set the proposed type of the
freqCounter variable to unsigned 27-bit integer by entering
numerictype(0, 27, 0) in its Proposed Type column.
4. On the left, right-click the Fixed-Point Conversion task and select Run This Task.
Map Design Ports to Target Interface
In the Select Code Generation Target task, select the FPGA Turnkey workflow and Xilinx Virtex-5 ML506 development board as follows:
1. For Workflow, select FPGA Turnkey.
2. For Platform, select Xilinx Virtex-5 ML506 development board. If your target device is not in the list, select Get more to download the support package. The coder automatically sets Chip family, Device, Package, and Speed according to your platform selection.
3. For the FPGA clock frequency, set both Input frequency (MHz) and Target frequency (MHz) to 100.
4. In the Set Target Interface task, map the design input and output ports to interfaces on the target device by setting the fields in the Target Platform Interfaces column as follows:
User Push Buttons N-E-S-W-C [0:4]
User Push Buttons N-E-S-W-C [0:4]
LEDs General Purpose [0:7]
You can leave the
Read_back port unmapped.
Generate Programming File and Download To Hardware
You can generate code, perform synthesis and analysis, and download the design to the target hardware using the default settings:
1. For the Synthesis and Analysis task group, uncheck the Skip this Step option.
2. For the Download to Target task group, uncheck the Skip this Step option.
3. Right-click Download to Target > Generate Programming File and select Run to Selected Task.
4. If your target hardware is connected and ready to program, select the Program Target Device subtask and click Run.