Added "chparam -list"
authorClifford Wolf <clifford@clifford.at>
Tue, 7 Apr 2015 17:21:30 +0000 (19:21 +0200)
committerClifford Wolf <clifford@clifford.at>
Tue, 7 Apr 2015 17:21:30 +0000 (19:21 +0200)
passes/cmds/setattr.cc

index 0a859f6f91ef533a4b47b37beb1060c25874cfc0..e4ad1f37d9eec7b0668e3aac22a2abb1f0841431 100644 (file)
@@ -192,11 +192,17 @@ struct ChparamPass : public Pass {
                log("Re-evaluate the selected modules with new parameters. String values must be\n");
                log("passed in double quotes (\").\n");
                log("\n");
+               log("\n");
+               log("    chparam -list [selection]\n");
+               log("\n");
+               log("List the available parameters of the selected modules.\n");
+               log("\n");
        }
        virtual void execute(std::vector<std::string> args, RTLIL::Design *design)
        {
                std::vector<setunset_t> setunset_list;
                dict<RTLIL::IdString, RTLIL::Const> new_parameters;
+               bool list_mode = false;
 
                size_t argidx;
                for (argidx = 1; argidx < args.size(); argidx++)
@@ -209,10 +215,25 @@ struct ChparamPass : public Pass {
                                argidx--;
                                continue;
                        }
+                       if (arg == "-list") {
+                               list_mode = true;
+                               continue;
+                       }
                        break;
                }
                extra_args(args, argidx, design);
 
+               if (list_mode) {
+                       if (!new_parameters.empty())
+                               log_cmd_error("The options -set and -list cannot be used together.\n");
+                       for (auto module : design->selected_modules()) {
+                               log("%s:\n", log_id(module));
+                               for (auto param : module->avail_parameters)
+                                       log("  %s\n", log_id(param));
+                       }
+                       return;
+               }
+
                pool<IdString> modnames, old_modnames;
                for (auto module : design->selected_modules()) {
                        if (design->selected_whole_module(module))