From 8d37d1e08bec8c789b3e8c6ccec5e002265f74ab Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Thu, 21 Mar 2013 09:11:06 +0100 Subject: [PATCH] Added -nomap option to memory pass --- passes/memory/memory.cc | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/passes/memory/memory.cc b/passes/memory/memory.cc index 79f0770b8..6968d58ba 100644 --- a/passes/memory/memory.cc +++ b/passes/memory/memory.cc @@ -28,26 +28,40 @@ struct MemoryPass : public Pass { { // |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| log("\n"); - log(" memory [selection]\n"); + log(" memory [-nomap] [selection]\n"); log("\n"); log("This pass calls all the other memory_* passes in a useful order:\n"); log("\n"); log(" memory_dff\n"); log(" memory_collect\n"); - log(" memory_map\n"); + log(" memory_map (skipped if called with -nomap)\n"); log("\n"); - log("This converts memories to word-wide DFFs and address decoders.\n"); + log("This converts memories to word-wide DFFs and address decoders\n"); + log("or moultiport memory blocks if called with the -nomap option.\n"); log("\n"); } virtual void execute(std::vector args, RTLIL::Design *design) { + bool flag_nomap = false; + log_header("Executing MEMORY pass.\n"); log_push(); - extra_args(args, 1, design); + size_t argidx; + for (argidx = 1; argidx < args.size(); argidx++) { + if (args[argidx] == "-nomap") { + flag_nomap = true; + continue; + } + break; + } + extra_args(args, argidx, design); + Pass::call(design, "memory_dff"); Pass::call(design, "memory_collect"); - Pass::call(design, "memory_map"); + + if (!flag_nomap) + Pass::call(design, "memory_map"); log_pop(); } -- 2.30.2