Welcome
Welcome to cdstahl.orgCategories
-
Recent Posts
- VHDL Procedures
- Exporting Hierarchy from Vivado
- VHDL and Division vs Shifting
- Inferring Multiple BRAMs
- SSH Host-Key Setup
- Numeric_Std vs Std_Logic_Unsigned
- Creative Uses of Addition
- Sandbox, Bit Counting
- Using GIT to Manage Builds
- Mixing LFSRs
- Affine Feedback Shift Register
- Verilog’s Casex Issue
- Linear Regression
- Non-Orthogonal Basis Vectors
- Viterbi Decoder, Traceback
Archives
Meta
Category Archives: FPGA
Exporting Hierarchy from Vivado
Xilinx recently released a webpack for Vivado. This is an excellent way to start learning how to get the most out of the new features.
Posted in FPGA
Comments Off on Exporting Hierarchy from Vivado
Inferring Multiple BRAMs
The width-changing buffer is a very common type of design. It can be generated from coregen, but coregen only generates NGC files for the simple RAMs. This becomes an issue if you want something to be configurable. It also means … Continue reading
Posted in FPGA
Comments Off on Inferring Multiple BRAMs
Sandbox, Bit Counting
Bit-counting is a rare operation. This makes it a good candidate for sandboxing — it isn’t clear what the best way to express the problem will be. This article looks at four different ways to express the bit-couting operation with … Continue reading
Using GIT to Manage Builds
One issue with large FPGA projects is the long build time. With methods like SmartXplorer, Xilinx’s “build baby build” tool for trying multiple placement options, build can often take hours to complete. During a build, there is a lot an … Continue reading
Posted in FPGA
Comments Off on Using GIT to Manage Builds
Viterbi Decoder, Traceback
There are two basic ways to keep track of the best path to get to each state. These are the register-exchange, and the traceback method. The register exchange is very easy to understand, and works well for small constraint lengths. … Continue reading
Viterbi Decoder, ACS
The first part of the Viterbi Decoder is simply tracking the best path to each possible state. This is the main complex part of the viterbi decoder, as it requires several accumulators. Each ACS unit is fairly simple, but there … Continue reading
Convolutional Coding
Convolutional Coding is a form of error correction code that is fairly popular because of the fairly low decoding complexity, and because there are popular algorithms that accept soft inputs. The encoding complexity for convolutional codes is extremely low as … Continue reading
Overpipelining Predicates
A previous post discussed why overpipelining occurs. Overpipelinig was defined as adding register stages for no logicial or performance reason, but simply as a code convenience. It is a common issue with design styles that favor single clocked processes. Subexpressions … Continue reading
Misusing Simulations
Simulations are a wonderful tool for verification, and for debugging problems. There is a fine line between using simulation for debugging, and misusing simulation as a design aid. When simulation is done for debug the intent is to find things … Continue reading
Posted in FPGA, Fundamentals
Comments Off on Misusing Simulations
Deceptive DDS Tables
The direct digital synthesizer has become a fundamental block in many FPGA based designs. It is an interesting project to work on, but realistically there isn’t much need to re-write a DDS if you have access to IP from an … Continue reading