Some thoughts on CI in FPGA and embedded development
Marius Elveg?rd
Disiplinleder Digital ?stlandet, Lokasjonsleder Asker, Senior FPGA-utvikler hos Inventas, UVVM SG
Continuous Integration (CI) has become a major part of modern software development, and it is just as valuable for FPGA projects. A stable, working codebase is important for any FPGA project, and CI makes that possible by automatically building and testing every commit: whenever someone pushes new code to the shared repository, the pipeline compiles, runs tests, and checks for errors. And if a build fails, the team is alerted immediately, so the problem can be fixed before it grows more complicated.
A big reason why CI is so helpful is that it promotes small, frequent integrations. Rather than letting large batches of changes accumulate in separate branches, leading to “merge hell” at the end, you merge small updates on a regular basis. This is especially useful for FPGA design, where a single synthesis can be time-consuming and certain issues only become visible after simulation. Running these tasks automatically and often avoids those unwanted last-minute surprises.
We have developed HDLRegression to manage and automate HDL testbenches, and HDLRegression fits perfectly into a CI workflow because it can handle all relevant simulations and report pass/fail back to the pipeline. If something fails, it flags the build as broken, and this level of automation is important for consistently catching mistakes.
Another tool we have developed is the UVVM (Universal VHDL Verification Methodology), which fits perfectly into a CI environment. For a testbench to run effectively in CI, it must be self-checking, automatically verifying its results without any manual involvement. This means the automated system can immediately detect when a test case fails and alert the pipeline. It is easy to build self-checking testbenches that quickly catch design errors with UVVM, which improves the overall reliability of the CI process.
领英推荐
To get the most out of CI, I recommend using merge requests (or pull requests) for every change. A merge request packages your changes, triggers the pipeline, and includes a code review step before merging. This ensures your new commits are automatically built and tested, and any failures block the merge until resolved. Team members can also comment on the code, suggest improvements, and catch potential issues early. Once everyone is satisfied and the pipeline is green, the changes are safely merged into the main branch.
A practical approach to CI can be summarised by these 10 rules:
Following these principles keeps the codebase reliable and helps uncover issues before they turn into major problems. Merge requests combined with an automated CI pipeline ensure that every change undergoes proper review as well as thorough testing. This can lead to fewer integration problems for both FPGA and embedded projects, and by using a development methodology like this can build trust in your design, speed up the development process, and reduce the risk of unexpected setbacks.
#embedded #FPGA #ASIC #UVVM #HDLRegression #CI #methodology