|
|
| Line 1: |
Line 1: |
| [[Category:FPGA]]
| |
| [[Category: PCIe]]
| |
| == Introduction ==
| |
|
| |
|
| On APF6_SP PCI express bus is used to configure the FPGA (cycloneV). This article describe how to do that.
| |
|
| |
| == Generate files ==
| |
|
| |
| === Quartus configuration ===
| |
|
| |
| Your design must include the [[IMX6-CycloneV_interface_description#Qsys_.28Quartus.29_:_Avalon-MM_Cyclone_V_Hard_IP_for_PCI_Express_configuration_.28CvP.29 | PCIe and CvP components]]. Once the project synthesized, open the menu:
| |
| <pre class="config">
| |
| File -> Convert Programming Files ...
| |
| </pre>
| |
|
| |
| * In '''Output programming file''' select the '''programming file type:''' Raw Binary File (.rbf).
| |
| * In '''Input files to convert''' clic on '''Add Files...''' and add your binary.sof file.
| |
| * In '''Output programming file''' check the option Create CvP files (Generate binary.periph.rbf and binary.core.rbf)
| |
| * Click on '''Generate'''
| |
|
| |
| You will get two files:
| |
|
| |
| * '''binary.periph.rbf''': peripheral config file to be loaded via serial config bus with U-Boot
| |
| * '''binary.core.rbf''': core config file to be loaded via PCIe bus with Linux.
| |
|
| |
| === Linux configuration ===
| |
|
| |
| All drivers are already selected by default in APF6's Buildroot configuration.
| |
|
| |
| == Configure the FPGA ==
| |
|
| |
| === Peripheral configuration in uboot ===
| |
|
| |
| PCIe must be activated before Linux boot. To do that, just load the peripheral bitstream with uboot :
| |
|
| |
| <pre class="apf">
| |
| BIOS> tftpboot ${loadaddr} 192.168.0.117:binary.periph.rbf
| |
| BIOS> fpga load 0 ${loadaddr} ${filesize}
| |
| </pre>
| |
|
| |
| Then boot Linux:
| |
| <pre class="apf">
| |
| BIOS> boot
| |
| </pre>
| |
|
| |
| === Core configuration in Linux ===
| |
|
| |
| The PCIe device must be seen in lspci command in Linux :
| |
| <pre class="apf">
| |
| # lspci
| |
| 00:00.0 PCI bridge: Device 16c3:abcd (rev 01)
| |
| 01:00.0 Unclassified device [0013]: Altera Corporation Device e001 (rev 01)
| |
| </pre>
| |
|
| |
| You can then download the core (192.168.0.2 should be replaced with your Host PC IP address):
| |
| <pre class="apf">
| |
| $ tftp -g -r binary.core.rbf 192.168.0.2
| |
| $ load_fpga output_file.core.rbf
| |
| Altera CvP 0000:01:00.0: Now starting CvP...
| |
| Altera CvP 0000:01:00.0: CvP successful, application layer now ready
| |
| </pre>
| |
|
| |
| === Automatic FPGA configuration ===
| |
|
| |
| To let apf configure the FPGA automatically at boot we have to configure U-boot and Linux as seen in the following.
| |
|
| |
| ==== U-boot ====
| |
| See the [[Target_Software_Installation#APF6_SP | target software installation]] to know how to install a ''firmware autoload'' on U-Boot.
| |
|
| |
| ==== Linux ====
| |
| Once Linux booted, the core must be loaded via PCIe. This can be done with an init.d script:
| |
|
| |
| * Copy the bitstream '''firmware.core.rbf''' in target directory : '''/lib/firmware/fpga/'''
| |
| * Create a file in '''/etc/init.d/''' named '''S80firmware''' for example.
| |
| * Edit it with these lines:
| |
| <source lang="bash">
| |
| load_fpga /lib/firmware/fpga/firmware.core.rbf
| |
| </source>
| |
| * Then add execution right for the script :
| |
| <pre class="apf">
| |
| $ chmod +x /etc/init.d/S80firmware
| |
| </pre>
| |
|
| |
| * Reboot the board:
| |
| <pre class="apf">
| |
| $ reboot
| |
| </pre>
| |
|
| |
| == Links ==
| |