This setting improves latency by remove various checks.
Use with caution! Requires read cache in FPGA design!
The common use case in VILLASfpga is that we have exactly
one write for every read and the number of exchanged signals
do not change. If this is the case, we can reuse the buffer
descriptors during reads and write, thus avoidng freeing,
reallocating and setting them up.
We set up the descriptors in start, and in write or read,
we only reset the complete bit in the buffer descriptor and
write to the tdesc register to start the DMA transfer.
Improves read/write latency by approx. 40%.
Signed-off-by: Niklas Eiling <niklas.eiling@eonerc.rwth-aachen.de>
polling HW is slow (>1us). Polling RAM is faster. This is a first implementation which only polls the first BD that is active. This is why this commit also removes the second read in nodes/fpga. This is not really useful anyways.
Signed-off-by: Niklas Eiling <niklas.eiling@eonerc.rwth-aachen.de>
additionally to configuring the card in a separate block, we need to be
able to configure the card from the node config to enable libvillas
users to use the fpga node-type.
Signed-off-by: Niklas Eiling <niklas.eiling@eonerc.rwth-aachen.de>
we need the path of the config file in the nodes in case we want to
parse a separate sub-config with relative path names. This is required
for the fpga node type to parse the ips config file from Fpga::parse.
Signed-off-by: Niklas Eiling <niklas.eiling@eonerc.rwth-aachen.de>
The various changes in fpga require a rewrite of the fpga node type.
To allow relative paths for the fpga config file, Config and SuperNode
had to be modified so they store the path of the main config file.
The syntax of the fpga node type configuration has changed - the example
config in etc has been modified accordingly.
Signed-off-by: Niklas Eiling <niklas.eiling@eonerc.rwth-aachen.de>
Include the SampleFlags::NEW_FRAME and NEW_SIMULATION flags in the
JSON serialization of samples.
Signed-off-by: Philipp Jungkamp <Philipp.Jungkamp@opal-rt.com>
SampleFlags::HAS_ALL was not including the NEW_* style flags.
The NEW_SIMULATION flag is now independent from the NEW_FRAME flag,
since the dependency made checking that flag unnecessarily difficult.
Checking a composite flag like this
if ((smp->flags & SampleFlags::NEW_SIMULATION) == SampleFlags::NEW_SIMULATION);
is more verbose than checking a simple flag like
if (smp->flags & SampleFlags::NEW_SIMULATION);
Signed-off-by: Philipp Jungkamp <Philipp.Jungkamp@opal-rt.com>