mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	Merge pull request #712 from mmicko/anlogic-support
Initial support for Anlogic FPGA
This commit is contained in:
		
						commit
						1a260ce89b
					
				
					 7 changed files with 1278 additions and 0 deletions
				
			
		
							
								
								
									
										8
									
								
								techlibs/anlogic/Makefile.inc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								techlibs/anlogic/Makefile.inc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| 
 | ||||
| OBJS += techlibs/anlogic/synth_anlogic.o | ||||
| OBJS += techlibs/anlogic/anlogic_eqn.o | ||||
| 
 | ||||
| $(eval $(call add_share_file,share/anlogic,techlibs/anlogic/cells_map.v)) | ||||
| $(eval $(call add_share_file,share/anlogic,techlibs/anlogic/arith_map.v)) | ||||
| $(eval $(call add_share_file,share/anlogic,techlibs/anlogic/cells_sim.v)) | ||||
| $(eval $(call add_share_file,share/anlogic,techlibs/anlogic/eagle_bb.v)) | ||||
							
								
								
									
										113
									
								
								techlibs/anlogic/anlogic_eqn.cc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								techlibs/anlogic/anlogic_eqn.cc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,113 @@ | |||
| /*
 | ||||
|  *  yosys -- Yosys Open SYnthesis Suite | ||||
|  * | ||||
|  *  Copyright (C) 2018  Miodrag Milanovic <miodrag@symbioticeda.com> | ||||
|  * | ||||
|  *  Permission to use, copy, modify, and/or distribute this software for any | ||||
|  *  purpose with or without fee is hereby granted, provided that the above | ||||
|  *  copyright notice and this permission notice appear in all copies. | ||||
|  * | ||||
|  *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||||
|  *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||||
|  *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||||
|  *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||||
|  *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||||
|  *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||||
|  *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| #include "kernel/yosys.h" | ||||
| #include "kernel/sigtools.h" | ||||
| 
 | ||||
| USING_YOSYS_NAMESPACE | ||||
| PRIVATE_NAMESPACE_BEGIN | ||||
| 
 | ||||
| struct AnlogicEqnPass : public Pass { | ||||
| 	AnlogicEqnPass() : Pass("anlogic_eqn", "Anlogic: Calculate equations for luts") { } | ||||
| 	void help() YS_OVERRIDE | ||||
| 	{ | ||||
| 		log("\n"); | ||||
| 		log("    anlogic_eqn [selection]\n"); | ||||
| 		log("\n"); | ||||
| 		log("Calculate equations for luts since bitstream generator depends on it.\n"); | ||||
| 		log("\n"); | ||||
| 	} | ||||
| 
 | ||||
| 	Const init2eqn(Const init, int inputs) | ||||
| 	{ | ||||
| 		std::string init_bits = init.as_string(); | ||||
| 		const char* names[] = { "A" , "B", "C", "D", "E", "F" }; | ||||
| 
 | ||||
| 		std::string eqn; | ||||
| 		int width = (int)pow(2,inputs); | ||||
| 		for(int i=0;i<width;i++) | ||||
| 		{ | ||||
| 			if (init_bits[width-1-i]=='1') | ||||
| 			{ | ||||
| 				eqn += "("; | ||||
| 				for(int j=0;j<inputs;j++) | ||||
| 				{ | ||||
| 					if (i & (1<<j)) | ||||
| 						eqn += names[j]; | ||||
| 					else | ||||
| 						eqn += std::string("~") + names[j]; | ||||
| 					 | ||||
| 					if (j!=(inputs-1)) eqn += "*"; | ||||
| 				} | ||||
| 				eqn += ")+"; | ||||
| 			} | ||||
| 		} | ||||
| 		if (eqn.empty()) return Const("0");		 | ||||
| 		eqn = eqn.substr(0, eqn.length()-1); | ||||
| 		return Const(eqn); | ||||
| 	} | ||||
| 
 | ||||
| 	void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE | ||||
| 	{ | ||||
| 		log_header(design, "Executing ANLOGIC_EQN pass (calculate equations for luts).\n"); | ||||
| 
 | ||||
| 		extra_args(args, args.size(), design); | ||||
| 
 | ||||
| 		size_t cnt = 0; | ||||
| 		for (auto module : design->selected_modules()) | ||||
| 		{ | ||||
| 			for (auto cell : module->selected_cells()) | ||||
| 			{ | ||||
| 				if (cell->type == "\\AL_MAP_LUT1") | ||||
| 				{ | ||||
| 					cell->setParam("\\EQN", init2eqn(cell->getParam("\\INIT"),1)); | ||||
| 					cnt++; | ||||
| 				} | ||||
| 				if (cell->type == "\\AL_MAP_LUT2") | ||||
| 				{ | ||||
| 					cell->setParam("\\EQN", init2eqn(cell->getParam("\\INIT"),2)); | ||||
| 					cnt++; | ||||
| 				} | ||||
| 				if (cell->type == "\\AL_MAP_LUT3") | ||||
| 				{ | ||||
| 					cell->setParam("\\EQN", init2eqn(cell->getParam("\\INIT"),3)); | ||||
| 					cnt++; | ||||
| 				} | ||||
| 				if (cell->type == "\\AL_MAP_LUT4") | ||||
| 				{ | ||||
| 					cell->setParam("\\EQN", init2eqn(cell->getParam("\\INIT"),4)); | ||||
| 					cnt++; | ||||
| 				} | ||||
| 				if (cell->type == "\\AL_MAP_LUT5") | ||||
| 				{ | ||||
| 					cell->setParam("\\EQN", init2eqn(cell->getParam("\\INIT"),5)); | ||||
| 					cnt++; | ||||
| 				} | ||||
| 				if (cell->type == "\\AL_MAP_LUT6") | ||||
| 				{ | ||||
| 					cell->setParam("\\EQN", init2eqn(cell->getParam("\\INIT"),6)); | ||||
| 					cnt++; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		log_header(design, "Updated %lu of AL_MAP_LUT* elements with equation.\n", cnt); | ||||
| 	} | ||||
| } AnlogicEqnPass; | ||||
| 
 | ||||
| PRIVATE_NAMESPACE_END | ||||
							
								
								
									
										84
									
								
								techlibs/anlogic/arith_map.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								techlibs/anlogic/arith_map.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,84 @@ | |||
| /* | ||||
|  *  yosys -- Yosys Open SYnthesis Suite | ||||
|  * | ||||
|  *  Copyright (C) 2018  Miodrag Milanovic <miodrag@symbioticeda.com> | ||||
|  *  Copyright (C) 2012  Clifford Wolf <clifford@clifford.at> | ||||
|  * | ||||
|  *  Permission to use, copy, modify, and/or distribute this software for any | ||||
|  *  purpose with or without fee is hereby granted, provided that the above | ||||
|  *  copyright notice and this permission notice appear in all copies. | ||||
|  * | ||||
|  *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||||
|  *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||||
|  *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||||
|  *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||||
|  *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||||
|  *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||||
|  *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| (* techmap_celltype = "$alu" *) | ||||
| module _80_anlogic_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; | ||||
| 
 | ||||
| 	input [A_WIDTH-1:0] A; | ||||
| 	input [B_WIDTH-1:0] B; | ||||
| 	output [Y_WIDTH-1:0] X, Y; | ||||
| 
 | ||||
| 	input CI, BI; | ||||
| 	output CO; | ||||
| 
 | ||||
| 	wire _TECHMAP_FAIL_ = Y_WIDTH <= 2; | ||||
| 
 | ||||
| 	wire [Y_WIDTH-1:0] A_buf, B_buf; | ||||
| 	\$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) A_conv (.A(A), .Y(A_buf)); | ||||
| 	\$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) B_conv (.A(B), .Y(B_buf)); | ||||
| 
 | ||||
| 	wire [Y_WIDTH-1:0] AA = A_buf; | ||||
| 	wire [Y_WIDTH-1:0] BB = BI ? ~B_buf : B_buf; | ||||
| 	wire [Y_WIDTH+1:0] COx; | ||||
| 	wire [Y_WIDTH+1:0] C = {COx, CI}; | ||||
| 
 | ||||
|     wire dummy; | ||||
| 	(* keep *) | ||||
|     AL_MAP_ADDER #( | ||||
|     	.ALUTYPE("ADD_CARRY")) | ||||
|     adder_cin  ( | ||||
|         .a(C[0]), | ||||
|         .o({COx[0], dummy}) | ||||
| 	); | ||||
| 
 | ||||
| 	genvar i; | ||||
| 	generate for (i = 0; i < Y_WIDTH; i = i + 1) begin: slice | ||||
| 	  if(i==Y_WIDTH-1) begin | ||||
| 	  		(* keep *) | ||||
| 			AL_MAP_ADDER #( | ||||
| 				.ALUTYPE("ADD")) | ||||
| 			adder_cout  ( | ||||
| 				.c(C[Y_WIDTH]), | ||||
| 				.o(COx[Y_WIDTH]) | ||||
| 			);				 | ||||
|             assign CO = COx[Y_WIDTH]; | ||||
|           end | ||||
| 	  else | ||||
| 	  begin | ||||
| 	  	(* keep *) | ||||
| 	    AL_MAP_ADDER #( | ||||
|             .ALUTYPE("ADD") | ||||
|         ) adder_i ( | ||||
|             .a(AA[i]), | ||||
|             .b(BB[i]), | ||||
|             .c(C[i+1]), | ||||
|             .o({COx[i+1],Y[i]}) | ||||
|         ); | ||||
| 		end		 | ||||
| 	  end: slice | ||||
| 	endgenerate | ||||
| 	/* End implementation */ | ||||
| 	assign X = AA ^ BB; | ||||
| endmodule | ||||
							
								
								
									
										49
									
								
								techlibs/anlogic/cells_map.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								techlibs/anlogic/cells_map.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,49 @@ | |||
| module  \$_DFF_N_ (input D, C, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(~C), .ce(1'b1), .sr(1'b0)); endmodule | ||||
| module  \$_DFF_P_ (input D, C, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C),  .ce(1'b1), .sr(1'b0)); endmodule | ||||
| 
 | ||||
| module  \$_DFFE_NN_ (input D, C, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(~C), .ce(E), .sr(1'b0)); endmodule | ||||
| module  \$_DFFE_NP_ (input D, C, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(~C), .ce(E), .sr(1'b0)); endmodule | ||||
| module  \$_DFFE_PN_ (input D, C, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C),  .ce(E), .sr(1'b0)); endmodule | ||||
| module  \$_DFFE_PP_ (input D, C, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C),  .ce(E), .sr(1'b0)); endmodule | ||||
| 
 | ||||
| module  \$_DFF_NN0_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("INV"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(~C), .ce(1'b1), .sr(R)); endmodule | ||||
| module  \$_DFF_NN1_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("SET"),   .SRMUX("INV"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(~C), .ce(1'b1), .sr(R)); endmodule | ||||
| module  \$_DFF_NP0_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"),  .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(~C), .ce(1'b1), .sr(R)); endmodule | ||||
| module  \$_DFF_NP1_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("SET"),   .SRMUX("SR"),  .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(~C), .ce(1'b1), .sr(R)); endmodule | ||||
| module  \$_DFF_PN0_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("INV"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C) , .ce(1'b1), .sr(R)); endmodule | ||||
| module  \$_DFF_PN1_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("SET"),   .SRMUX("INV"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C),  .ce(1'b1), .sr(R)); endmodule | ||||
| module  \$_DFF_PP0_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"),  .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C),  .ce(1'b1), .sr(R)); endmodule | ||||
| module  \$_DFF_PP1_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("SET"),   .SRMUX("SR"), . SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C),  .ce(1'b1), .sr(R)); endmodule | ||||
| 
 | ||||
| `ifndef NO_LUT | ||||
| module \$lut (A, Y); | ||||
|   parameter WIDTH = 0; | ||||
|   parameter LUT = 0; | ||||
| 
 | ||||
|   input [WIDTH-1:0] A; | ||||
|   output Y; | ||||
| 
 | ||||
|   generate | ||||
|     if (WIDTH == 1) begin | ||||
|       AL_MAP_LUT1 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0])); | ||||
|     end else | ||||
|     if (WIDTH == 2) begin | ||||
|       AL_MAP_LUT2 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]), .b(A[1])); | ||||
|     end else | ||||
|     if (WIDTH == 3) begin | ||||
|       AL_MAP_LUT3 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]), .b(A[1]), .c(A[2])); | ||||
|     end else | ||||
|     if (WIDTH == 4) begin | ||||
|       AL_MAP_LUT4 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]), .b(A[1]), .c(A[2]), .d(A[3])); | ||||
|     end else | ||||
|     if (WIDTH == 5) begin | ||||
|       AL_MAP_LUT5 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]), .b(A[1]), .c(A[2]), .d(A[3]), .e(A[4])); | ||||
|     end else | ||||
|     if (WIDTH == 6) begin | ||||
|       AL_MAP_LUT6 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]), .b(A[1]), .c(A[2]), .d(A[3]), .e(A[4]), .f(A[5])); | ||||
|     end else begin | ||||
|       wire _TECHMAP_FAIL_ = 1; | ||||
|     end | ||||
|   endgenerate | ||||
| endmodule | ||||
| `endif | ||||
							
								
								
									
										103
									
								
								techlibs/anlogic/cells_sim.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								techlibs/anlogic/cells_sim.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,103 @@ | |||
| module AL_MAP_SEQ ( | ||||
| 	output q, | ||||
| 	input ce, | ||||
| 	input clk, | ||||
| 	input sr, | ||||
| 	input d | ||||
| ); | ||||
| 	parameter DFFMODE = "FF"; //FF,LATCH | ||||
| 	parameter REGSET = "RESET"; //RESET/SET | ||||
| 	parameter SRMUX = "SR"; //SR/INV | ||||
| 	parameter SRMODE = "SYNC"; //SYNC/ASYNC | ||||
| endmodule | ||||
| 
 | ||||
| module AL_MAP_LUT1 ( | ||||
| 	output o, | ||||
| 	input a | ||||
| ); | ||||
| 	parameter [1:0] INIT = 2'h0; | ||||
| 	parameter EQN = "(A)"; | ||||
| 	assign Y = INIT >> A; | ||||
| endmodule | ||||
| 
 | ||||
| module AL_MAP_LUT2 ( | ||||
| 	output o, | ||||
| 	input a, | ||||
| 	input b | ||||
| ); | ||||
| 	parameter [3:0] INIT = 4'h0; | ||||
| 	parameter EQN = "(A)"; | ||||
| 	assign o = INIT >> {b, a}; | ||||
| endmodule | ||||
| 
 | ||||
| module AL_MAP_LUT3 ( | ||||
| 	output o, | ||||
| 	input a, | ||||
| 	input b, | ||||
| 	input c | ||||
| ); | ||||
| 	parameter [7:0] INIT = 8'h0; | ||||
| 	parameter EQN = "(A)"; | ||||
| 	assign o = INIT >> {c, b, a}; | ||||
| endmodule | ||||
| 
 | ||||
| module AL_MAP_LUT4 ( | ||||
| 	output o, | ||||
| 	input a, | ||||
| 	input b, | ||||
| 	input c, | ||||
| 	input d | ||||
| ); | ||||
| 	parameter [15:0] INIT = 16'h0; | ||||
| 	parameter EQN = "(A)"; | ||||
| 	assign o = INIT >> {d, c, b, a}; | ||||
| endmodule | ||||
| 
 | ||||
| module AL_MAP_LUT5 ( | ||||
| 	output o, | ||||
| 	input a, | ||||
| 	input b, | ||||
| 	input c, | ||||
| 	input d, | ||||
| 	input e | ||||
| ); | ||||
| 	parameter [31:0] INIT = 32'h0; | ||||
| 	parameter EQN = "(A)"; | ||||
| 	assign o = INIT >> {e, d, c, b, a}; | ||||
| endmodule | ||||
| 
 | ||||
| 
 | ||||
| module AL_MAP_LUT6 ( | ||||
| 	output o, | ||||
| 	input a, | ||||
| 	input b, | ||||
| 	input c, | ||||
| 	input d, | ||||
| 	input e, | ||||
| 	input f | ||||
| ); | ||||
| 	parameter [63:0] INIT = 64'h0; | ||||
| 	parameter EQN = "(A)"; | ||||
| 	assign o = INIT >> {f, e, d, c, b, a}; | ||||
| endmodule | ||||
| 
 | ||||
| module AL_MAP_ALU2B ( | ||||
|    input cin, | ||||
|    input a0, b0, c0, d0, | ||||
|    input a1, b1, c1, d1, | ||||
|    output s0, s1, cout | ||||
| ); | ||||
| 	parameter [15:0] INIT0 = 16'h0000; | ||||
| 	parameter [15:0] INIT1 = 16'h0000; | ||||
| 	parameter FUNC0 = "NO"; | ||||
| 	parameter FUNC1 = "NO"; | ||||
| endmodule | ||||
| 
 | ||||
| module AL_MAP_ADDER ( | ||||
|   input a, | ||||
|   input b, | ||||
|   input c, | ||||
|   output [1:0] o | ||||
| ); | ||||
| 	parameter ALUTYPE = "ADD"; | ||||
| endmodule | ||||
							
								
								
									
										716
									
								
								techlibs/anlogic/eagle_bb.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										716
									
								
								techlibs/anlogic/eagle_bb.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,716 @@ | |||
| // Anlogic Eagle - Blackbox cells | ||||
| // FIXME: Create sim models | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_BRAM( | ||||
|   output [8:0] doa, | ||||
|   output [8:0] dob, | ||||
|   input [8:0] dia, | ||||
|   input [8:0] dib, | ||||
|   input [2:0] csa, | ||||
|   input [2:0] csb, | ||||
|   input cea, | ||||
|   input ocea, | ||||
|   input clka, | ||||
|   input wea, | ||||
|   input rsta, | ||||
|   input ceb, | ||||
|   input oceb, | ||||
|   input clkb, | ||||
|   input web, | ||||
|   input rstb, | ||||
|   input [12:0] addra, | ||||
|   input [12:0] addrb | ||||
| ); | ||||
|   parameter MODE = "DP8K"; | ||||
|   parameter DATA_WIDTH_A = "9"; | ||||
|   parameter DATA_WIDTH_B = "9"; | ||||
|   parameter READBACK = "OFF"; | ||||
|   parameter REGMODE_A = "NOREG"; | ||||
|   parameter REGMODE_B = "NOREG"; | ||||
|   parameter WRITEMODE_A = "NORMAL"; | ||||
|   parameter WRITEMODE_B = "NORMAL"; | ||||
|   parameter GSR = "ENABLE"; | ||||
|   parameter RESETMODE = "SYNC"; | ||||
|   parameter ASYNC_RESET_RELEASE = "SYNC"; | ||||
|   parameter CEAMUX = "SIG"; | ||||
|   parameter CEBMUX = "SIG"; | ||||
|   parameter OCEAMUX = "SIG"; | ||||
|   parameter OCEBMUX = "SIG"; | ||||
|   parameter RSTAMUX = "SIG"; | ||||
|   parameter RSTBMUX = "SIG"; | ||||
|   parameter CLKAMUX = "SIG"; | ||||
|   parameter CLKBMUX = "SIG"; | ||||
|   parameter WEAMUX = "SIG"; | ||||
|   parameter WEBMUX = "SIG"; | ||||
|   parameter CSA0 = "SIG" ; | ||||
|   parameter CSA1 = "SIG" ; | ||||
|   parameter CSA2 = "SIG" ; | ||||
|   parameter CSB0 = "SIG" ; | ||||
|   parameter CSB1 = "SIG" ; | ||||
|   parameter CSB2 = "SIG" ; | ||||
|   parameter INIT_FILE = "NONE"; | ||||
|   parameter INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_BRAM32K( | ||||
|   output [15:0] doa, | ||||
|   output [15:0] dob, | ||||
|   input [15:0] dia, | ||||
|   input [15:0] dib, | ||||
|   input [10:0] addra, | ||||
|   input [10:0] addrb, | ||||
|   input bytea, | ||||
|   input bytewea, | ||||
|   input byteb, | ||||
|   input byteweb, | ||||
|   input csa, | ||||
|   input wea, | ||||
|   input csb, | ||||
|   input web, | ||||
|   input clka, | ||||
|   input rsta, | ||||
|   input clkb, | ||||
|   input rstb, | ||||
|   input ocea, | ||||
|   input oceb | ||||
| ); | ||||
|   parameter MODE = "DP16K"; | ||||
|   parameter DATA_WIDTH_A = "16"; | ||||
|   parameter DATA_WIDTH_B = "16"; | ||||
|   parameter REGMODE_A = "NOREG"; | ||||
|   parameter REGMODE_B = "NOREG"; | ||||
|   parameter WRITEMODE_A = "NORMAL"; | ||||
|   parameter WRITEMODE_B = "NORMAL"; | ||||
|   parameter SRMODE = "SYNC"; | ||||
|   parameter CSAMUX = "SIG"; | ||||
|   parameter CSBMUX = "SIG"; | ||||
|   parameter OCEAMUX = "SIG"; | ||||
|   parameter OCEBMUX = "SIG"; | ||||
|   parameter RSTAMUX = "SIG"; | ||||
|   parameter RSTBMUX = "SIG"; | ||||
|   parameter CLKAMUX = "SIG"; | ||||
|   parameter CLKBMUX = "SIG"; | ||||
|   parameter WEAMUX = "SIG"; | ||||
|   parameter WEBMUX = "SIG"; | ||||
|   parameter READBACK = "OFF"; | ||||
|   parameter INIT_FILE = ""; | ||||
|   parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_40 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_41 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_42 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_43 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_44 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_45 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_46 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_47 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_48 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_49 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_4A = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_4B = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_4C = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_4D = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_4E = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_4F = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_50 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_51 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_52 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_53 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_54 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_55 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_56 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_57 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_58 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_59 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_5A = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_5B = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_5C = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_5D = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_5E = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_5F = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_60 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_61 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_62 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_63 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_64 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_65 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_66 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_67 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_68 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_69 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_6A = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_6B = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_6C = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_6D = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_6E = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_6F = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_70 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_71 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_72 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_73 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_74 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_75 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_76 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_77 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_78 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_79 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_7A = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_7B = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_7C = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_7D = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_7E = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
|   parameter INIT_7F = 256'h0000000000000000000000000000000000000000000000000000000000000000; | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_FIFO( | ||||
|   input [8:0] dia, | ||||
|   input [8:0] dib, | ||||
|   input [2:0] csr, | ||||
|   input [2:0] csw, | ||||
|   input we, | ||||
|   input re, | ||||
|   input clkw, | ||||
|   input clkr, | ||||
|   input rst, | ||||
|   input rprst, | ||||
|   input orea, | ||||
|   input oreb, | ||||
|   output [8:0] dob, | ||||
|   output [8:0] doa, | ||||
|   output empty_flag, | ||||
|   output aempty_flag, | ||||
|   output afull_flag, | ||||
|   output full_flag | ||||
| ); | ||||
|   parameter MODE = "FIFO8K"; | ||||
|   parameter DATA_WIDTH_A = "18"; | ||||
|   parameter DATA_WIDTH_B = "18"; | ||||
|   parameter READBACK = "OFF"; | ||||
|   parameter REGMODE_A = "NOREG"; | ||||
|   parameter REGMODE_B = "NOREG"; | ||||
|   parameter [13:0] AE = 14'b00000001100000; | ||||
|   parameter [13:0] AF = 14'b01111110010000; | ||||
|   parameter [13:0] F = 14'b01111111110000; | ||||
|   parameter [13:0] AEP1 = 14'b00000001110000; | ||||
|   parameter [13:0] AFM1 = 14'b01111110000000; | ||||
|   parameter [13:0] FM1  = 14'b01111111100000;    | ||||
|   parameter [4:0] E = 5'b00000; | ||||
|   parameter [5:0] EP1 = 6'b010000; | ||||
|   parameter GSR = "ENABLE"; | ||||
|   parameter RESETMODE = "ASYNC"; | ||||
|   parameter ASYNC_RESET_RELEASE = "SYNC"; | ||||
|   parameter CEA = "SIG"; | ||||
|   parameter CEB = "SIG"; | ||||
|   parameter OCEA = "SIG"; | ||||
|   parameter OCEB = "SIG"; | ||||
|   parameter RSTA = "SIG"; | ||||
|   parameter RSTB = "SIG"; | ||||
|   parameter CLKA = "SIG"; | ||||
|   parameter CLKB = "SIG"; | ||||
|   parameter WEA = "SIG"; | ||||
|   parameter WEB = "SIG"; | ||||
|   parameter CSA0 = "SIG"; | ||||
|   parameter CSA1 = "SIG"; | ||||
|   parameter CSA2 = "SIG"; | ||||
|   parameter CSB0 = "SIG"; | ||||
|   parameter CSB1 = "SIG"; | ||||
|   parameter CSB2 = "SIG"; | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_MULT18( | ||||
|   output [17:0] acout, | ||||
|   output [17:0] bcout, | ||||
|   output [35:0] p, | ||||
|   input signeda, | ||||
|   input signedb, | ||||
|   input [17:0] a, | ||||
|   input [17:0] b, | ||||
|   input [17:0] acin, | ||||
|   input [17:0] bcin, | ||||
|   input cea, | ||||
|   input ceb, | ||||
|   input cepd, | ||||
|   input clk, | ||||
|   input rstan, | ||||
|   input rstbn, | ||||
|   input rstpdn, | ||||
|   input sourcea, | ||||
|   input sourceb   | ||||
| );  | ||||
|   parameter INPUTREGA = "ENABLE"; | ||||
|   parameter INPUTREGB = "ENABLE"; | ||||
|   parameter OUTPUTREG = "ENABLE"; | ||||
|   parameter SRMODE = "ASYNC"; | ||||
|   parameter MODE = "MULT18X18C"; | ||||
|   parameter CEAMUX = "SIG"; | ||||
|   parameter CEBMUX = "SIG"; | ||||
|   parameter CEPDMUX = "SIG"; | ||||
|   parameter RSTANMUX = "SIG"; | ||||
|   parameter RSTBNMUX = "SIG"; | ||||
|   parameter RSTPDNMUX = "SIG"; | ||||
|   parameter CLKMUX = "SIG"; | ||||
|   parameter SIGNEDAMUX = "SIG"; | ||||
|   parameter SIGNEDBMUX = "SIG"; | ||||
|   parameter SOURCEAMUX = "SIG"; | ||||
|   parameter SOURCEBMUX = "SIG"; | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_GCLK( | ||||
|   input clki, | ||||
|   output clko | ||||
| );     | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_IOCLK( | ||||
|   input clki, | ||||
|   input stop, | ||||
|   output clko | ||||
| ); | ||||
|   parameter STOPCLK = "DISABLE"; | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_CLKDIV( | ||||
|   output clkdiv1, | ||||
|   output clkdivx, | ||||
|   input clki, | ||||
|   input rst, | ||||
|   input rls | ||||
| );     | ||||
|   parameter GSR = "DISABLE"; | ||||
|   parameter DIV = 2; | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_CONFIG( | ||||
|   output jrstn, | ||||
|   output [1:0] jrti, | ||||
|   output jshift, | ||||
|   output jtck, | ||||
|   output jtdi, | ||||
|   output jupdate, | ||||
|   output [1:0] jscanen, | ||||
|   output jtms, | ||||
|   input [1:0] jtdo, | ||||
|   input [7:0] jtag8_ipa, | ||||
|   input [7:0] jtag8_ipb, | ||||
|   output done, | ||||
|   output highz, | ||||
|   output cclk, | ||||
|   input	cclk_en, | ||||
|   input gsrn_sync_clk, | ||||
|   input usr_gsrn, | ||||
|   output dna_dout, | ||||
|   input	dna_clk, | ||||
|   input	dna_din, | ||||
|   input	dna_shift_en, | ||||
|   input	mboot_rebootn, | ||||
|   input [7:0]	mboot_dynamic_addr | ||||
| );   | ||||
|   parameter MBOOT_AUTO_SEL = "DISABLE"; | ||||
|   parameter ADDR_SOURCE_SEL = "STATIC"; | ||||
|   parameter STATIC_ADDR = 8'b0; | ||||
|   parameter DONE_PERSISTN = "ENABLE"; | ||||
|   parameter INIT_PERSISTN = "ENABLE"; | ||||
|   parameter PROGRAMN_PERSISTN = "DISABLE"; | ||||
|   parameter JTAG_PERSISTN = "DISABLE"; | ||||
|   parameter GSRN_SYNC_SEL = "DISABLE"; | ||||
|   parameter FREQ = "2.5"; | ||||
|   parameter USR_GSRN_EN = "DISABLE"; | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_OSC( | ||||
|   input osc_dis, | ||||
|   output osc_clk | ||||
| );     | ||||
|   parameter STDBY = "DISABLE"; | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_PWRMNT( | ||||
|     output pwr_dwn_n, | ||||
|     input sel_pwr, | ||||
|     input pwr_mnt_pd | ||||
| ); | ||||
|   parameter MNT_LVL = 0; | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_DDR_8M_16( | ||||
|   input clk, | ||||
|   input clk_n, | ||||
|   input ras_n, | ||||
|   input cas_n, | ||||
|   input we_n, | ||||
|   input cs_n, | ||||
|   input [11:0] addr, | ||||
|   input [1:0] ba, | ||||
|   inout [15:0] dq, | ||||
|   input ldqs, | ||||
|   input udqs, | ||||
|   input ldm, | ||||
|   input udm, | ||||
|   input cke | ||||
| ); | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_SDRAM_2M_32( | ||||
|   input clk, | ||||
|   input ras_n, | ||||
|   input cas_n, | ||||
|   input we_n, | ||||
|   input [10:0] addr, | ||||
|   input [1:0] ba, | ||||
|   inout [31:0] dq, | ||||
|   input cs_n, | ||||
|   input dm0, | ||||
|   input dm1, | ||||
|   input dm2, | ||||
|   input dm3, | ||||
|   input cke | ||||
| ); | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_PAD( | ||||
|   input ipad, | ||||
|   output opad, | ||||
|   inout bpad, | ||||
|   input rst, | ||||
|   input ce, | ||||
|   input isclk, | ||||
|   input ipclk, | ||||
|   input osclk, | ||||
|   input opclk, | ||||
|   input ts, | ||||
|   input [3:0] do, | ||||
|   output di, | ||||
|   output [3:0] diq | ||||
| ); | ||||
|   parameter DEDCLK = "DISABLE"; | ||||
|   parameter GSR = "ENABLE"; | ||||
|   parameter SRMODE = "SYNC"; | ||||
|   parameter TSMUX = "1"; | ||||
|   parameter INSCLKMUX = "0"; | ||||
|   parameter INPCLKMUX = "CLK"; | ||||
|   parameter INCEMUX = "CE"; | ||||
|   parameter INRSTMUX = "0"; | ||||
|   parameter IN_REGSET = "RESET"; | ||||
|   parameter IN_DFFMODE = "NONE"; | ||||
|   parameter IDDRMODE = "OFF"; | ||||
|   parameter IDDRPIPEMODE = "NONE"; | ||||
|   parameter INDELMUX = "NODEL"; | ||||
|   parameter INDEL = 0; | ||||
|   parameter OUTSCLKMUX = "0"; | ||||
|   parameter OUTPCLKMUX = "CLK"; | ||||
|   parameter OUTCEMUX = "CE"; | ||||
|   parameter OUTRSTMUX = "0"; | ||||
|   parameter DO_REGSET = "RESET"; | ||||
|   parameter DO_DFFMODE = "NONE"; | ||||
|   parameter ODDRMODE = "OFF"; | ||||
|   parameter OUTDELMUX = "NODEL"; | ||||
|   parameter OUTDEL = 0; | ||||
|   parameter TO_REGSET = "RESET"; | ||||
|   parameter TO_DFFMODE = "NONE"; | ||||
|   parameter MODE = "IN"; | ||||
|   parameter DRIVE = "NONE"; | ||||
|   parameter IOTYPE = "LVCMOS25"; | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_MSLICE( | ||||
|   input [1:0] a, | ||||
|   input [1:0] b, | ||||
|   input [1:0] c, | ||||
|   input [1:0] d, | ||||
|   input [1:0] mi, | ||||
|   input clk, | ||||
|   input ce, | ||||
|   input sr, | ||||
|   input fci, | ||||
|   output [1:0] f, | ||||
|   output [1:0] fx, | ||||
|   output [1:0] q, | ||||
|   output fco, | ||||
|   input dpram_mode, | ||||
|   input [1:0] dpram_di, | ||||
|   input dpram_we, | ||||
|   input dpram_wclk, | ||||
|   input [3:0] dpram_waddr | ||||
| ); | ||||
|   parameter INIT_LUT0 = 16'h0000; | ||||
|   parameter INIT_LUT1 = 16'h0000; | ||||
|   parameter MODE = "LOGIC"; | ||||
|   parameter ALUTYPE = "ADD"; | ||||
|   parameter MSFXMUX = "OFF"; | ||||
|   parameter GSR = "ENABLE"; | ||||
|   parameter TESTMODE = "OFF"; | ||||
|   parameter CEMUX = "CE"; | ||||
|   parameter SRMUX = "SR"; | ||||
|   parameter CLKMUX = "CLK"; | ||||
|   parameter SRMODE = "ASYNC"; | ||||
|   parameter DFFMODE = "FF"; | ||||
|   parameter REG0_SD = "MI"; | ||||
|   parameter REG1_SD = "MI"; | ||||
|   parameter REG0_REGSET = "SET"; | ||||
|   parameter REG1_REGSET = "SET"; | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_LSLICE( | ||||
|   input [1:0] a, | ||||
|   input [1:0] b, | ||||
|   input [1:0] c, | ||||
|   input [1:0] d, | ||||
|   input [1:0] e, | ||||
|   input [1:0] mi, | ||||
|   input clk, | ||||
|   input ce, | ||||
|   input sr, | ||||
|   input fci, | ||||
|   output [1:0] f, | ||||
|   output [1:0] fx, | ||||
|   output [1:0] q, | ||||
|   output fco, | ||||
|   output [3:0] dpram_di, | ||||
|   output [3:0] dpram_waddr, | ||||
|   output dpram_wclk, | ||||
|   output dpram_we, | ||||
|   output dpram_mode | ||||
| ); | ||||
|   parameter INIT_LUTF0 = 16'h0000; | ||||
|   parameter INIT_LUTG0 = 16'h0000; | ||||
|   parameter INIT_LUTF1 = 16'h0000; | ||||
|   parameter INIT_LUTG1 = 16'h0000; | ||||
|   parameter MODE = "LOGIC"; | ||||
|   parameter GSR = "ENABLE"; | ||||
|   parameter TESTMODE = "OFF"; | ||||
|   parameter CEMUX = "1"; | ||||
|   parameter SRMUX = "SR"; | ||||
|   parameter CLKMUX = "CLK"; | ||||
|   parameter SRMODE = "ASYNC"; | ||||
|   parameter DFFMODE = "FF"; | ||||
|   parameter REG0_SD = "MI"; | ||||
|   parameter REG1_SD = "MI"; | ||||
|   parameter REG0_REGSET = "SET"; | ||||
|   parameter REG1_REGSET = "SET"; | ||||
|   parameter DEMUX0 = "D"; | ||||
|   parameter DEMUX1 = "D"; | ||||
|   parameter CMIMUX0 = "C"; | ||||
|   parameter CMIMUX1 = "C"; | ||||
|   parameter LSFMUX0 = "LUTF"; | ||||
|   parameter LSFXMUX0 = "LUTG"; | ||||
|   parameter LSFMUX1 = "LUTF"; | ||||
|   parameter LSFXMUX1 = "LUTG"; | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_PLL( | ||||
|   output [4:0] clkc, | ||||
|   output extlock, | ||||
|   input stdby, | ||||
|   input refclk, | ||||
|   input fbclk, | ||||
|   input reset, | ||||
|   output psdone, | ||||
|   input psclk, | ||||
|   input psdown, | ||||
|   input psstep, | ||||
|   input [2:0] psclksel, | ||||
|   output [7:0] do, | ||||
|   input dclk, | ||||
|   input dcs, | ||||
|   input dwe, | ||||
|   input [7:0] di, | ||||
|   input [5:0] daddr | ||||
| ); | ||||
|   parameter DYNCFG = "DISABLE"; | ||||
|   parameter IF_ESCLKSTSW = "DISABLE"; | ||||
|   parameter REFCLK_SEL = "INTERNAL"; | ||||
|   parameter FIN = "100.0000"; | ||||
|   parameter REFCLK_DIV = 1; | ||||
|   parameter FBCLK_DIV = 1; | ||||
|   parameter CLKC0_DIV = 1; | ||||
|   parameter CLKC1_DIV = 1; | ||||
|   parameter CLKC2_DIV = 1; | ||||
|   parameter CLKC3_DIV = 1; | ||||
|   parameter CLKC4_DIV = 1; | ||||
|   parameter CLKC0_ENABLE = "DISABLE"; | ||||
|   parameter CLKC1_ENABLE = "DISABLE"; | ||||
|   parameter CLKC2_ENABLE = "DISABLE"; | ||||
|   parameter CLKC3_ENABLE = "DISABLE"; | ||||
|   parameter CLKC4_ENABLE = "DISABLE"; | ||||
|   parameter CLKC0_DIV2_ENABLE = "DISABLE"; | ||||
|   parameter CLKC1_DIV2_ENABLE = "DISABLE"; | ||||
|   parameter CLKC2_DIV2_ENABLE = "DISABLE"; | ||||
|   parameter CLKC3_DIV2_ENABLE = "DISABLE"; | ||||
|   parameter CLKC4_DIV2_ENABLE = "DISABLE"; | ||||
|   parameter FEEDBK_MODE = "NORMAL"; | ||||
|   parameter FEEDBK_PATH = "VCO_PHASE_0";   | ||||
|   parameter STDBY_ENABLE = "ENABLE"; | ||||
|   parameter CLKC0_FPHASE = 0; | ||||
|   parameter CLKC1_FPHASE = 0; | ||||
|   parameter CLKC2_FPHASE = 0; | ||||
|   parameter CLKC3_FPHASE = 0; | ||||
|   parameter CLKC4_FPHASE = 0; | ||||
|   parameter CLKC0_CPHASE = 1; | ||||
|   parameter CLKC1_CPHASE = 1; | ||||
|   parameter CLKC2_CPHASE = 1; | ||||
|   parameter CLKC3_CPHASE = 1; | ||||
|   parameter CLKC4_CPHASE = 1; | ||||
|   parameter GMC_GAIN = 7; | ||||
|   parameter GMC_TEST = 14; | ||||
|   parameter ICP_CURRENT = 14; | ||||
|   parameter KVCO = 7; | ||||
|   parameter LPF_CAPACITOR = 3; | ||||
|   parameter LPF_RESISTOR = 1; | ||||
|   parameter PLLRST_ENA = "ENABLE"; | ||||
|   parameter PLLMRST_ENA = "DISABLE"; | ||||
|   parameter PLLC2RST_ENA = "DISABLE"; | ||||
|   parameter PLLC34RST_ENA = "DISABLE"; | ||||
|   parameter PREDIV_MUXC0 = "VCO"; | ||||
|   parameter PREDIV_MUXC1 = "VCO"; | ||||
|   parameter PREDIV_MUXC2 = "VCO"; | ||||
|   parameter PREDIV_MUXC3 = "VCO"; | ||||
|   parameter PREDIV_MUXC4 = "VCO"; | ||||
|   parameter ODIV_MUXC0 = "DIV"; | ||||
|   parameter ODIV_MUXC1 = "DIV"; | ||||
|   parameter ODIV_MUXC2 = "DIV"; | ||||
|   parameter ODIV_MUXC3 = "DIV"; | ||||
|   parameter ODIV_MUXC4 = "DIV"; | ||||
|   parameter FREQ_LOCK_ACCURACY = 2; | ||||
|   parameter PLL_LOCK_MODE = 0; | ||||
|   parameter INTFB_WAKE = "DISABLE"; | ||||
|   parameter DPHASE_SOURCE = "DISABLE"; | ||||
|   parameter VCO_NORESET = "DISABLE"; | ||||
|   parameter STDBY_VCO_ENA = "DISABLE"; | ||||
|   parameter NORESET = "DISABLE"; | ||||
|   parameter SYNC_ENABLE = "ENABLE"; | ||||
|   parameter DERIVE_PLL_CLOCKS = "DISABLE"; | ||||
|   parameter GEN_BASIC_CLOCK = "DISABLE"; | ||||
| endmodule | ||||
| 
 | ||||
| (* blackbox *) | ||||
| module EG_PHY_ADC( | ||||
|   input clk, | ||||
|   input pd, | ||||
|   input [2:0] s, | ||||
|   input soc, | ||||
|   output eoc, | ||||
|   output [11:0] dout | ||||
| ); | ||||
|   parameter CH0 = "DISABLE"; | ||||
|   parameter CH1 = "DISABLE"; | ||||
|   parameter CH2 = "DISABLE"; | ||||
|   parameter CH3 = "DISABLE"; | ||||
|   parameter CH4 = "DISABLE"; | ||||
|   parameter CH5 = "DISABLE"; | ||||
|   parameter CH6 = "DISABLE"; | ||||
|   parameter CH7 = "DISABLE"; | ||||
|   parameter VREF = "DISABLE"; | ||||
| endmodule | ||||
							
								
								
									
										205
									
								
								techlibs/anlogic/synth_anlogic.cc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										205
									
								
								techlibs/anlogic/synth_anlogic.cc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,205 @@ | |||
| /*
 | ||||
|  *  yosys -- Yosys Open SYnthesis Suite | ||||
|  * | ||||
|  *  Copyright (C) 2018  Miodrag Milanovic <miodrag@symbioticeda.com> | ||||
|  *  Copyright (C) 2018  Clifford Wolf <clifford@clifford.at> | ||||
|  * | ||||
|  *  Permission to use, copy, modify, and/or distribute this software for any | ||||
|  *  purpose with or without fee is hereby granted, provided that the above | ||||
|  *  copyright notice and this permission notice appear in all copies. | ||||
|  * | ||||
|  *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||||
|  *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||||
|  *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||||
|  *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||||
|  *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||||
|  *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||||
|  *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| #include "kernel/register.h" | ||||
| #include "kernel/celltypes.h" | ||||
| #include "kernel/rtlil.h" | ||||
| #include "kernel/log.h" | ||||
| 
 | ||||
| USING_YOSYS_NAMESPACE | ||||
| PRIVATE_NAMESPACE_BEGIN | ||||
| 
 | ||||
| struct SynthAnlogicPass : public ScriptPass | ||||
| { | ||||
| 	SynthAnlogicPass() : ScriptPass("synth_anlogic", "synthesis for Anlogic FPGAs") { } | ||||
| 
 | ||||
| 	void help() YS_OVERRIDE | ||||
| 	{ | ||||
| 		//   |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
 | ||||
| 		log("\n"); | ||||
| 		log("    synth_anlogic [options]\n"); | ||||
| 		log("\n"); | ||||
| 		log("This command runs synthesis for Anlogic FPGAs.\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -top <module>\n"); | ||||
| 		log("        use the specified module as top module\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -edif <file>\n"); | ||||
| 		log("        write the design to the specified EDIF file. writing of an output file\n"); | ||||
| 		log("        is omitted if this parameter is not specified.\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -json <file>\n"); | ||||
| 		log("        write the design to the specified JSON file. writing of an output file\n"); | ||||
| 		log("        is omitted if this parameter is not specified.\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -run <from_label>:<to_label>\n"); | ||||
| 		log("        only run the commands between the labels (see below). an empty\n"); | ||||
| 		log("        from label is synonymous to 'begin', and empty to label is\n"); | ||||
| 		log("        synonymous to the end of the command list.\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -noflatten\n"); | ||||
| 		log("        do not flatten design before synthesis\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -retime\n"); | ||||
| 		log("        run 'abc' with -dff option\n"); | ||||
| 		log("\n"); | ||||
| 		log("\n"); | ||||
| 		log("The following commands are executed by this synthesis command:\n"); | ||||
| 		help_script(); | ||||
| 		log("\n"); | ||||
| 	} | ||||
| 
 | ||||
| 	string top_opt, edif_file, json_file; | ||||
| 	bool flatten, retime; | ||||
| 
 | ||||
| 	void clear_flags() YS_OVERRIDE | ||||
| 	{ | ||||
| 		top_opt = "-auto-top"; | ||||
| 		edif_file = ""; | ||||
| 		json_file = ""; | ||||
| 		flatten = true; | ||||
| 		retime = false; | ||||
| 	} | ||||
| 
 | ||||
| 	void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE | ||||
| 	{ | ||||
| 		string run_from, run_to; | ||||
| 		clear_flags(); | ||||
| 
 | ||||
| 		size_t argidx; | ||||
| 		for (argidx = 1; argidx < args.size(); argidx++) | ||||
| 		{ | ||||
| 			if (args[argidx] == "-top" && argidx+1 < args.size()) { | ||||
| 				top_opt = "-top " + args[++argidx]; | ||||
| 				continue; | ||||
| 			} | ||||
| 			if (args[argidx] == "-edif" && argidx+1 < args.size()) { | ||||
| 				edif_file = args[++argidx]; | ||||
| 				continue; | ||||
| 			} | ||||
| 			if (args[argidx] == "-json" && argidx+1 < args.size()) { | ||||
| 				json_file = args[++argidx]; | ||||
| 				continue; | ||||
| 			} | ||||
| 			if (args[argidx] == "-run" && argidx+1 < args.size()) { | ||||
| 				size_t pos = args[argidx+1].find(':'); | ||||
| 				if (pos == std::string::npos) | ||||
| 					break; | ||||
| 				run_from = args[++argidx].substr(0, pos); | ||||
| 				run_to = args[argidx].substr(pos+1); | ||||
| 				continue; | ||||
| 			} | ||||
| 			if (args[argidx] == "-noflatten") { | ||||
| 				flatten = false; | ||||
| 				continue; | ||||
| 			} | ||||
| 			if (args[argidx] == "-retime") { | ||||
| 				retime = true; | ||||
| 				continue; | ||||
| 			} | ||||
| 			break; | ||||
| 		} | ||||
| 		extra_args(args, argidx, design); | ||||
| 
 | ||||
| 		if (!design->full_selection()) | ||||
| 			log_cmd_error("This comannd only operates on fully selected designs!\n"); | ||||
| 
 | ||||
| 		log_header(design, "Executing SYNTH_ANLOGIC pass.\n"); | ||||
| 		log_push(); | ||||
| 
 | ||||
| 		run_script(design, run_from, run_to); | ||||
| 
 | ||||
| 		log_pop(); | ||||
| 	} | ||||
| 
 | ||||
| 	void script() YS_OVERRIDE | ||||
| 	{ | ||||
| 		if (check_label("begin")) | ||||
| 		{ | ||||
| 			run("read_verilog -lib +/anlogic/cells_sim.v +/anlogic/eagle_bb.v"); | ||||
| 			run(stringf("hierarchy -check %s", help_mode ? "-top <top>" : top_opt.c_str())); | ||||
| 		} | ||||
| 
 | ||||
| 		if (flatten && check_label("flatten", "(unless -noflatten)")) | ||||
| 		{ | ||||
| 			run("proc"); | ||||
| 			run("flatten"); | ||||
| 			run("tribuf -logic"); | ||||
| 			run("deminout"); | ||||
| 		} | ||||
| 
 | ||||
| 		if (check_label("coarse")) | ||||
| 		{ | ||||
| 			run("synth -run coarse"); | ||||
| 		} | ||||
| 
 | ||||
| 		if (check_label("fine")) | ||||
| 		{ | ||||
| 			run("opt -fast -mux_undef -undriven -fine"); | ||||
| 			run("memory_map"); | ||||
| 			run("opt -undriven -fine"); | ||||
| 			run("techmap -map +/techmap.v -map +/anlogic/arith_map.v"); | ||||
| 			if (retime || help_mode) | ||||
| 				run("abc -dff", "(only if -retime)"); | ||||
| 		} | ||||
| 
 | ||||
| 		if (check_label("map_ffs")) | ||||
| 		{ | ||||
| 			run("dffsr2dff"); | ||||
| 			run("techmap -D NO_LUT -map +/anlogic/cells_map.v"); | ||||
| 			run("opt_expr -mux_undef"); | ||||
| 			run("simplemap"); | ||||
| 		} | ||||
| 
 | ||||
| 		if (check_label("map_luts")) | ||||
| 		{ | ||||
| 			run("abc -lut 6"); | ||||
| 			run("clean"); | ||||
| 		} | ||||
| 
 | ||||
| 		if (check_label("map_cells")) | ||||
| 		{ | ||||
| 			run("techmap -map +/anlogic/cells_map.v"); | ||||
| 			run("clean"); | ||||
| 			run("anlogic_eqn"); | ||||
| 		} | ||||
| 
 | ||||
| 		if (check_label("check")) | ||||
| 		{ | ||||
| 			run("hierarchy -check"); | ||||
| 			run("stat"); | ||||
| 			run("check -noinit"); | ||||
| 		} | ||||
| 
 | ||||
| 		if (check_label("edif")) | ||||
| 		{ | ||||
| 			if (!edif_file.empty() || help_mode) | ||||
| 				run(stringf("write_edif %s", help_mode ? "<file-name>" : edif_file.c_str())); | ||||
| 		} | ||||
| 
 | ||||
| 		if (check_label("json")) | ||||
| 		{ | ||||
| 			if (!json_file.empty() || help_mode) | ||||
| 				run(stringf("write_json %s", help_mode ? "<file-name>" : json_file.c_str())); | ||||
| 		} | ||||
| 	} | ||||
| } SynthAnlogicPass; | ||||
| 
 | ||||
| PRIVATE_NAMESPACE_END | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue