diff options
| author | Clifford Wolf <clifford@clifford.at> | 2019-03-21 22:19:17 +0100 | 
|---|---|---|
| committer | Clifford Wolf <clifford@clifford.at> | 2019-03-21 22:21:17 +0100 | 
| commit | 638be461c3a6d33aa294700249ee0bc27da69403 (patch) | |
| tree | d56b3b65b8b2c5b5060565a01c0b0b125b4d2e65 /frontends | |
| parent | da42f10765bafe89892aebdf8eeb672282d7ee34 (diff) | |
| download | yosys-638be461c3a6d33aa294700249ee0bc27da69403.tar.gz yosys-638be461c3a6d33aa294700249ee0bc27da69403.tar.bz2 yosys-638be461c3a6d33aa294700249ee0bc27da69403.zip  | |
Fix mem2reg handling of memories with upto data ports, fixes #888
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'frontends')
| -rw-r--r-- | frontends/ast/simplify.cc | 11 | 
1 files changed, 10 insertions, 1 deletions
diff --git a/frontends/ast/simplify.cc b/frontends/ast/simplify.cc index d525c6b8a..63b71b800 100644 --- a/frontends/ast/simplify.cc +++ b/frontends/ast/simplify.cc @@ -138,9 +138,15 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,  				int mem_width, mem_size, addr_bits;  				node->meminfo(mem_width, mem_size, addr_bits); +				int data_range_left = node->children[0]->range_left; +				int data_range_right = node->children[0]->range_right; + +				if (node->children[0]->range_swapped) +					std::swap(data_range_left, data_range_right); +  				for (int i = 0; i < mem_size; i++) {  					AstNode *reg = new AstNode(AST_WIRE, new AstNode(AST_RANGE, -							mkconst_int(mem_width-1, true), mkconst_int(0, true))); +							mkconst_int(data_range_left, true), mkconst_int(data_range_right, true)));  					reg->str = stringf("%s[%d]", node->str.c_str(), i);  					reg->is_reg = true;  					reg->is_signed = node->is_signed; @@ -976,6 +982,9 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,  		int data_range_left = id2ast->children[0]->range_left;  		int data_range_right = id2ast->children[0]->range_right; +		if (id2ast->children[0]->range_swapped) +			std::swap(data_range_left, data_range_right); +  		std::stringstream sstr;  		sstr << "$mem2bits$" << str << "$" << filename << ":" << linenum << "$" << (autoidx++);  		std::string wire_id = sstr.str();  | 
