For Applications & Industries
Free Online Training Events
Free Technical Resources
Doulos Technotes contain in-depth information about a particular aspect of technology; in this case, FPGA technology. Our experts distil knowledge and experience and put it into an easy-to-read form, saving you time.
If you are new to HDLs, you'll want to look at our training for FPGA users Comprehensive VHDL.
If you are a more advanced user, our Expert VHDL training class offers expert training for FPGA users.
FPGA Technote 1. "HDL Synthesis Inference of FPGA Memories"
FPGA Technote 2. "Creating FPGA Variants using VHDL"
FPGA Technote 3. "Asynchronous Signals and Metastability"
FPGA Technote 4. "Implementing multiple configurations on Altera FPGAs" - New
"HDL Synthesis Inference of FPGA Memories"
Jonathan Bromley, Doulos
This Doulos FPGA Technote gathers into one convenient document all the information you need about how to create memory blocks in FPGAs using VHDL or Verilog.
By using VHDL or Verilog HDL to describe synthesizable memory blocks you can make your code easier to read, faster to simulate, and much more portable across tools and devices. Despite these benefits, memory inference is not a "silver bullet" and it's important to understand clearly how your RTL coding choices affect the FPGA hardware implementation. Our aim in creating this Technote has been to provide you with the information you need in a convenient, vendor-independent and accessible form.
None of the information in this document is new. It is all available in the documentation supplied by FPGA and synthesis tool vendors, and of course you can easily try out various HDL coding styles for yourself. However, in this Technote you will find it collected together for easy reference regardless of which FPGA vendor, HDL or synthesis tool you choose. The code examples provide templates for your own development, and have been shown to work across a wide variety of synthesis tools and FPGA families.
FPGA Technote Contents include:
FPGA memory architecture and applications
Background
- Kinds of embedded memory blocks
- Inference or instantiation?
- Challenges for successful memory inference in synthesis
- Impact of memory size on synthesis results
- Upsizing and downsizing FIFOs
Portable coding styles for memory synthesis
Single-port memory architectures
- RAM with asynchronous read operation
- Synchronous RAM, one read-write port
Dual-port memory architectures
- Synchronous RAM with two ports sharing a common clock
- Synchronous RAM with two ports having independent clocks
The Designs
The HDL code
- Single port RAM with asynchronous read
- Design CWAR: synchronous write, asynchronous read
- Single port fully synchronous RAM
- Design CWR: single port, write-first
- Design CRW: single port, read-first
- Design CWnR: single port, no change on write
- Dual port synchronous RAM with common clock
- Design CWR_CWR: write-first on both ports
- Design CRW_CRW: read-first on both ports
- Design CWnR_CWnR: no-change on both ports
- Design CW_CR: one write-only port, one read-only port (FIFO)
- Dual port synchronous RAM with independent clocks
- Design C0WR_C1WR: write-first on both ports
- Design C0RW_C1RW: read-first on both ports
- Design C0WnR_C1WnR: no-change on both ports
- Design C0W_C1R: one write-only port, one read-only port (FIFO)
As a taster, here's an example of a dual port synchronous RAM with independent clocks, using Verilog:
reg [W-1:0] mem [0:N-1];
...
always @(posedge ck0) begin
if (we0) begin
mem[a0] = wd0;
rd0 <= wd0;
end else begin
rd0 <= mem[a0];
end
end
always @(posedge ck1) begin
if (we1) begin
mem[a1] = wd1;
rd1 <= wd1;
end else begin
rd1 <= mem[a1];
end
end
For the VHDL version of the example above, much more information, and the code, go to download page. If it's the first time you've downloaded something from our website, we will ask you to register. To read about how we use your details, click here. On the registration form, you will be asked whether you want us to send you further information concerning other Doulos products and services in the subject area concerned.
"Creating FPGA Variants using VHDL"
Alan Fitch, Doulos
This Doulos FPGA Technote compares a number of techniques for creating variants of FPGA designs implemented in VHDL.
VHDL (VHSIC Hardware Description Language) is very popular in the FPGA community as a design entry method. However people sometimes complain that it is hard to make variant designs because VHDL lacks a text pre-processor as is found in C or Verilog.
This Technote looks at techniques for creating variants of designs implemented in VHDL and compares them – including, perhaps surprisingly, the technique of using a text pre-processor! The techniques described have also been tested in a range of tools, and one of the criteria for comparison is portability between different tools.
FPGA Technote Contents include:
Introduction
Techniques for creating design variants
Example design
Non-VHDL Techniques
Script language
Text Pre-processing
Non-VHDL Techniques Conclusion
VHDL Techniques
Constants
Generics
Varying hardware structure with generate
Varying hardware structure with defaults
Grouping settings use Records
Controlling Synthesis and Place/Route Behavior
Assignments outside VHDL code
VHDL Attributes
VHDL Meta-comments
Conclusion
Portability
Re-use
If portability does not matter to you
And Finally
A little taster: did you know you can use the GNU C pre-processor on VHDL code?
cpp –P counter.vhd.src counter.vhd
Curious what -P does? Download the full details and code from the download page. If it's the first time you've downloaded something from our website, we will ask you to register. To read about how we use your details, click here. On the registration form, you will be asked whether you want us to send you further information concerning other Doulos products and services in the subject area concerned.
"Asynchronous Signals and Metastability"
Alan Fitch, Doulos
This Doulos FPGA Technote looks at the issue of metastability, and then shows how to use the new metastability calculator in Altera®'s Quartus® II version 9 software.
You can download the Technote and code examples (VHDL and Verilog®).
FPGA Technote Contents include:
Introduction
Synchronous Design and Synchronization
Metastability
Metastability Documentation
Calculation of Metastability
Increasing the MTBF
More than one asynchronous input
Practical Example
Circuit Description
Setting up Altera Quartus II
Using Altera Quartus II for Metastability
Conculusion
Download the full details and code from the download page. If it's the first time you've downloaded something from our website, we will ask you to register. To read about how we use your details, click here. On the registration form, you will be asked whether you want us to send you further information concerning other Doulos products and services in the subject area concerned.
"Implementing multiple configurations on Altera FPGAs"
Bertrand Cuzeau, ALSE
This FPGA Technote by Altera expert Bertrand Cuzeau of ALSE demonstrates how to implement an Altera FPGA-based system that has a factory-default and a user configuration, without even using any external device!
The idea uses the "Remote Update" Megafunction available for most Altera FPGA families.
The Technote contains copyrighted material developed by the Doulos Certified Training Partner - ALSE. Doulos will not accept any claim for damages, howsoever arising, as a result of use of any information provided. This document is not endorsed by Altera.
FPGA Technote Contents include:
Introduction
Reference Documentation
The Multi-Configuration Project (Conf1)
Creating the Projects
Project Conf2
Project Conf1
Experimenting
Securing the User Configuration load
Things to remember
Demo Files are available
Conclusion
Download this Technote from the download page. If it's the first time you've downloaded something from our website, we will ask you to register. To read about how we use your details, click here. On the registration form, you will be asked whether you want us to send you further information concerning other Doulos products and services in the subject area concerned.