References and Reading List

Here are the sources I've used while writing the FPGA Design Elements, covering digital design, bit manipulation, elastic pipelines, and clock-domain crossing.

Digital Design

Bit Manipulation

Bit manipulation algorithms usually contain only Boolean, bit-shift, and addition operations, are often branch-free, and operate in parallel on all the bits in a word. Thus, they translate naturally to high-performance hardware. Note that many bit manipulation algorithms assume a certain word width, which affects the necessary constants.

Elastic Pipelines

The following papers are mainly useful for background and for implementation guides to pipeline branches, joins, forks, etc... Note however that in the academic literature, elastic pipelines are often expressed as valid/stop handshakes, rather than valid/ready handshakes, where "stop" is the inverse of "ready". This means parts of the diagrams have inverted logic from what it would be in valid/ready handshakes. Also, watch out for combinational paths, which aren't completely avoided in these designs: use Skid Buffers as necessary.

Clock Domain Crossing

Frankly, most writing about CDC is superficial and subtly wrong. Here is some of the best writings on the topic.

Back to FPGA Design Elements