diff --git a/fpga/common b/fpga/common index 729b877a4..90e0c3df7 160000 --- a/fpga/common +++ b/fpga/common @@ -1 +1 @@ -Subproject commit 729b877a405b3bd80205fa1c54bfedbf2f030dc2 +Subproject commit 90e0c3df70200f0eccbb3b145393f81e31e15ebb diff --git a/fpga/lib/utils.cpp b/fpga/lib/utils.cpp index 6fdede233..470210aa2 100644 --- a/fpga/lib/utils.cpp +++ b/fpga/lib/utils.cpp @@ -105,7 +105,7 @@ int fpga::ConnectString::portStringToInt(std::string &str) const } -// parses a string lik "1->2" or "1<->stdout" and configures the crossbar +// parses a string like "1->2" or "1<->stdout" and configures the crossbar accordingly void fpga::ConnectString::configCrossBar(std::shared_ptr dma, std::vector>& aurora_channels) const { diff --git a/fpga/src/villas-fpga-ctrl.cpp b/fpga/src/villas-fpga-ctrl.cpp index 2d73f7c4f..86b2d2981 100644 --- a/fpga/src/villas-fpga-ctrl.cpp +++ b/fpga/src/villas-fpga-ctrl.cpp @@ -51,9 +51,6 @@ void readFromDmaToStdOut(std::shared_ptr dma, dma->makeAccesibleFromVA(b); } - auto &mm = MemoryManager::get(); - mm.getGraph().dump("graph.dot"); - size_t cur = 0, next = 1; std::ios::sync_with_stdio(false); @@ -98,7 +95,10 @@ int main(int argc, char* argv[]) app.add_flag("--no-dma", noDma, "Do not setup DMA, only setup FPGA and Crossbar links"); std::string outputFormat = "short"; app.add_option("--output-format", outputFormat, "Output format (short, long)"); - + bool dumpGraph = false; + app.add_flag("--dump-graph", dumpGraph, "Dumps the graph of memory regions into \"graph.dot\""); + bool dumpAuroraChannels = true; + app.add_flag("--dump-aurora", dumpAuroraChannels, "Dumps the detected Aurora channels."); app.parse(argc, argv); // Logging setup @@ -133,16 +133,24 @@ int main(int argc, char* argv[]) return 1; } - for (auto aurora : aurora_channels) - aurora->dump(); + if (dumpGraph) { + auto &mm = MemoryManager::get(); + mm.getGraph().dump("graph.dot"); + } + if (dumpAuroraChannels) { + for (auto aurora : aurora_channels) + aurora->dump(); + } // Configure Crossbar switch const fpga::ConnectString parsedConnectString(connectStr); parsedConnectString.configCrossBar(dma, aurora_channels); - if (!noDma) { + if (!noDma && parsedConnectString.isDstStdout()) { auto formatter = fpga::getBufferedSampleFormatter(outputFormat, 16); readFromDmaToStdOut(std::move(dma), std::move(formatter)); + } else if (!noDma && parsedConnectString.isSrcStdin()) { + } } catch (const RuntimeError &e) { logger->error("Error: {}", e.what());