mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	Added GP_DFFS, GP_DFFR, and GP_DFFSR
This commit is contained in:
		
							parent
							
								
									456c10f16e
								
							
						
					
					
						commit
						b4bf787f10
					
				
					 4 changed files with 76 additions and 21 deletions
				
			
		|  | @ -1,20 +1,26 @@ | ||||||
| module  \$_DFF_P_ (input D, C, output Q); | module GP_DFFS(input D, CLK, nSET, output reg Q); | ||||||
| 	GP_DFF _TECHMAP_REPLACE_ ( | 	parameter [0:0] INIT = 1'bx; | ||||||
|  | 	GP_DFFSR #( | ||||||
|  | 		.INIT(INIT), | ||||||
|  | 		.SRMODE(1'b1), | ||||||
|  | 	) _TECHMAP_REPLACE_ ( | ||||||
| 		.D(D), | 		.D(D), | ||||||
| 		.Q(Q), |  | ||||||
| 		.CLK(C), | 		.CLK(C), | ||||||
| 		.nRSTZ(1'b1), | 		.nSR(nSET), | ||||||
| 		.nSETZ(1'b1) | 		.Q(Q) | ||||||
| 	); | 	); | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
| module  \$_DFFSR_PNN_ (input C, S, R, D, output Q); | module GP_DFFR(input D, CLK, nRST, output reg Q); | ||||||
| 	GP_DFF _TECHMAP_REPLACE_ ( | 	parameter [0:0] INIT = 1'bx; | ||||||
|  | 	GP_DFFSR #( | ||||||
|  | 		.INIT(INIT), | ||||||
|  | 		.SRMODE(1'b0), | ||||||
|  | 	) _TECHMAP_REPLACE_ ( | ||||||
| 		.D(D), | 		.D(D), | ||||||
| 		.Q(Q), |  | ||||||
| 		.CLK(C), | 		.CLK(C), | ||||||
| 		.nRSTZ(R), | 		.nSR(nRST), | ||||||
| 		.nSETZ(S) | 		.Q(Q) | ||||||
| 	); | 	); | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,16 +1,45 @@ | ||||||
| module GP_DFF(input D, CLK, nRSTZ, nSETZ, output reg Q); | module GP_DFF(input D, CLK, output reg Q); | ||||||
| 	parameter [0:0] INIT = 1'bx; | 	parameter [0:0] INIT = 1'bx; | ||||||
| 	initial Q = INIT; | 	initial Q = INIT; | ||||||
| 	always @(posedge CLK, negedge nRSTZ, negedge nSETZ) begin | 	always @(posedge CLK) begin | ||||||
| 		if (!nRSTZ) | 		Q <= D; | ||||||
| 			Q <= 1'b0; | 	end | ||||||
| 		else if (!nSETZ) | endmodule | ||||||
|  | 
 | ||||||
|  | module GP_DFFS(input D, CLK, nSET, output reg Q); | ||||||
|  | 	parameter [0:0] INIT = 1'bx; | ||||||
|  | 	initial Q = INIT; | ||||||
|  | 	always @(posedge CLK, negedge nSET) begin | ||||||
|  | 		if (!nSET) | ||||||
| 			Q <= 1'b1; | 			Q <= 1'b1; | ||||||
| 		else | 		else | ||||||
| 			Q <= D; | 			Q <= D; | ||||||
| 	end | 	end | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
|  | module GP_DFFR(input D, CLK, nRST, output reg Q); | ||||||
|  | 	parameter [0:0] INIT = 1'bx; | ||||||
|  | 	initial Q = INIT; | ||||||
|  | 	always @(posedge CLK, negedge nRST) begin | ||||||
|  | 		if (!nRST) | ||||||
|  | 			Q <= 1'b0; | ||||||
|  | 		else | ||||||
|  | 			Q <= D; | ||||||
|  | 	end | ||||||
|  | endmodule | ||||||
|  | 
 | ||||||
|  | module GP_DFFSR(input D, CLK, nSR, output reg Q); | ||||||
|  | 	parameter [0:0] INIT = 1'bx; | ||||||
|  | 	parameter [0:0] SRMODE = 1'bx; | ||||||
|  | 	initial Q = INIT; | ||||||
|  | 	always @(posedge CLK, negedge nSR) begin | ||||||
|  | 		if (!nSR) | ||||||
|  | 			Q <= SRMODE; | ||||||
|  | 		else | ||||||
|  | 			Q <= D; | ||||||
|  | 	end | ||||||
|  | endmodule | ||||||
|  | 
 | ||||||
| module GP_2LUT(input IN0, IN1, output OUT); | module GP_2LUT(input IN0, IN1, output OUT); | ||||||
| 	parameter [3:0] INIT = 0; | 	parameter [3:0] INIT = 0; | ||||||
| 	assign OUT = INIT[{IN1, IN0}]; | 	assign OUT = INIT[{IN1, IN0}]; | ||||||
|  | @ -25,3 +54,11 @@ module GP_4LUT(input IN0, IN1, IN2, IN3, output OUT); | ||||||
| 	parameter [15:0] INIT = 0; | 	parameter [15:0] INIT = 0; | ||||||
| 	assign OUT = INIT[{IN3, IN2, IN1, IN0}]; | 	assign OUT = INIT[{IN3, IN2, IN1, IN0}]; | ||||||
| endmodule | endmodule | ||||||
|  | 
 | ||||||
|  | module GP4_VDD(output OUT); | ||||||
|  |        assign OUT = 1; | ||||||
|  | endmodule | ||||||
|  | 
 | ||||||
|  | module GP4_VSS(output OUT); | ||||||
|  |        assign OUT = 0; | ||||||
|  | endmodule | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| library(gp_dff) { | library(gp_dff) { | ||||||
|   cell(GP_DFF_NOSR) { |   cell(GP_DFF) { | ||||||
|     area: 1; |     area: 1; | ||||||
|     ff("IQ", "IQN") { clocked_on: CLK; |     ff("IQ", "IQN") { clocked_on: CLK; | ||||||
|                   next_state: D; } |                   next_state: D; } | ||||||
|  | @ -9,18 +9,28 @@ library(gp_dff) { | ||||||
|     pin(Q) { direction: output; |     pin(Q) { direction: output; | ||||||
|               function: "IQ"; } |               function: "IQ"; } | ||||||
|   } |   } | ||||||
|   cell(GP_DFF_SR) { |   cell(GP_DFFS) { | ||||||
|     area: 1; |     area: 1; | ||||||
|     ff("IQ", "IQN") { clocked_on: CLK; |     ff("IQ", "IQN") { clocked_on: CLK; | ||||||
|                   next_state: D; |                   next_state: D; | ||||||
|                       preset: "nSETZ'"; |                       preset: "nSET'"; } | ||||||
|                        clear: "nRSTZ'"; } |  | ||||||
|     pin(CLK) { direction: input; |     pin(CLK) { direction: input; | ||||||
|                  clock: true; } |                  clock: true; } | ||||||
|     pin(D) { direction: input; } |     pin(D) { direction: input; } | ||||||
|     pin(Q) { direction: output; |     pin(Q) { direction: output; | ||||||
|               function: "IQ"; } |               function: "IQ"; } | ||||||
|     pin(nRSTZ) { direction: input; } |     pin(nSET) { direction: input; } | ||||||
|     pin(nSETZ) { direction: input; } |   } | ||||||
|  |   cell(GP_DFFR) { | ||||||
|  |     area: 1; | ||||||
|  |     ff("IQ", "IQN") { clocked_on: CLK; | ||||||
|  |                   next_state: D; | ||||||
|  |                        clear: "nRST'"; } | ||||||
|  |     pin(CLK) { direction: input; | ||||||
|  |                  clock: true; } | ||||||
|  |     pin(D) { direction: input; } | ||||||
|  |     pin(Q) { direction: output; | ||||||
|  |               function: "IQ"; } | ||||||
|  |     pin(nRST) { direction: input; } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -97,6 +97,7 @@ struct SynthGreenPAK4Pass : public Pass { | ||||||
| 		log("        clean\n"); | 		log("        clean\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    map_cells:\n"); | 		log("    map_cells:\n"); | ||||||
|  | 		log("        dfflibmap -liberty +/greenpak4/gp_dff.lib\n"); | ||||||
| 		log("        techmap -map +/greenpak4/cells_map.v\n"); | 		log("        techmap -map +/greenpak4/cells_map.v\n"); | ||||||
| 		log("        dffinit -ff GP_DFF Q INIT\n"); | 		log("        dffinit -ff GP_DFF Q INIT\n"); | ||||||
| 		log("        clean\n"); | 		log("        clean\n"); | ||||||
|  | @ -205,6 +206,7 @@ struct SynthGreenPAK4Pass : public Pass { | ||||||
| 
 | 
 | ||||||
| 		if (check_label(active, run_from, run_to, "map_cells")) | 		if (check_label(active, run_from, run_to, "map_cells")) | ||||||
| 		{ | 		{ | ||||||
|  | 			Pass::call(design, "dfflibmap -liberty +/greenpak4/gp_dff.lib"); | ||||||
| 			Pass::call(design, "techmap -map +/greenpak4/cells_map.v"); | 			Pass::call(design, "techmap -map +/greenpak4/cells_map.v"); | ||||||
| 			Pass::call(design, "dffinit -ff GP_DFF Q INIT"); | 			Pass::call(design, "dffinit -ff GP_DFF Q INIT"); | ||||||
| 			Pass::call(design, "clean"); | 			Pass::call(design, "clean"); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue