mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 13:29:12 +00:00 
			
		
		
		
	Add "dffinit -strinit high low"
On some platforms the string to initialize DFF might not be "high" and "low", e.g. with Anlogic TD it's "SET" and "RESET". Add a "-strinit" parameter for dffinit to allow specify the strings used for high and low. Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
This commit is contained in:
		
							parent
							
								
									847fd36077
								
							
						
					
					
						commit
						fec8b3c81f
					
				
					 1 changed files with 16 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -43,6 +43,11 @@ struct DffinitPass : public Pass {
 | 
			
		|||
		log("        initial value of 1 or 0. (multi-bit values are not supported in this\n");
 | 
			
		||||
		log("        mode.)\n");
 | 
			
		||||
		log("\n");
 | 
			
		||||
		log("    -strinit <string for high> <string for low> \n");
 | 
			
		||||
		log("        use string values in the command line to represent a single-bit\n");
 | 
			
		||||
		log("        initial value of 1 or 0. (multi-bit values are not supported in this\n");
 | 
			
		||||
		log("        mode.)\n");
 | 
			
		||||
		log("\n");
 | 
			
		||||
	}
 | 
			
		||||
	void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -50,11 +55,20 @@ struct DffinitPass : public Pass {
 | 
			
		|||
 | 
			
		||||
		dict<IdString, dict<IdString, IdString>> ff_types;
 | 
			
		||||
		bool highlow_mode = false;
 | 
			
		||||
		std::string high_string, low_string;
 | 
			
		||||
 | 
			
		||||
		size_t argidx;
 | 
			
		||||
		for (argidx = 1; argidx < args.size(); argidx++) {
 | 
			
		||||
			if (args[argidx] == "-highlow") {
 | 
			
		||||
				highlow_mode = true;
 | 
			
		||||
				high_string = "high";
 | 
			
		||||
				low_string = "low";
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			if (args[argidx] == "-strinit" && argidx+2 < args.size()) {
 | 
			
		||||
				highlow_mode = true;
 | 
			
		||||
				high_string = args[++argidx];
 | 
			
		||||
				low_string = args[++argidx];
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			if (args[argidx] == "-ff" && argidx+3 < args.size()) {
 | 
			
		||||
| 
						 | 
				
			
			@ -121,9 +135,9 @@ struct DffinitPass : public Pass {
 | 
			
		|||
							log_error("Multi-bit init value for %s.%s.%s is incompatible with -highlow mode.\n",
 | 
			
		||||
									log_id(module), log_id(cell), log_id(it.second));
 | 
			
		||||
						if (value[0] == State::S1)
 | 
			
		||||
							value = Const("high");
 | 
			
		||||
							value = Const(high_string);
 | 
			
		||||
						else
 | 
			
		||||
							value = Const("low");
 | 
			
		||||
							value = Const(low_string);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					log("Setting %s.%s.%s (port=%s, net=%s) to %s.\n", log_id(module), log_id(cell), log_id(it.second),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue