Hi all, As you may have seen from the 4.7-RC1 release announcements, we have a bunch of updates to the RFNoC image builder. I would like to provide some context around those.
First, we are not yet ready to ship a new version of RFNoC modtool. With the deprecation of gr-ettus as the way to ship that tool, we have a bunch of work ahead of us to integrate a new modtool into UHD, and we're not there yet. However, the image builder has had some major improvements. Many of those are simply usability improvements: You'll notice the logging output looks different, and we have tried to improve the error messages. This is, to a large extent, done by allowing custom checks within block descriptor YAMLs as well as BSP YAMLs. For example, if you leave important bus connections unconnected in an RFNoC image core file, then you will now get a warning, and must confirm that you know what you're doing if you want the image builder to proceed to build a bitfile. One thing you'll notice is that you now must use the image builder to build FPGA bitfiles, and can no longer directly build bitfiles by running commands like "make X410_X4_400". This may be annoying for people who like to build the stock images, but it makes many things simpler: Now, there is a single way (i.e., calling rfnoc_image_builder) that will make bitfiles. Besides, we no longer have to check in intermediate build artifacts (e.g., the image core auto-generated Verilog) into git, which can cause conflicts or confusion. Side note: If you don't like having install all of UHD, because you just need the image builder, run `cmake -DENABLE_LIBUHD=OFF -DENABLE_PYMOD_UTILS=ON` to just install the image builder and some other Python-based utilities. Probably the biggest new feature is the fact that in the X4x0 series, transport adapters are now part of the image core. That means that you must choose which transports you want to use in the YAML file, instead of by specifying a build target. For example, if you wanted the 10GbE version of the X410, or the 100 GbE version, you would either build the X410_X4_400 or X410_CG_400 target. Now, there is only one target (X410) but you modify the YAML file to choose a single 10 GbE, quadruple 10 GbE, or 100 GbE per QSFP port (of course, you may also leave them unconnected). The main reason this is useful is because it allows you to put custom blocks or transport adapters that use the QSFP ports into your designs. Note that on other devices than X4x0 devices, the previous behaviour is still in place. For example, on X310, you can't define the transport adapters through the YAML files. There is a downside to this feature: If you use a pre-4.7 image core file (which does not specify transport adapters), then you would end up with a bitfile that can't communicate with the outside. You may have guessed it: We added more checks to make it hard for that to happen, the image builder would give you a very obvious warning in that case. Another interesting feature is the ability to add custom Verilog modules. These also require a YAML file to describe them, but can be used to consume or write to IO ports, generate custom clocks, or whatever else you want to do. Some other random features: - Better use of parameters, which can be referenced in YAML files. For example, you can create an IO port with variable width, and make the width a parameter. - Better inclusion/exclusion of build files based on what you need (e.g., if you build a bitfile without DDC, then no DDC IP will be included) - Define IO signatures in any module. If you write a block with custom IO signatures, just include the IO signatures in the block YAML. - Custom paths for build, IP, and output. This means you don't have to write anything inside the RFNoC source tree. - The "build" directory stores all artifacts that get auto-generated during build time. For debugging, you may manually edit these files and use the --reuse option on rfnoc_image_builder to make sure your manual changes don't get overwritten. - Use inheritance to share info between similar image core files. - Separate edge files are no longer used. One item that might trigger some questions is the new "secure image core" feature. This is a response to a feature request to allow mixing proprietary and open-source blocks. Note that we are not going to use that as part of standard bitfiles: All blocks that get shipped with UHD will remain open-source and modifiable (well, as much as possible, we do use Vivado and AMD/Xilinx IP). There may be blocks in the future (not part of UHD) that make use of these secure cores. Going Forward ============ These improvements to rfnoc_image_builder are a first step to making the whole RFNoC image building process more user-friendly and less wading through code examples and trial-and-error. Part of this process will also be a renewed modtool (and also, work on the blocktool), but that's further down the line. The reason we started working on things in this order is what we perceive as the priority in how people engage in using RFNoC: There are more people interested in building custom bitfiles with standard blocks (e.g., adding an FFT, adding a filter) than there are people writing their own blocks -- but even those who do write their own blocks need to use the image builder. I'll leave it at that. This is a good place to ask questions about these updates -- I'll try and cover them! Cheers, Martin
_______________________________________________ USRP-users mailing list -- usrp-users@lists.ettus.com To unsubscribe send an email to usrp-users-le...@lists.ettus.com