libtrellis: Allow hex in IDCODE override in ecppack Example: ecppack --idcode 0x21111043 design_out.config design.bit Signed-off-by: Jens Andersen <jens.andersen@gmail.com>
diff --git a/libtrellis/tools/ecppack.cpp b/libtrellis/tools/ecppack.cpp index dd5280c..5ae362e 100644 --- a/libtrellis/tools/ecppack.cpp +++ b/libtrellis/tools/ecppack.cpp
@@ -31,7 +31,7 @@ options.add_options()("verbose,v", "verbose output"); options.add_options()("db", po::value<std::string>(), "Trellis database folder location"); options.add_options()("usercode", po::value<uint32_t>(), "USERCODE to set in bitstream"); - options.add_options()("idcode", po::value<uint32_t>(), "IDCODE to override in bitstream"); + options.add_options()("idcode", po::value<std::string>(), "IDCODE to override in bitstream"); options.add_options()("freq", po::value<std::string>(), "config frequency in MHz"); options.add_options()("svf", po::value<std::string>(), "output SVF file"); options.add_options()("svf-rowsize", po::value<int>(), "SVF row size in bits (default 8000)"); @@ -94,8 +94,16 @@ Chip c = cc.to_chip(); if (vm.count("usercode")) c.usercode = vm["usercode"].as<uint32_t>(); - if (vm.count("idcode")) - c.info.idcode = vm["idcode"].as<uint32_t>(); + + if (vm.count("idcode")) { + string idcode_str = vm["idcode"].as<string>(); + uint32_t idcode = uint32_t(strtoul(idcode_str.c_str(), nullptr, 0)); + if (idcode == 0) { + cerr << "Invalid idcode: " << idcode_str << endl; + return 1; + } + c.info.idcode = idcode; + } map<string, string> bitopts;