aboutsummaryrefslogtreecommitdiffstats
path: root/techlibs/common/gate2lut.v
blob: 15cea3d8d5b0d00f0aca2a5a827a4f3168f8941d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
(* techmap_celltype = "$_NOT_" *)
module _90_lut_not (A, Y);
    input A;
    output Y;

    wire [`LUT_WIDTH-1:0] AA;
    assign AA = {A};

    \$lut #(
        .WIDTH(`LUT_WIDTH),
        .LUT(4'b01)
    ) lut (
        .A(AA),
        .Y(Y)
    );
endmodule

(* techmap_celltype = "$_OR_" *)
module _90_lut_or (A, B, Y);
    input A, B;
    output Y;

    wire [`LUT_WIDTH-1:0] AA;
    assign AA = {B, A};

    \$lut #(
        .WIDTH(`LUT_WIDTH),
        .LUT(4'b1110)
    ) lut (
        .A(AA),
        .Y(Y)
    );
endmodule

(* techmap_celltype = "$_AND_" *)
module _90_lut_and (A, B, Y);
    input A, B;
    output Y;

    wire [`LUT_WIDTH-1:0] AA;
    assign AA = {B, A};

    \$lut #(
        .WIDTH(`LUT_WIDTH),
        .LUT(4'b1000)
    ) lut (
        .A(AA),
        .Y(Y)
    );
endmodule

(* techmap_celltype = "$_XOR_" *)
module _90_lut_xor (A, B, Y);
    input A, B;
    output Y;

    wire [`LUT_WIDTH-1:0] AA;
    assign AA = {B, A};

    \$lut #(
        .WIDTH(`LUT_WIDTH),
        .LUT(4'b0110)
    ) lut (
        .A(AA),
        .Y(Y)
    );
endmodule

(* techmap_celltype = "$_MUX_" *)
module _90_lut_mux (A, B, S, Y);
    input A, B, S;
    output Y;

    wire [`LUT_WIDTH-1:0] AA;
    assign AA = {S, B, A};

    \$lut #(
        .WIDTH(`LUT_WIDTH),
        //     A 1010 1010
        //     B 1100 1100
        //     S 1111 0000
        .LUT(8'b 1100_1010)
    ) lut (
        .A(AA),
        .Y(Y)
    );
endmodule
n class="kt">Boolean is begin return L = R; end Is_Equal; function Get_String_Length (Id : O_Ident) return Natural is Str : Fat_String; pragma Import (Ada, Str); for Str'Address use Id.Addr; begin for I in Str'Range loop if Str (I) = ASCII.NUL then return I - 1; end if; end loop; raise Program_Error; end Get_String_Length; function Get_String (Id : O_Ident) return String is Str : Fat_String; pragma Import (Ada, Str); for Str'Address use Id.Addr; begin for I in Str'Range loop if Str (I) = ASCII.NUL then return Str (1 .. I - 1); end if; end loop; raise Program_Error; end Get_String; function Get_Cstring (Id : O_Ident) return System.Address is begin return Id.Addr; end Get_Cstring; function Is_Equal (Id : O_Ident; Str : String) return Boolean is Istr : Fat_String; pragma Import (Ada, Istr); for Istr'Address use Id.Addr; Str_Len : constant Natural := Str'Length; begin for I in Istr'Range loop if Istr (I) = ASCII.NUL then return I - 1 = Str_Len; end if; if I > Str_Len then return False; end if; if Istr (I) /= Str (Str'First + I - 1) then return False; end if; end loop; raise Program_Error; end Is_Equal; function Is_Nul (Id : O_Ident) return Boolean is begin return Id = O_Ident_Nul; end Is_Nul; end Ortho_Ident;