Monday, March 7, 2011

Can dynamically pluggable modules be done in VHDL?

In c (embedded) a plugin can be implemented by defining a function pointer table and an address range that the module can be loaded into.

This requires linker directive to allocate the space and define the location of the function table.

Is there a similar mechanism in HDL / VHDL or Verilog.

I guess what I am thinking is to define a block of gates in an FPGA to be for my extension feature, define the ports it will interface to and later be able to load into this block the logic to perform a certain operation.

This would have to be at runtime as the FPGA is part of the communications system that the plugin will be delivered by.

From stackoverflow
  • If you are using Xilinx FPGA's, this can be supported in some of their chips.

    See: Benefits of Partial Reconfiguration with Xilinx

    --jeffk++

    Brian Carlton : What jeffk describes isn't a Verilog or VHDL feature, but a chip feature.
  • The feature you're looking for is orthogonal to the domain of VHDL. VHDL allows modules (entities, implemented by architectures), so in theory, yes, this can work. But in practice, it really depends on your running system.

    What do you expect to gain by this? Save reconfiguration time?

    If you have a sufficiently complex board with some software running, you can easily download a fresh configuration for the FPGA from some comm channel. You can also gain small performance benefits on Xilinx, by using partial reconfiguration.

    Or maybe you can just create a configurable VHDL module that the software will configure in runtime to behave as required.

    JeffV : Hoping to get field programability with out bricking the device. The comms channel would need part of the FPGA to remain operational through out the programming phase. If something goes wrong and it gets "bricked" the actual FPGA is impossible to reach physically.
    Eli Bendersky : There are solutions for this. For example, read about Altera's Remote Upgrade theme. There is a "loader" image that's never changed, and it loads several "application" images into memory, and can update them.

0 comments:

Post a Comment