The core of implementing and practicing using the Zynq board.
📢 Please note before taking the class.
This course is a text lecture in electronic document (PDF) format (approximately 110,000 characters). All source files covered in the course are provided to those who take the course. The course source code can be downloaded from Section 0 [Material Sharing Link].
Verilog implementation using the Zynq board
✅ Code implementation ✅ Simulation verification using Text Bench ✅ Board verification
Before coding, we analyze the overall system and provide know-how on how to code efficiently. We provide easy-to-understand explanations based on extensive techniques and know-how gained from over 20 years of field experience. Furthermore, the source code included in the lectures is not for study purposes but rather is used in real-world applications. All attendees will receive access to the full source code used in the lectures.
The first half of the lecture will cover the following two topics:
Install Vivado 2022.1
Download the code implemented on the Zynq board and check the results.
In the latter part of the lecture , we will verify the results downloaded to the board through coding and simulation verification for each topic.
LED control using counter
SPI Controller Implementation
UART Controller Implementation
I2C Controller Implementation
Uses Xilinx IP (Clock Generator, Memory Generator)
NRZL Decoder implementation
Implementation of FMC (Flexible Memory Controller) Interface
FPGA Utilization with Verilog for ZYNQ - Lecture Preview
Detailed Curriculum
outline
HW configuration
SW installation
Download the ZynQ board
Basic Template Configuration
Create a project
Create Block Design
Download in Debug Mode
Add source code
Bitstream generation
Run and download Vitis
Download using FSBL (First Stage Bootloader)
Create an FSBL project
Create Boot Image
Download the board and check the results
Download using FSBL, Application SW
Create an FSBL project
Create an Application Project
Create Boot Image
Download the board and check the results
LED control using counter
Create a project
Project screen configuration
Add source code
Text Editor Settings
Code implementation
XDC implementation
Generate Bitstream
Check results
Simulation
Add simulation source file
Implementing the tb_led_counter.v code
Simulation in progress
Simulation results
About the code
Implementable code, non-implementable code
The basic unit of code is Clock.
All code is processed in parallel.
ternary operator
Use Register
FSM (Finite State Machine)
Spi Master implementation
Specs
Code implementation
Port definition
State definition
Code implementation
Timing diagram
Simulation
Test bench implementation
Check simulation results
Spi Slave Implementation
Specs
Code implementation
Port definition
State definition
Code implementation
Simulation
Test bench implementation
Check simulation results
Spi communication implementation
Button noise removal
Button circuit
Code implementation
Simulation
SPI Task Implementation
Port definition
Button noise removal
State definition
Code implementation
Simulation
Test bench implementation
Check simulation results
Implementing the UsetTop module
Add xdc file
Generate Bitstream
Download the board and check the results
Use of Xilinx IP
Create a Clock
Memory creation
Block Memory Generator
Memory Test
Single Port RAM
Simple Dual Port RAM
Other memory
UART Controller Implementation
Uart Tx implementation
Code implementation
simulation
Uart Rx implementation
Create FIFO
Code implementation
simulation
Uart Controller Implementation
LoopBack implementation
composition
Code implementation
simulation
Implementing the UserTop module
xdc creation
Generate Bitstream and XSA files
Check results
I2C Controller Implementation
I2C Controller Specifications
Start, Stop Condition
8-bit data transmission
Slave ID
I2C Write Data Structure
I2C Read Data Structure
I2C Master Implementation
i2c_master write signal analysis
i2c_master read signal analysis
i2c_master code implementation
i2c_master simulation
Check results
i2c_master8x8 implementation
i2c_master8x8 simulation
I2C Slave Implementation
I2C Slave Signal Analysis
i2c_slave8x8 code implementation
i2c_reg8x8 implementation
i2c_slave8x8, i2c_reg8x8 simulation
I2C TASK
i2c_task code implementation
Implementing the UserTop module
Add xdc file
Generate Bitstream and XSA files
Download the board and check the results
NRZL Decoder implementation
System Overview
Code implementation
Create a clock
Create FIFO
data_counter implementation
noise_reduction implementation
data_encoder implementation
nrzlDecTop implementation
Implementing the UserTop module
xdc implementation
Create Bitstream and XSA files and check the results
conclusion
FMC Interface Implementation
FMC Timing
Code implementation
fmc_model.v
simulation fmc_model
fmc_interface.v
sys_host.v
spram_32x8192
simulation fmc_interface
fmc_top.v
UserTop.v
UserTop.xdc
Bitstream generation
Resolving Timing Errors
Download the board and check the results
conclusion
Revision History
Q&A 💬
Q. Who is the target audience for this lecture?
This course is designed for those interested in learning Verilog and FPGAs. This course restructures the "Using FPGAs with Verilog" section to enable implementation on the Zynq board. All source code is verified on the Zynq mini 7020 (7010) board.
Q. Is there anything I need to prepare to attend the lecture?
All of the lecture content can be practiced on the Zynq mini 7020 (7010) board. Having a Zynq mini 7020 (7010) board available will be very helpful, as you can implement the code yourself and verify the results.
Q. What program tools do you use?
I'm using Vivado version 2022.1. The lecture includes instructions on installing tools, so please follow the instructions to install them.
Q. Where can I buy the Zynq mini board?
You can purchase it through domestic shopping malls or AliExpress.
Accumulated with 25 years of experience We share our know-how on utilizing Verilog.
I've worked as a developer for over 20 years at both large and small companies, and I currently run a small business. I've developed an ISP (Image Signal Processing) ASIC for CCTV, and I've developed numerous FPGA-based products, including OLED inspection equipment and DAQ (Data Acquisition System). Beyond FPGAs, I have extensive experience in software development (STM32, PIC32, AVR, ATMEGA, etc.), circuit design, and Windows programming.
💾 Please check the lecture environment.
The practice environment uses Windows OS and Vivado 2022.1.
This lecture is a text lecture in electronic document (PDF) format (approximately 110,000 characters).
Hello, I'm a student who recently purchased your course. I'm writing because I'm not sure how to utilize the course materials. Is my coding skills improving by just typing in the source code and questioning why it was coded that way? I would be very grateful if you could provide me with a specific learning method.
Hello,
Learning Verilog and FPGA is very different from learning higher-level languages (C, App, Java, etc.). Verilog and FPGA are closely related to hardware. It's about designing the hardware itself.
For example, if you think about UART communication,
in the upper Application layer, you create a serial protocol and implement communication.
In the FPGA layer, you design and implement the UART Controller itself. What is implemented in the FPGA layer is implemented in Main Clock units. It's about implementing how signals are implemented for each clock. In the Application, you implement code at the Protocol level.
To study Verilog and FPGA, it may not be very meaningful to do it simply for study purposes. The best way is to learn basic functions (you need to learn to implement code as you like and use tools) and implement something new while doing real projects.
You can think of this lecture as learning the prerequisite technologies for proceeding with real projects. To do a real project, it is very important to handle Verilog, FPGA, tools, etc. freely. You need to familiarize yourself with the process of coding with Verilog, verifying with simulation (if there is an error, modify the code and verify with simulation again), and checking the operation by uploading the implemented content to the board.
If you are somewhat familiar with the contents of this lecture, you can proceed with projects from small things in actual practice.
A recent project I worked on was implementing a Frame Converter (DDR3) in an FPGA to output image data coming from a PC via USB to LVDS. To implement these things, you need the contents of this lecture, implement DDR3 Controller, and understand LVDS.
Anyway, learning Verilog and FPGA is not easy. However, I believe that if you learn the basic functions well and acquire various technologies while working on projects in the field, you will become a good developer.
Please learn with patience.
Thank you.
First of all, thank you so much for the detailed reply.
As I take the lectures, if I have any questions or get stuck, would it be okay to ask questions here? If there is a more convenient way to contact you, such as by email, please let me know.
It's harder than I thought to find an FPGA design lecture, but this is a fun lecture that I can follow along step by step while looking at the textbook!!! In addition to this lecture, please make many, many other lectures that utilize the Zynq board~!! I want to upgrade my skills by taking all of them, gaining experience, and practicing. Thank you~!
Thank you for your review. I worked hard to make it, so this kind of review is a great help. Verilog and FPGA are not easy to learn. However, if you learn step by step, your skills will gradually improve and you will gain confidence. I hope you will become a capable developer through the lecture. Thank you ~!!
Thank you for helping me with my coding style. I think it is very important for developers to develop their own coding style. I think that using SM(State Machine) in algorithm development is very important and useful as time goes by. I recommend you to use SM a lot. Thank you ~!!