Search code examples
cvhdlfpgaxilinx

Configuration Management for FPGA Designs


Which configuration management tool is the best for FPGA designs, specifically Xilinx FPGA's programmed with VHDL and C for the embedded (microblaze) software?


Solution

  • I don't think it much matters what revision control tool you use -- anything that you would consider good in general will probably be OK here. I personally use Git for a sizable Verilog + software project, and I'm quite happy with it.

    What will bite you in the ass -- no matter what version control you use -- is this: The Xilinx tools don't generally respect a clean division between "input" and "output" or between (human edited) "source" and (opaque) "binary." Many of the tools like to store some state information, like a last-run time or a hash value, in their "input" files meaning that you'll get lots of false changes. Coregen does this to its .xco files, and project navigator (the main GUI) does this to its .xise files. Also, both tools have a habit of inserting or removing lines for default-valued parameters, seemingly at random.

    The biggest issue I've encountered is the work-flow with Coregen: In many cases, at least one of the following is true:

    1. You have to manually edit the HDL files produced by Coregen.
    2. The parameters that went into Coregen are stored somewhere other than the .xco file (usually in what looks like an output file).
    3. You have to copy-and-paste the output from Coregen into your top-level design.

    This means that there is no single logical source/master location for your input to the core-generating process. So even if you have the .xco file under version control, there's no expectation that the design you're running corresponds to it. If you re-generate "the same" core from its nominal inputs, you probably won't get the right outputs. And don't even think about merging.