Post date: Sep 12, 2013 8:24:10 AM

Introduction. For those who are really interested in learning more about this project but aren’t too familiar with the technology or just the terminology, this introduction to the ZynqTM Project provides a description on the major aspects the Zynq Project will cover. The major aspects include “Operating Systems”, “Processors”, “Field Programmable Gate Arrays”, “System on Chip” architecture, Xilinx’s “Zynq-7000 EPP”, and some information specific to the Zynq Project itself. I have tried to include references to at least most of the information stated in this post. Please note, in order to present the information the "best" way possible, this post will very likely undergo many changes as the project progresses.

Operating Systems. One of the project’s goals involves a Real Time Operating System. An Operating System (OS) is essentially a piece of software developed to manage a computer’s physical resources or hardware, such as Central Processing Units and connected-devices, and provide a base on which applications can run [1]. There is really no standard definition of an operating system, but most commonly accepted definition is software that includes a kernel, the core of the operating system that runs all the time, and system programs, which provides services to applications through the kernel [2]. One of the most important operations OS of today provide is to give the illusion programs are concurrently running to the user.

Multitasking. The figure very generally shows how OSs constantly swap among processes, including the OS itself, i.e. the Kernel. The black arrow indicates time is passing. The red arrows pointing from the processes to the processor indicate instructions (i.e. software) corresponding to those processes are being executed on the processor at the current point in time. The red arrows pointing in the opposite direction indicate the instructions are no longer in execution. The multitasking then repeats.

The “illusion” is a property referred to as concurrency and the method by which many OSs implement concurrency is multitasking. In a multitasking OS, the OS frequently swaps among all the processes, which are running programs. Examples of processes are the OS (i.e. kernel and related system programs) and applications. The swapping occurs so fast that all processes seem as though they are actually running at the same time [3]. Other common operations are file management and process security/protection.

Common examples of operating systems are Microsoft’s Windows and Apple’s OS X series, both of which provide a user, or users, with a Graphical User Interface (GUI). OS with GUIs and other user-friendly features are designed such that a user, or users, can interact with the computer with ease, whereas other OS are developed with the purpose of maximizing the usage of the computer’s hardware such that hardware is most efficiently used [1]. For applications during which the computer system needs to response within a constrained amount of time or risk failure, a Real Time OS (RTOS) is often necessary [4]. An example of a RTOS is FreeRTOS, a RTOS developed by Real Time Engineers Ltd. FreeRTOS is developed to run over many microcontrollers (MCU) microprocessors (MPU) (including the multi-core processor related to this project), utilize a maximum of 10 kilobytes of memory, provide various forms of scheduling (i.e. time-sharing) such as Round Robin and Cooperative, and to include many other features. Moreover, FreeRTOS has a large community base and its source code is under strict management [5].

Processors. The RTOS related to the Zynq Project will need to run on a multi-core processor. A multi-core processor is a single Integrated Circuit (IC) in which two or more processors, or cores, are embedded [6]. An IC, or colloquially called a microchip, is an electrical circuit typically housed within a plastic packaging and built on top of semi-conductive material with transistors [8]. A processor, or a Central Processing Unit (CPU), is an IC developed to process instructions, i.e. the software [7], and is only composed of one or components that compute arithmetic (i.e. Arithmetic Logic Units), store small amounts of memory (i.e. registers), and provide control over the processor’s operations (i.e. Control Unit)[9]. Both single and multi-core processors are commonly found in personal computers (PC) and handheld devices, as well in more specific applications (as opposed to general-purpose applications used in PCs).

Processor. This block diagram represents a very abstract view of what modern processors contain, not including more advance features such as cache memory. The black arrows whose lines are solid represent data and address buses, whereas the arrows with dotted lines are control buses.

All modern processors contain additional hardcore features that enable the processor to execute instructions and interact with the rest of the computer system more efficiently. These features include pipelining, during which the process of executing an instruction is divided into smaller stages such that multiple instructions can be executed at once; cache memory, which stores small amounts of instructions or data and prevents the processor from having to retrieve the information from main memory all the time; interrupt mechanisms, which enables the processor to be interrupted by another device needing service; and many other features. An IC with multiple processing cores—in other words, multiple processors within a single IC—is also constructed to improve performance, namely, reduce the amount of consumed power and carry out parallel processing.

In an ideal world, the number of extra cores in a multi-core processor would increase the performance by a magnitude equivalent to the total number of cores; however, the extra overhead resulted from a more complex IC diminishes the maximum performance. For instance, a dual core processor, in theory, should be twice as powerful as a single core processor; in practice, though, the performance is said to improve by around fifty percent. Nevertheless, the industry surrounding the development of multi-core processors is growing due to single-core processors (often referred to as microprocessors in microcomputers) reaching their limitations [6].

Multi-core processors and computer systems with multiple, separate microprocessors can run in two processing modes, asymmetric (AMP) or symmetric multiprocessing (SMP). In AMP, the configuration is basically master-slave, wherein each slave processor is assigned a predefined task and responds to the directions of a master processor. Each processor might be executing its own OS. The mode employed by most common systems is SMP, wherein no master-slave configuration exists and each processor is capable of executing all the tasks from the same OS. Each processor can run a process or a task—which is a subdivision of a process—scheduled by the OS. Modern OSs, such as Windows, OS X, and Linux, are all now developed to support SMP [10]. An example of a multi-core processor capable of running in either SMP or AMP mode is the ARM Cortex-A9 MPCore Processor. ARM is an abbreviation for Advance RISC Machine and is a processor architecture developed by ARM Holdings, a world-wide supplier of semiconductor intellectual property (IP) such as the ARM architecture [11]. The Dual Cortex-A9 MPCore is available with up to 4 cores, each of which include a 32-bit CPU, up to 64 kilobytes of instruction cache memory, and up to 64 kilobytes of data cache-memory. The Cortex-A9 MPCore also includes other components such as its communication bus built from the AMBA3 AXI specification [12]. The ARM Cortex-A9 featured in the Zynq Project is a dual-core processor.

Field Programmable Gate Arrays. Although Field Programmable Gate Arrays (FPGA) aren’t the focus of the Zynq Project, the technology and paradigm under importance in the Zynq Project is highly related to FPGAs. An FPGA is a type of Programmable Logic Device (PLD), which is an IC whose logic can be reprogrammed after the PLD has been manufactured. Most ICs are Application Specific ICs (ASIC), such as the processors seen in most personal computers, and cannot be changed once the IC has been manufactured. An FPGA carries out its functions as a PLD through a “matrix of Configurable Logic Blocks (CLB)” whose interconnects to other CLBs can also be reconfigured. The fundamental resource of a FPGA is the CLB. A CLB can be configured as one or more logic gates, Boolean functions carried out in hardware, and consists of a Look Up Table(s) (LUT), which is basically an array used to replace a more expensive operation; a storage element, i.e. registers; and selection circuitry (Please note, the terms associated with FPGA’s architecture often vary slightly in definition, depending on the type of FPGA). The interconnects are important since they are what sow the CLBs and other components, together. Other components of an FPGA include, but not limited to, general purpose inputs and outputs (GPIO) for communication with devices outside the FPGA and on-chip Random Access Memory (RAM) for storing/reading large amounts of memory during operation [13].

Because a FPGA executes its functions through logic gates, as opposed to a processor which sequentially executes instructions, the functions programmed into a FPGA typically run in parallel to one another, allowing faster response times. The parallel nature of FPGAs makes them ideal for applications that require large amounts of data to be processed in real-time. Moreover, since an FPGA is programmable logic, an FPGA can be programmed to operate as a single or multiple ICs. On a FPGA, the architecture of a processor can be executed as a softcore processor, which is an implementation of the processor as software. A significant disadvantage to FPGAs, however, involves the utilization of a FPGA’s resources. Because the functions programmed into a FPGA are carried out via CLBs interconnected with other CLBs and those interconnects cannot physically pass through other components, it is difficult to utilize all the resources. Plus, just from my experience, it is relatively more difficult to write and debug a hardware description for a FPGA than it is to write and debug source code for a processor. The FPGA embedded with the Dual-core ARM Cortex-A9 processor in the Zynq Project is Xilinx’s Artix-7 [14].

System on Chip (SoC). SoC is a technology that involves the implementation of an entire computer system on one IC [15]. A SoC IC may include its own processor, nonvolatile memory, and input/out connections all on a single IC so that the system in which the SoC IC is embedded could fit into a smaller form factor, reduce power consumption, or meet another constraint of the system. One example of a SoC IC is the BCM2835 Embedded Multimedia Applications Processor developed by Broadcom and designed to include the components necessary for multimedia applications, such as graphics and 3D gaming. The BCM2835, which contains an ARM processor and other processors intended for computer graphics [16], is the component that drives the Raspberry Pi, which is a “credit-card sized computer” capable of interacting with a keyboard and television, and running entire GUI-based operating systems [17]. Of course, another example of a SoC IC is the Zynq-7000 EPP All Programmable SoC.

Zynq-7000 Extensible Processing Platform (EPP) All Programmable SoC. The Zynq-7000 EPP is a family of SoC ICs developed by Xilinx and that combines an ARM Cortex-A9 multi-core processor with an FPGA and many peripheral interfaces such as Inter-Integrated Circuit (I2C), Universal Asynchronous Receiver and Transmitter (UART), General Purpose Input/Outs (GPIO), and many others. The Zynq-7000 EPP comes in four models, each of which is tailored for certain applications. The Z-730 and Z-7045 models contain Xilinx’s Kintex-7 FPGA, whereas the Z-7010 and Z-7020 models contain Xilinx’s Artix-7. The model also determines the amount of resources available on the Zynq-7000 EPP’s embedded FPGA [18]. All models, however, have a dual-core ARM Cortex-A9 processor and dual buses constructed from the AMBA3 AXI specification [18].

The Project. At this point, the Zynq Project’s main goal is to run FreeRTOS in AMP mode on the Zynq-7000 EPP Z-7020 that executes over Xilinx’s Zynq-7000 EPP ZC702 Evaluation Board. The set of tools that will allow for development and verification of the Evaluation Board's software is comprised in Xilinx's Vivado Design Suite.


[1]. Silberschatz, A., Galvin, P. B., & Gagne, G. (2009). Operating system concepts with java. (page 3)

[2]. Silberschatz, A., Galvin, P. B., & Gagne, G. (2009). Operating system concepts with java. (page 6)

[3]. Silberschatz, A., Galvin, P. B., & Gagne, G. (2009). Operating system concepts with java. (page 18-20)

[4]. Silberschatz, A., Galvin, P. B., & Gagne, G. (2009). Operating system concepts with java. (page 32)






[10]. Silberschatz, A., Galvin, P. B., & Gagne, G. (2009). Operating system concepts with java. (page 14-15)








[18]. Boger, T. J. (2013). Rhealstone benchmarking of freertos and the xilinx zynq extensible processing platform. (pages 21-23)