mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	Populate generate for xilinx_srl.fixed pattern
This commit is contained in:
		
							parent
							
								
									cf9e017127
								
							
						
					
					
						commit
						e574edc3e9
					
				
					 1 changed files with 54 additions and 22 deletions
				
			
		|  | @ -18,22 +18,46 @@ match first | |||
| 	select !first->type.in(\FDRE) || !first->hasParam(\IS_D_INVERTED) || !param(first, \IS_D_INVERTED).as_bool() | ||||
| 	select !first->type.in(\FDRE, \FDRE_1) || port(first, \R) == State::S0 | ||||
| 	filter !non_first_cells.count(first) | ||||
| //generate | ||||
| //	SigSpec A = module->addWire(NEW_ID); | ||||
| //	SigSpec B = module->addWire(NEW_ID); | ||||
| //	SigSpec Y = module->addWire(NEW_ID); | ||||
| //	switch (rng(3)) | ||||
| //	{ | ||||
| //	case 0: | ||||
| //		module->addAndGate(NEW_ID, A, B, Y); | ||||
| //		break; | ||||
| //	case 1: | ||||
| //		module->addOrGate(NEW_ID, A, B, Y); | ||||
| //		break; | ||||
| //	case 2: | ||||
| //		module->addXorGate(NEW_ID, A, B, Y); | ||||
| //		break; | ||||
| //	} | ||||
| generate | ||||
| 	SigSpec C = module->addWire(NEW_ID); | ||||
| 	SigSpec D = module->addWire(NEW_ID); | ||||
| 	SigSpec Q = module->addWire(NEW_ID); | ||||
| 	auto r = rng(8); | ||||
| 	Cell* cell; | ||||
| 	switch (r) | ||||
| 	{ | ||||
| 	case 0: | ||||
| 	case 1: | ||||
| 	case 2: | ||||
| 	case 3: | ||||
| 		cell = module->addCell(NEW_ID, \FDRE); | ||||
| 		if (r & 1) | ||||
| 			cell->setPort(\R, State::S1); | ||||
| 		else | ||||
| 			cell->setPort(\R, State::S0); | ||||
| 		if (r & 2) | ||||
| 			cell->setPort(\CE, State::S1); | ||||
| 		else | ||||
| 			cell->setPort(\CE, State::S0); | ||||
| 		break; | ||||
| 	case 4: | ||||
| 		cell = module->addCell(NEW_ID, $_DFF_N_); | ||||
| 		break; | ||||
| 	case 5: | ||||
| 	case 6: | ||||
| 		cell = module->addCell(NEW_ID, $_DFFE_PP_); | ||||
| 		if (r & 1) | ||||
| 			cell->setPort(\E, State::S1); | ||||
| 		else | ||||
| 			cell->setPort(\E, State::S0); | ||||
| 		break; | ||||
| 	case 7: | ||||
| 		cell = module->addCell(NEW_ID, \foobar); | ||||
| 		break; | ||||
| 	} | ||||
| 	cell->setPort(\C, C); | ||||
| 	cell->setPort(\D, D); | ||||
| 	cell->setPort(\Q, Q); | ||||
| endmatch | ||||
| 
 | ||||
| code clk_port en_port | ||||
|  | @ -126,12 +150,20 @@ match next | |||
| 	filter !next->type.in(\FDRE) || !first->hasParam(\IS_D_INVERTED) || (next->hasParam(\IS_D_INVERTED) && param(next, \IS_D_INVERTED).as_bool() == param(first, \IS_D_INVERTED).as_bool()) | ||||
| 	filter !next->type.in(\FDRE) || !first->hasParam(\IS_R_INVERTED) || (next->hasParam(\IS_R_INVERTED) && param(next, \IS_R_INVERTED).as_bool() == param(first, \IS_R_INVERTED).as_bool()) | ||||
| 	filter !next->type.in(\FDRE, \FDRE_1) || port(next, \R) == port(first, \R) | ||||
| //generate 10 | ||||
| //	SigSpec A = module->addWire(NEW_ID); | ||||
| //	SigSpec B = module->addWire(NEW_ID); | ||||
| //	SigSpec Y = port(chain.back().first, chain.back().second); | ||||
| //	Cell *c = module->addAndGate(NEW_ID, A, B, Y); | ||||
| //	c->type = chain.back().first->type; | ||||
| generate 10 | ||||
| 	SigSpec C = chain.back()->getPort(\C); | ||||
| 	SigSpec D = module->addWire(NEW_ID); | ||||
| 	SigSpec Q = chain.back()->getPort(\D); | ||||
| 	Cell *cell = module->addCell(NEW_ID, chain.back()->type); | ||||
| 	cell->setPort(\C, C); | ||||
| 	cell->setPort(\D, D); | ||||
| 	cell->setPort(\Q, Q); | ||||
| 	if (cell->type == \FDRE) { | ||||
| 		cell->setPort(\R, chain.back()->getPort(\R)); | ||||
| 		cell->setPort(\CE, chain.back()->getPort(\CE)); | ||||
| 	} | ||||
| 	else if (cell->type == $_DFFE_PP_) | ||||
| 		cell->setPort(\E, chain.back()->getPort(\E)); | ||||
| endmatch | ||||
| 
 | ||||
| code | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue