mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-03 21:09:12 +00:00 
			
		
		
		
	Hook up $aldff support in various passes.
This commit is contained in:
		
							parent
							
								
									ba0723cad7
								
							
						
					
					
						commit
						e7d89e653c
					
				
					 9 changed files with 77 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -206,6 +206,7 @@ bool is_ff_cell(RTLIL::IdString type)
 | 
			
		|||
	return type.in(
 | 
			
		||||
		ID($dff), ID($dffe), ID($sdff), ID($sdffe), ID($sdffce),
 | 
			
		||||
		ID($adff), ID($adffe), ID($dffsr), ID($dffsre),
 | 
			
		||||
		ID($aldff), ID($aldffe),
 | 
			
		||||
		ID($dlatch), ID($adlatch), ID($dlatchsr), ID($sr));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1267,6 +1268,20 @@ struct CxxrtlWorker {
 | 
			
		|||
				dec_indent();
 | 
			
		||||
				f << indent << "}\n";
 | 
			
		||||
			}
 | 
			
		||||
			if (cell->hasPort(ID::ALOAD)) {
 | 
			
		||||
				// Asynchronous load
 | 
			
		||||
				f << indent << "if (";
 | 
			
		||||
				dump_sigspec_rhs(cell->getPort(ID::ALOAD));
 | 
			
		||||
				f << " == value<1> {" << cell->getParam(ID::ALOAD_POLARITY).as_bool() << "u}) {\n";
 | 
			
		||||
				inc_indent();
 | 
			
		||||
					f << indent;
 | 
			
		||||
					dump_sigspec_lhs(cell->getPort(ID::Q));
 | 
			
		||||
					f << " = ";
 | 
			
		||||
					dump_sigspec_rhs(cell->getPort(ID::AD));
 | 
			
		||||
					f << ";\n";
 | 
			
		||||
				dec_indent();
 | 
			
		||||
				f << indent << "}\n";
 | 
			
		||||
			}
 | 
			
		||||
			if (cell->hasPort(ID::SET)) {
 | 
			
		||||
				// Asynchronous set (for individual bits)
 | 
			
		||||
				f << indent;
 | 
			
		||||
| 
						 | 
				
			
			@ -2573,7 +2588,7 @@ struct CxxrtlWorker {
 | 
			
		|||
				flow.add_node(cell);
 | 
			
		||||
 | 
			
		||||
				// Various DFF cells are treated like posedge/negedge processes, see above for details.
 | 
			
		||||
				if (cell->type.in(ID($dff), ID($dffe), ID($adff), ID($adffe), ID($dffsr), ID($dffsre), ID($sdff), ID($sdffe), ID($sdffce))) {
 | 
			
		||||
				if (cell->type.in(ID($dff), ID($dffe), ID($adff), ID($adffe), ID($aldff), ID($aldffe), ID($dffsr), ID($dffsre), ID($sdff), ID($sdffe), ID($sdffce))) {
 | 
			
		||||
					if (is_valid_clock(cell->getPort(ID::CLK)))
 | 
			
		||||
						register_edge_signal(sigmap, cell->getPort(ID::CLK),
 | 
			
		||||
							cell->parameters[ID::CLK_POLARITY].as_bool() ? RTLIL::STp : RTLIL::STn);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue