Politecnico di Milano DRESD Project OSyRiS HOW TO PROVIDE A LINUX SUPPORT FOR DYNAMIC RECONFIGURATION ON XILINX FPGAS Version 1.0 Ivan Beretta ivan.beretta@dresd.org Giuseppe Mangano giuseppe.mangano@dresd.org Marco D. Santambrogio marco.santambrogio@dresd.org 2008 CONTENTS CONTENTS Contents 1 Document License 4 2 Introduction 2.1 Demo architecture and system requirements . . . . . . . . . . 6 7 3 Synthesis of the architecture with ICAP 8 4 Compilation of Kernel and Modules 20 5 Starting the system 28 6 Partial reconfiguration: a simple example 37 2 LIST OF FIGURES List of Figures 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Open the Demo project . . . . . . . . . . . . . . . . . . . . . . Open the system.xmp file . . . . . . . . . . . . . . . . . . . . Our initial architecture (without ICAP) . . . . . . . . . . . . . Copy ICAP into the demo/pcores folder . . . . . . . . . . . . Rescan User Repositories . . . . . . . . . . . . . . . . . . . . . Add the PLB to the architecture . . . . . . . . . . . . . . . . Add the bridge to the architecture . . . . . . . . . . . . . . . . Connect the bridge to the PLB and the OPB . . . . . . . . . . Add ICAP to the architecture . . . . . . . . . . . . . . . . . . Connect ICAP to the PLB . . . . . . . . . . . . . . . . . . . . Filter by Addresses . . . . . . . . . . . . . . . . . . . . . . . . Click the Generate Addresses button . . . . . . . . . . . . . . Our final architecture (with ICAP) . . . . . . . . . . . . . . . Toolbar buttons used to synthesize the final architecture . . . Location of the generated bitstream . . . . . . . . . . . . . . . The PetaLinux folder . . . . . . . . . . . . . . . . . . . . . . . Edit system.mss . . . . . . . . . . . . . . . . . . . . . . . . . . Vendor/Product selection in menuconfig . . . . . . . . . . . . Select Customize Kernel Settings and Customize Vendor/User Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hyper Terminal connection properties . . . . . . . . . . . . . . Create a new iMPACT project . . . . . . . . . . . . . . . . . . Select the JTAG option in iMPACT . . . . . . . . . . . . . . . Ignore iMPACT’s Configuration File prompt . . . . . . . . . . Assign a new Configuration File to the vc2vp30 device . . . . Select download.bit as the bitstream to assign to the vc2vp30 device . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Click OK when the Object Files window appears . . . . . . . Program the vc2vp30 device . . . . . . . . . . . . . . . . . . . Click OK in the Programming Properties window . . . . . . . At the end a Program Succeeded message will appear . . . . . Either close iMPACT or choose the Disconnect All Cables option Insert root as username and password at the login prompt that appears in HyperTerminal . . . . . . . . . . . . . . . . . . . . 3 8 9 9 10 10 11 12 13 14 15 16 17 18 18 19 20 23 24 25 28 29 29 30 30 31 31 32 32 33 33 35 1 DOCUMENT LICENSE 1 Document License This work is licensed under a Creative Commons Attribution-Share Alike 2.5 Italy License1 . You are free: • to Share - to copy, distribute and transmit the work • to Remix - to adapt the work Under the following conditions: • Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). • Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one. • For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page. • Any of the above conditions can be waived if you get permission from the copyright holder. • Nothing in this license impairs or restricts the author’s moral rights. 1 http://creativecommons.org/licenses/by-sa/2.5/it/ 4 1 DOCUMENT LICENSE Abstract This document describes how to implement an up and running Linux-based system on the Xilinx Virtex-II Pro xc2vp30 FPGA board. The architecture will be designed to enable internal partial reconfiguration support with an application developed at the MicroLAB (Politecnico di Milano - Italy). Detailed steps will follow on how to build and synthesize the needed architecture, configure and compile the kernel and software, and load everything onto the board, using provided software and the Xilinx Platform Studio. If you have any comments regarding this document and/or if you’d like to help us in improving this material, please feel free to get in touch with the authors. 5 2 INTRODUCTION 2 Introduction An important feature provided by Xilinx Field Programmable Gate Arrays (FPGAs [1]) which draws a lot of interest is the support for dynamic reconfiguration. Modern FPGAs provide partial dynamic reconfiguration capabilities, which allow the designer to reconfigure only part of the device, while the remaining part is not affected and can continue its computation. This ability can be exploited to execute different and independent hardware applications on the same device at the same time, which can be added and removed by configuring and removing them from the FPGA as they start or complete. The reconfiguration process is physically performed by writing the contents of a binary file called partial bitstream [2] on the FPGA, which contains information to change the current configuration into the new one. In particular, reconfiguration is said to be internal when it is entirely performed within the FPGA, which has to decide when a partial bitstream should be configured, and where it can be retrieved, whereas external configuration is managed by an external entity, such as a host machine. The management of dynamic reconfiguration is generally performed by a software application, which may be either a standalone code or an operating system [3]. A standalone approach involves an application which relies on a complete knowledge of the underlying hardware architecture (that over the last years is constantly increasing together with the computational capabilities of FPGAs), and is limited by issues of portability and reusability of the code. An operating system (OS) approach can support software multitasking and provide a simplified interaction between user applications and IP-Cores (Intellectual Property Cores - Xilinx’s independent modules) in the same way a traditional OS manages the access to I/O peripherals. Since hardware management is left to the operating system, which also simplifies the access to hardware modules, software applications can rely on a high-level interface which does not require the software developer to be aware of the hardware architecture. The software component of the platform used in this guide consists of the µcLinux kernel2 , which has been ported to the MicroBlaze [4] processor. In order to allow dynamic reconfiguration under Linux, a device driver has been developed to provide an interface to an internal configuration interface called Internal Configuration Access Port (ICAP) [5], which is used to physically reconfigure most of the Xilinx FPGAs. 2 www.uclinux.org 6 2 INTRODUCTION 2.1 Demo architecture and system requirements This guide describes how to load the µcLinux kernel onto the Xilinx University Program Virtex-II Pro Development System [6], which includes a Virtex-II Pro xc2vp30 FPGA [7]. Moreover, a solution developed at MicroLab (Politecnico di Milano - Italy) is included in the kernel in order to provide internal dynamic partial reconfiguration support. In the following sections you will find detailed instructions on how to synthesize the architecture, compile the kernel and get the system up and running. This guide is distributed with: • A basic hardware architecture (for version 8.2 of Xilinx ISE [8] and EDK [9]), which includes a general purpose processor, Ethernet and Serial communication controllers, and memory units. The general purpose processor used in this work is MicroBlaze (version 4.0.a), and the busbased communication among modules is implemented by the OPB bus [10]. • The ICAP hardware controller, written in Verilog with a PLB-compatible [11] interface. • The source code of the ICAP device driver (with the Makefile needed for the compilation). • The source code of an additional application named ioctl. To successfully complete all the steps described by this guide, you will need: • Xilinx ISE and EDK 8.2. • PetaLinux3 (in this guide we use version 0.30-rc1), which includes the µcLinux kernel and a set of compiling tools. • A Linux environment (in this guide we use CentOS 3.9 running on a VMWARE virtual machine4 ). µcLinux is a porting of the Linux kernel for micro controllers which do not provide a hardware Memory Management Unit (MMU) module. Since version 4.0.a of the MicroBlaze processor does not include a MMU, the employment of µcLinux is required instead of the traditional Linux kernel. PetaLinux is a distribution which includes two µcLinux kernels (the 2.4.x and the 3 http://www.petalogix.com/ The installation of Linux on a VMWARE virtual machine is not covered in this guide. For information regarding this procedure, please consult the official documentation available on VMWARE’s website: http://www.vmware.com/. 4 7 3 SYNTHESIS OF THE ARCHITECTURE WITH ICAP 2.6.x versions - the 2.4.x version is used in this guide), and a cross-compiler to compile the kernel for the target MicroBlaze-based architecture. 3 Synthesis of the architecture with ICAP In this section we will describe the steps necessary to create and synthesize an architecture with the ICAP Controller for the VP30 board using the Xilinx Platform Studio (in this section we use version 8.2i ) running on the Windows XP operating system. At the end of this section we will obtain the bitstream necessary to program the board. The demo folder contains a Basic Architecture that has all the components necessary to get Linux up and running on the VP30 board. The ICAP Controller, that is already located in the plb icap top v1 00 a folder (therefore the Verilog sources don’t need to be imported explicitly), will be added later on. To begin, launch the Xilinx Platform Studio, choose the Open a recent project option, the Browse for More Projects... option from the drop-down menu and click OK (see Figure 1). Figure 1: Open the Demo project 8 3 SYNTHESIS OF THE ARCHITECTURE WITH ICAP In the new Open Existing Project window, browse to the demo folder and open the system.xmp file (see Figure 2). Figure 2: Open the system.xmp file Moments later, we are presented with our initial architecture (that can be viewed and modified in the System Assembly View), in which the ICAP Controller is not yet present (see Figure 3). Figure 3: Our initial architecture (without ICAP) The only Software Project that will be loaded on the BRAM (it is placed in this memory bank because it has to be executed first) is microblaze 0 bootloop (the others are disabled). This program will make the system remain in standby, awaiting the kernel. 9 3 SYNTHESIS OF THE ARCHITECTURE WITH ICAP At this point, the plb icap top v1 00 a folder must be copied into the demo/pcores folder (see Figure 4). Figure 4: Copy ICAP into the demo/pcores folder Once this is done, from the Project dropdown menu, choose Rescan User Repositories (see Figure 5). Figure 5: Rescan User Repositories 10 3 SYNTHESIS OF THE ARCHITECTURE WITH ICAP Now that the project is based on the MicroBlaze processor, that doesn’t support the PLB bus out-of-the-box. Therefore, we must add it to the project and connect it to the OPB bus (that is already present). To add the PLB bus, in the Project Information Area, under the IP Catalog tab, expand the Bus group, select one of the two PLBs available (either one will do; in the example, we choose plb v34 - version 1.01.a) and performing a drag-and-drop operation, add it to the other components of the architecture (see Figure 6). Once this is done, the PLB will appear in the System Assembly view. Figure 6: Add the PLB to the architecture 11 3 SYNTHESIS OF THE ARCHITECTURE WITH ICAP Now we need a bridge between the OPB and the PLB, so that the MicroBlaze processor can connect to the PLB and communicate with the ICAP Controller (that will be connected to the PLB). To add the bridge, in the Project Information Area, under the IP Catalog tab, expand the Bus Bridge group, select opb2plb bridge, and performing a drag-and-drop operation, add it to the other components of the architecture (see Figure 7). Once this is done, the bridge will appear in the System Assembly view. Figure 7: Add the bridge to the architecture 12 3 SYNTHESIS OF THE ARCHITECTURE WITH ICAP Now the bridge must be connected to the PLB (as master) and the OPB (as slave). To do this, expand the new opb2plb bridge 0 component that just appeared and edit the bus connections of SOPB (slave) and MPLB (master). Using the dropdown menus, assign mb opb as the Bus Connection of SOPB and plb v34 0 as the Bus Connection of MPLB (see Figure 8). Figure 8: Connect the bridge to the PLB and the OPB 13 3 SYNTHESIS OF THE ARCHITECTURE WITH ICAP Now we can add the ICAP Controller. In the Project Information Area, under the IP Catalog tab, expand the Project Repository group, select plb icap top (that was added to the list when we performed the Rescan User Repositories) and performing a drag-and-drop operation, add it to the other components of the architecture (see Figure 9). Once this is done, the ICAP Controller will appear in the System Assembly view. Figure 9: Add ICAP to the architecture 14 3 SYNTHESIS OF THE ARCHITECTURE WITH ICAP Now the ICAP Controller must be connected to the PLB. To do this, expand the new plb icap top 0 component that just appeared and edit the bus connection of SPLB (slave). Using the dropdown menus, assign plb v34 0 as the Bus Connection of SPLB (see Figure 10). Figure 10: Connect ICAP to the PLB 15 3 SYNTHESIS OF THE ARCHITECTURE WITH ICAP Once this has been done, we need to generate an addressing space for the new components we have just added. ICAP’s address range must be included in the bridge’s, because when the MicroBlaze processor requests ICAP’s address on the OPB bus, the bridge will recognize and forward said request to the PLB bus, so that it reaches ICAP. Therefore, the bridge must answer to all the addresses of the devices located on the PLB bus and forward the requests. To do so, in the System Assembly View, under Filters, select Addresses, and you will be presented with the following view (see Figure 11): Figure 11: Filter by Addresses 16 3 SYNTHESIS OF THE ARCHITECTURE WITH ICAP At this point, clicking on the Generate Addresses button, the Base Address and High Address of both the bridge and ICAP will be created (see Figure 12): Figure 12: Click the Generate Addresses button It is important that you take note of the Base Address that has just been generated for ICAP (in our case: 0xcd400000), because we will need this value in Section 4. 17 3 SYNTHESIS OF THE ARCHITECTURE WITH ICAP Now the MicroBlaze processor can connect to ICAP, and we have obtained our final architecture, that we can view changing the filter back to Bus interface (see Figure 13). Figure 13: Our final architecture (with ICAP) To synthesize our architecture, using the toolbar, launch in this order the following operations: Generate Netlist (1), Generate Bitstream (2), Generate Libraries and Drivers (3), Build All User Applications (4), Update bitstream with software program information (5) (see Figure 14). Figure 14: Toolbar buttons used to synthesize the final architecture 18 3 SYNTHESIS OF THE ARCHITECTURE WITH ICAP Once these last steps are performed, the bitstream (download.bit), that contains also our bootloop (the first thing that will be executed on the board) will appear under the demo/implementation folder (see Figure 15), ready to be used to configure our board. Figure 15: Location of the generated bitstream 19 4 COMPILATION OF KERNEL AND MODULES 4 Compilation of Kernel and Modules This section explains how to create the Kernel that will be loaded on the VP30 board using the JTAG interface. To begin, we will need to generate a configuration file with EDK. This file contains information needed to build a working kernel on the hardware architecture that we have synthesized in Section 3. To obtain our Kernel (version 2.4) we will need PetaLinux (in this guide we use version 0.30-rc1), that already contains scripts to import the configuration file into the correct folder. The Kernel compilation should be performed inside a Linux environment that is as similar as possible to RedHat (because the Xilinx tools were designed to work seamlessly with this flavour of Linux). The Linux environment can be run on a virtual machine, with a loss of performance as the only significant drawback. The hardware synthesis is so processor-intensive that it is best to perform said operation on a nonemulated system, like we did in Section 3 (on Windows XP). This tutorial uses CentOS (Community Enterprise Operating System) version 3.9, running on a VMWare virtual machine. On it we have installed the Xilinx Platform Studio to the default folders. More detailed instructions on how to install PetaLinux in the Linux Environment can be obtained visiting the official website (www.petalogix.com). From the Petalogix website the PetaLinux compressed file (in our case petalinux-v0.30-rc1.tar.gz ) must be downloaded and its contents extracted. As root (the account that we used through this whole section) we extracted the contents of the compressed file to the /root folder. Doing this, we have obtained the /root/petalinux-v0.30-rc1 folder (see Figure 16). Figure 16: The PetaLinux folder 20 4 COMPILATION OF KERNEL AND MODULES This folder contains important files and folders such as the settings.sh script (that defines the environment variables), the hardware folder (that contains all the hardware architectures that the system will be compiled on), the tools folder (that contains cross-compilers and scripts) and the software folder (that contains the linux kernel sources and various applications). We have already synthesized our hardware (following the steps of Section 3); now we have to generate all the definitions needed to compile correctly the kernel, such as the addresses of every peripheral and the memory sizes. To begin, open a console, enter the petalinux-v0.30-rc1 folder, and input the following command to set the environment variables: source settings.sh If done correctly, the output of the command should be: PetaLinux environment set to ’/root/petalinux-v0.30-rc1’ Now, always using the console, enter the Xilinx folder and perform the same operation two more times: in the folder where ISE is installed (by default: Xilinx/ISE ) and in the folder where EDK is installed (by default: Xilinx/EDK ) cd ISE source settings.sh cd ../EDK source settings.sh This time, no output should be expected. It is important that the environment variables are set every time the console is opened. Once this is done, copy the demo folder into the petalinux-v0.30-rc1/hardware/userplatforms folder (obtaining the new directory structure petalinux-v0.30-rc1/hardware/userplatforms/demo/ ). Enter the newly created demo folder. Now we have to make EDK generate the file needed to configure correctly our Linux version. When EDK has to generate the libraries for the stand-alone mode it already knows what folders to access, but when we give instructions to use PetaLinux, by default it searches for them in the edk user repository folder. This folder exists, but not in the project folder, therefore we need to create a symbolic link in the main directory of the project: ln -s ../../edk_user_repository/ edk_user_repository 21 4 COMPILATION OF KERNEL AND MODULES Now we can launch EDK from the console with the xps command (that stands for Xilinx Platform Studio). The .mss files specify for each hardware component what drivers should be used, the library version, and other information. We will need to edit the .mss file to change the destination from stand-alone mode to PetaLinux mode, making EDK search for all the device drivers of the operating system in the edk user repository folder. As described in Section 3 (see Figure 1), choose the Open a recent project option, the Browse for More Projects... option from the drop-down menu and click OK. In the new Open Existing Project window, browse to the petalinuxv0.30-rc1/hardware/user-platforms/demo/ folder and open the system.xmp file. When we created the architecture under Windows (see Section 3), it was generated stand-alone by default. To edit system.mss, under the Project tab, expand the Project Files group and open the file. The PARAMETER VERSION and the OS group must be edited to: PARAMETER VERSION = 2.2.0 BEGIN OS PARAMETER PARAMETER PARAMETER PARAMETER PARAMETER PARAMETER PARAMETER PARAMETER END OS_NAME = petalinux OS_VER = 1.00.b PROC_INSTANCE = microblaze_0 1mb_memory = dlmb_cntrl main_memory = DDR_256MB_32MX64_rank1_row13_col10_cl2_5 stdin = RS232_Uart_1 stdout = RS232_Uart_1 main_memory_bank = 0 22 4 COMPILATION OF KERNEL AND MODULES Now that this is done (see Figure 17), EDK can generate the configuration file (auto-config.in) for the Kernel using the Generate Libraries and Drivers button of the EDK toolbar (number 3 of Figure 14). Figure 17: Edit system.mss At this point, the auto-config.in has been created in the petalinux-v0.30rc1/hardware/user-platforms/demo/microblaze 0/libsrc/petalinux v1 00 b/ folder. Now we have to create a platform with all the peripherals and addresses that we have designed. With the console, from the petalinux-v0.30-rc1/hardware/userplatforms/demo/ folder, launch the command: petalinux-new-platform -k 2.4 -v Prova -p Micro With the -k option we specify the kernel version; with -v and -p we specify the vendor and platform information (these last two parameters can be set to anything you like). If done correctly, the output of the command will be: New platform for Prova Micro successfully created Now, enter the the software-side folder and launch the make menuconfig command: cd ../../../software/petalinux-dist/ make menuconfig 23 4 COMPILATION OF KERNEL AND MODULES When the Main Menu appears, in the Vendor/Product Selection section, we set (in our case) Prova as Vendor and Micro as Product (see Figure 18). Figure 18: Vendor/Product selection in menuconfig Now select Exit to navigate back to the Main Menu, select Exit again to exit menuconfig and select Yes when asked if we want to save our new Kernel configuration (WARNING: if a .config file already exists it will be over-written!). At this point we have the desired platform, but it is empty; we have to go back to the hardware-related folder of the project and launch the petalinux-copy-autoconfig command to associate the auto-config.in file we created earlier with this platform: cd ../../hardware/user-platforms/demo/ petalinux-copy-autoconfig If done correctly, the output of the command will be: INFO: Attempting vendor/platform auto-detect INFO: Auto-detected Prova/Micro combination. Auto-config file successfully updated for Prova Micro At this point we can go back to the Kernel folder to configure and compile it: 24 4 COMPILATION OF KERNEL AND MODULES cd ../../../software/petalinux-dist/ make menuconfig Enter the Kernel/Library/Defaults Selection section and select the options Customize Kernel Settings and Customize Vendor/User Settings (see Figure 19). Figure 19: Select Customize Kernel Settings and Customize Vendor/User Settings Now select Exit to navigate back to the Main Menu, select Exit again to exit menuconfig and select Yes when asked if we want to save our new Kernel configuration. Once the Main Menu appears again, edit the following options: [ENABLE] Loadable module support ---> Set version information on all module symbols [ENABLE] Loadable module support ---> Kernel module loader [DISABLE] Memory Technology Devices (MTD) ---> RAM/ROM/Flash chip drivers ---> Detect flash chips by Common Flash Interface (CFI) probe 25 4 COMPILATION OF KERNEL AND MODULES [DISABLE] Memory Technology Devices (MTD) ---> Detect JEDEC JESD21c compatible flash chips [set: NONE] Memory Technology Devices (MTD) ---> Mapping drivers for chip access ---> FLASH size [ENABLE] File systems ---> /dev file system support (EXPERIMENTAL) The Kernel module loader is needed to load the ICAP device driver (this operation will be performed in section 5). The FLASH size must be set to NONE because at compile time some MACROs that define the size of the FLASH are missing. Now exit the Main Menu and select Yes when asked if we want to save our new Kernel configuration. The Main Menu will appear again, to allow us to customize the applications, but unless you have specific needs, no further modifications are needed, so we can exit once more the Main Menu (selecting Yes when asked if we want to save our new Kernel configuration). Once this is done, we can compile and/or add to the filesystem the programs and files that we will need on the board when the system is up and running. In our case, we will compile the ICAP device driver, generate ioctl (a simple application that performs generic I/O operations on the ICAP device), and also add a partial bitstream5 . To begin, we copy the icap and ioctl folders (included with this guide) to the petalinux-v0.30-rc1/software/userapps/ folder. Now that ICAP’s device driver writes directly to memory, we must open the icap/icap globals.h file and edit the definition of ICAP’s Base Memory address. In our case (see Figure 12), the line will become: #define ICAP_BASE 0xCD400000 Then, using the console, we enter the icap folder and type the make command to compile ICAP: cd icap/ make Of all the object-code files that are generated with the compilation, the only one that we will need is icap.o, that will be dynamically linked in the kernel. At this point, we enter the ioctl folder and compile it: 5 The generation of partial bitstreams is not covered in this guide. Some information regarding this procedure can be found in Xilinx’s XAPP290 guide [12]. 26 4 COMPILATION OF KERNEL AND MODULES cd ../ioctl/ make The only file that we will need is the ioctl binary (without any extension) that has just been created. On a side note, to create your own programs (for example one called myprogram), you can enter the following command from the petalinux-v0.30rc1/software/user-apps/ folder: petalinux-new-app myprogram If done correctly, the following output will be displayed: New application template successfully created in software/user-apps/myprogram See myprogram/README for what to do next. At this point, you can enter the newly-created myprogram folder, edit the myprogram.c template that has been generated and eventually compile your new program. Now we have make sure that the files we need will be present in the board’s filesystem (icap.o, ioctl and diff.bit). Anything we copy to the romfs folder (that contains the filesystem structure to be merged with the kernel) will be present on the FPGA board, therefore we can input the following commands: cp $PETALINUX/software/user-apps/icap/icap.o $PETALINUX/software/petalinux-dist/romfs/usr cp $PETALINUX/software/user-apps/ioctl/ioctl $PETALINUX/software/petalinux-dist/romfs/bin cp /mnt/pendrive/diff.bit $PETALINUX/software/petalinux-dist/romfs/usr Once this is done, always from the console, return to the /software/petalinuxdist/ folder and run the following commands compile the Kernel: make If done correctly, the new images folder will appear, containing important files such as linux.bin (the Kernel image), romfs.img (the filesystem image) and image.bin (the combination of the Kernel and the filesystem), all of which have been cross-compiled for MicroBlaze. This last file (image.bin) is the one that we load on the VP30 board. 27 5 STARTING THE SYSTEM 5 Starting the system Now that we have the bitstream (download.bit) and the Kernel+filesystem (image.bin), we can program the FPGA, load the Kernel and launch the system. We will use HyperTerminal to access the console once the system is up, iMPACT (a tool of ISE) to program the board and the Xilinx debugger (XDM ) to load the Kernel. First, connect all the cables (serial, JTAG, power cable) to the board and switch it on. Next, in Windows XP, open HyperTerminal (Start - Programs - Accessories - Communications - HyperTerminal), that we will use to interact with our system, after it boots up, via console. If the Location Information window appears, you can click Cancel, but filling in the requested information will prevent future prompts. Now you can enter any name in the Connection Description window that appears and click OK. Once the Connect To window appears, edit the Connect using option selecting the COM (serial) of the PC that you are using to connect to the board and click OK. The only options that need to be edited are Bits per second, that must be set to 9600, and Flow control, that must be set to None (see Figure 20). Figure 20: Hyper Terminal connection properties 28 5 STARTING THE SYSTEM The terminal must be left open, and will remain blank until we load the Kernel onto the board. Now we must use iMPACT (Start - Programs - Xilinx ISE 8.2i - Accessories - iMPACT) to program the board with the bitstream. Once it has started, select create a new project (.ipf ) in the iMPACT Project window that appears and click OK (see Figure 21). Figure 21: Create a new iMPACT project In the new window that appears, click Finish accepting the default option: Configure devices using Boundary-Scan (JTAG) (see Figure 22). Figure 22: Select the JTAG option in iMPACT 29 5 STARTING THE SYSTEM Now click Cancel All in the new window that appears (see Figure 23). Figure 23: Ignore iMPACT’s Configuration File prompt We are presented with 3 devices. Right-click on the third one (vc2vp30 ) and select Assign New Configuration File... from the menu (see Figure 24). Figure 24: Assign a new Configuration File to the vc2vp30 device 30 5 STARTING THE SYSTEM In the new Assign New Configuration File window that appears, navigate to the demo/implementation folder, select the download.bit bitstream and click Open (see Figure 25). Figure 25: Select download.bit as the bitstream to assign to the vc2vp30 device When the new Add Virtex-/II Pro/Virtex 4 Object Files window appears, simply click OK (see Figure 26). Figure 26: Click OK when the Object Files window appears 31 5 STARTING THE SYSTEM Now right-click again on the (vc2vp30 ) device and select Program... from the menu (see Figure 27). Figure 27: Program the vc2vp30 device When the new Programming Properties windows appears, click OK (see Figure 28). Figure 28: Click OK in the Programming Properties window 32 5 STARTING THE SYSTEM If done correctly, after the Progress Dialog window disappears, a Program Succeeded message will appear (see Figure 29), and the red DONE led on the board will turn on. Figure 29: At the end a Program Succeeded message will appear Now that the serial port is still locked, it is important that you release it either closing iMPACT or selecting Disconnect All Cables from the Output dropdown menu (see Figure 30). Figure 30: Either close iMPACT or choose the Disconnect All Cables option At this point, the bootloop is active on the board and awaiting the Kernel. We will therefore use the debugger to upload it and edit the Program Counter so it runs the first instruction present at the address where the Kernel begins. To do so, create a new folder and copy inside it our image.bin file. Then, create inside the folder a New Text Document (right-click inside the folder - New - Text Document). Now, open New Text Document.txt and write the following lines: 33 5 STARTING THE SYSTEM 01 02 03 04 05 06 07 08 connect mb mdm dow -data image.bin 0x30000000 puts " *** Download completed! *** " mwr 0x100 0 rwr 5 0x100 rwr pc 0x30000000 con puts " *** Starting system... *** " Line 01 connects the debugger to the MicroBlaze processor through the debugging interface. Line 02 loads image.bin onto the board, starting at memory address 0x30000000. The 3 instructions (04, 05 and 06) right after the line that displays the Download Completed! message change the value of the Program Counter to 0x30000000, where image.bin has been copied, and enable the system to resume its execution from this new memory address. Then, with line 07, the script executes the con command, that makes the bootloop continue its execution from the new program counter value. Finally, the Starting System... message will be displayed. Once New Text Document.txt has been edited and saved, it must be renamed to xmd.ini. Now proceed to launch the debugger (Start - Programs - Xilinx Platform Studio 8.2i - Accessories - Launch EDK Shell). Once it is ready, navigate to the folder you have just created (using Linux console commands) and launch the debugger with the xmd command, that will immediately check for (and run) the xmd.ini script we have created. 34 5 STARTING THE SYSTEM A boot sequence will start in the HyperTerminal window (that we had left open), and when it completes a login prompt will appear. The default username is root, with root as password (see Figure 31). Figure 31: Insert root as username and password at the login prompt that appears in HyperTerminal To view a list of available commands, you can type help. To add the ICAP device and load its module, you must enter the following commands: mknod /dev/icap c 120 0 insmod /usr/icap.o If done correctly, the following output will be displayed: Using icap.o icap: Xilinx Virtex-II FPGA ICAP driver v. 0.2 (2.4.32-uc0) Written by Alberto Donato <donato@elet.polimi.it> Now the system is ready to be used. You can load and use a partial bitstream (in this example we load diff.bit) with the following commands: 35 5 STARTING THE SYSTEM cat /usr/diff.bit > /dev/icap ioctl /dev/icap c 2 The cat command memorizes the bitstream in a memory area allocated by the device driver, making it ready to be used when the reconfiguration is requested. To free said memory you can use the ioctl /dev/icap c 1 command. 36 6 PARTIAL RECONFIGURATION: A SIMPLE EXAMPLE 6 Partial reconfiguration: a simple example We where trying to find the best way to end this document and we finally agree that the best way was to provide a very simple example for the partial reconfiguration. Designing a complete partial reconfigurable architecture was out of the scope of this document, we will provide soon a second tutorial with all this information. If you’d like to try this very simple example, you will find all the necessary files (download.bit, diff.bit, image.bin) intoBinaries directory. download.bit is the startup bitstream file, while image.bin will allow you to run the software part of this example. Once you’ll have the Linux-based system up and running onto your FPGA you can load and use a partial bitstream (in this example we load diff.bit) with the following commands: cat /usr/diff.bit > /dev/icap ioctl /dev/icap c 2 As a result you should be able to see on of your led to switch off. The cat command memorizes the bitstream in a memory area allocated by the device driver, making it ready to be used when the reconfiguration is requested. 37 REFERENCES References [1] S. D. Brown, R. J. Francis, J. Rose, and Z. G. Vranesic, Fieldprogrammable gate arrays. Norwell, MA, USA: Kluwer Academic Publishers, 1992. [2] S. Corbetta, F. Ferrandi, M. Morandi, M. Novati, M. D. Santambrogio, and D. Sciuto, “Two novel approaches to online partial bitstream relocation in a dynamically reconfigurable system,” VLSI, 2007. ISVLSI ’07. IEEE Computer Society Annual Symposium on, pp. 457–458, March 2007. [3] A. Donato, F. Ferrandi, M. Redaelli, M. D. Santambrogio, and D. Sciuto, “Exploiting partial dynamic reconfiguration for soc design of complex application on fpga platforms.” pp. 87 – 109, 2007. [4] Xilinx, Inc., “MicroBlaze processor reference guide,” June 2007. [5] Xilinx, “Opb hwicap (v1.00.b) product specification,” March 2005. [6] Xilinx, Inc., “Xilinx University Program Virtex-II Pro development system hardware reference manual,” April 2008. [7] Xilinx, “Virtex-II Pro and Virtex-II Pro platform FPGAs: Complete data sheet,” November 2007. [8] [9] [10] IBM, “On-Chip Peripheral Bus architecture specifications,” April 2001. [11] IBM, “128-bit Processor Local Bus architecture specifications,” May 2007. [12] Xilinx, Inc., “Difference-based partial reconfiguration, Tech. Rep. XAPP290, December 2007. [Online]. Available: http://www.xilinx.com/bvdocs/appnotes/xapp290.pdf 38
© Copyright 2024