07-28-2020 11:00 AM
Has anyone used DQMH to support Host interfacing to LabVIEW FPGA based hardware especially for one or many FPGA card systems?
07-28-2020 11:37 AM - edited 07-29-2020 02:11 AM
Well, we use DQMH in systems (PXIe) where we need to communicate with multiple FPGA targets (R-series PXIe cards). We also use DQMH on cRIOs, making use of the onboard FPGA.
Those DQMH modules that need access to the FPGA work with a subset of FPGA resources specific to their feature set. An Analog Input module, for example, will require an FPGA reference containing all AI-specific I/O etc. A module dealing with Profinet communication will require an FPGA reference that contains exactly all the I/O etc. for PN.
Seeing as any FPGA target most probably caters to more than one single module (i.e. contains code for multiple features like AIO, DIO, comms etc) and contains all the I/O and resources, we load the reference to the FPGA target(s) in one place and then use the "Dynamic FPGA Interface Cast" to cast the target reference(s) to the above mentioned module-specific references.
That way, the dependencies per module are nicely defined and encapsulated, and we can reuse those modules quite easily across systems and projects. The only downside here - where we haven't found a good solution so far - is that you must not forget to manually update all the typedef'ed dynamic FPGA references when you make changes to your FPGA program.
(edited for clarity)
DSH Pragmatic Software Development Workshops (Fab, Steve, Brian and me)
Release Automation Tools for LabVIEW (CI/CD integration with LabVIEW)
HSE Discord Server (Discuss our free and commercial tools and services)
DQMH® (Developer Experience that makes you smile )
07-28-2020 06:16 PM
This question is good timing. We are presently developing our first DQMH application that interfaces an FPGA. I don't have the answers yet, but I will report back what we come up with. The target we are using is the IC-3120, for a vision application. We are weighing up whether to have one DQMH module to handle the I/O interface, and another for handling Vision (which we might use FPGA for co-processing).