mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	Remove muxY and ffY for now
This commit is contained in:
		
							parent
							
								
									1f722b3500
								
							
						
					
					
						commit
						747690a6df
					
				
					 2 changed files with 33 additions and 35 deletions
				
			
		| 
						 | 
				
			
			@ -38,7 +38,7 @@ void pack_xilinx_dsp(xilinx_dsp_pm &pm)
 | 
			
		|||
	log("ffB:   %s\n", log_id(st.ffB, "--"));
 | 
			
		||||
	log("dsp:   %s\n", log_id(st.dsp, "--"));
 | 
			
		||||
	log("ffP:   %s\n", log_id(st.ffP, "--"));
 | 
			
		||||
	log("muxP:  %s\n", log_id(st.muxP, "--"));
 | 
			
		||||
	//log("muxP:  %s\n", log_id(st.muxP, "--"));
 | 
			
		||||
	log("sigPused: %s\n", log_signal(st.sigPused));
 | 
			
		||||
	log_module(pm.module);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -81,9 +81,9 @@ void pack_xilinx_dsp(xilinx_dsp_pm &pm)
 | 
			
		|||
		if (st.ffP) {
 | 
			
		||||
			SigSpec P = cell->getPort("\\P");
 | 
			
		||||
			SigSpec D;
 | 
			
		||||
			if (st.muxP)
 | 
			
		||||
				D = st.muxP->getPort("\\B");
 | 
			
		||||
			else
 | 
			
		||||
			//if (st.muxP)
 | 
			
		||||
			//	D = st.muxP->getPort("\\B");
 | 
			
		||||
			//else
 | 
			
		||||
				D = st.ffP->getPort("\\D");
 | 
			
		||||
			SigSpec Q = st.ffP->getPort("\\Q");
 | 
			
		||||
			P.replace(pm.sigmap(D), Q);
 | 
			
		||||
| 
						 | 
				
			
			@ -107,7 +107,7 @@ void pack_xilinx_dsp(xilinx_dsp_pm &pm)
 | 
			
		|||
			log(" ffB:%s", log_id(st.ffB));
 | 
			
		||||
 | 
			
		||||
		if (st.ffP)
 | 
			
		||||
			log(" ffY:%s", log_id(st.ffP));
 | 
			
		||||
			log(" ffP:%s", log_id(st.ffP));
 | 
			
		||||
 | 
			
		||||
		log("\n");
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,11 +47,9 @@ endcode
 | 
			
		|||
// (as opposed to being a dummy)
 | 
			
		||||
code sigPused
 | 
			
		||||
	SigSpec P = port(dsp, \P);
 | 
			
		||||
	int i;
 | 
			
		||||
	for (i = GetSize(P); i > 0; i--)
 | 
			
		||||
		if (nusers(P[i-1]) > 1)
 | 
			
		||||
			break;
 | 
			
		||||
	sigPused = P.extract(0, i).remove_const();
 | 
			
		||||
	for (int i = 0; i < GetSize(P); i++)
 | 
			
		||||
		if (P[i].wire && nusers(P[i]) > 1)
 | 
			
		||||
			sigPused.append(P[i]);
 | 
			
		||||
endcode
 | 
			
		||||
 | 
			
		||||
match ffP
 | 
			
		||||
| 
						 | 
				
			
			@ -66,33 +64,33 @@ match ffP
 | 
			
		|||
	optional
 | 
			
		||||
endmatch
 | 
			
		||||
 | 
			
		||||
// $mux cell left behind by dff2dffe
 | 
			
		||||
//   would prefer not to run 'opt_expr -mux_undef'
 | 
			
		||||
//   since that would lose information helpful for
 | 
			
		||||
//   efficient wide-mux inference
 | 
			
		||||
match muxP
 | 
			
		||||
	if !sigPused.empty() && !ffP
 | 
			
		||||
	select muxP->type.in($mux)
 | 
			
		||||
	select nusers(port(muxP, \B)) == 2
 | 
			
		||||
	select port(muxP, \A).is_fully_undef()
 | 
			
		||||
	filter param(muxP, \WIDTH).as_int() >= GetSize(sigPused)
 | 
			
		||||
	filter includes(port(muxP, \B).to_sigbit_set(), sigPused.to_sigbit_set())
 | 
			
		||||
	optional
 | 
			
		||||
endmatch
 | 
			
		||||
 | 
			
		||||
match ffY
 | 
			
		||||
	if muxP
 | 
			
		||||
	select ffY->type.in($dff, $dffe)
 | 
			
		||||
	select nusers(port(ffY, \D)) == 2
 | 
			
		||||
	// DSP48E1 does not support clock inversion
 | 
			
		||||
	select param(ffY, \CLK_POLARITY).as_bool()
 | 
			
		||||
	filter param(ffY, \WIDTH).as_int() >= GetSize(sigPused)
 | 
			
		||||
	filter includes(port(ffY, \D).to_sigbit_set(), port(muxP, \Y).to_sigbit_set())
 | 
			
		||||
endmatch
 | 
			
		||||
//// $mux cell left behind by dff2dffe
 | 
			
		||||
////   would prefer not to run 'opt_expr -mux_undef'
 | 
			
		||||
////   since that would lose information helpful for
 | 
			
		||||
////   efficient wide-mux inference
 | 
			
		||||
//match muxP
 | 
			
		||||
//	if !sigPused.empty() && !ffP
 | 
			
		||||
//	select muxP->type.in($mux)
 | 
			
		||||
//	select nusers(port(muxP, \B)) == 2
 | 
			
		||||
//	select port(muxP, \A).is_fully_undef()
 | 
			
		||||
//	filter param(muxP, \WIDTH).as_int() >= GetSize(sigPused)
 | 
			
		||||
//	filter includes(port(muxP, \B).to_sigbit_set(), sigPused.to_sigbit_set())
 | 
			
		||||
//	optional
 | 
			
		||||
//endmatch
 | 
			
		||||
//
 | 
			
		||||
//match ffY
 | 
			
		||||
//	if muxP
 | 
			
		||||
//	select ffY->type.in($dff, $dffe)
 | 
			
		||||
//	select nusers(port(ffY, \D)) == 2
 | 
			
		||||
//	// DSP48E1 does not support clock inversion
 | 
			
		||||
//	select param(ffY, \CLK_POLARITY).as_bool()
 | 
			
		||||
//	filter param(ffY, \WIDTH).as_int() >= GetSize(sigPused)
 | 
			
		||||
//	filter includes(port(ffY, \D).to_sigbit_set(), port(muxP, \Y).to_sigbit_set())
 | 
			
		||||
//endmatch
 | 
			
		||||
 | 
			
		||||
code ffP clock
 | 
			
		||||
	if (ffY)
 | 
			
		||||
		ffP = ffY;
 | 
			
		||||
//	if (ffY)
 | 
			
		||||
//		ffP = ffY;
 | 
			
		||||
 | 
			
		||||
	if (ffP) {
 | 
			
		||||
		SigBit c = port(ffP, \CLK).as_bit();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue