We may earn an affiliate commission when you visit our partners.
Course image
L Athukorala

Course Audience :

This course is aimed at students & engineers who want to get into the field of FPGA development using VHDL. No prior knowledge in VHDL/FPGA is assumed so we will start from the very basics.

Students should have a basic knowledge of digital electronics including logic gates and flip-flops.

Course Summary :

Read more

Course Audience :

This course is aimed at students & engineers who want to get into the field of FPGA development using VHDL. No prior knowledge in VHDL/FPGA is assumed so we will start from the very basics.

Students should have a basic knowledge of digital electronics including logic gates and flip-flops.

Course Summary :

This course covers the VHDL language in detail. In between lectures, we will complete a number of fun projects (please see below) with increasing complexity to consolidate the knowledge we have gained during the course. We will go through how to write Test Benches and we will implement a number of Test Benches to verify the UART project. We cover the Intel Quartus software in detail and also go through how to simulate Test Benches using using ModelSim.

Projects (Implemented and Tested On a Cyclone IV Development Board):

1. Reading a switch input and driving an LED output

2. Simple State Machine which reacts to user input and drives a number of LEDs

3. Synchronising and de-bouncing a Switch Input.

4. Generating a PWM output.

5. Designing a Shift Register.

6. 4 Digit 7-Segment display for counting the number of push button activations

7. UART module & State machine for echoing back characters received from a PC over RS232

Intel Quartus Softare:

1. Creating & Compiling a new project

2. Performing pin assignments.

3. Basic introduction to Quartus IP Catalogue.

4. Using the USB Blaster to program the FPGA via JTAG.

5. Using the Quartus Net List Viewer to explore the hardware realisation of your design.

6. Making sense of Quartus Fitter Reports to better understand resource allocation.

7. Using the Quartus Assignment Editor.

8. Overview of Quartus settings, options and optimisations.

9. Basic introduction to timing analyser, timing constraints and SDC files.

Intel ModelSim Starter Edition Software :

1. Creating a new ModelSim Project.

2. Writing & compiling Test Benches.

3. Running simulations.

4. Using the Waveform viewer to analyse results.

Course Details :

We will start by covering the basics of FPGA hardware. This hardware background is vital and as we learn how to write VHDL, we will also refer back to how our code gets implemented in hardware.

In the second section of the course, we will cover the VHDL language in detail. We will cover all the aspects (Signals & Data types, VHDL Keywords & Operators, Concurrent & Sequential statements, Entity & Architecture, Process Block, Generics, Constants & Variables, Records, Component Instantiation, Procedures & Functions, Packages & Libraries and Type Conversions) that are needed to be able to develop complex and advanced FPGA designs. There will be plenty of simple examples to allow you to learn the VHDL language quickly and enable you to confidently write your own code. We will also look at how most of the VHDL language maps to hardware on the actual device.

With this strong foundation in the language, we will look at how to build fundamental FPGA blocks starting from Tri-State Drivers, Registers, Comparators, Multiplexers, Shift Registers, Serialisers, RAMs & ROMs and Finite State Machines. We will look at how to code all of the above structures and also explore how these are implemented in real hardware in the FPGA.

In the next section, we will look at hierarchical design with VHDL. This design practise is used when creating complex designs having more than one design unit. We will explore this concept from an example to see how design units can be joined together to form a hierarchical design.

In the next section we will explore good FPGA design practise. From my experience most beginners in FPGA design make common mistakes and fall into certain traps. Some of these can lead to issues that are very difficult to debug and fix. The idea behind this section is to make you aware of these common pitfalls and explore ways in which we can circumvent these. We will talk about Latches, Generated Clocks, Clock & Data Gating, Benefits of a Register Rich Design, Benefits of Synchronous Design, Dealing With Asynchronous Inputs, Clock Domain Crossing, Designing for Reuse, Signal Initialisation, Synchronising Reset De-assertion, Routing Clocks & Resets and Using PLLs.

By this stage, we would have covered a lot of the theory and also completed a number of design projects so you should have the knowledge to create your own FPGA designs independently. We will now cover design verification. This section will explore how to write test benches. We will explore aspects of VHDL coding styles for writing test benches. We will discuss how to perform file IO for creating input vectors and to store output results. We will also discuss self-checking test benches to help automate the test process.

In the final section of the course, we will design a UART module controlled by a State machine. We will write VHDL code to implement the UART and state machine from scratch. We will use a hierarchical design approach where we will have a number of design units. We will write test benches for each design unit and perform simulations (using ModelSim) for verification.  We will bring all design units together into our top level VHDL module and do a system level simulation. Next, we will explore how to create & configure a project in Intel Quartus to implement our design on our FPGA development board. We will look at how to do the pin assignments and also very briefly look at applying very basic timing constraints to get our design to pass. We will then test the design on real hardware to make sure our design works as intended.

Enroll now

What's inside

Learning objectives

  • We will cover the vhdl language and syntax with lots of example projects
  • Relate vhdl code to hardware implementation
  • Creating fpga building blocks using vhdl
  • Creating state machines using vhdl
  • Creating complex fpga designs from scratch
  • Highlight good design practice & common pitfalls
  • Writing test benches in vhdl
  • Simulate & debug fpga designs using modelsim
  • Use the intel quartus software to compile and implement projects
  • Use quartus to perform pin assignments
  • Programming fpgas using the usb blaster
  • Using the quartus netlist viewer to view the hardware realisation
  • Making sense of the quartus fitter reports
  • Quartus assignment editor
  • Quartus settings, options & optimisations
  • Basic introduction to quartus timing analyser
  • Implement a uart project that communicates over rs232 with a pc
  • Implement a state machine project
  • Implement a 4 digit 7-segment display to print a count value
  • Implement a project to create a pwm output
  • Implement a shift register to drive leds
  • Implement a project to cover switch de-bouncing and synchronisation
  • Show more
  • Show less

Syllabus

Structure of a VHDL File
Project : Switch And LED
The Process Block
Course Videos
Read more

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Starts with the basics of FPGA hardware and VHDL, which is helpful for learners with no prior knowledge in the field
Uses Intel Quartus software, which is widely used in the industry for FPGA design and implementation
Covers the use of ModelSim for simulating and debugging FPGA designs, an essential skill for hardware development
Includes a series of projects with increasing complexity, allowing learners to consolidate their knowledge through hands-on experience
Requires a Cyclone IV development board to implement and test the projects, which may be an additional cost for some learners
Assumes a basic knowledge of digital electronics, including logic gates and flip-flops, which may be a barrier for some beginners

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Learn fpga design with vhdl

According to students, this course offers a solid introduction to FPGA design using VHDL and Intel/Altera tools. Many find the coverage of VHDL fundamentals to be clear and the practical projects particularly helpful for hands-on learning. While the course is praised for its beginner-friendly approach, some learners note that the steep learning curve of FPGA design and the requirement for specific hardware can present challenges. The sections on Intel Quartus and ModelSim are generally well-received, providing necessary software skills. Overall, it's seen as a valuable starting point, though some feel more depth or updated content could enhance the experience.
Highlights common pitfalls and best practices.
"The section on good design practices and common pitfalls was extremely valuable."
"Learning about asynchronous inputs and clock domain crossing helped avoid future issues."
"Understanding why synchronous design is preferred was well explained."
"This section alone saved me from making basic mistakes that are hard to debug."
Useful guidance on using Intel Quartus and ModelSim.
"The step-by-step instructions for setting up and using Quartus were very helpful."
"Learning how to write and simulate test benches in ModelSim was a key takeaway."
"Understanding the Quartus fitter reports and netlist viewer provided valuable debugging skills."
"While software versions can change, the core process taught is still relevant."
Clear and effective teaching of VHDL basics.
"The VHDL language introduction is thorough and easy to follow for someone with no prior experience."
"I found the explanations of concurrent and sequential statements particularly clear."
"Understanding the fundamentals of VHDL syntax and structure became much easier after these lessons."
"The way VHDL concepts are linked to hardware implementation is very insightful."
Hands-on projects reinforce learning effectively.
"The projects provided are well-chosen and really help consolidate the theory."
"Implementing the UART project from scratch was challenging but extremely rewarding and practical."
"I appreciated having actual designs to build and test on real hardware."
"Working through the state machine and 7-segment display projects made the concepts concrete."
The topic itself requires significant effort to grasp.
"FPGA design itself has a steep learning curve, and while the course helps, expect to put in extra time."
"Some concepts, especially timing and synchronization, are complex and require revisiting the material."
"Even with the course, mastering VHDL and hardware description takes considerable practice."
"I needed to supplement the course with outside reading on digital logic fundamentals."
Requires specific hardware for full benefit.
"To get the most out of the course, you really need the specified Cyclone IV development board."
"Testing designs on real hardware is crucial, so factor in the cost of the board."
"While simulations are covered, the hands-on hardware experience is vital for understanding."
"I initially tried without the board, but strongly recommend getting one to follow along fully."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Learn FPGA Design With VHDL (Intel/Altera) with these activities:
Review Digital Electronics Fundamentals
Strengthen your understanding of digital electronics concepts like logic gates and flip-flops, which are essential for grasping FPGA design principles.
Browse courses on Digital Electronics
Show steps
  • Review textbooks or online resources on digital electronics.
  • Practice solving problems related to logic gate circuits and flip-flop behavior.
  • Familiarize yourself with common digital circuit components.
Read 'VHDL by Example' by Blaine Readler
Gain a deeper understanding of VHDL syntax and practical application through real-world examples.
Show steps
  • Obtain a copy of 'VHDL by Example'.
  • Work through the examples provided in the book, experimenting with different VHDL constructs.
  • Relate the examples to the concepts covered in the course lectures.
Implement Basic Logic Functions in VHDL
Reinforce your VHDL coding skills by implementing fundamental logic functions like AND, OR, XOR, and NOT gates, as well as multiplexers and decoders.
Show steps
  • Write VHDL code for each of the basic logic functions.
  • Simulate the code using ModelSim to verify its functionality.
  • Synthesize the code and analyze the resource utilization reports.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Create a VHDL Cheat Sheet
Consolidate your knowledge of VHDL syntax and keywords by creating a concise cheat sheet for quick reference.
Show steps
  • Review the VHDL syntax and keywords covered in the course.
  • Organize the information into a clear and concise cheat sheet format.
  • Include examples of common VHDL constructs and coding styles.
Design a Simple Counter
Apply your VHDL skills to design and implement a simple counter circuit, which is a fundamental building block in many digital systems.
Show steps
  • Define the specifications for the counter, including the number of bits and the counting direction.
  • Write VHDL code to implement the counter logic.
  • Simulate the code using ModelSim to verify its functionality.
  • Synthesize the code and implement it on an FPGA development board.
Read 'FPGA Prototyping by VHDL Examples' by Pong P. Chu
Expand your knowledge of FPGA prototyping techniques and explore advanced design examples.
Show steps
  • Obtain a copy of 'FPGA Prototyping by VHDL Examples'.
  • Study the design examples provided in the book, focusing on the implementation details.
  • Experiment with modifying the examples to create your own custom designs.
Contribute to an Open-Source VHDL Project
Enhance your VHDL skills and collaborate with other developers by contributing to an open-source VHDL project.
Show steps
  • Find an open-source VHDL project on platforms like GitHub or GitLab.
  • Review the project's documentation and code base.
  • Identify areas where you can contribute, such as bug fixes, new features, or documentation improvements.
  • Submit your contributions to the project maintainers for review.

Career center

Learners who complete Learn FPGA Design With VHDL (Intel/Altera) will develop knowledge and skills that may be useful to these careers:
FPGA Engineer
An FPGA Engineer designs, develops, and tests digital circuits by programming Field Programmable Gate Arrays. This course is directly relevant as it provides a comprehensive understanding of VHDL, the primary hardware description language used in FPGA development. The course projects, which include implementing state machines, UART modules, and PWM outputs, directly correlate to the typical tasks of an FPGA engineer. The course also covers the use of Intel's Quartus software, essential for FPGA design. This course provides the practical skills to build complex designs, write test benches for verification, and implement projects on an FPGA development board.
Digital Design Engineer
A Digital Design Engineer is responsible for designing and implementing digital circuits and systems. This course is directly applicable as it teaches the VHDL language, essential for digital design, and how to implement complex designs on FPGAs. The course covers the creation of essential digital building blocks, such as registers, multiplexers, and state machines. This course will be useful as it covers design verification through test benches, uses Intel Quartus software, and provides projects that include a UART module and a 7-segment display. These skills are all essential for a digital design engineer.
Hardware Design Engineer
A Hardware Design Engineer focuses on the design and development of electronic hardware systems. This course helps build a foundation in digital logic design using VHDL, which is important for hardware design. The course's focus on FPGA hardware implementation and the practical exercises in creating building blocks such as registers, comparators, and multiplexers, offer relevant skills. The course projects, including shift registers and finite state machines, are also relevant. Furthermore, understanding how VHDL code translates to physical hardware, which is covered in this course, helps one be successful as a Hardware Design Engineer.
Verification Engineer
A Verification Engineer develops and implements verification strategies for hardware and software systems. This course is directly useful as the course teaches how to write test benches in VHDL and how to perform simulations using ModelSim. The projects, such as the UART module and state machine, are ideal to learn how to verify designs. This course helps gain a better understanding of the hardware implementation as well. A Verification Engineer is better equipped to perform their job with this knowledge.
Embedded Systems Engineer
An Embedded Systems Engineer designs, develops, and tests software and hardware for embedded systems. This course may be useful as it provides a strong foundation in FPGA development with VHDL, which is frequently used in the hardware of embedded systems. The skill set is directly applicable as it involves working with digital logic implementation, which is a daily activity of an embedded systems engineer. The hands-on projects, including UART modules and state machines, are also relevant to developing embedded solutions. This course also focuses on the use of Intel’s Quartus software which is useful for embedded engineers.
Hardware Test Engineer
A Hardware Test Engineer develops and executes tests to ensure the quality of hardware products. This course may be useful because it provides hands-on experience with FPGA design, hardware implementation, and testing using VHDL and ModelSim. The skills learned in this course, particularly in writing test benches and performing simulations are relevant to the role of a Hardware Test Engineer. The course also helps to understand how VHDL code translates to physical hardware, which aids in designing effective tests. Furthermore, the experience of using Intel Quartus software to program FPGAs and analyze fitter reports are relevant.
ASIC Design Engineer
An ASIC Design Engineer designs application-specific integrated circuits. This course provides the necessary background in hardware description languages like VHDL, which is the base of ASIC design. The course helps build a foundation in designing and implementing digital circuits. The course also covers many of the digital building blocks that an ASIC engineer must be familiar with. This course may be very helpful because it gives practical experience using Quartus software, and it also covers good design practices to avoid common pitfalls, which are relevant to ASIC design.
Robotics Engineer
A Robotics Engineer designs, develops, and tests robots and robotic systems. This course may be useful as it provides a foundation in digital hardware design with VHDL, which is essential to building robotic components. The course's focus on designing state machines, which are commonly used in robotics control, is particularly relevant. The practical projects, like implementing a PWM output and shift register, offer skills that can be used in robot design. This course may help an engineer explore the different facets of electronic design of robotics, which will help one advance as a Robotics Engineer.
Aerospace Engineer
An Aerospace Engineer designs and develops aircraft, spacecraft, and related systems. This course may be relevant to building embedded systems for aerospace applications. Many aerospace systems contain embedded systems that use FPGAs, so the skills to program and debug FPGAs with VHDL are essential. The course emphasis on test benches may be useful, as these skills are important for verification of designs for aerospace systems. This course helps explore the role of digital electronics for design and testing, which is useful for an Aerospace Engineer.
Systems Engineer
A Systems Engineer focuses on the design, integration, and management of complex systems. This course may be helpful because it offers a deep understanding of the hardware implementation of digital systems using VHDL. The course also explores good design practices for FPGA designs. The skills and knowledge gained can be applied to various systems, especially those that rely on digital hardware. The experience in using Quartus software and ModelSim may also be beneficial. This course can help an engineer understand how digital hardware design fits into more complex systems, which advances one as a Systems Engineer.
Electrical Engineer
An Electrical Engineer designs and develops electrical systems and equipment. This course may be helpful, as it provides an understanding of digital hardware design using VHDL and FPGAs. It may help one explore the digital design space for electrical engineering applications. The practical experience gained through the projects will help learn about the implementation of state machines, UART modules, and other common digital components. This course may be useful in helping an electrical engineer gain knowledge of a sub-discipline, which greatly enhances one's capabilities as an Electrical Engineer.
Computer Engineer
A Computer Engineer designs, develops, and tests computer hardware and software. This course may be helpful as it focuses on low-level digital design and hardware implementation. The course covers VHDL for FPGA development, and it may help one understand how digital circuits are implemented. The course on state machines may also be helpful. This course may be helpful as it may give a better understanding of the hardware layer of the computer architecture, adding to one's versatility as a Computer Engineer.
Firmware Engineer
A Firmware Engineer develops and tests low-level software that controls hardware. This course may be useful as it offers detailed knowledge of hardware implementation, VHDL for FPGA development, and testing using test benches. The course's focus on the digital design of hardware may provide a helpful perspective. The course projects, like the implementation of a UART module, may be relevant for embedded firmware development. This may be helpful as it allows one to see how hardware and firmware complement each other, improving one's value as a Firmware Engineer.
Software Engineer
A Software Engineer develops and maintains software applications. This course may be helpful as it provides a basic understanding of hardware, which may be beneficial when implementing very low-level software applications. The course covers implementing and testing digital circuits, which may provide insight to software engineers developing software that interacts with hardware. This course may be useful when learning about how digital systems are built, broadening one's skill set as a Software Engineer.
Product Manager
A Product Manager is responsible for the strategy, roadmap, and execution of a product. This course may be useful because it covers the technical details of designing digital circuits using hardware description languages, which may help a Product Manager who works on products that use FPGAs or other hardware. Understanding the complexities behind hardware design may enable them to make better informed strategic decisions. This may allow a Product Manager to better understand one facet of their product, which may be useful to their decision making.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Learn FPGA Design With VHDL (Intel/Altera).
Provides a comprehensive guide to FPGA prototyping using VHDL. It covers a wide range of design examples, from basic logic circuits to more complex systems. It is particularly useful for understanding how to translate VHDL code into working hardware prototypes. This book valuable resource for those looking to gain practical experience in FPGA design and implementation.
Provides a practical, example-driven approach to learning VHDL. It complements the course by offering numerous code examples and design scenarios. It is particularly useful for solidifying your understanding of VHDL syntax and how to apply it in real-world FPGA projects. This book valuable resource for both beginners and those looking to enhance their VHDL skills.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser