mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-30 19:22:31 +00:00 
			
		
		
		
	Implement $countones, $isunknown and $onehot{,0}
This commit is contained in:
		
							parent
							
								
									8434ba5a3b
								
							
						
					
					
						commit
						04b41ed04a
					
				
					 1 changed files with 28 additions and 0 deletions
				
			
		|  | @ -3148,6 +3148,34 @@ skip_dynamic_range_lvalue_expansion:; | |||
| 				goto apply_newNode; | ||||
| 			} | ||||
| 
 | ||||
| 			if (str == "\\$countones" || str == "\\$isunknown" || str == "\\$onehot" || str == "\\$onehot0") { | ||||
| 				if (children.size() != 1) | ||||
| 					log_file_error(filename, location.first_line, "System function %s got %d arguments, expected 1.\n", | ||||
| 							RTLIL::unescape_id(str).c_str(), int(children.size())); | ||||
| 
 | ||||
| 				AstNode *countbits = clone(); | ||||
| 				countbits->str = "\\$countbits"; | ||||
| 
 | ||||
| 				if (str == "\\$countones") { | ||||
| 					countbits->children.push_back(mkconst_bits({RTLIL::State::S1}, false)); | ||||
| 					newNode = countbits; | ||||
| 				} else if (str == "\\$isunknown") { | ||||
| 					countbits->children.push_back(mkconst_bits({RTLIL::Sx}, false)); | ||||
| 					countbits->children.push_back(mkconst_bits({RTLIL::Sz}, false)); | ||||
| 					newNode = new AstNode(AST_GT, countbits, mkconst_int(0, false)); | ||||
| 				} else if (str == "\\$onehot") { | ||||
| 					countbits->children.push_back(mkconst_bits({RTLIL::State::S1}, false)); | ||||
| 					newNode = new AstNode(AST_EQ, countbits, mkconst_int(1, false)); | ||||
| 				} else if (str == "\\$onehot0") { | ||||
| 					countbits->children.push_back(mkconst_bits({RTLIL::State::S1}, false)); | ||||
| 					newNode = new AstNode(AST_LE, countbits, mkconst_int(1, false)); | ||||
| 				} else { | ||||
| 					log_abort(); | ||||
| 				} | ||||
| 
 | ||||
| 				goto apply_newNode; | ||||
| 			} | ||||
| 
 | ||||
| 			if (current_scope.count(str) != 0 && current_scope[str]->type == AST_DPI_FUNCTION) | ||||
| 			{ | ||||
| 				AstNode *dpi_decl = current_scope[str]; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue