Preface

Xilinx, Inc. introduced the Field-Programmable Gate Array (FPGA) in 1984 as an advanced programmable logic device. It is now part of a multi-billion dollar market and FPGAs have made their way into products as diverse as digital cameras, automobiles, and network switches that drive the Internet. FPGAs have even flown to Mars (Ratter, 2004).

Almost since its inception, people have recognized the potential of using these devices to build custom computing architectures, but to date the market is overwhelmingly “glue logic” and prototyping. Nonetheless, advances in process technology have yielded modern FPGAs with very large capacities and a wide range of features built into the chip. The confluence of these features — which include multiple processors, large amounts of memory, hundreds of multipliers, and high-speed I/O — have reached a critical mass: now more than ever, Platform FPGAs are poised to realize a more prominent role in computing systems.

This ability to deploy sophisticated computing systems on a single FPGA device is likely to make a significant impact on embedded computing systems. While small (indeed tiny) 8 and 16 bit computing systems are and will remain a very important segment of the embedded systems market, trends over the last several years suggest that the use of standard, off-the-shelf 32-bit processors for embedded systems is growing fast. These higher-end embedded systems come with high levels of integration, often incorporating a significant portion of the system on a (fixed and manufactured) chip. There are many benefits to this level of integration but one significant drawback is that much of the system architecture is predetermined and may not be optimal for the particular targeted application. The alternative, developing a system architecture on a custom System-on-a-Chip (SoC), is too costly except for high volume (millions of units) products. %and designers are forced to choose from %a small set of fixed, commodity silicon solutions. When the application fits the resources provided, all is well. But oftentimes the application does not fit and some of the integrated resources are wasted while additional discrete hardware is required to make up the deficiency. With the Platform FPGA, engineers gain all of the advantages of integration but retain the flexibility to engineer a balanced system architecture on a per-application basis.

Armed with multiple kinds of buses, various direct communication links, bridges, I/O components, and an assortment of other special-purpose Intellectual Property cores, Platform FPGA designers can readily customize their system architecture. For example, with hundreds of distributed block RAMs, a designer can configure one large addressable memory, disperse the RAM throughout the system as individual buffers, or design some combination of the two. Application-specific functionality (i.e., custom hardware cores) can be designed and incorporated. Although Application-Specific Integrated Circuits (ASICs) will always outperform the identical FPGA implementation, the FPGA solution avoids the expense, risk, and time-to-market issues associated with manufacturing of an ASIC. The FPGA is a virtual blank slate giving the engineer the ability to provision the resources to best fit the application after the manufacture, test, and verification of the physical device. This flexibility increases efficiency of the system solution and every discrete component saved reduces cost and increases reliability.

Of course, there is a price to be paid for this enormous degree of hardware flexibility. In addition to compilers, debuggers, and other conventional software tools used for processor-based embedded system development, the Platform FPGA designer has to be fluent in hardware design and synthesis as well as system integration tools. Decisions that previously were largely constrained by architecture choice — such as how to partition the application between hardware and software — now have a much larger solution space. Beyond understanding the characteristics of a particular processor’s system bus, the designer has to weigh the strengths and weaknesses of multiple communication mechanisms. Balancing complex networks of on-chip components presents a novel challenge for those used to working with predetermined architectures.

In many ways, these challenges embody computer engineering. However, until the Platform FPGA emerged, practical issues (such as the cost of building custom silicon solutions) made a hands-on study prohibitively expensive. Students learned computer system architecture from textbooks and conceptual models. The practical aspects of engineering custom computer systems from the ground up was typically the purview of a few specialists. Knowledge and practical tools — such as how to create a Board Support Package for an embedded system — was typically learned on the job.

The aim of this textbook is to introduce the reader to system development on a Platform FPGA. The focus is on embedded systems but it also serves as a general guide to building custom computing systems. The text describes the fundamental technology in terms of hardware, software, and a set of principles to guide the development of Platform FPGA systems. The goal is to show how to systematically and creatively apply these principles to construction of application-specific embedded system architectures. There is a strong focus on using Free and Open Source software to increase productivity.

The organization of each chapter in the book includes two parts. The white pages describe concepts, principles, and general knowledge. The gray pages include a technical rendition of the main issues of the chapter and show the concepts applied in practice. This includes step-by-step details for a specific developer board and chain so that readers can carry out the same steps on their own. Rather than try to demonstrate the concepts on a broad set of tools and boards, the text uses a single set of tools (Xilinx Platform Studio, Linux, and GNU) throughout and uses single developer board (Xilinx ML-510) for the examples. The belief is that a single system, completely described, is more valuable to the reader than partial information about a range of systems.

How to Read This Book

This book was designed to make it easy for a number of different readers to quickly find the information they need. If you are an undergraduate with a software background who might not have had a course in electronics, the white pages in chapter two start with a basic transistor and describes how an FPGA — a solid state device — implements programmable hardware. If you are a practicing engineer with experience in embedded systems but are new to FPGAs, then reading just the blue pages will let you skip the theory and focus on the practical aspects of building Linux-based systems on an FPGA. If you are a student in a senior design course, the lectures probably focus on project management. You won’t find that material here but you may find this text to be a handy practical guide to complete your project. On the other hand, if you have a very specific project involving cutting-edge technology, then you may not find that particular topic covered in sufficient depth here. However, if you are looking to get started, need a general overview of the concepts, and still want enough step-by-step details to implement a real, working system this may prove to be the perfect text for you!

Note to Instructors

There are several roles this text may play in a typical computer curriculum. In many departments, a single embedded systems course is a technical elective offered to Seniors. The core material is delivered within the context of a substantial, semester-long project. This text provides a suitable introduction to embedded systems and — because it provides all of the practical material students need to carry-out their projects — the instructor has the freedom to introduce select topics in class. For curricula with a focus area in embedded systems (offering multiple technical electives), this text may be used to teach a course on reconfigurable computing. Such a course would complement a comprehensive embedded systems course that gives a full treatment of the area including small systems and an expanded description of real-time issues. Finally, the IEEE-CS/ACM Joint Task Force on Computing Curricula (Ironman Draft) includes as a basic computer engineering component a “culminating project.” This often manifests itself in current curricula as a Senior Design or Capstone course. As such, the course draws together subjects taught independently in the curriculum and helps bridge the students’ academic and professional careers. FPGAs serve exceedingly well (and are often used) in such a course. Their flexibility allows a wide range of potential projects and those projects necessarily encompass both hardware and software components: the essence of computer engineering. For that reason, many instructors may find this text to be an excellent resource for the students in their culminating project.

Online Materials

Many of the commands, scripts, and URL links referenced in the text are included in the text. However, for the reader’s convenience, the publisher maintains a Web site with all of these materials online including scripts too long to insert into the text. In addition to links pointing to the latest version of the open source software used in the text, the Web site also archives the exact (known to work) versions used in this text.

Reference

1. Ratter D. FPGAs on Mars. Xcell Journal. 2004;Q3(50):8–11.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.222.255.34