mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-03 21:09:12 +00:00 
			
		
		
		
	sf2: suport $alu gate and ARI1 implementation
This commit is contained in:
		
							parent
							
								
									13ccdd032d
								
							
						
					
					
						commit
						c25f3ff3df
					
				
					 2 changed files with 65 additions and 2 deletions
				
			
		| 
						 | 
					@ -17,5 +17,53 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(* techmap_celltype = "$alu" *)
 | 
				
			||||||
 | 
					module \$__SF2_ALU (A, B, CI, BI, X, Y, CO);
 | 
				
			||||||
 | 
						parameter A_SIGNED = 0;
 | 
				
			||||||
 | 
						parameter B_SIGNED = 0;
 | 
				
			||||||
 | 
						parameter A_WIDTH = 1;
 | 
				
			||||||
 | 
						parameter B_WIDTH = 1;
 | 
				
			||||||
 | 
						parameter Y_WIDTH = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						(* force_downto *)
 | 
				
			||||||
 | 
						input [A_WIDTH-1:0] A;
 | 
				
			||||||
 | 
						(* force_downto *)
 | 
				
			||||||
 | 
						input [B_WIDTH-1:0] B;
 | 
				
			||||||
 | 
						(* force_downto *)
 | 
				
			||||||
 | 
						output [Y_WIDTH-1:0] X, Y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						input CI, BI;
 | 
				
			||||||
 | 
						(* force_downto *)
 | 
				
			||||||
 | 
						output [Y_WIDTH-1:0] CO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						wire _TECHMAP_FAIL_ = Y_WIDTH <= 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						(* force_downto *)
 | 
				
			||||||
 | 
						wire [Y_WIDTH-1:0] AA, BB;
 | 
				
			||||||
 | 
						\$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) A_conv (.A(A), .Y(AA));
 | 
				
			||||||
 | 
						\$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) B_conv (.A(B), .Y(BB));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						(* force_downto *)
 | 
				
			||||||
 | 
						wire [Y_WIDTH-1:0] C = {CO, CI};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						genvar i;
 | 
				
			||||||
 | 
						generate for (i = 0; i < Y_WIDTH; i = i + 1) begin:slice
 | 
				
			||||||
 | 
							ARI1 #(
 | 
				
			||||||
 | 
								// G = F1 = A[i] & (B[i]^BI)
 | 
				
			||||||
 | 
								// Y = F0 = A[i]^B[i]^BI
 | 
				
			||||||
 | 
								// P = Y
 | 
				
			||||||
 | 
								//		 ADCB
 | 
				
			||||||
 | 
								.INIT(20'b 01_11_0010_1000_1001_0110)
 | 
				
			||||||
 | 
							) carry (
 | 
				
			||||||
 | 
								.A(1'b0),
 | 
				
			||||||
 | 
								.B(AA[i]),
 | 
				
			||||||
 | 
								.C(BB[i]),
 | 
				
			||||||
 | 
								.D(BI),
 | 
				
			||||||
 | 
								.FCI(C[i]),
 | 
				
			||||||
 | 
								.Y(X[i]),
 | 
				
			||||||
 | 
								.S(Y[i]),
 | 
				
			||||||
 | 
								.FCO(CO[i])
 | 
				
			||||||
 | 
							);
 | 
				
			||||||
 | 
						end endgenerate
 | 
				
			||||||
 | 
					endmodule
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// nothing here yet
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -152,7 +152,22 @@ module SLE (
 | 
				
			||||||
	assign Q = LAT ? q_latch : q_ff;
 | 
						assign Q = LAT ? q_latch : q_ff;
 | 
				
			||||||
endmodule
 | 
					endmodule
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// module AR1
 | 
					module ARI1 (
 | 
				
			||||||
 | 
						input A, B, C, D, FCI,
 | 
				
			||||||
 | 
						output Y, S, FCO
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
						parameter [19:0] INIT = 20'h0;
 | 
				
			||||||
 | 
						wire [2:0] Fsel = {D, C, B};
 | 
				
			||||||
 | 
						wire F0 = INIT[Fsel];
 | 
				
			||||||
 | 
						wire F1 = INIT[8 + Fsel];
 | 
				
			||||||
 | 
						wire Yout = A ? F1 : F0;
 | 
				
			||||||
 | 
						assign Y = Yout;
 | 
				
			||||||
 | 
						wire S = FCI ^ Yout;
 | 
				
			||||||
 | 
						wire G = INIT[16] ? (INIT[17] ? F1 : F0) : INIT[17];
 | 
				
			||||||
 | 
						wire P = INIT[19] ? 1'b1 : (INIT[18] ? Yout : 1'b0);
 | 
				
			||||||
 | 
						assign FCO = P ? FCI : G;
 | 
				
			||||||
 | 
					endmodule
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// module FCEND_BUFF
 | 
					// module FCEND_BUFF
 | 
				
			||||||
// module FCINIT_BUFF
 | 
					// module FCINIT_BUFF
 | 
				
			||||||
// module FLASH_FREEZE
 | 
					// module FLASH_FREEZE
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue