elaforest Profile Banner
Eric LaForest Profile
Eric LaForest

@elaforest

Followers
2K
Following
2K
Media
74
Statuses
3K

FPGA Design Consultant. he/him. Working to improve the state of digital logic design: https://t.co/7BbkhCSv3R

Toronto, Ontario
Joined November 2009
Don't wanna be here? Send us removal request.
@elaforest
Eric LaForest
6 years
I'm writing an online book: "FPGA Design Elements",.which provides a reference library of fundamental digital logic design elements. Think of it as a hardware analog to the C Standard Library ("libc") and its documentation. #FPGA.
Tweet card summary image
github.com
A self-contained online book containing a library of FPGA design modules and related coding/design guides. - laforest/FPGADesignElements
45
201
632
@elaforest
Eric LaForest
2 months
I have an open client slot for FPGA design consulting: Over 9 years, I've built control loops for nanotech research, DSP accelerators for medical, custom 10 Gb/s sensor for a satellite, video processing, industrial control, and radiation exposure testing.
1
1
8
@elaforest
Eric LaForest
2 months
Here's a common workhorse for designs: a Pipeline FIFO Buffer. Any FIFO depth is allowed, not only powers-of-2. The input-to-output latency is 2 cycles. Can function as a Circular Buffer. The tricky bit is the read output, which is registered for speed.
1
1
15
@elaforest
Eric LaForest
2 months
I have an open client slot for FPGA design consulting: Over 9 years, I've built control loops for nanotech research, DSP accelerators for medical, custom 10 Gb/s sensor for a satellite, video processing, industrial control, and radiation exposure testing.
0
2
13
@elaforest
Eric LaForest
2 months
A Pipeline Half-Buffer: A single pipeline register with ready/valid handshakes. Decouples the input and output handshakes (no combinational path), but does not allow concurrent read/write like a full Pipeline Skid Buffer.
0
1
10
@elaforest
Eric LaForest
2 months
Here's the most important pipeline building block: a Skid Buffer. It decouples two sides of a ready/valid handshake to allow back-to-back transfers without a combinational path between input and output, thus fully pipelining the path.
0
0
3
@elaforest
Eric LaForest
7 months
As I struggled today with an FPGA CAD tool's IP code generation and management, it occurred to me that I haven't needed to write HDL-generating code for years now. Modularization, along with generate blocks and parameters, has always sufficed, even for 20k+ line designs.
1
0
2
@elaforest
Eric LaForest
7 months
RT @ptrschmdtnlsn: Clock stability is essential: with a 1 GHz clock you get 1ns on your critical path to close timing. But if your clock's….
0
1
0
@elaforest
Eric LaForest
11 months
Here is a module which extends the 1-to-N Differential Deserializer by packing two consecutive differential N-bit deserialized words into one differential 2N-bit word and extending the bitslip word-alignment logic to support this double-width word.
0
0
4
@elaforest
Eric LaForest
11 months
When aligning multiple data channels, you need to pass them through variable-delay shift registers. This is where using an FPGA's built-in shift-register hardware is a must, since using LUTs+FFs ends up being the large majority of the deserializer area!.
0
0
3
@elaforest
Eric LaForest
11 months
A pipeline serial to parallel converter. Reads in multiple serial words and signals when the last input word has been read-in and a new, wider output word is ready to be read-out, in the same cycle if necessary to receive an uninterrupted serial stream.
0
1
7
@elaforest
Eric LaForest
11 months
A deserializer for differential data, with a configurable 1:N ratio, SDR or DDR data rate, and independent positive and negative data polarity input delays and deserializers, which enable bit and word alignment training later on.
0
0
8
@elaforest
Eric LaForest
11 months
An IDELAYCTRL instance for calibrating IDELAY2 blocks. This is the first step to high-speed interfaces on Series 7 AMD/Xilinx FPGAs.
0
0
5
@elaforest
Eric LaForest
11 months
now supports HTTPS! It's still a static site without cookies or Javascript or any inputs, but I was getting reports of problems with browsers, corporate networks, and Google not liking the absence of SSL. Enjoy more easily now!.
0
0
6
@elaforest
Eric LaForest
1 year
I have an open slot for a client at this time. Let's discuss your FPGA design needs! I'm a consultant doing primarily logic design on FPGAs and related software development for clients who need application-specific processing for their products.
0
1
2
@elaforest
Eric LaForest
1 year
I have an open slot for a client, starting *immediately*. Let's discuss your FPGA design needs! I'm a consultant doing primarily logic design on FPGAs and related software development for clients who need application-specific processing for their products.
0
1
13
@elaforest
Eric LaForest
1 year
In one project, I had to first configure an external device before it could generate it's own source-synchronous clock for data. This Clock Switchover module detects when the device data clock is active and stable and handles clock selection and reset.
0
0
2
@elaforest
Eric LaForest
1 year
I have an open slot for a client, starting in the last week of July. Let's discuss your needs! I'm a consultant doing logic design on FPGAs and related software devel (from kernel up to application) for clients who need application-specific processing.
0
0
1
@elaforest
Eric LaForest
1 year
We can now build a saturating accumulator with variable upper/lower limits. I used this as the Integral term of a PID controller, with dynamically adjusted limits to limit integral wind-up, which makes the PID controller recover from saturation faster.
0
0
6
@elaforest
Eric LaForest
1 year
Here's a Saturating Adder/Subtractor. The limits are any signed numbers, even dynamically variable. One use is as the final stage of a PID controller, so we can guarantee the output never wraps around and flips sign suddenly, which would be catastrophic.
0
1
5
@elaforest
Eric LaForest
1 year
With an Subtractor, we can create an Arithmetic Predicates module which computes all possible signed and unsigned comparisons of two numbers. This way we don't have to worry about getting RTL arithmetic right each time.
0
0
2