Computer Science and Engineering

EOLSS Publications
Free sample

Computer Science and Engineering is a component of Encyclopedia of Technology, Information, and Systems Management Resources in the global Encyclopedia of Life Support Systems (EOLSS), which is an integrated compendium of twenty one Encyclopedias. 

The Theme on Computer Science and Engineering provides the essential aspects and fundamentals of Hardware Architectures, Software Architectures, Algorithms and Data Structures, Programming Languages and Computer Security. It is aimed at the following five major target audiences: University and College students Educators, Professional practitioners, Research personnel and Policy analysts, managers, and decision makers.

Read more

About the author

Zainalabedin Navabi is a professor of Electrical and Computer Engineering at the University of Tehran, and an adjunct professor at Worcester Polytechnic Institute. Dr. Navabi is the author of several textbooks and computer based trainings on VHDL, Verilog and related tools and environments. Dr. Navabi’s involvement with hardware description languages begins in 1976, when he started the development of a register-transfer level simulator for one of the very first HDLs. In 1981 he completed the development of a synthesis tool that generated MOS layout from an RTL description. Since 1981, Dr. Navabi has been involved in the design, definition and implementation of Hardware Description Languages. He has written numerous papers on the application of HDLs in simulation, synthesis and test of digital systems. He started one of the first full HDL courses at Northeastern University in 1990. Since then he has conducted many short courses and tutorials on this subject in the United States, Europe and Asia. Since early 1990’s he has been involved in developing, producing, and broadcasting online and video lectures on HDLs, Digital System Test, and various aspects of automated design. In addition to being a professor, he is also a consultant to CAE companies. Dr. Navabi received his M.S. and Ph.D. from the University of Arizona in 1978 and 1981, and his B.S. from the University of Texas at Austin in 1975. He is a senior member of IEEE, a member of IEEE Computer Society, member of ASEE, and ACM.


Kaeli received his Ph.D. in Electrical Engineering from Rutgers University in 1992. He received his M.S. in Computer Engineering from Syracuse University in 1985 and a B.S. in Electrical Engineering from Rutgers University in 1981.

He has a courtesy appointment in the College of Computer and Information Science at Northeastern, and a honorary professorship from City University of London, UK. For the 2001-2002 academic year he spent a year as a Visiting Professor at the Departament of d'Arquitectura de Computadors at the Universitat Politecnica de Catalunya. Prior to joining Northeastern, Dr. Kaeli spent 12 years working at IBM and IBM Research.
Read more



Additional Information

EOLSS Publications
Read more
Published on
Aug 10, 2009
Read more
Read more
Read more
Read more
Best For
Read more
Read more
Computers / Computer Engineering
Computers / Computer Science
Read more
Content Protection
This content is DRM protected.
Read more
Eligible for Family Library

Reading information

Smartphones and Tablets

Install the Google Play Books app for Android and iPad/iPhone. It syncs automatically with your account and allows you to read online or offline wherever you are.

Laptops and Computers

You can read books purchased on Google Play using your computer's web browser.

eReaders and other devices

To read on e-ink devices like the Sony eReader or Barnes & Noble Nook, you'll need to download a file and transfer it to your device. Please follow the detailed Help center instructions to transfer the files to supported eReaders.
Scott Meyers
Coming to grips with C++11 and C++14 is more than a matter of familiarizing yourself with the features they introduce (e.g., auto type declarations, move semantics, lambda expressions, and concurrency support). The challenge is learning to use those features effectively—so that your software is correct, efficient, maintainable, and portable. That’s where this practical book comes in. It describes how to write truly great software using C++11 and C++14—i.e. using modern C++.

Topics include:

The pros and cons of braced initialization, noexcept specifications, perfect forwarding, and smart pointer make functionsThe relationships among std::move, std::forward, rvalue references, and universal referencesTechniques for writing clear, correct, effective lambda expressionsHow std::atomic differs from volatile, how each should be used, and how they relate to C++'s concurrency APIHow best practices in "old" C++ programming (i.e., C++98) require revision for software development in modern C++

Effective Modern C++ follows the proven guideline-based, example-driven format of Scott Meyers' earlier books, but covers entirely new material.

"After I learned the C++ basics, I then learned how to use C++ in production code from Meyer's series of Effective C++ books. Effective Modern C++ is the most important how-to book for advice on key guidelines, styles, and idioms to use modern C++ effectively and well. Don't own it yet? Buy this one. Now".
-- Herb Sutter, Chair of ISO C++ Standards Committee and C++ Software Architect at Microsoft

Zainalabedin Navabi
This book is on digital system design for programmable devices, such as FPGAs, CPLDs, and PALs. A designer wanting to design with programmable devices must understand digital system design at the RT (Register Transfer) level, circuitry and programming of programmable devices, digital design methodologies, use of hardware description languages in design, design tools and environments; and finally, such a designer must be familiar with one or several digital design tools and environments. Books on these topics are many, and they cover individual design topics with very general approaches. The number of books a designer needs to gather the necessary information for a practical knowledge of design with field programmable devices can easily reach five or six, much of which is on theoretical concepts that are not directly applicable to RT level design with programmable devices. The focus of this book is on a practical knowledge of digital system design for programmable devices. The book covers all necessary topics under one cover, and covers each topic just enough that is actually used by an advanced digital designer. In the three parts of the book, we cover digital system design concepts, use of tools, and systematic design of digital systems. In the first chapter, design methodologies, use of simulation and synthesis tools and programming programmable devices are discussed. Based on this automated design methodology, the next four chapters present the necessary background for logic design, the Verilog language, programmable devices, and computer architectures.
David R. Kaeli

Heterogeneous Computing with OpenCL 2.0

teaches OpenCL and parallel programming for complex systems that may include a variety of device architectures: multi-core CPUs, GPUs, and fully-integrated Accelerated Processing Units (APUs). This fully-revised edition includes the latest enhancements in OpenCL 2.0 including:

• Shared virtual memory to increase programming flexibility and reduce data transfers that consume resources • Dynamic parallelism which reduces processor load and avoids bottlenecks • Improved imaging support and integration with OpenGL

Designed to work on multiple platforms, OpenCL will help you more effectively program for a heterogeneous future. Written by leaders in the parallel computing and OpenCL communities, this book explores memory spaces, optimization techniques, extensions, debugging and profiling. Multiple case studies and examples illustrate high-performance algorithms, distributing work across heterogeneous systems, embedded domain-specific languages, and will give you hands-on OpenCL experience to address a range of fundamental parallel algorithms.

Updated content to cover the latest developments in OpenCL 2.0, including improvements in memory handling, parallelism, and imaging support Explanations of principles and strategies to learn parallel programming with OpenCL, from understanding the abstraction models to thoroughly testing and debugging complete applications Example code covering image analytics, web plugins, particle simulations, video editing, performance optimization, and more
Benedict Gaster
Heterogeneous Computing with OpenCL, Second Edition teaches OpenCL and parallel programming for complex systems that may include a variety of device architectures: multi-core CPUs, GPUs, and fully-integrated Accelerated Processing Units (APUs) such as AMD Fusion technology. It is the first textbook that presents OpenCL programming appropriate for the classroom and is intended to support a parallel programming course. Students will come away from this text with hands-on experience and significant knowledge of the syntax and use of OpenCL to address a range of fundamental parallel algorithms.

Designed to work on multiple platforms and with wide industry support, OpenCL will help you more effectively program for a heterogeneous future. Written by leaders in the parallel computing and OpenCL communities, Heterogeneous Computing with OpenCL explores memory spaces, optimization techniques, graphics interoperability, extensions, and debugging and profiling. It includes detailed examples throughout, plus additional online exercises and other supporting materials that can be downloaded at

This book will appeal to software engineers, programmers, hardware engineers, and students/advanced students.

Explains principles and strategies to learn parallel programming with OpenCL, from understanding the four abstraction models to thoroughly testing and debugging complete applications.Covers image processing, web plugins, particle simulations, video editing, performance optimization, and more.Shows how OpenCL maps to an example target architecture and explains some of the tradeoffs associated with mapping to various architecturesAddresses a range of fundamental programming techniques, with multiple examples and case studies that demonstrate OpenCL extensions for a variety of hardware platforms
Zainalabedin Navabi
A Complete Toolkit for Designing Embedded Cores and Utilizing Those Cores in an Embedded System

A landmark guide in digital system design, Embedded Core Design with FPGAs equips today's computer engineers with everything they need to design embedded cores and apply those cores in a state-of-the-art embedded system. This practical resource brings together logic design, computer architecture, Verilog, FPGAs, Hardware/Software design, and SoCs, explaining how engineers can draw on their computer engineering background to achieve cutting-edge embedded designs.

Renowned design expert and educator Zainalabedin Navabi first covers the basics of logic design, RT Level Verilog, computer architectures, and the architecture of modern field programmable devices. He then explores the design of utility cores that are used for high-level core-based designs, with specific focus on existing Altera cores. Finally, he describes higher-end design methodologies, including design of hardware/software systems, CPU configurations, embedded systems, and the utilization of various Altera Nios II processors.

Embedded Core Design with FPGAs features:

A full array of design aids, including Verilog, FPLD structures, design and programming environments, and software and hardware tools The latest embedded system design techniques, including use of high-level integrated environments, SOPC development tools, utilizing existing processor cores, and developing your own customized processor A clear focus on utilizing Altera's new DE series and UP3 development boards and design software, including SOPC Builder and IDE software design environment

Master Every Aspect of Embedded Core Design-- High-Level Hardware/Software Design Concepts:

High-Level System Design Methodology RT Level Logic Design RT Level Verilog Computer Hardware and Software Programming Languages FPGA Architecture and Utilization
FPGA-Based Design of Embedded Cores: Implementation of Basic Interface Components Configurable Cores Custom Cores CPU Cores Core-Based System Design Using Development Boards for Prototyping
System Design with Processor Cores: Design with a Customer Embedded CPU Embedded Core DSP Application Embedded Microcontroller with Keyboard and Display Interfaces Using Embedded Design Hardware and Software Tools Nios II Processor Nios II-Based Hardware/Software System Design
©2018 GoogleSite Terms of ServicePrivacyDevelopersArtistsAbout Google
By purchasing this item, you are transacting with Google Payments and agreeing to the Google Payments Terms of Service and Privacy Notice.