module GP_DFFS(input D, CLK, nSET, output reg Q); parameter [0:0] INIT = 1'bx; GP_DFFSR #( .INIT(INIT), .SRMODE(1'b1), ) _TECHMAP_REPLACE_ ( .D(D), .CLK(CLK), .nSR(nSET), .Q(Q) ); endmodule module GP_DFFR(input D, CLK, nRST, output reg Q); parameter [0:0] INIT = 1'bx; GP_DFFSR #( .INIT(INIT), .SRMODE(1'b0), ) _TECHMAP_REPLACE_ ( .D(D), .CLK(CLK), .nSR(nRST), .Q(Q) ); endmodule module GP_DFFSI(input D, CLK, nSET, output reg nQ); parameter [0:0] INIT = 1'bx; GP_DFFSRI #( .INIT(INIT), .SRMODE(1'b1), ) _TECHMAP_REPLACE_ ( .D(D), .CLK(CLK), .nSR(nSET), .nQ(nQ) ); endmodule module GP_DFFRI(input D, CLK, nRST, output reg nQ); parameter [0:0] INIT = 1'bx; GP_DFFSRI #( .INIT(INIT), .SRMODE(1'b0), ) _TECHMAP_REPLACE_ ( .D(D), .CLK(CLK), .nSR(nRST), .nQ(nQ) ); endmodule module GP_DLATCHS(input D, nCLK, nSET, output reg Q); parameter [0:0] INIT = 1'bx; GP_DLATCHSR #( .INIT(INIT), .SRMODE(1'b1), ) _TECHMAP_REPLACE_ ( .D(D), .nCLK(nCLK), .nSR(nSET), .Q(Q) ); endmodule module GP_DLATCHR(input D, nCLK, nRST, output reg Q); parameter [0:0] INIT = 1'bx; GP_DLATCHSR #( .INIT(INIT), .SRMODE(1'b0), ) _TECHMAP_REPLACE_ ( .D(D), .nCLK(nCLK), .nSR(nRST), .Q(Q) ); endmodule module GP_DLATCHSI(input D, nCLK, nSET, output reg nQ); parameter [0:0] INIT = 1'bx; GP_DLATCHSRI #( .INIT(INIT), .SRMODE(1'b1), ) _TECHMAP_REPLACE_ ( .D(D), .nCLK(nCLK), .nSR(nSET), .nQ(nQ) ); endmodule module GP_DLATCHRI(input D, nCLK, nRST, output reg nQ); parameter [0:0] INIT = 1'bx; GP_DLATCHSRI #( .INIT(INIT), .SRMODE(1'b0), ) _TECHMAP_REPLACE_ ( .D(D), .nCLK(nCLK), .nSR(nRST), .nQ(nQ) ); endmodule module GP_OBUFT(input IN, input OE, output OUT); GP_IOBUF _TECHMAP_REPLACE_ ( .IN(IN), .OE(OE), .IO(OUT), .OUT() ); endmodule module \$lut (A, Y); parameter WIDTH = 0; parameter LUT = 0; input [WIDTH-1:0] A; output Y; generate if (WIDTH == 1) begin if(LUT == 2'b01) begin GP_INV _TECHMAP_REPLACE_ (.OUT(Y), .IN(A[0]) ); end else begin GP_2LUT #(.INIT({2'b00, LUT})) _TECHMAP_REPLACE_ (.OUT(Y), .IN0(A[0]), .IN1(1'b0)); end end else if (WIDTH == 2) begin GP_2LUT #(.INIT(LUT)) _TECHMAP_REPLACE_ (.OUT(Y), .IN0(A[0]), .IN1(A[1])); end else if (WIDTH == 3) begin GP_3LUT #(.INIT(LUT)) _TECHMAP_REPLACE_ (.OUT(Y), .IN0(A[0]), .IN1(A[1]), .IN2(A[2])); end else if (WIDTH == 4) begin GP_4LUT #(.INIT(LUT)) _TECHMAP_REPLACE_ (.OUT(Y), .IN0(A[0]), .IN1(A[1]), .IN2(A[2]), .IN3(A[3])); end else begin wire _TECHMAP_FAIL_ = 1; end endgenerate endmodule module \$__COUNT_ (CE, CLK, OUT, POUT, RST, UP); input wire CE; input wire CLK; output reg OUT; output reg[WIDTH-1:0] POUT; input wire RST; input wire UP; parameter COUNT_TO = 1; parameter RESET_MODE = "RISING"; parameter RESET_TO_MAX = 0; parameter HAS_POUT = 0; parameter HAS_CE = 0; parameter WIDTH = 8; parameter DIRECTION = "DOWN"; //If we have a DIRECTION other than DOWN fail... GP_COUNTx_ADV is not supported yet if(DIRECTION != "DOWN") begin initial begin $display("ERROR: \$__COUNT_ support for GP_COUNTx_ADV is not yet implemented. This counter should never have been extracted (bug in extract_counter pass?)."); $finish; end end //If counter is more than 14 bits wide, complain (also shouldn't happen) else if(WIDTH > 14) begin initial begin $display("ERROR: \$__COUNT_ support for cascaded counters is not yet implemented. This counter should never have been extracted (bug in extract_counter pass?)."); $finish; end end //If counter is more than 8 bits wide and has parallel output, we have a problem else if(WIDTH > 8 && HAS_POUT) begin initial begin $display("ERROR: \$__COUNT_ support for 9-14 bit counters with parallel output is not yet implemented. This counter should never have been extracted (bug in extract_counter pass?)."); $finish; end end //Looks like a legal counter! Do something with it else if(WIDTH <= 8) begin if(HAS_CE) begin wire ce_not; GP_INV ceinv( .IN(CE), .OUT(ce_not) ); GP_COUNT8_ADV #( .COUNT_TO(COUNT_TO), .RESET_MODE(RESET_MODE), .RESET_VALUE(RESET_TO_MAX ? "COUNT_TO" : "ZERO"), .CLKIN_DIVIDE(1) ) _TECHMAP_REPLACE_ ( .CLK(CLK), .RST(RST), .OUT(OUT), .UP(1'b0), //always count down for now .KEEP(ce_not), .POUT(POUT) ); end else begin GP_COUNT8 #( .COUNT_TO(COUNT_TO), .RESET_MODE(RESET_MODE), .CLKIN_DIVIDE(1) ) _TECHMAP_REPLACE_ ( .CLK(CLK), .RST(RST), .OUT(OUT), .POUT(POUT) ); end end else begin if(HAS_CE) begin wire ce_not; GP_INV ceinv( .IN(CE), .OUT(ce_not) ); GP_COUNT14_ADV #( .COUNT_TO(COUNT_TO), .RESET_MODE(RESET_TO_MAX ? "COUNT_TO" : "ZERO"), .RESET_VALUE("COUNT_TO"), .CLKIN_DIVIDE(1) ) _TECHMAP_REPLACE_ ( .CLK(CLK), .RST(RST), .OUT(OUT), .UP(1'b0), //always count down for now .KEEP(ce_not), .POUT(POUT) ); end else begin GP_COUNT14 #( .COUNT_TO(COUNT_TO), .RESET_MODE(RESET_MODE), .CLKIN_DIVIDE(1) ) _TECHMAP_REPLACE_ ( .CLK(CLK), .RST(RST), .OUT(OUT) ); end end endmodule