1module GP_DFFS(input D, CLK, nSET, output reg Q); 2 parameter [0:0] INIT = 1'bx; 3 GP_DFFSR #( 4 .INIT(INIT), 5 .SRMODE(1'b1), 6 ) _TECHMAP_REPLACE_ ( 7 .D(D), 8 .CLK(CLK), 9 .nSR(nSET), 10 .Q(Q) 11 ); 12endmodule 13 14module GP_DFFR(input D, CLK, nRST, output reg Q); 15 parameter [0:0] INIT = 1'bx; 16 GP_DFFSR #( 17 .INIT(INIT), 18 .SRMODE(1'b0), 19 ) _TECHMAP_REPLACE_ ( 20 .D(D), 21 .CLK(CLK), 22 .nSR(nRST), 23 .Q(Q) 24 ); 25endmodule 26 27module GP_DFFSI(input D, CLK, nSET, output reg nQ); 28 parameter [0:0] INIT = 1'bx; 29 GP_DFFSRI #( 30 .INIT(INIT), 31 .SRMODE(1'b1), 32 ) _TECHMAP_REPLACE_ ( 33 .D(D), 34 .CLK(CLK), 35 .nSR(nSET), 36 .nQ(nQ) 37 ); 38endmodule 39 40module GP_DFFRI(input D, CLK, nRST, output reg nQ); 41 parameter [0:0] INIT = 1'bx; 42 GP_DFFSRI #( 43 .INIT(INIT), 44 .SRMODE(1'b0), 45 ) _TECHMAP_REPLACE_ ( 46 .D(D), 47 .CLK(CLK), 48 .nSR(nRST), 49 .nQ(nQ) 50 ); 51endmodule 52 53module GP_DLATCHS(input D, nCLK, nSET, output reg Q); 54 parameter [0:0] INIT = 1'bx; 55 GP_DLATCHSR #( 56 .INIT(INIT), 57 .SRMODE(1'b1), 58 ) _TECHMAP_REPLACE_ ( 59 .D(D), 60 .nCLK(nCLK), 61 .nSR(nSET), 62 .Q(Q) 63 ); 64endmodule 65 66module GP_DLATCHR(input D, nCLK, nRST, output reg Q); 67 parameter [0:0] INIT = 1'bx; 68 GP_DLATCHSR #( 69 .INIT(INIT), 70 .SRMODE(1'b0), 71 ) _TECHMAP_REPLACE_ ( 72 .D(D), 73 .nCLK(nCLK), 74 .nSR(nRST), 75 .Q(Q) 76 ); 77endmodule 78 79module GP_DLATCHSI(input D, nCLK, nSET, output reg nQ); 80 parameter [0:0] INIT = 1'bx; 81 GP_DLATCHSRI #( 82 .INIT(INIT), 83 .SRMODE(1'b1), 84 ) _TECHMAP_REPLACE_ ( 85 .D(D), 86 .nCLK(nCLK), 87 .nSR(nSET), 88 .nQ(nQ) 89 ); 90endmodule 91 92module GP_DLATCHRI(input D, nCLK, nRST, output reg nQ); 93 parameter [0:0] INIT = 1'bx; 94 GP_DLATCHSRI #( 95 .INIT(INIT), 96 .SRMODE(1'b0), 97 ) _TECHMAP_REPLACE_ ( 98 .D(D), 99 .nCLK(nCLK), 100 .nSR(nRST), 101 .nQ(nQ) 102 ); 103endmodule 104 105module GP_OBUFT(input IN, input OE, output OUT); 106 GP_IOBUF _TECHMAP_REPLACE_ ( 107 .IN(IN), 108 .OE(OE), 109 .IO(OUT), 110 .OUT() 111 ); 112endmodule 113 114module \$lut (A, Y); 115 parameter WIDTH = 0; 116 parameter LUT = 0; 117 118 (* force_downto *) 119 input [WIDTH-1:0] A; 120 output Y; 121 122 generate 123 if (WIDTH == 1) begin 124 if(LUT == 2'b01) begin 125 GP_INV _TECHMAP_REPLACE_ (.OUT(Y), .IN(A[0]) ); 126 end 127 else begin 128 GP_2LUT #(.INIT({2'b00, LUT})) _TECHMAP_REPLACE_ (.OUT(Y), 129 .IN0(A[0]), .IN1(1'b0)); 130 end 131 end else 132 if (WIDTH == 2) begin 133 GP_2LUT #(.INIT(LUT)) _TECHMAP_REPLACE_ (.OUT(Y), 134 .IN0(A[0]), .IN1(A[1])); 135 end else 136 if (WIDTH == 3) begin 137 GP_3LUT #(.INIT(LUT)) _TECHMAP_REPLACE_ (.OUT(Y), 138 .IN0(A[0]), .IN1(A[1]), .IN2(A[2])); 139 end else 140 if (WIDTH == 4) begin 141 GP_4LUT #(.INIT(LUT)) _TECHMAP_REPLACE_ (.OUT(Y), 142 .IN0(A[0]), .IN1(A[1]), .IN2(A[2]), .IN3(A[3])); 143 end else begin 144 wire _TECHMAP_FAIL_ = 1; 145 end 146 endgenerate 147endmodule 148 149module \$__COUNT_ (CE, CLK, OUT, POUT, RST, UP); 150 151 input wire CE; 152 input wire CLK; 153 output reg OUT; 154 (* force_downto *) 155 output reg[WIDTH-1:0] POUT; 156 input wire RST; 157 input wire UP; 158 159 parameter COUNT_TO = 1; 160 parameter RESET_MODE = "RISING"; 161 parameter RESET_TO_MAX = 0; 162 parameter HAS_POUT = 0; 163 parameter HAS_CE = 0; 164 parameter WIDTH = 8; 165 parameter DIRECTION = "DOWN"; 166 167 //If we have a DIRECTION other than DOWN fail... GP_COUNTx_ADV is not supported yet 168 if(DIRECTION != "DOWN") begin 169 initial begin 170 $display("ERROR: \$__COUNT_ support for GP_COUNTx_ADV is not yet implemented. This counter should never have been extracted (bug in extract_counter pass?)."); 171 $finish; 172 end 173 end 174 175 //If counter is more than 14 bits wide, complain (also shouldn't happen) 176 else if(WIDTH > 14) begin 177 initial begin 178 $display("ERROR: \$__COUNT_ support for cascaded counters is not yet implemented. This counter should never have been extracted (bug in extract_counter pass?)."); 179 $finish; 180 end 181 end 182 183 //If counter is more than 8 bits wide and has parallel output, we have a problem 184 else if(WIDTH > 8 && HAS_POUT) begin 185 initial begin 186 $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?)."); 187 $finish; 188 end 189 end 190 191 //Looks like a legal counter! Do something with it 192 else if(WIDTH <= 8) begin 193 if(HAS_CE) begin 194 wire ce_not; 195 GP_INV ceinv( 196 .IN(CE), 197 .OUT(ce_not) 198 ); 199 GP_COUNT8_ADV #( 200 .COUNT_TO(COUNT_TO), 201 .RESET_MODE(RESET_MODE), 202 .RESET_VALUE(RESET_TO_MAX ? "COUNT_TO" : "ZERO"), 203 .CLKIN_DIVIDE(1) 204 ) _TECHMAP_REPLACE_ ( 205 .CLK(CLK), 206 .RST(RST), 207 .OUT(OUT), 208 .UP(1'b0), //always count down for now 209 .KEEP(ce_not), 210 .POUT(POUT) 211 ); 212 end 213 else begin 214 GP_COUNT8 #( 215 .COUNT_TO(COUNT_TO), 216 .RESET_MODE(RESET_MODE), 217 .CLKIN_DIVIDE(1) 218 ) _TECHMAP_REPLACE_ ( 219 .CLK(CLK), 220 .RST(RST), 221 .OUT(OUT), 222 .POUT(POUT) 223 ); 224 end 225 end 226 227 else begin 228 if(HAS_CE) begin 229 wire ce_not; 230 GP_INV ceinv( 231 .IN(CE), 232 .OUT(ce_not) 233 ); 234 GP_COUNT14_ADV #( 235 .COUNT_TO(COUNT_TO), 236 .RESET_MODE(RESET_TO_MAX ? "COUNT_TO" : "ZERO"), 237 .RESET_VALUE("COUNT_TO"), 238 .CLKIN_DIVIDE(1) 239 ) _TECHMAP_REPLACE_ ( 240 .CLK(CLK), 241 .RST(RST), 242 .OUT(OUT), 243 .UP(1'b0), //always count down for now 244 .KEEP(ce_not), 245 .POUT(POUT) 246 ); 247 end 248 else begin 249 GP_COUNT14 #( 250 .COUNT_TO(COUNT_TO), 251 .RESET_MODE(RESET_MODE), 252 .CLKIN_DIVIDE(1) 253 ) _TECHMAP_REPLACE_ ( 254 .CLK(CLK), 255 .RST(RST), 256 .OUT(OUT) 257 ); 258 end 259 end 260 261endmodule 262