najaeda 0.3.3__cp314-cp314-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. najaeda/__init__.py +20 -0
  2. najaeda/_version.py +16 -0
  3. najaeda/docs/.readthedocs.yaml +26 -0
  4. najaeda/docs/requirements.txt +7 -0
  5. najaeda/docs/source/api.rst +7 -0
  6. najaeda/docs/source/common_classes.rst +11 -0
  7. najaeda/docs/source/conf.py +57 -0
  8. najaeda/docs/source/equipotential.rst +15 -0
  9. najaeda/docs/source/examples.rst.in +66 -0
  10. najaeda/docs/source/index.rst +17 -0
  11. najaeda/docs/source/instance.rst +34 -0
  12. najaeda/docs/source/introduction.rst +68 -0
  13. najaeda/docs/source/net.rst +20 -0
  14. najaeda/docs/source/netlist_classes.rst +11 -0
  15. najaeda/docs/source/preprocessor.py +73 -0
  16. najaeda/docs/source/term.rst +20 -0
  17. najaeda/docs/source/visitors.rst +13 -0
  18. najaeda/instance_visitor.py +43 -0
  19. najaeda/naja.pyd +0 -0
  20. najaeda/naja_bne.dll +0 -0
  21. najaeda/naja_dnl.dll +0 -0
  22. najaeda/naja_metrics.dll +0 -0
  23. najaeda/naja_nl.dll +0 -0
  24. najaeda/naja_opt.dll +0 -0
  25. najaeda/naja_python.dll +0 -0
  26. najaeda/native/__init__.py +0 -0
  27. najaeda/native/stats.py +341 -0
  28. najaeda/net_visitor.py +53 -0
  29. najaeda/netlist.py +1990 -0
  30. najaeda/pandas_stats.py +32 -0
  31. najaeda/primitives/__init__.py +0 -0
  32. najaeda/primitives/utils.py +19 -0
  33. najaeda/primitives/xilinx.py +541 -0
  34. najaeda/primitives/yosys.py +288 -0
  35. najaeda/stats.py +410 -0
  36. najaeda-0.3.3.dist-info/DELVEWHEEL +2 -0
  37. najaeda-0.3.3.dist-info/METADATA +108 -0
  38. najaeda-0.3.3.dist-info/RECORD +44 -0
  39. najaeda-0.3.3.dist-info/WHEEL +5 -0
  40. najaeda-0.3.3.dist-info/licenses/AUTHORS +7 -0
  41. najaeda-0.3.3.dist-info/licenses/LICENSE +201 -0
  42. najaeda.libs/msvcp140.dll +0 -0
  43. najaeda.libs/tbb12.dll +0 -0
  44. najaeda.libs/tbbmalloc.dll +0 -0
@@ -0,0 +1,32 @@
1
+ # SPDX-FileCopyrightText: 2023 The Naja authors <https://github.com/najaeda/naja/blob/main/AUTHORS>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ import argparse
6
+ import pandas as pd
7
+
8
+ if __name__ == "__main__":
9
+ parser = argparse.ArgumentParser(
10
+ description="Load JSON and generate statistics using Pandas."
11
+ )
12
+ parser.add_argument("json_file", type=str, help="Path to the input JSON file.")
13
+ parser.add_argument(
14
+ "--output",
15
+ type=str,
16
+ default="design_stats.png",
17
+ help="Optional: Save computed statistics to this JSON file.",
18
+ )
19
+ args = parser.parse_args()
20
+
21
+ df = pd.read_json(args.json_file)
22
+ pandas_data = pd.DataFrame(df.set_index("Name"))
23
+ plot = pandas_data.plot.bar(y=["terms", "nets", "instances"], stacked=True)
24
+
25
+ # Customize plot
26
+ plot.set_title("Design Statistics", fontsize=16, fontweight="bold")
27
+ plot.set_xlabel("Design Name", fontsize=12)
28
+ plot.set_ylabel("Count", fontsize=12)
29
+
30
+ plot_figure = plot.get_figure()
31
+ plot_figure.tight_layout()
32
+ plot_figure.savefig(args.output)
File without changes
@@ -0,0 +1,19 @@
1
+ # SPDX-FileCopyrightText: 2025 The Naja authors <https://github.com/najaeda/naja/blob/main/AUTHORS>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from najaeda import naja
6
+
7
+
8
+ def constructSequentialPrimitive(design, clk):
9
+ input_terms = []
10
+ output_terms = []
11
+ for term in design.getBitTerms():
12
+ if term == clk:
13
+ pass
14
+ if term.getDirection() == naja.SNLTerm.Direction.Input:
15
+ input_terms.append(term)
16
+ elif term.getDirection() == naja.SNLTerm.Direction.Output:
17
+ output_terms.append(term)
18
+ naja.SNLDesign.addClockToOutputsArcs(clk, output_terms)
19
+ naja.SNLDesign.addInputsToClockArcs(input_terms, clk)
@@ -0,0 +1,541 @@
1
+ # SPDX-FileCopyrightText: 2024 The Naja authors <https://github.com/najaeda/naja/blob/main/AUTHORS>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ import logging
6
+ from najaeda import naja
7
+ from . import utils
8
+
9
+
10
+ def constructIBUF(lib):
11
+ ibuf = naja.SNLDesign.createPrimitive(lib, "IBUF")
12
+ i = naja.SNLScalarTerm.create(ibuf, naja.SNLTerm.Direction.Input, "I")
13
+ o = naja.SNLScalarTerm.create(ibuf, naja.SNLTerm.Direction.Output, "O")
14
+ ibuf.addCombinatorialArcs(i, o)
15
+
16
+
17
+ def constructOBUF(lib):
18
+ obuf = naja.SNLDesign.createPrimitive(lib, "OBUF")
19
+ i = naja.SNLScalarTerm.create(obuf, naja.SNLTerm.Direction.Input, "I")
20
+ o = naja.SNLScalarTerm.create(obuf, naja.SNLTerm.Direction.Output, "O")
21
+ obuf.addCombinatorialArcs(i, o)
22
+
23
+
24
+ def constructBUFG(lib):
25
+ bufg = naja.SNLDesign.createPrimitive(lib, "BUFG")
26
+ i = naja.SNLScalarTerm.create(bufg, naja.SNLTerm.Direction.Input, "I")
27
+ o = naja.SNLScalarTerm.create(bufg, naja.SNLTerm.Direction.Output, "O")
28
+ bufg.addCombinatorialArcs(i, o)
29
+
30
+
31
+ def constructDSP48E1(lib):
32
+ dsp48e1 = naja.SNLDesign.createPrimitive(lib, "DSP48E1")
33
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Output, 29, 0, "ACOUT")
34
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Output, 17, 0, "BCOUT")
35
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Output, "CARRYCASCOUT")
36
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "MULTSIGNOUT")
37
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 47, 0, "PCOUT")
38
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Output, "OVERFLOW")
39
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Output, "PATTERNBDETECT")
40
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Output, "PATTERNDETECT")
41
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Output, "UNDERFLOW")
42
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Output, 3, 0, "CARRYOUT")
43
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Output, 47, 0, "P")
44
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 29, 0, "ACIN")
45
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 17, 0, "BCIN")
46
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CARRYCASCIN")
47
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "MULTSIGNIN")
48
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 47, 0, "PCIN")
49
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 3, 0, "ALUMODE")
50
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 2, 0, "CARRYINSEL")
51
+ clk = naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CLK")
52
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 4, 0, "INMODE")
53
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 6, 0, "OPMODE")
54
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 29, 0, "A")
55
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 17, 0, "B")
56
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 47, 0, "C")
57
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CARRYIN")
58
+ naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 24, 0, "D")
59
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CEA1")
60
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CEA2")
61
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CEAD")
62
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CEALUMODE")
63
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CEB1")
64
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CEB2")
65
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CEC")
66
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CECARRYIN")
67
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CECTRL")
68
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CED")
69
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CEINMODE")
70
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CEM")
71
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CEP")
72
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "RSTA")
73
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "RSTALLCARRYIN")
74
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "RSTALUMODE")
75
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "RSTB")
76
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "RSTC")
77
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "RSTCTRL")
78
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "RSTD")
79
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "RSTINMODE")
80
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "RSTM")
81
+ naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "RSTP")
82
+ naja.SNLParameter.create_decimal(dsp48e1, "ACASCREG", 1)
83
+ naja.SNLParameter.create_decimal(dsp48e1, "ADREG", 1)
84
+ naja.SNLParameter.create_string(dsp48e1, "A_INPUT", "DIRECT")
85
+ naja.SNLParameter.create_decimal(dsp48e1, "ALUMODEREG", 1)
86
+ naja.SNLParameter.create_decimal(dsp48e1, "AREG", 1)
87
+ naja.SNLParameter.create_decimal(dsp48e1, "BCASCREG", 1)
88
+ naja.SNLParameter.create_string(dsp48e1, "B_INPUT", "DIRECT")
89
+ naja.SNLParameter.create_decimal(dsp48e1, "BREG", 1)
90
+ naja.SNLParameter.create_decimal(dsp48e1, "CARRYINREG", 1)
91
+ naja.SNLParameter.create_decimal(dsp48e1, "CARRYINSELREG", 1)
92
+ naja.SNLParameter.create_decimal(dsp48e1, "CREG", 1)
93
+ naja.SNLParameter.create_decimal(dsp48e1, "DREG", 1)
94
+ naja.SNLParameter.create_decimal(dsp48e1, "INMODEREG", 1)
95
+ naja.SNLParameter.create_decimal(dsp48e1, "MREG", 1)
96
+ naja.SNLParameter.create_decimal(dsp48e1, "OPMODEREG", 1)
97
+ naja.SNLParameter.create_decimal(dsp48e1, "PREG", 1)
98
+ naja.SNLParameter.create_boolean(dsp48e1, "USE_DPORT", False)
99
+ naja.SNLParameter.create_string(dsp48e1, "USE_MULT", "MULTIPLY")
100
+ naja.SNLParameter.create_string(dsp48e1, "USE_SIMD", "ONE48")
101
+ utils.constructSequentialPrimitive(dsp48e1, clk)
102
+
103
+
104
+ def constructINV(lib):
105
+ inv = naja.SNLDesign.createPrimitive(lib, "INV")
106
+ i = naja.SNLScalarTerm.create(inv, naja.SNLTerm.Direction.Input, "I")
107
+ o = naja.SNLScalarTerm.create(inv, naja.SNLTerm.Direction.Output, "O")
108
+ naja.SNLDesign.addCombinatorialArcs(i, o)
109
+
110
+
111
+ def constructCARRY4(lib):
112
+ carry4 = naja.SNLDesign.createPrimitive(lib, "CARRY4")
113
+ o = naja.SNLBusTerm.create(carry4, naja.SNLTerm.Direction.Output, 3, 0, "O")
114
+ co = naja.SNLBusTerm.create(carry4, naja.SNLTerm.Direction.Output, 3, 0, "CO")
115
+ di = naja.SNLBusTerm.create(carry4, naja.SNLTerm.Direction.Input, 3, 0, "DI")
116
+ s = naja.SNLBusTerm.create(carry4, naja.SNLTerm.Direction.Input, 3, 0, "S")
117
+ cyinit = naja.SNLScalarTerm.create(carry4, naja.SNLTerm.Direction.Input, "CYINIT")
118
+ ci = naja.SNLScalarTerm.create(carry4, naja.SNLTerm.Direction.Input, "CI")
119
+ o_bits = [b for b in o.getBits()]
120
+ co_bits = [b for b in co.getBits()]
121
+ di_bits = [b for b in di.getBits()]
122
+ s_bits = [b for b in s.getBits()]
123
+ # cyinit and ci are in combinatorial dependency with o and co outputs
124
+ naja.SNLDesign.addCombinatorialArcs([cyinit, ci], [o, co])
125
+ naja.SNLDesign.addCombinatorialArcs(s_bits[0], [o, co])
126
+ naja.SNLDesign.addCombinatorialArcs(s_bits[1], [o_bits[1], o_bits[2], o_bits[3]])
127
+ naja.SNLDesign.addCombinatorialArcs(s_bits[1], [co_bits[1], co_bits[2], co_bits[3]])
128
+ naja.SNLDesign.addCombinatorialArcs(s_bits[2], [o_bits[2], o_bits[3]])
129
+ naja.SNLDesign.addCombinatorialArcs(s_bits[2], [co_bits[2], co_bits[3]])
130
+ naja.SNLDesign.addCombinatorialArcs(s_bits[3], o_bits[3])
131
+ naja.SNLDesign.addCombinatorialArcs(s_bits[3], co_bits[3])
132
+ naja.SNLDesign.addCombinatorialArcs(di_bits[0], [o_bits[1], o_bits[2], o_bits[3]])
133
+ naja.SNLDesign.addCombinatorialArcs(di_bits[0], co)
134
+ naja.SNLDesign.addCombinatorialArcs(di_bits[1], [o_bits[2], o_bits[3]])
135
+ naja.SNLDesign.addCombinatorialArcs(di_bits[1], [co_bits[1], co_bits[2], co_bits[3]])
136
+ naja.SNLDesign.addCombinatorialArcs(di_bits[2], o_bits[3])
137
+ naja.SNLDesign.addCombinatorialArcs(di_bits[2], [co_bits[2], co_bits[3]])
138
+ naja.SNLDesign.addCombinatorialArcs(di_bits[3], co_bits[3])
139
+
140
+
141
+ def constructLUT1(lib):
142
+ lut1 = naja.SNLDesign.createPrimitive(lib, "LUT1")
143
+ i0 = naja.SNLScalarTerm.create(lut1, naja.SNLTerm.Direction.Input, "I0")
144
+ o = naja.SNLScalarTerm.create(lut1, naja.SNLTerm.Direction.Output, "O")
145
+ naja.SNLDesign.addCombinatorialArcs(i0, o)
146
+ naja.SNLParameter.create_binary(lut1, "INIT", 2, 0b00)
147
+
148
+
149
+ def constructLUT2(lib):
150
+ lut2 = naja.SNLDesign.createPrimitive(lib, "LUT2")
151
+ i0 = naja.SNLScalarTerm.create(lut2, naja.SNLTerm.Direction.Input, "I0")
152
+ i1 = naja.SNLScalarTerm.create(lut2, naja.SNLTerm.Direction.Input, "I1")
153
+ o = naja.SNLScalarTerm.create(lut2, naja.SNLTerm.Direction.Output, "O")
154
+ naja.SNLDesign.addCombinatorialArcs([i0, i1], o)
155
+ naja.SNLParameter.create_binary(lut2, "INIT", 4, 0x0)
156
+
157
+
158
+ def constructLUT3(lib):
159
+ lut3 = naja.SNLDesign.createPrimitive(lib, "LUT3")
160
+ i0 = naja.SNLScalarTerm.create(lut3, naja.SNLTerm.Direction.Input, "I0")
161
+ i1 = naja.SNLScalarTerm.create(lut3, naja.SNLTerm.Direction.Input, "I1")
162
+ i2 = naja.SNLScalarTerm.create(lut3, naja.SNLTerm.Direction.Input, "I2")
163
+ o = naja.SNLScalarTerm.create(lut3, naja.SNLTerm.Direction.Output, "O")
164
+ naja.SNLDesign.addCombinatorialArcs([i0, i1, i2], o)
165
+ naja.SNLParameter.create_binary(lut3, "INIT", 8, 0x00)
166
+
167
+
168
+ def constructLUT4(lib):
169
+ lut4 = naja.SNLDesign.createPrimitive(lib, "LUT4")
170
+ i0 = naja.SNLScalarTerm.create(lut4, naja.SNLTerm.Direction.Input, "I0")
171
+ i1 = naja.SNLScalarTerm.create(lut4, naja.SNLTerm.Direction.Input, "I1")
172
+ i2 = naja.SNLScalarTerm.create(lut4, naja.SNLTerm.Direction.Input, "I2")
173
+ i3 = naja.SNLScalarTerm.create(lut4, naja.SNLTerm.Direction.Input, "I3")
174
+ o = naja.SNLScalarTerm.create(lut4, naja.SNLTerm.Direction.Output, "O")
175
+ naja.SNLDesign.addCombinatorialArcs([i0, i1, i2, i3], o)
176
+ naja.SNLParameter.create_binary(lut4, "INIT", 16, 0x0000)
177
+
178
+
179
+ def constructLUT5(lib):
180
+ lut5 = naja.SNLDesign.createPrimitive(lib, "LUT5")
181
+ i0 = naja.SNLScalarTerm.create(lut5, naja.SNLTerm.Direction.Input, "I0")
182
+ i1 = naja.SNLScalarTerm.create(lut5, naja.SNLTerm.Direction.Input, "I1")
183
+ i2 = naja.SNLScalarTerm.create(lut5, naja.SNLTerm.Direction.Input, "I2")
184
+ i3 = naja.SNLScalarTerm.create(lut5, naja.SNLTerm.Direction.Input, "I3")
185
+ i4 = naja.SNLScalarTerm.create(lut5, naja.SNLTerm.Direction.Input, "I4")
186
+ o = naja.SNLScalarTerm.create(lut5, naja.SNLTerm.Direction.Output, "O")
187
+ naja.SNLDesign.addCombinatorialArcs([i0, i1, i2, i3, i4], o)
188
+ naja.SNLParameter.create_binary(lut5, "INIT", 32, 0x00000000)
189
+
190
+
191
+ def constructLUT6(lib):
192
+ lut6 = naja.SNLDesign.createPrimitive(lib, "LUT6")
193
+ i0 = naja.SNLScalarTerm.create(lut6, naja.SNLTerm.Direction.Input, "I0")
194
+ i1 = naja.SNLScalarTerm.create(lut6, naja.SNLTerm.Direction.Input, "I1")
195
+ i2 = naja.SNLScalarTerm.create(lut6, naja.SNLTerm.Direction.Input, "I2")
196
+ i3 = naja.SNLScalarTerm.create(lut6, naja.SNLTerm.Direction.Input, "I3")
197
+ i4 = naja.SNLScalarTerm.create(lut6, naja.SNLTerm.Direction.Input, "I4")
198
+ i5 = naja.SNLScalarTerm.create(lut6, naja.SNLTerm.Direction.Input, "I5")
199
+ o = naja.SNLScalarTerm.create(lut6, naja.SNLTerm.Direction.Output, "O")
200
+ naja.SNLDesign.addCombinatorialArcs([i0, i1, i2, i3, i4, i5], o)
201
+ naja.SNLParameter.create_binary(lut6, "INIT", 64, 0x0000000000000000)
202
+
203
+
204
+ def constructMUXF7(lib):
205
+ muxf7 = naja.SNLDesign.createPrimitive(lib, "MUXF7")
206
+ i0 = naja.SNLScalarTerm.create(muxf7, naja.SNLTerm.Direction.Input, "I0")
207
+ i1 = naja.SNLScalarTerm.create(muxf7, naja.SNLTerm.Direction.Input, "I1")
208
+ o = naja.SNLScalarTerm.create(muxf7, naja.SNLTerm.Direction.Output, "O")
209
+ s = naja.SNLScalarTerm.create(muxf7, naja.SNLTerm.Direction.Input, "S")
210
+ naja.SNLDesign.addCombinatorialArcs([i0, i1, s], o)
211
+
212
+
213
+ def constructMUXF8(lib):
214
+ muxf8 = naja.SNLDesign.createPrimitive(lib, "MUXF8")
215
+ i0 = naja.SNLScalarTerm.create(muxf8, naja.SNLTerm.Direction.Input, "I0")
216
+ i1 = naja.SNLScalarTerm.create(muxf8, naja.SNLTerm.Direction.Input, "I1")
217
+ o = naja.SNLScalarTerm.create(muxf8, naja.SNLTerm.Direction.Output, "O")
218
+ s = naja.SNLScalarTerm.create(muxf8, naja.SNLTerm.Direction.Input, "S")
219
+ naja.SNLDesign.addCombinatorialArcs([i0, i1, s], o)
220
+
221
+
222
+ def constructSRL16E(lib):
223
+ srl16e = naja.SNLDesign.createPrimitive(lib, "SRL16E")
224
+ naja.SNLScalarTerm.create(srl16e, naja.SNLTerm.Direction.Input, "CE")
225
+ naja.SNLScalarTerm.create(srl16e, naja.SNLTerm.Direction.Input, "CLK")
226
+ naja.SNLScalarTerm.create(srl16e, naja.SNLTerm.Direction.Input, "D")
227
+ naja.SNLScalarTerm.create(srl16e, naja.SNLTerm.Direction.Output, "Q")
228
+ naja.SNLScalarTerm.create(srl16e, naja.SNLTerm.Direction.Input, "A0")
229
+ naja.SNLScalarTerm.create(srl16e, naja.SNLTerm.Direction.Input, "A1")
230
+ naja.SNLScalarTerm.create(srl16e, naja.SNLTerm.Direction.Input, "A2")
231
+ naja.SNLScalarTerm.create(srl16e, naja.SNLTerm.Direction.Input, "A3")
232
+ naja.SNLParameter.create_binary(srl16e, "INIT", 16, 0x0000)
233
+ naja.SNLParameter.create_binary(srl16e, "IS_CLK_INVERTED", 1, 0)
234
+
235
+
236
+ def constructFDCE(lib):
237
+ fdce = naja.SNLDesign.createPrimitive(lib, "FDCE")
238
+ q = naja.SNLScalarTerm.create(fdce, naja.SNLTerm.Direction.Output, "Q")
239
+ c = naja.SNLScalarTerm.create(fdce, naja.SNLTerm.Direction.Input, "C")
240
+ ce = naja.SNLScalarTerm.create(fdce, naja.SNLTerm.Direction.Input, "CE")
241
+ clr = naja.SNLScalarTerm.create(fdce, naja.SNLTerm.Direction.Input, "CLR")
242
+ d = naja.SNLScalarTerm.create(fdce, naja.SNLTerm.Direction.Input, "D")
243
+ naja.SNLParameter.create_binary(fdce, "INIT", 1, 0b0)
244
+ naja.SNLDesign.addInputsToClockArcs([ce, clr, d], c)
245
+ naja.SNLDesign.addClockToOutputsArcs(c, q)
246
+
247
+
248
+ def constructFDPE(lib):
249
+ fdpe = naja.SNLDesign.createPrimitive(lib, "FDPE")
250
+ q = naja.SNLScalarTerm.create(fdpe, naja.SNLTerm.Direction.Output, "Q")
251
+ c = naja.SNLScalarTerm.create(fdpe, naja.SNLTerm.Direction.Input, "C")
252
+ ce = naja.SNLScalarTerm.create(fdpe, naja.SNLTerm.Direction.Input, "CE")
253
+ pre = naja.SNLScalarTerm.create(fdpe, naja.SNLTerm.Direction.Input, "PRE")
254
+ d = naja.SNLScalarTerm.create(fdpe, naja.SNLTerm.Direction.Input, "D")
255
+ naja.SNLParameter.create_binary(fdpe, "INIT", 1, 0b1)
256
+ naja.SNLDesign.addInputsToClockArcs([ce, pre, d], c)
257
+ naja.SNLDesign.addClockToOutputsArcs(c, q)
258
+
259
+
260
+ def constructFDRE(lib):
261
+ fdre = naja.SNLDesign.createPrimitive(lib, "FDRE")
262
+ q = naja.SNLScalarTerm.create(fdre, naja.SNLTerm.Direction.Output, "Q")
263
+ c = naja.SNLScalarTerm.create(fdre, naja.SNLTerm.Direction.Input, "C")
264
+ ce = naja.SNLScalarTerm.create(fdre, naja.SNLTerm.Direction.Input, "CE")
265
+ r = naja.SNLScalarTerm.create(fdre, naja.SNLTerm.Direction.Input, "R")
266
+ d = naja.SNLScalarTerm.create(fdre, naja.SNLTerm.Direction.Input, "D")
267
+ naja.SNLParameter.create_binary(fdre, "INIT", 1, 0b0)
268
+ naja.SNLDesign.addInputsToClockArcs([ce, r, d], c)
269
+ naja.SNLDesign.addClockToOutputsArcs(c, q)
270
+
271
+
272
+ def constructFDSE(lib):
273
+ fdse = naja.SNLDesign.createPrimitive(lib, "FDSE")
274
+ q = naja.SNLScalarTerm.create(fdse, naja.SNLTerm.Direction.Output, "Q")
275
+ c = naja.SNLScalarTerm.create(fdse, naja.SNLTerm.Direction.Input, "C")
276
+ ce = naja.SNLScalarTerm.create(fdse, naja.SNLTerm.Direction.Input, "CE")
277
+ s = naja.SNLScalarTerm.create(fdse, naja.SNLTerm.Direction.Input, "S")
278
+ d = naja.SNLScalarTerm.create(fdse, naja.SNLTerm.Direction.Input, "D")
279
+ naja.SNLParameter.create_binary(fdse, "INIT", 1, 0b0)
280
+ naja.SNLDesign.addInputsToClockArcs([ce, s, d], c)
281
+ naja.SNLDesign.addClockToOutputsArcs(c, q)
282
+
283
+
284
+ def constructRAM32M(lib):
285
+ ram32m = naja.SNLDesign.createPrimitive(lib, "RAM32M")
286
+ doa = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Output, 1, 0, "DOA")
287
+ dob = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Output, 1, 0, "DOB")
288
+ doc = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Output, 1, 0, "DOC")
289
+ dod = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Output, 1, 0, "DOD")
290
+ addra = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 4, 0, "ADDRA")
291
+ addrb = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 4, 0, "ADDRB")
292
+ addrc = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 4, 0, "ADDRC")
293
+ addrd = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 4, 0, "ADDRD")
294
+ naja.SNLDesign.addCombinatorialArcs(doa, list(addra.getBits()))
295
+ naja.SNLDesign.addCombinatorialArcs(dob, list(addrb.getBits()))
296
+ naja.SNLDesign.addCombinatorialArcs(doc, list(addrc.getBits()))
297
+ naja.SNLDesign.addCombinatorialArcs(dod, list(addrd.getBits()))
298
+ dia = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 1, 0, "DIA")
299
+ dib = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 1, 0, "DIB")
300
+ dic = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 1, 0, "DIC")
301
+ did = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 1, 0, "DID")
302
+ wclk = naja.SNLScalarTerm.create(ram32m, naja.SNLTerm.Direction.Input, "WCLK")
303
+ we = naja.SNLScalarTerm.create(ram32m, naja.SNLTerm.Direction.Input, "WE")
304
+ naja.SNLDesign.addInputsToClockArcs([dia, dib, dic, did, we], wclk)
305
+ naja.SNLParameter.create_binary(ram32m, "INIT_A", 64, 0)
306
+ naja.SNLParameter.create_binary(ram32m, "INIT_B", 64, 0)
307
+ naja.SNLParameter.create_binary(ram32m, "INIT_C", 64, 0)
308
+ naja.SNLParameter.create_binary(ram32m, "INIT_D", 64, 0)
309
+
310
+
311
+ def constructRAM64M(lib):
312
+ ram64m = naja.SNLDesign.createPrimitive(lib, "RAM64M")
313
+ doa = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Output, "DOA")
314
+ dob = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Output, "DOB")
315
+ doc = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Output, "DOC")
316
+ dod = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Output, "DOD")
317
+ addra = naja.SNLBusTerm.create(ram64m, naja.SNLTerm.Direction.Input, 5, 0, "ADDRA")
318
+ addrb = naja.SNLBusTerm.create(ram64m, naja.SNLTerm.Direction.Input, 5, 0, "ADDRB")
319
+ addrc = naja.SNLBusTerm.create(ram64m, naja.SNLTerm.Direction.Input, 5, 0, "ADDRC")
320
+ addrd = naja.SNLBusTerm.create(ram64m, naja.SNLTerm.Direction.Input, 5, 0, "ADDRD")
321
+ naja.SNLDesign.addCombinatorialArcs(doa, list(addra.getBits()))
322
+ naja.SNLDesign.addCombinatorialArcs(dob, list(addrb.getBits()))
323
+ naja.SNLDesign.addCombinatorialArcs(doc, list(addrc.getBits()))
324
+ naja.SNLDesign.addCombinatorialArcs(dod, list(addrd.getBits()))
325
+ dia = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "DIA")
326
+ dib = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "DIB")
327
+ dic = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "DIC")
328
+ did = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "DID")
329
+ wclk = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "WCLK")
330
+ we = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "WE")
331
+ naja.SNLDesign.addInputsToClockArcs([dia, dib, dic, did, we], wclk)
332
+ naja.SNLParameter.create_binary(ram64m, "INIT_A", 64, 0)
333
+ naja.SNLParameter.create_binary(ram64m, "INIT_B", 64, 0)
334
+ naja.SNLParameter.create_binary(ram64m, "INIT_C", 64, 0)
335
+ naja.SNLParameter.create_binary(ram64m, "INIT_D", 64, 0)
336
+ naja.SNLParameter.create_binary(ram64m, "IS_WCLK_INVERTED", 1, 0)
337
+
338
+
339
+ def constructRAMB18E1(lib):
340
+ a_inputs = []
341
+ b_inputs = []
342
+ a_outputs = []
343
+ b_outputs = []
344
+ ramb18e1 = naja.SNLDesign.createPrimitive(lib, "RAMB18E1")
345
+ addra = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 13, 0, "ADDRARDADDR")
346
+ a_inputs.extend(list(addra.getBits()))
347
+ addrb = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 13, 0, "ADDRBWRADDR")
348
+ b_inputs.extend(list(addrb.getBits()))
349
+ clka = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "CLKARDCLK")
350
+ clkb = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "CLKBWRCLK")
351
+ diadi = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 15, 0, "DIADI")
352
+ a_inputs.extend(list(diadi.getBits()))
353
+ dibdi = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 15, 0, "DIBDI")
354
+ b_inputs.extend(list(dibdi.getBits()))
355
+ dipadip = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 1, 0, "DIPADIP")
356
+ a_inputs.extend(list(dipadip.getBits()))
357
+ dipbdip = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 1, 0, "DIPBDIP")
358
+ b_inputs.extend(list(dipbdip.getBits()))
359
+ doado = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Output, 15, 0, "DOADO")
360
+ a_outputs.extend(list(doado.getBits()))
361
+ dobdo = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Output, 15, 0, "DOBDO")
362
+ b_outputs.extend(list(dobdo.getBits()))
363
+ dopadop = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Output, 1, 0, "DOPADOP")
364
+ a_outputs.extend(list(dopadop.getBits()))
365
+ dopbdop = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Output, 1, 0, "DOPBDOP")
366
+ b_outputs.extend(list(dopbdop.getBits()))
367
+ enarden = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "ENARDEN")
368
+ a_inputs.append(enarden)
369
+ enbwren = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "ENBWREN")
370
+ b_inputs.append(enbwren)
371
+ regcear = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "REGCEAREGCE")
372
+ a_inputs.append(regcear)
373
+ regceb = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "REGCEB")
374
+ b_inputs.append(regceb)
375
+ rstrama = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "RSTRAMARSTRAM")
376
+ a_inputs.append(rstrama)
377
+ rstramb = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "RSTRAMB")
378
+ b_inputs.append(rstramb)
379
+ rstregar = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "RSTREGARSTREG")
380
+ a_inputs.append(rstregar)
381
+ rstregb = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "RSTREGB")
382
+ b_inputs.append(rstregb)
383
+ wea = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 1, 0, "WEA")
384
+ a_inputs.extend(list(wea.getBits()))
385
+ webwe = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 3, 0, "WEBWE")
386
+ b_inputs.extend(list(webwe.getBits()))
387
+ naja.SNLParameter.create_decimal(ramb18e1, "DOA_REG", 0)
388
+ naja.SNLParameter.create_decimal(ramb18e1, "DOB_REG", 0)
389
+ naja.SNLParameter.create_binary(ramb18e1, "INIT_A", 18, 0x00000)
390
+ naja.SNLParameter.create_binary(ramb18e1, "INIT_B", 18, 0x00000)
391
+ for i in range(64):
392
+ paramName = "INIT_" + hex(i)[2:].zfill(2).upper()
393
+ naja.SNLParameter.create_binary(ramb18e1, paramName, 256, 0)
394
+ for i in range(8):
395
+ paramName = "INITP_" + hex(i)[2:].zfill(2).upper()
396
+ naja.SNLParameter.create_binary(ramb18e1, paramName, 256, 0)
397
+ naja.SNLParameter.create_string(ramb18e1, "RAM_MODE", "TDP")
398
+ naja.SNLParameter.create_decimal(ramb18e1, "READ_WIDTH_A", 0)
399
+ naja.SNLParameter.create_decimal(ramb18e1, "READ_WIDTH_B", 0)
400
+ naja.SNLParameter.create_binary(ramb18e1, "SRVAL_A", 18, 0)
401
+ naja.SNLParameter.create_binary(ramb18e1, "SRVAL_B", 18, 0)
402
+ naja.SNLParameter.create_string(ramb18e1, "WRITE_MODE_A", "WRITE_FIRST")
403
+ naja.SNLParameter.create_string(ramb18e1, "WRITE_MODE_B", "WRITE_FIRST")
404
+ naja.SNLParameter.create_decimal(ramb18e1, "WRITE_WIDTH_A", 0)
405
+ naja.SNLParameter.create_decimal(ramb18e1, "WRITE_WIDTH_B", 0)
406
+ naja.SNLDesign.addInputsToClockArcs(a_inputs, clka)
407
+ naja.SNLDesign.addInputsToClockArcs(b_inputs, clkb)
408
+ naja.SNLDesign.addClockToOutputsArcs(clka, a_outputs)
409
+ naja.SNLDesign.addClockToOutputsArcs(clkb, b_outputs)
410
+
411
+
412
+ def constructRAMB36E1(lib):
413
+ a_inputs = []
414
+ b_inputs = []
415
+ a_outputs = []
416
+ b_outputs = []
417
+ ramb36e1 = naja.SNLDesign.createPrimitive(lib, "RAMB36E1")
418
+ addra = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 15, 0, "ADDRARDADDR")
419
+ a_inputs.extend(list(addra.getBits()))
420
+ addrb = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 15, 0, "ADDRBWRADDR")
421
+ b_inputs.extend(list(addrb.getBits()))
422
+ cascadeina = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "CASCADEINA")
423
+ a_inputs.append(cascadeina)
424
+ cascadeinb = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "CASCADEINB")
425
+ b_inputs.append(cascadeinb)
426
+ cascadeouta = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, "CASCADEOUTA")
427
+ a_outputs.append(cascadeouta)
428
+ cascadeoutb = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, "CASCADEOUTB")
429
+ b_outputs.append(cascadeoutb)
430
+ clka = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "CLKARDCLK")
431
+ clkb = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "CLKBWRCLK")
432
+ dbiterr = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, "DBITERR")
433
+ a_outputs.append(dbiterr) # not sure about which kind of modeling to put here...
434
+ diadi = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 31, 0, "DIADI")
435
+ a_inputs.extend(list(diadi.getBits()))
436
+ dibdi = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 31, 0, "DIBDI")
437
+ b_inputs.extend(list(dibdi.getBits()))
438
+ dipadip = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 3, 0, "DIPADIP")
439
+ a_inputs.extend(list(dipadip.getBits()))
440
+ dipbdip = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 3, 0, "DIPBDIP")
441
+ b_inputs.extend(list(dipbdip.getBits()))
442
+ doado = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 31, 0, "DOADO")
443
+ a_outputs.extend(list(doado.getBits()))
444
+ dobdo = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 31, 0, "DOBDO")
445
+ b_outputs.extend(list(dobdo.getBits()))
446
+ dopadop = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 3, 0, "DOPADOP")
447
+ a_outputs.extend(list(dopadop.getBits()))
448
+ dopbdop = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 3, 0, "DOPBDOP")
449
+ b_outputs.extend(list(dopbdop.getBits()))
450
+ eccparity = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 7, 0, "ECCPARITY")
451
+ # not sure about which kind of modeling to put here.
452
+ a_outputs.extend(list(eccparity.getBits()))
453
+ enarden = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "ENARDEN")
454
+ a_inputs.append(enarden)
455
+ enbwren = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "ENBWREN")
456
+ b_inputs.append(enbwren)
457
+ injectdbiterr = naja.SNLScalarTerm.create(
458
+ ramb36e1, naja.SNLTerm.Direction.Input, "INJECTDBITERR"
459
+ )
460
+ injectsbiterr = naja.SNLScalarTerm.create(
461
+ ramb36e1, naja.SNLTerm.Direction.Input, "INJECTSBITERR"
462
+ )
463
+ a_inputs.append(injectdbiterr) # not sure about which kind of modeling to put here.
464
+ a_inputs.append(injectsbiterr) # not sure about which kind of modeling to put here.
465
+ rdaddrecc = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 8, 0, "RDADDRECC")
466
+ a_outputs.extend(list(rdaddrecc.getBits()))
467
+ regcearegce = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "REGCEAREGCE")
468
+ a_inputs.append(regcearegce)
469
+ regceb = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "REGCEB")
470
+ b_inputs.append(regceb)
471
+ rstramarstram = naja.SNLScalarTerm.create(
472
+ ramb36e1, naja.SNLTerm.Direction.Input, "RSTRAMARSTRAM"
473
+ )
474
+ a_inputs.append(rstramarstram)
475
+ rstramb = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "RSTRAMB")
476
+ b_inputs.append(rstramb)
477
+ rstregarstreg = naja.SNLScalarTerm.create(
478
+ ramb36e1, naja.SNLTerm.Direction.Input, "RSTREGARSTREG"
479
+ )
480
+ a_inputs.append(rstregarstreg)
481
+ rstregb = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "RSTREGB")
482
+ b_inputs.append(rstregb)
483
+ sbiterr = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, "SBITERR")
484
+ a_outputs.append(sbiterr) # not sure about which kind of modeling to put here.
485
+ wea = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 3, 0, "WEA")
486
+ a_inputs.extend(list(wea.getBits()))
487
+ webwe = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 7, 0, "WEBWE")
488
+ b_inputs.extend(list(webwe.getBits()))
489
+ naja.SNLDesign.addInputsToClockArcs(a_inputs, clka)
490
+ naja.SNLDesign.addInputsToClockArcs(b_inputs, clkb)
491
+ naja.SNLDesign.addClockToOutputsArcs(clka, a_outputs)
492
+ naja.SNLDesign.addClockToOutputsArcs(clkb, b_outputs)
493
+ naja.SNLParameter.create_decimal(ramb36e1, "DOA_REG", 0)
494
+ naja.SNLParameter.create_decimal(ramb36e1, "DOB_REG", 0)
495
+ naja.SNLParameter.create_binary(ramb36e1, "INIT_A", 36, 0)
496
+ naja.SNLParameter.create_binary(ramb36e1, "INIT_B", 36, 0)
497
+ for i in range(128):
498
+ paramName = "INIT_" + hex(i)[2:].zfill(2).upper()
499
+ naja.SNLParameter.create_binary(ramb36e1, paramName, 256, 0)
500
+ naja.SNLParameter.create_string(ramb36e1, "RAM_EXTENSION_A", "NONE")
501
+ naja.SNLParameter.create_string(ramb36e1, "RAM_EXTENSION_B", "NONE")
502
+ for i in range(16):
503
+ paramName = "INITP_" + hex(i)[2:].zfill(2).upper()
504
+ naja.SNLParameter.create_binary(ramb36e1, paramName, 256, 0)
505
+ naja.SNLParameter.create_string(ramb36e1, "RAM_MODE", "TDP")
506
+ naja.SNLParameter.create_decimal(ramb36e1, "READ_WIDTH_A", 0)
507
+ naja.SNLParameter.create_decimal(ramb36e1, "READ_WIDTH_B", 0)
508
+ naja.SNLParameter.create_decimal(ramb36e1, "WRITE_WIDTH_A", 0)
509
+ naja.SNLParameter.create_decimal(ramb36e1, "WRITE_WIDTH_B", 0)
510
+ naja.SNLParameter.create_binary(ramb36e1, "SRVAL_A", 36, 0)
511
+ naja.SNLParameter.create_binary(ramb36e1, "SRVAL_B", 36, 0)
512
+ naja.SNLParameter.create_string(ramb36e1, "WRITE_MODE_A", "WRITE_FIRST")
513
+ naja.SNLParameter.create_string(ramb36e1, "WRITE_MODE_B", "WRITE_FIRST")
514
+
515
+
516
+ def load(db):
517
+ logging.info("Loading Xilinx primitives")
518
+ lib = naja.NLLibrary.createPrimitives(db, "xilinx")
519
+ constructIBUF(lib)
520
+ constructOBUF(lib)
521
+ constructBUFG(lib)
522
+ constructDSP48E1(lib)
523
+ constructINV(lib)
524
+ constructCARRY4(lib)
525
+ constructLUT1(lib)
526
+ constructLUT2(lib)
527
+ constructLUT3(lib)
528
+ constructLUT4(lib)
529
+ constructLUT5(lib)
530
+ constructLUT6(lib)
531
+ constructMUXF7(lib)
532
+ constructMUXF8(lib)
533
+ constructSRL16E(lib)
534
+ constructFDCE(lib)
535
+ constructFDPE(lib)
536
+ constructFDRE(lib)
537
+ constructFDSE(lib)
538
+ constructRAM32M(lib)
539
+ constructRAM64M(lib)
540
+ constructRAMB18E1(lib)
541
+ constructRAMB36E1(lib)