diff options
| author | Eddie Hung <eddie@fpgeh.com> | 2019-11-23 09:52:17 -0800 | 
|---|---|---|
| committer | Eddie Hung <eddie@fpgeh.com> | 2019-11-23 09:52:17 -0800 | 
| commit | 66ff0511a0e3eeae2989c2fa582c1e1c13dd75ad (patch) | |
| tree | 08ef2d40a4aab53bb60b2a0b94c75e61ba2b9573 /passes | |
| parent | 96941aacbb4e3be4901941b8c0ba4565f9919a22 (diff) | |
| download | yosys-66ff0511a0e3eeae2989c2fa582c1e1c13dd75ad.tar.gz yosys-66ff0511a0e3eeae2989c2fa582c1e1c13dd75ad.tar.bz2 yosys-66ff0511a0e3eeae2989c2fa582c1e1c13dd75ad.zip  | |
Add -set_attr option, -unpart to take attr name
Diffstat (limited to 'passes')
| -rw-r--r-- | passes/hierarchy/clkpart.cc | 35 | 
1 files changed, 25 insertions, 10 deletions
diff --git a/passes/hierarchy/clkpart.cc b/passes/hierarchy/clkpart.cc index 7cd1f4b43..acdd9b4ae 100644 --- a/passes/hierarchy/clkpart.cc +++ b/passes/hierarchy/clkpart.cc @@ -28,7 +28,7 @@ USING_YOSYS_NAMESPACE  PRIVATE_NAMESPACE_BEGIN  struct ClkPartPass : public Pass { -	ClkPartPass() : Pass("clkpart", "partition design according to clock domain") { } +	ClkPartPass() : Pass("clkpart", "partition design according to clock/enable domain") { }  	void help() YS_OVERRIDE  	{  		//   |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| @@ -38,11 +38,14 @@ struct ClkPartPass : public Pass {  		log("Partition the contents of selected modules according to the clock (and optionally\n");  		log("the enable) domains of its $_DFF* cells by extracting them into sub-modules,\n");  		log("using the `submod` command.\n"); -		log("Sub-modules created by this command are marked with a 'clkpart' attribute.\n");  		log("\n"); -		log("    -unpart\n"); -		log("        undo this operation within the selected modules, by flattening those with\n"); -		log("        a 'clkpart' attribute into those modules without this attribute.\n"); +		log("    -set_attr <name> <value>\n"); +		log("        set the specified attribute on all sub-modules created.\n"); +		log("\n"); +		log("    -unpart <name>\n"); +		log("        undo this operation within the selected modules, by flattening those\n"); +		log("        attached with an <name> attribute into those modules without this\n"); +		log("        attribute.\n");  		log("\n");  		log("    -enable\n");  		log("        also consider enable domains.\n"); @@ -50,15 +53,19 @@ struct ClkPartPass : public Pass {  	}  	bool unpart_mode, enable_mode; +	IdString attr_name; +	Const attr_value;  	void clear_flags() YS_OVERRIDE  	{  		unpart_mode = false;  		enable_mode = false; +		attr_name = IdString(); +		attr_value = Const();  	}  	void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE  	{ -		log_header(design, "Executing CLKPART pass (partition design according to clock domain).\n"); +		log_header(design, "Executing CLKPART pass (partition design according to clock/enable domain).\n");  		log_push();  		clear_flags(); @@ -66,8 +73,14 @@ struct ClkPartPass : public Pass {  		size_t argidx;  		for (argidx = 1; argidx < args.size(); argidx++)  		{ -			if (args[argidx] == "-unpart") { +			if (args[argidx] == "-set_attr" && argidx+2 < args.size()) { +				attr_name = args[argidx++]; +				attr_value = args[argidx++]; +				continue; +			} +			if (args[argidx] == "-unpart" && argidx+1 < args.size()) {  				unpart_mode = true; +				attr_name = args[argidx++];  				continue;  			}  			if (args[argidx] == "-enable") { @@ -258,15 +271,17 @@ struct ClkPartPass : public Pass {  		}  		Pass::call(design, "submod"); -		for (auto m : new_submods) -			design->module(m)->set_bool_attribute(ID(clkpart)); + +		if (!attr_name.empty()) +			for (auto m : new_submods) +				design->module(m)->attributes[attr_name] = attr_value;  	}  	void unpart(RTLIL::Design *design)  	{  		vector<Module*> keeped;  		for (auto mod : design->selected_modules()) { -			if (mod->get_bool_attribute(ID(clkpart))) +			if (mod->get_bool_attribute(attr_name))  				continue;  			if (mod->get_bool_attribute(ID(keep_hierarchy)))  				continue;  | 
