mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-28 10:19:26 +00:00 
			
		
		
		
	rtlil: represent Const strings as std::string
This commit is contained in:
		
							parent
							
								
									61ed9b6263
								
							
						
					
					
						commit
						785bd44da7
					
				
					 90 changed files with 947 additions and 643 deletions
				
			
		|  | @ -334,20 +334,20 @@ struct EdifBackend : public Backend { | |||
| 		auto add_prop = [&](IdString name, Const val) { | ||||
| 			if ((val.flags & RTLIL::CONST_FLAG_STRING) != 0) | ||||
| 				*f << stringf("\n            (property %s (string \"%s\"))", EDIF_DEF(name), val.decode_string().c_str()); | ||||
| 			else if (val.bits.size() <= 32 && RTLIL::SigSpec(val).is_fully_def()) | ||||
| 			else if (val.size() <= 32 && RTLIL::SigSpec(val).is_fully_def()) | ||||
| 				*f << stringf("\n            (property %s (integer %u))", EDIF_DEF(name), val.as_int()); | ||||
| 			else { | ||||
| 				std::string hex_string = ""; | ||||
| 				for (size_t i = 0; i < val.bits.size(); i += 4) { | ||||
| 				for (size_t i = 0; i < val.size(); i += 4) { | ||||
| 					int digit_value = 0; | ||||
| 					if (i+0 < val.bits.size() && val.bits.at(i+0) == RTLIL::State::S1) digit_value |= 1; | ||||
| 					if (i+1 < val.bits.size() && val.bits.at(i+1) == RTLIL::State::S1) digit_value |= 2; | ||||
| 					if (i+2 < val.bits.size() && val.bits.at(i+2) == RTLIL::State::S1) digit_value |= 4; | ||||
| 					if (i+3 < val.bits.size() && val.bits.at(i+3) == RTLIL::State::S1) digit_value |= 8; | ||||
| 					if (i+0 < val.size() && val.at(i+0) == RTLIL::State::S1) digit_value |= 1; | ||||
| 					if (i+1 < val.size() && val.at(i+1) == RTLIL::State::S1) digit_value |= 2; | ||||
| 					if (i+2 < val.size() && val.at(i+2) == RTLIL::State::S1) digit_value |= 4; | ||||
| 					if (i+3 < val.size() && val.at(i+3) == RTLIL::State::S1) digit_value |= 8; | ||||
| 					char digit_str[2] = { "0123456789abcdef"[digit_value], 0 }; | ||||
| 					hex_string = std::string(digit_str) + hex_string; | ||||
| 				} | ||||
| 				*f << stringf("\n            (property %s (string \"%d'h%s\"))", EDIF_DEF(name), GetSize(val.bits), hex_string.c_str()); | ||||
| 				*f << stringf("\n            (property %s (string \"%d'h%s\"))", EDIF_DEF(name), GetSize(val), hex_string.c_str()); | ||||
| 			} | ||||
| 		}; | ||||
| 		for (auto module : sorted_modules) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue