آموزش FPGA - طراحی دیجیتال برای افراد مبتدی با برد Mojo
Learn how to design digital circuits with FPGAs (field-programmable gate arrays), the devices that reconfigure themselves to become the very hardware circuits you set out to program. With this practical guide, author Justin Rajewski shows you hands-on how to create FPGA projects, whether you’re a programmer, engineer, product designer, or maker. You’ll quickly go from the basics to designing your own processor.
Learn how to design digital circuits with FPGAs (field-programmable gate arrays), the devices that reconfigure themselves to become the very hardware circuits you set out to program. With this practical guide, author Justin Rajewski shows you hands-on how to create FPGA projects, whether you’re a programmer, engineer, product designer, or maker. You’ll quickly go from the basics to designing your own processor.
Designing digital circuits used to be a long and costly endeavor that only big companies could pursue. FPGAs make the process much easier, and now they’re affordable enough even for hobbyists. If you’re familiar with electricity and basic electrical components, this book starts simply and progresses through increasingly complex projects.
Set up your environment by installing Xilinx ISE and the author’s Mojo IDE
Learn how hardware designs are broken into modules, comparable to functions in a software program
Create digital hardware designs and learn the basics on how they’ll be implemented by the FPGA
Build your projects with Lucid, a beginner-friendly hardware description language, based on Verilog, with syntax similar to C/C++ and Java
From the Preface
Designing digital circuits used to be something that only big companies could afford to do. It used to require creating application-specific integrated circuits (ASICs)—taking weeks or months to produce an actual chip, and requiring piles of cash or wiring together tons of individual chips to perform various logic functions. Then the field-programmable gate array (FPGA) was introduced. FPGAs are programmable logic devices. Unlike an ASIC, the function an FPGA performs is determined at runtime, so an FPGA can be configured to act like just about any digital circuit. However, it wasn’t until recently that the cost of FPGAs has dropped to a point where they are now affordable for even hobbyists.
An FPGA allows you to design digital circuits. Digital circuits are basically just a bunch of logic gates (and, or, nor, etc.) connected together to perform a specific task. The designs that you create can range from something as simple as a counter that blinks an LED to something as complex as a multicore processor.
This book starts at the very beginning, with setting up your environment and getting an LED to turn on. As you develop your skills, you will learn how to perform more-complicated tasks and eventually design your own basic processor.
Expected Background
This book is going to teach you the basics of digital hardware design. This is not a topic for the complete beginner, and some background information is going to be assumed. You should be familiar with electricity (voltage and current) and basic electrical components (resistors, capacitors, transistors, and LEDs). While not strictly required, some programming background will be helpful, especially if it is with embedded microcontrollers such as an Arduino.
The majority of this book uses Lucid. Lucid is a hardware description language (HDL) that was designed to be beginner friendly and simpler to use with FPGAs than the more traditional Verilog and VHDL languages. Lucid is similar to Verilog in many ways, and our tools actually translate it to Verilog as an intermediate step during the build process. However, it removes some of the quirks that plague Verilog and makes many of the easy-to-make mistakes impossible.
Check out the Lucid Quick Reference guide in Chapter 13.
Lucid shares similar syntax with programming languages such as C/C++ and Java. Being familiar with one of these can help. However, it is important to remember that Lucid is a hardware description language and not a programming language.
It is important to have a solid understanding of binary, hexadecimal, and decimal number systems.