Merge pull request #2467 from YosysHQ/dave/nexus-carry-fix
[yosys.git] / techlibs / nexus / cells_map.v
1 // Flipflop intermediate map level
2 module \$__FF_NOLSR (input D, C, E, output Q);
3 parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
4 wire _TECHMAP_REMOVEINIT_Q_ = 1'b1;
5 generate
6 if (_TECHMAP_WIREINIT_Q_ === 1'b1)
7 FD1P3JX #(.GSR("DISABLED")) _TECHMAP_REPLACE_ (.D(D), .CK(C), .SP(E), .PD(1'b0), .Q(Q));
8 else
9 FD1P3IX #(.GSR("DISABLED")) _TECHMAP_REPLACE_ (.D(D), .CK(C), .SP(E), .CD(1'b0), .Q(Q));
10 endgenerate
11 endmodule
12
13 module \$__FF_SYNCLSR (input D, C, E, R, output Q);
14 parameter SR_VAL = 1'b0;
15 parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
16 wire _TECHMAP_REMOVEINIT_Q_ = 1'b1;
17 wire Ci, Ei, Ri, Rg, Dd;
18 generate
19 if (SR_VAL)
20 FD1P3JX #(.GSR("DISABLED")) _TECHMAP_REPLACE_ (.D(D), .CK(C), .SP(E), .PD(R), .Q(Q));
21 else
22 FD1P3IX #(.GSR("DISABLED")) _TECHMAP_REPLACE_ (.D(D), .CK(C), .SP(E), .CD(R), .Q(Q));
23 endgenerate
24 endmodule
25
26 module \$__FF_ASYNCLSR (input D, C, E, R, output Q);
27 parameter SR_VAL = 1'b0;
28 parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
29 wire _TECHMAP_REMOVEINIT_Q_ = (_TECHMAP_WIREINIT_Q_ === 1'bx || _TECHMAP_WIREINIT_Q_ === SR_VAL);
30 wire Ci, Ei, Ri, Rg, Dd;
31 generate
32 if (SR_VAL)
33 FD1P3BX #(.GSR("DISABLED")) _TECHMAP_REPLACE_ (.D(D), .CK(C), .SP(E), .PD(R), .Q(Q));
34 else
35 FD1P3DX #(.GSR("DISABLED")) _TECHMAP_REPLACE_ (.D(D), .CK(C), .SP(E), .CD(R), .Q(Q));
36 endgenerate
37 endmodule
38
39
40 module \$_DFF_P_ (input D, C, output Q); \$__FF_NOLSR _TECHMAP_REPLACE_ (.D(D), .C(C), .E(1'b1), .Q(Q)); endmodule
41
42 module \$_DFFE_PP_ (input D, C, E, output Q); \$__FF_NOLSR _TECHMAP_REPLACE_ (.D(D), .C(C), .E(E), .Q(Q)); endmodule
43
44 module \$_DFF_PP0_ (input D, C, R, output Q); \$__FF_ASYNCLSR #(0) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(1'b1), .Q(Q)); endmodule
45 module \$_DFF_PP1_ (input D, C, R, output Q); \$__FF_ASYNCLSR #(1) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(1'b1), .Q(Q)); endmodule
46
47 module \$_SDFF_PP0_ (input D, C, R, output Q); \$__FF_SYNCLSR #(0) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(1'b1), .Q(Q)); endmodule
48 module \$_SDFF_PP1_ (input D, C, R, output Q); \$__FF_SYNCLSR #(1) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(1'b1), .Q(Q)); endmodule
49
50 module \$_DFFE_PP0P_ (input D, C, E, R, output Q); \$__FF_ASYNCLSR #(0) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(E), .Q(Q)); endmodule
51 module \$_DFFE_PP1P_ (input D, C, E, R, output Q); \$__FF_ASYNCLSR #(1) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(E), .Q(Q)); endmodule
52
53 module \$_SDFFE_PP0P_ (input D, C, E, R, output Q); \$__FF_SYNCLSR #(0) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(E), .Q(Q)); endmodule
54 module \$_SDFFE_PP1P_ (input D, C, E, R, output Q); \$__FF_SYNCLSR #(1) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(E), .Q(Q)); endmodule
55
56 module \$__NX_TINOUTPAD (input I, OE, output O, inout B);
57 BB _TECHMAP_REPLACE_ (.I(I), .O(O), .T(~OE), .B(B));
58 endmodule
59
60 module \$__NX_TOUTPAD (input I, OE, output O);
61 OBZ _TECHMAP_REPLACE_ (.I(I), .O(), .T(~OE), .O(O));
62 endmodule
63
64 `ifndef NO_LUT
65 module \$lut (A, Y);
66 parameter WIDTH = 0;
67 parameter LUT = 0;
68
69 input [WIDTH-1:0] A;
70 output Y;
71
72 generate
73 if (WIDTH == 1) begin
74 if (LUT == 2'b01)
75 INV _TECHMAP_REPLACE_ (.A(A[0]), .Z(Y));
76 else
77 LUT4 #(.INIT($sformatf("0x%04x", {{8{LUT[1]}}, {8{LUT[0]}}}))) _TECHMAP_REPLACE_ (.Z(Y),
78 .D(A[0]));
79 end else
80 if (WIDTH == 2) begin
81 localparam [15:0] INIT = {{4{LUT[3]}}, {4{LUT[2]}}, {4{LUT[1]}}, {4{LUT[0]}}};
82 LUT4 #(.INIT($sformatf("0x%04x", INIT))) _TECHMAP_REPLACE_ (.Z(Y),
83 .C(A[0]), .D(A[1]));
84 end else
85 if (WIDTH == 3) begin
86 localparam [15:0] INIT = {{2{LUT[7]}}, {2{LUT[6]}}, {2{LUT[5]}}, {2{LUT[4]}}, {2{LUT[3]}}, {2{LUT[2]}}, {2{LUT[1]}}, {2{LUT[0]}}};
87 LUT4 #(.INIT($sformatf("0x%04x", INIT))) _TECHMAP_REPLACE_ (.Z(Y),
88 .B(A[0]), .C(A[1]), .D(A[2]));
89 end else
90 if (WIDTH == 4) begin
91 LUT4 #(.INIT($sformatf("0x%04x", LUT))) _TECHMAP_REPLACE_ (.Z(Y),
92 .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3]));
93 end else
94 if (WIDTH == 5) begin
95 WIDEFN9 #(
96 .INIT0($sformatf("0x%04x", LUT[15:0 ])),
97 .INIT1($sformatf("0x%04x", LUT[31:16])),
98 ) _TECHMAP_REPLACE_ (
99 .A0(A[0]), .B0(A[1]), .C0(A[2]), .D0(A[3]),
100 .A1(A[0]), .B1(A[1]), .C1(A[2]), .D1(A[3]),
101 .SEL(A[4]), .Z(Y)
102 );
103 end
104 endgenerate
105 endmodule
106 `endif