Computers As Components, Third Edition: Principles Of Embedded Computing System Design (The Morgan K
Click Here ->>> https://urlin.us/2t7Nm7
Today, Linux systems are used throughout computing, from embedded systems to virtually all supercomputers, and have secured a place in server installations such as the popular LAMP application stack. Use of Linux distributions in home and enterprise desktops has been growing. Linux distributions have also become popular in the netbook market, with many devices shipping with customized Linux distributions installed, and Google releasing their own ChromeOS designed for netbooks.
In recent years embedded computing has emerged as the new paradigm for the design and implementation of modern computer systems, succeeding mainframes, minicomputers, and finally desktop computers. They consist in the fastest growing market share for computing products, already accounting for the largest number of systems being deployed. As shown by Ebert and Jones , in 2009 for each person living in a developed country there were about 30 embedded processors, clearly exceeding the number of any other kind of computing system. Typical examples of embedded systems include tablets, smart phones, digital cameras, TV set-top boxes, security systems, personal robots, automotive control devices, and medical equipment. In addition, as systems requirements grow in complexity, the need for highly specialized hardware/software platforms becomes more critical.
A design option of growing interest is the use of a heterogeneous computing platform, which may contain possible combinations of CPUs, DSPs, and custom devices and accelerators based on reconfigurable hardware. A typical example of such architecture is the MORPHEUS platform . As shown in that article, the platform was shown to be viable for the successful implementation of complex embedded systems such as wireless telecommunications, video processing, networking, and smart cameras. Those implementations also stress the need for a robust toolset, as the programming model for a heterogeneous platform can be quite complex. In the case of the MORPHEUS platform, the toolset is based on the MOLEN paradigm, which allows general purpose conventional code and hardware descriptions to coexist in a program. This programming model was originally employed by the MOLEN Polymorphic Processor, another example of heterogeneous architecture . Heterogeneous computing also stresses the need for multitarget programming frameworks, able to reduce the required implementation effort. The Accelerator System  is an example of this kind of programming system, being able to target multicore processors with vector instructions, GPUs, and FPGAs using a single source code described in conventional high level languages, such as C++. Liquid metal  is a similar tool, also targeting CPUs, GPUs, and FPGAs but using Lime as source code, a new programming language.
As it happens during any technology shift period, skills shortage can be a problem as the current curriculum may not address the whole set of issues involved. According to Ricks et al. , developers need to have a detailed knowledge about devices and applications in order to master the current embedded system sophistication. The range of skills required for embedded systems design encompasses knowledge about digital logic, computer architecture, hardware description languages, real-time requirements, and resource-aware software development. Although these topics are adequately taught in computer science courses, students tend to see them as isolated units, with little relation to embedded systems. Reconfigurable computing can be used as a common platform for teaching all of those subjects and also to expose students to some of the main concepts and practices in the field.
Embedded systems have a complex nature when compared to desktop or server software, the prevalent platform adopted by most courses in the typical CS curriculum. A diverse mix of software and hardware components, functional and nonfunctional requirements, and significant differences between target applications make it difficult to adopt a conventional approach to embedded systems teaching. Previous experiences have shown to the authors that applying the conventional pedagogical approach to embedded systems teaching can be very effective for the particular scenario considered by the course. However, it was perceived that a significant number of students would feel reluctant to undertake a new project in embedded systems, even after a successful completion of the standard course. One of the reasons for that, the authors believe, is that those students would not feel confident enough to propose by themselves a significantly different design for the new project. By adopting a PBL approach and employing a hands-on and realistic project in the first course on embedded system, the authors aim to empower students with the skills necessary to tackle other complex and diverse projects in this field. This is a desirable outcome, considering that embedded systems development is an area of ever-increasing interest and presents a shortages of well qualified professionals.
Table 1 shows a summary of the course contents. The theoretical part of this course starts giving a brief review about ASICs and general purpose processors in the embedded system scenario. Performance, power consumption, development, and update costs are also analysed (week 1). Then, a typical embedded system design flow is presented (week 2), followed by HW/SW specification and modeling. Computation models are presented, including finite state machine, data flow, and Petri nets (weeks 3 and 4). The next topics give an overview about interfaces, protocols, and control systems (weeks 5 and 6). After this point, teaching is focused on process and development tools, showing how to identify HW/SW partitioning (week 7), design HW/SW integration, and synthesize the whole computing system on a SoPC, using FPGA technology (week 8). Different IC technologies for implementing SoCs are discussed (week 12). Finally, state-of-the-art work is presented regarding embedded system development, encompassing new tools, models, and integrated circuit technology (week 13).
The problem of autonomous robot localization can be solved using the Monte Carlo localization (MCL) algorithm , which uses a set of particles to estimate the real robot position inside a map constantly updated by sensor readings during its movements (most experiments are evaluated with offline data from test bench maps available from Radish ). This algorithm is quite interesting, since each particle can be evaluated independently of each other, allowing the students to exploit a high level of parallelism in hardware. As the number of particles scales, subject to a set of conditions such as sensor type and environment characteristics, balancing the computing hardware to meet system requirements is an interesting challenge. The easiest solution would be to code the whole MCL algorithm in C and run it in an embedded processor (software), while the hardest would be to code it in a synthesizable HDL and then generate the custom hardware. To find the balance between those two alternatives is a typical hardware/software codesign problem. In addition to design options influencing performance, the students also need to pay attention to some qualitative aspects of the system, such as random number generator supporting the MCL algorithm and the numerical precision regarding floating to fixed-point conversions. Bonato et al.  present the MCL algorithm implemented on an FPGA using the Mersenne Twister pseudorandom number generator, where a good balance between hardware and software is achieved. The design described in that paper is presented to the students and used as a guide for developing and evaluating their solutions. 2b1af7f3a8