Course: Source-synchronous data bus: VHDL design and timing constraints for high-speed FPGA interfaces

Learn to design and implement high-speed source-synchronous parallel data buses in FPGAs using VHDL.

Category: Tags: , ,

Description

This course teaches how to design and implement high-speed source-synchronous parallel data buses in FPGAs using VHDL. You will gain hands-on experience with timing constraints and experiment with data sampling techniques.

In the course, we create an FPGA sender that produces an output bus consisting of seven parallel data wires and an associated clock signal on the last of the eight pins. Because the bus speed is close to the system clock of the receiver FPGA, asynchronous sampling techniques won’t work. To solve that problem, we use the incoming DQS clock to sample the DQ data signals, and we need to skew the data signals relative to the clock edge using IDELAY elements in the IO buffers in the FPGA.

We use two FPGA boards in this course, one as the sender and the other as the receiver. However, you can use a single board for the experiments by implementing the sender and receiver modules in the same FPGA and routing the output pins to some input pins using jumper wires.

This course is only available in the VHDLwhiz Membership.

The membership subscription gives you access to this and many other courses and VHDL resources.

You pay monthly to access the membership and can cancel the automatic renewal anytime. There is no lock-in period or hidden fees.

Hardware used in the course

Software used in the course

I am using Windows 11 in the course. All the other software is available for free for Windows and Linux:

Course outline

Number of lessons:
13
Average video duration:
13m08s
Total video duration:
2h50m

The overview below shows the lessons in this course.

video lesson icon/default Created with Sketch.

1 - Introduction

Welcome to the course! Get ready to experiment with high-speed data buses.

video lesson icon/default Created with Sketch.

2 - Generator module

Let's start by creating a VHDL module for the sender FPGA that generates known data patterns for easy verification on the receiver side.

video lesson icon/default Created with Sketch.

3 - Receiver module

The receiver module will sample and check the incoming DQ data signals on the rising edge of the DQS clock. We'll first attempt to treat it as an asynchronous input bus.

video lesson icon/default Created with Sketch.

4 - iCEstick generator implementation

We'll implement the generator module on the Lattice iCEstick FPGA board. It will act as the sender on the test interface.

video lesson icon/default Created with Sketch.

5 - Program the iCEstick and check using a logic analyzer

Let's connect a logic analyzer to the iCEstick board to see if we can sample and check the data before completing the receiver FPGA.

video lesson icon/default Created with Sketch.

6 - Arty S7 asynchronous receiver implementation

We'll implement the receiver module on the Arty S7 FPGA development board. It will act as the receiver for the test interface.

video lesson icon/default Created with Sketch.

7 - Asynchronous receiver test

Now, we'll connect the two FPGAs and see if the asynchronous receiver approach works well.

video lesson icon/default Created with Sketch.

8 - Source-synchronous receiver module

Let's convert the receiver module to a source-synchronous design by sending DQS to the clock input on the sampling flip-flops.

video lesson icon/default Created with Sketch.

9 - Source-synchronous Vivado implementation

We need to make some changes to the top module's pin assignments and constraints to make it work with the source-synchronous receiver module.

video lesson icon/default Created with Sketch.

10 - Testing without IDELAYs

The first test of the new receiver FPGA implementation will reveal if we have timing issues due to setup and hold time violations.

video lesson icon/default Created with Sketch.

11 - Using IDELAY2s to skew the data signals

We'll use IDELAY2 elements in the Spartan-7 FPGAs IOBs to skew DQ relative to DQS to sample the data when it's stable.

video lesson icon/default Created with Sketch.

12 - Testing with variable IDELAYs

Let's test the new implementation using IDELAY2 elements on the data input pins of the interface.

video lesson icon/default Created with Sketch.

13 - Increasing the speed of the interface

Now that we have the source-synchronous bus design working let's fine-tune the timing constraints and increase the clock speed of the interface.

This course is only available in the VHDLwhiz Membership.

The membership subscription gives you access to this and many other courses and VHDL resources.

You pay monthly to access the membership and can cancel the automatic renewal anytime. There is no lock-in period or hidden fees.

Reviews

There are no reviews yet.

Be the first to review “Course: Source-synchronous data bus: VHDL design and timing constraints for high-speed FPGA interfaces”

Your email address will not be published. Required fields are marked *