19/3/2013 Performed By: Itamar Niddam and Lior Motorin Instructor: Inna Rivkin Bi-Semesterial. Winter 2012/2013 Introduction • Software provides extended flexibility while hardware gives better performance. • Many applications use software-based algorithms, which suffer from low Performance and cause bottle-necks. Therefore, the whole application performance is reduced. • Hardware-Accelerators are well known solutions , but they are specific for each Problem and cannot be changed. Moreover, an application cannot supply its own Hardware accelerator and must rely on existing accelerators. Introduction • A Hardware-accelerator for specific application will be provided (AES encryption/decryption for example). • An android application which uses the custom Hardware. Introduction • The Xilinx ZC-702 Board for Zynq-7000 have the ability to run Android OS on it. • Dual ARM A9 – Cortex processors • DDR3 Memory (1 GB) Core 0 : A9 ARM Processing System Core 1 : A9 ARM HDMI FMC AXI4 LogicBricks HDMI Controller Custom IP Programmable Logic UART USB 0 Project goals • Understand the structure of the ZC-702 board. • Understand the structure of the Android OS. • Run Android OS on the board (without any modifications) • Implement a custom IP and integrate it on android OS using the ZC-702 board. • Analyze the performance improvement for Encryption hardware-accelerator. • Documentation and manuals The development environment. Xilinx Platform Studio Xilinx SDK Linux PC C/C++ for Android Kernel Java Eclipse Xylon hardware Custom IP AXI4 interconnect Processing system The Hardware Design. The Hardware Design. Software Blocks Android 2.3.2 OS Linux Kernel Custom IP Module Driver Custom IP Xylon GPU Driver ARM CPU0 Xylon Hardware ZC-702 Android Booting Device Tree Source • Data structure for describing hardware details (Memory mapping , Interrupts , Registers …) to the OS. • Simple human readable text (Before “Compilation”) Custom IP Driver module Custom IP Driver module Integrating Hardware-Software • Before kernel loading, copying the module driver from SD-Card to the system. • Do lsmod to .ko file while still having root privileges (after loading kernel and just before Android OS loads) • Driver is now registered as char device (/dev/custom-ip) and can be used from the OS Problems… • Still have licensing problems (until April) • Android OS privileges – Cannot use custom IP driver from inside of Android OS applications due to privileges limitations. • Writing Drivers is hard ! (Missing knowledge to write some complicated drivers) • Need also software support (in emphasis of OS driver development) Challenges ! • Solving android privileges limitations by writing a service which will be able to communicate with our char device. • Writing more complicated drivers to support AXI-4 Streaming for video processing • Writing efficient hardware with Vivado HLS and integrate it So.. What have we done ? • Fully working Android Kernel which can access (Read / Write) a custom IP. • Setting up a development environment to modify and compile Android OS & Linux kernel. • Generating all necessary files to provide working system (BitStream, FSBL , U-Boot , BOOT.BIN , device tree , driver module) • Learning Linux Driver development • Testing Custom IP development & Hardware integration with Vivado HLS So.. What have we done ? Learning the development environment. Setting up the system (board and OS). Proof Of Concept. Developing and implementing the custom hardware accelerators. Compiling Android OS from code Writing Device tree source and compile it Writing driver module Integrating Android Kernel with custom IP What we have to do next (until Project A final) ? Solving Android OS privileges problems (9.4.2013) Developing user Android application which uses the custom IP (16.4.2013) Questions