diff options
| author | Eddie Hung <eddie@fpgeh.com> | 2020-01-07 11:22:48 -0800 | 
|---|---|---|
| committer | Eddie Hung <eddie@fpgeh.com> | 2020-01-07 11:22:48 -0800 | 
| commit | baba33fbd391d31187695a8d0d9937249a472b2e (patch) | |
| tree | 6940737fc6d444545881ab2ca140a20f584399b5 | |
| parent | 738af17a26587f6f9438bfa2452e65a5911e58e8 (diff) | |
| download | yosys-baba33fbd391d31187695a8d0d9937249a472b2e.tar.gz yosys-baba33fbd391d31187695a8d0d9937249a472b2e.tar.bz2 yosys-baba33fbd391d31187695a8d0d9937249a472b2e.zip | |
read_aiger: cope with latches and POs with same name
| -rw-r--r-- | frontends/aiger/aigerparse.cc | 14 | 
1 files changed, 12 insertions, 2 deletions
| diff --git a/frontends/aiger/aigerparse.cc b/frontends/aiger/aigerparse.cc index d7367479b..04530e562 100644 --- a/frontends/aiger/aigerparse.cc +++ b/frontends/aiger/aigerparse.cc @@ -271,14 +271,23 @@ end_of_header:  			if ((c == 'i' && l1 > inputs.size()) || (c == 'l' && l1 > latches.size()) || (c == 'o' && l1 > outputs.size()))  				log_error("Line %u has invalid symbol position!\n", line_count); +			RTLIL::IdString escaped_s = stringf("\\%s", s.c_str());  			RTLIL::Wire* wire;  			if (c == 'i') wire = inputs[l1];  			else if (c == 'l') wire = latches[l1]; -			else if (c == 'o') wire = outputs[l1]; +			else if (c == 'o') { +				wire = module->wire(escaped_s); +				if (wire) { +					// Could have been renamed by a latch +					module->swap_names(wire, outputs[l1]); +					goto next; +				} +				wire = outputs[l1]; +			}  			else if (c == 'b') wire = bad_properties[l1];  			else log_abort(); -			module->rename(wire, stringf("\\%s", s.c_str())); +			module->rename(wire, escaped_s);  		}  		else if (c == 'j' || c == 'f') {  			// TODO @@ -293,6 +302,7 @@ end_of_header:  		}  		else  			log_error("Line %u: cannot interpret first character '%c'!\n", line_count, c); +next:  		std::getline(f, line); // Ignore up to start of next line  	} | 
