najaeda 0.2.9__cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl → 0.2.11__cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.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.

Potentially problematic release.


This version of najaeda might be problematic. Click here for more details.

najaeda/libnaja_dnl.so CHANGED
Binary file
Binary file
najaeda/libnaja_nl.so CHANGED
Binary file
najaeda/libnaja_python.so CHANGED
Binary file
najaeda/naja.so CHANGED
Binary file
najaeda/netlist.py CHANGED
@@ -72,6 +72,35 @@ def get_snl_path_from_id_list(id_list: list) -> naja.SNLPath:
72
72
  return path
73
73
 
74
74
 
75
+ class Attribute:
76
+ def __init__(self, snlAttribute):
77
+ self.snlAttribute = snlAttribute
78
+
79
+ def __str__(self):
80
+ return str(self.snlAttribute)
81
+
82
+ def get_name(self):
83
+ """
84
+ :return: the name of the attribute.
85
+ :rtype: str
86
+ """
87
+ return self.snlAttribute.getName()
88
+
89
+ def has_value(self):
90
+ """
91
+ :return: True if the attribute has a value.
92
+ :rtype: bool
93
+ """
94
+ return self.snlAttribute.hasValue()
95
+
96
+ def get_value(self):
97
+ """
98
+ :return: the value of the attribute.
99
+ :rtype: str
100
+ """
101
+ return self.snlAttribute.getValue()
102
+
103
+
75
104
  class Equipotential:
76
105
  """Class that represents the term and wraps
77
106
  some of the snl occurrence API.
@@ -423,6 +452,25 @@ class Net:
423
452
  yield from self.get_design_terms()
424
453
  yield from self.get_inst_terms()
425
454
 
455
+ def get_attributes(self) -> Iterator[Attribute]:
456
+ """Iterate over the attributes of this Net.
457
+
458
+ :return: the attributes of this Net.
459
+ :rtype: Iterator[Attribute]
460
+ """
461
+ if hasattr(self, "net"):
462
+ snlnet = self.net
463
+ for attribute in snlnet.getAttributes():
464
+ yield Attribute(attribute)
465
+
466
+ def count_attributes(self) -> int:
467
+ """Count the attributes of this Net.
468
+
469
+ :return: the number of attributes of this Net.
470
+ :rtype: int
471
+ """
472
+ return sum(1 for _ in self.get_attributes())
473
+
426
474
 
427
475
  def get_snl_term_for_ids(pathIDs, termIDs):
428
476
  path = get_snl_path_from_id_list(pathIDs)
@@ -638,6 +686,24 @@ class Term:
638
686
  elif snlterm.getDirection() == naja.SNLTerm.Direction.InOut:
639
687
  return Term.Direction.INOUT
640
688
 
689
+ def get_attributes(self) -> Iterator[Attribute]:
690
+ """Iterate over the attributes of this Term.
691
+
692
+ :return: the attributes of this Term.
693
+ :rtype: Iterator[Attribute]
694
+ """
695
+ snlterm = get_snl_term_for_ids(self.pathIDs, self.termIDs)
696
+ for attribute in snlterm.getAttributes():
697
+ yield Attribute(attribute)
698
+
699
+ def count_attributes(self) -> int:
700
+ """Count the attributes of this Term.
701
+
702
+ :return: the number of attributes of this Term.
703
+ :rtype: int
704
+ """
705
+ return sum(1 for _ in self.get_attributes())
706
+
641
707
  def get_combinatorial_inputs(self):
642
708
  """Get all combinatorial input terms of this instance.
643
709
 
@@ -894,35 +960,6 @@ def get_instance_by_path(names: list):
894
960
  return get_top().get_child_instance(names)
895
961
 
896
962
 
897
- class Attribute:
898
- def __init__(self, snlAttribute):
899
- self.snlAttribute = snlAttribute
900
-
901
- def __str__(self):
902
- return str(self.snlAttribute)
903
-
904
- def get_name(self):
905
- """
906
- :return: the name of the attribute.
907
- :rtype: str
908
- """
909
- return self.snlAttribute.getName()
910
-
911
- def has_value(self):
912
- """
913
- :return: True if the attribute has a value.
914
- :rtype: bool
915
- """
916
- return self.snlAttribute.hasValue()
917
-
918
- def get_value(self):
919
- """
920
- :return: the value of the attribute.
921
- :rtype: str
922
- """
923
- return self.snlAttribute.getValue()
924
-
925
-
926
963
  class Instance:
927
964
  """Class that represents an instance in the design hierarchy.
928
965
  """
@@ -1831,7 +1868,7 @@ def apply_constant_propagation():
1831
1868
  naja.NLUniverse.get().applyConstantPropagation()
1832
1869
 
1833
1870
 
1834
- def get_max_fanout() -> int:
1871
+ def get_max_fanout() -> list:
1835
1872
  """Get the maximum fanout of the top design.
1836
1873
 
1837
1874
  :return: the maximum fanout of the top design.
@@ -1842,10 +1879,10 @@ def get_max_fanout() -> int:
1842
1879
  top = naja.NLUniverse.get().getTopDesign()
1843
1880
  if top is not None:
1844
1881
  return naja.NLUniverse.get().getMaxFanout()
1845
- return 0
1882
+ return [0]
1846
1883
 
1847
1884
 
1848
- def get_max_logic_level() -> int:
1885
+ def get_max_logic_level() -> list:
1849
1886
  """Get the maximum logic level of the top design.
1850
1887
 
1851
1888
  :return: the maximum logic level of the top design.
@@ -1856,4 +1893,4 @@ def get_max_logic_level() -> int:
1856
1893
  top = naja.NLUniverse.get().getTopDesign()
1857
1894
  if top is not None:
1858
1895
  return naja.NLUniverse.get().getMaxLogicLevel()
1859
- return 0
1896
+ return [0]
@@ -6,6 +6,20 @@ import logging
6
6
  from najaeda import naja
7
7
 
8
8
 
9
+ def constructSequentialPrimitive(design, clk):
10
+ input_terms = []
11
+ output_terms = []
12
+ for term in design.getBitTerms():
13
+ if term == clk:
14
+ pass
15
+ if term.getDirection() == naja.SNLTerm.Direction.Input:
16
+ input_terms.append(term)
17
+ elif term.getDirection() == naja.SNLTerm.Direction.Output:
18
+ output_terms.append(term)
19
+ naja.SNLDesign.addClockToOutputsArcs(clk, output_terms)
20
+ naja.SNLDesign.addInputsToClockArcs(input_terms, clk)
21
+
22
+
9
23
  def constructIBUF(lib):
10
24
  ibuf = naja.SNLDesign.createPrimitive(lib, "IBUF")
11
25
  i = naja.SNLScalarTerm.create(ibuf, naja.SNLTerm.Direction.Input, "I")
@@ -47,7 +61,7 @@ def constructDSP48E1(lib):
47
61
  naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 47, 0, "PCIN")
48
62
  naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 3, 0, "ALUMODE")
49
63
  naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 2, 0, "CARRYINSEL")
50
- naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CLK")
64
+ clk = naja.SNLScalarTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, "CLK")
51
65
  naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 4, 0, "INMODE")
52
66
  naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 6, 0, "OPMODE")
53
67
  naja.SNLBusTerm.create(dsp48e1, naja.SNLTerm.Direction.Input, 29, 0, "A")
@@ -97,6 +111,7 @@ def constructDSP48E1(lib):
97
111
  naja.SNLParameter.create_boolean(dsp48e1, "USE_DPORT", False)
98
112
  naja.SNLParameter.create_string(dsp48e1, "USE_MULT", "MULTIPLY")
99
113
  naja.SNLParameter.create_string(dsp48e1, "USE_SIMD", "ONE48")
114
+ constructSequentialPrimitive(dsp48e1, clk)
100
115
 
101
116
 
102
117
  def constructINV(lib):
@@ -281,20 +296,25 @@ def constructFDSE(lib):
281
296
 
282
297
  def constructRAM32M(lib):
283
298
  ram32m = naja.SNLDesign.createPrimitive(lib, "RAM32M")
284
- naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Output, 1, 0, "DOA")
285
- naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Output, 1, 0, "DOB")
286
- naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Output, 1, 0, "DOC")
287
- naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Output, 1, 0, "DOD")
288
- naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 4, 0, "ADDRA")
289
- naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 4, 0, "ADDRB")
290
- naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 4, 0, "ADDRC")
291
- naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 4, 0, "ADDRD")
292
- naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 1, 0, "DIA")
293
- naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 1, 0, "DIB")
294
- naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 1, 0, "DIC")
295
- naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 1, 0, "DID")
296
- naja.SNLScalarTerm.create(ram32m, naja.SNLTerm.Direction.Input, "WCLK")
297
- naja.SNLScalarTerm.create(ram32m, naja.SNLTerm.Direction.Input, "WE")
299
+ doa = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Output, 1, 0, "DOA")
300
+ dob = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Output, 1, 0, "DOB")
301
+ doc = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Output, 1, 0, "DOC")
302
+ dod = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Output, 1, 0, "DOD")
303
+ addra = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 4, 0, "ADDRA")
304
+ addrb = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 4, 0, "ADDRB")
305
+ addrc = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 4, 0, "ADDRC")
306
+ addrd = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 4, 0, "ADDRD")
307
+ naja.SNLDesign.addCombinatorialArcs(doa, list(addra.getBits()))
308
+ naja.SNLDesign.addCombinatorialArcs(dob, list(addrb.getBits()))
309
+ naja.SNLDesign.addCombinatorialArcs(doc, list(addrc.getBits()))
310
+ naja.SNLDesign.addCombinatorialArcs(dod, list(addrd.getBits()))
311
+ dia = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 1, 0, "DIA")
312
+ dib = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 1, 0, "DIB")
313
+ dic = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 1, 0, "DIC")
314
+ did = naja.SNLBusTerm.create(ram32m, naja.SNLTerm.Direction.Input, 1, 0, "DID")
315
+ wclk = naja.SNLScalarTerm.create(ram32m, naja.SNLTerm.Direction.Input, "WCLK")
316
+ we = naja.SNLScalarTerm.create(ram32m, naja.SNLTerm.Direction.Input, "WE")
317
+ naja.SNLDesign.addInputsToClockArcs([dia, dib, dic, did, we], wclk)
298
318
  naja.SNLParameter.create_binary(ram32m, "INIT_A", 64, 0)
299
319
  naja.SNLParameter.create_binary(ram32m, "INIT_B", 64, 0)
300
320
  naja.SNLParameter.create_binary(ram32m, "INIT_C", 64, 0)
@@ -303,50 +323,80 @@ def constructRAM32M(lib):
303
323
 
304
324
  def constructRAM64M(lib):
305
325
  ram64m = naja.SNLDesign.createPrimitive(lib, "RAM64M")
306
- naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Output, "DOA")
307
- naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Output, "DOB")
308
- naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Output, "DOC")
309
- naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Output, "DOD")
310
- naja.SNLBusTerm.create(ram64m, naja.SNLTerm.Direction.Input, 5, 0, "ADDRA")
311
- naja.SNLBusTerm.create(ram64m, naja.SNLTerm.Direction.Input, 5, 0, "ADDRB")
312
- naja.SNLBusTerm.create(ram64m, naja.SNLTerm.Direction.Input, 5, 0, "ADDRC")
313
- naja.SNLBusTerm.create(ram64m, naja.SNLTerm.Direction.Input, 5, 0, "ADDRD")
314
- naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "DIA")
315
- naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "DIB")
316
- naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "DIC")
317
- naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "DID")
318
- naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "WCLK")
319
- naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "WE")
326
+ doa = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Output, "DOA")
327
+ dob = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Output, "DOB")
328
+ doc = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Output, "DOC")
329
+ dod = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Output, "DOD")
330
+ addra = naja.SNLBusTerm.create(ram64m, naja.SNLTerm.Direction.Input, 5, 0, "ADDRA")
331
+ addrb = naja.SNLBusTerm.create(ram64m, naja.SNLTerm.Direction.Input, 5, 0, "ADDRB")
332
+ addrc = naja.SNLBusTerm.create(ram64m, naja.SNLTerm.Direction.Input, 5, 0, "ADDRC")
333
+ addrd = naja.SNLBusTerm.create(ram64m, naja.SNLTerm.Direction.Input, 5, 0, "ADDRD")
334
+ naja.SNLDesign.addCombinatorialArcs(doa, list(addra.getBits()))
335
+ naja.SNLDesign.addCombinatorialArcs(dob, list(addrb.getBits()))
336
+ naja.SNLDesign.addCombinatorialArcs(doc, list(addrc.getBits()))
337
+ naja.SNLDesign.addCombinatorialArcs(dod, list(addrd.getBits()))
338
+ dia = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "DIA")
339
+ dib = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "DIB")
340
+ dic = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "DIC")
341
+ did = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "DID")
342
+ wclk = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "WCLK")
343
+ we = naja.SNLScalarTerm.create(ram64m, naja.SNLTerm.Direction.Input, "WE")
344
+ naja.SNLDesign.addInputsToClockArcs([dia, dib, dic, did, we], wclk)
320
345
  naja.SNLParameter.create_binary(ram64m, "INIT_A", 64, 0)
321
346
  naja.SNLParameter.create_binary(ram64m, "INIT_B", 64, 0)
322
347
  naja.SNLParameter.create_binary(ram64m, "INIT_C", 64, 0)
323
348
  naja.SNLParameter.create_binary(ram64m, "INIT_D", 64, 0)
349
+ naja.SNLParameter.create_binary(ram64m, "IS_WCLK_INVERTED", 1, 0)
324
350
 
325
351
 
326
352
  def constructRAMB18E1(lib):
353
+ a_inputs = []
354
+ b_inputs = []
355
+ a_outputs = []
356
+ b_outputs = []
327
357
  ramb18e1 = naja.SNLDesign.createPrimitive(lib, "RAMB18E1")
328
- naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 13, 0, "ADDRARDADDR")
329
- naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 13, 0, "ADDRBWRADDR")
330
- naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "CLKARDCLK")
331
- naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "CLKBWRCLK")
332
- naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 15, 0, "DIADI")
333
- naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 15, 0, "DIBDI")
334
- naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 1, 0, "DIPADIP")
335
- naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 1, 0, "DIPBDIP")
336
- naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Output, 15, 0, "DOADO")
337
- naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Output, 15, 0, "DOBDO")
338
- naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Output, 1, 0, "DOPADOP")
339
- naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Output, 1, 0, "DOPBDOP")
340
- naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "ENARDEN")
341
- naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "ENBWREN")
342
- naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "REGCEAREGCE")
343
- naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "REGCEB")
344
- naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "RSTRAMARSTRAM")
345
- naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "RSTRAMB")
346
- naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "RSTREGARSTREG")
347
- naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "RSTREGB")
348
- naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 1, 0, "WEA")
349
- naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 3, 0, "WEBWE")
358
+ addra = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 13, 0, "ADDRARDADDR")
359
+ a_inputs.extend(list(addra.getBits()))
360
+ addrb = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 13, 0, "ADDRBWRADDR")
361
+ b_inputs.extend(list(addrb.getBits()))
362
+ clka = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "CLKARDCLK")
363
+ clkb = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "CLKBWRCLK")
364
+ diadi = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 15, 0, "DIADI")
365
+ a_inputs.extend(list(diadi.getBits()))
366
+ dibdi = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 15, 0, "DIBDI")
367
+ b_inputs.extend(list(dibdi.getBits()))
368
+ dipadip = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 1, 0, "DIPADIP")
369
+ a_inputs.extend(list(dipadip.getBits()))
370
+ dipbdip = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 1, 0, "DIPBDIP")
371
+ b_inputs.extend(list(dipbdip.getBits()))
372
+ doado = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Output, 15, 0, "DOADO")
373
+ a_outputs.extend(list(doado.getBits()))
374
+ dobdo = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Output, 15, 0, "DOBDO")
375
+ b_outputs.extend(list(dobdo.getBits()))
376
+ dopadop = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Output, 1, 0, "DOPADOP")
377
+ a_outputs.extend(list(dopadop.getBits()))
378
+ dopbdop = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Output, 1, 0, "DOPBDOP")
379
+ b_outputs.extend(list(dopbdop.getBits()))
380
+ enarden = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "ENARDEN")
381
+ a_inputs.append(enarden)
382
+ enbwren = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "ENBWREN")
383
+ b_inputs.append(enbwren)
384
+ regcear = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "REGCEAREGCE")
385
+ a_inputs.append(regcear)
386
+ regceb = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "REGCEB")
387
+ b_inputs.append(regceb)
388
+ rstrama = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "RSTRAMARSTRAM")
389
+ a_inputs.append(rstrama)
390
+ rstramb = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "RSTRAMB")
391
+ b_inputs.append(rstramb)
392
+ rstregar = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "RSTREGARSTREG")
393
+ a_inputs.append(rstregar)
394
+ rstregb = naja.SNLScalarTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, "RSTREGB")
395
+ b_inputs.append(rstregb)
396
+ wea = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 1, 0, "WEA")
397
+ a_inputs.extend(list(wea.getBits()))
398
+ webwe = naja.SNLBusTerm.create(ramb18e1, naja.SNLTerm.Direction.Input, 3, 0, "WEBWE")
399
+ b_inputs.extend(list(webwe.getBits()))
350
400
  naja.SNLParameter.create_decimal(ramb18e1, "DOA_REG", 0)
351
401
  naja.SNLParameter.create_decimal(ramb18e1, "DOB_REG", 0)
352
402
  naja.SNLParameter.create_binary(ramb18e1, "INIT_A", 18, 0x00000)
@@ -366,43 +416,93 @@ def constructRAMB18E1(lib):
366
416
  naja.SNLParameter.create_string(ramb18e1, "WRITE_MODE_B", "WRITE_FIRST")
367
417
  naja.SNLParameter.create_decimal(ramb18e1, "WRITE_WIDTH_A", 0)
368
418
  naja.SNLParameter.create_decimal(ramb18e1, "WRITE_WIDTH_B", 0)
419
+ naja.SNLDesign.addInputsToClockArcs(a_inputs, clka)
420
+ naja.SNLDesign.addInputsToClockArcs(b_inputs, clkb)
421
+ naja.SNLDesign.addClockToOutputsArcs(clka, a_outputs)
422
+ naja.SNLDesign.addClockToOutputsArcs(clkb, b_outputs)
369
423
 
370
424
 
371
425
  def constructRAMB36E1(lib):
426
+ a_inputs = []
427
+ b_inputs = []
428
+ a_outputs = []
429
+ b_outputs = []
372
430
  ramb36e1 = naja.SNLDesign.createPrimitive(lib, "RAMB36E1")
373
- naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 15, 0, "ADDRARDADDR")
374
- naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 15, 0, "ADDRBWRADDR")
375
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "CASCADEINA")
376
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "CASCADEINB")
377
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, "CASCADEOUTA")
378
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, "CASCADEOUTB")
379
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "CLKARDCLK")
380
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "CLKBWRCLK")
381
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, "DBITERR")
382
- naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 31, 0, "DIADI")
383
- naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 31, 0, "DIBDI")
384
- naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 3, 0, "DIPADIP")
385
- naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 3, 0, "DIPBDIP")
386
- naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 31, 0, "DOADO")
387
- naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 31, 0, "DOBDO")
388
- naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 3, 0, "DOPADOP")
389
- naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 3, 0, "DOPBDOP")
390
- naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 7, 0, "ECCPARITY")
391
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "ENARDEN")
392
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "ENBWREN")
393
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "INJECTDBITERR")
394
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "INJECTSBITERR")
395
- naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 8, 0, "RDADDRECC")
396
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "REGCEAREGCE")
397
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "REGCEB")
398
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "RSTRAMARSTRAM")
399
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "RSTRAMB")
400
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "RSTREGARSTREG")
401
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "RSTREGB")
402
- naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, "SBITERR")
403
- naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 3, 0, "WEA")
404
- naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 7, 0, "WEBWE")
405
-
431
+ addra = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 15, 0, "ADDRARDADDR")
432
+ a_inputs.extend(list(addra.getBits()))
433
+ addrb = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 15, 0, "ADDRBWRADDR")
434
+ b_inputs.extend(list(addrb.getBits()))
435
+ cascadeina = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "CASCADEINA")
436
+ a_inputs.append(cascadeina)
437
+ cascadeinb = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "CASCADEINB")
438
+ b_inputs.append(cascadeinb)
439
+ cascadeouta = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, "CASCADEOUTA")
440
+ a_outputs.append(cascadeouta)
441
+ cascadeoutb = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, "CASCADEOUTB")
442
+ b_outputs.append(cascadeoutb)
443
+ clka = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "CLKARDCLK")
444
+ clkb = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "CLKBWRCLK")
445
+ dbiterr = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, "DBITERR")
446
+ a_outputs.append(dbiterr) # not sure about which kind of modeling to put here...
447
+ diadi = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 31, 0, "DIADI")
448
+ a_inputs.extend(list(diadi.getBits()))
449
+ dibdi = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 31, 0, "DIBDI")
450
+ b_inputs.extend(list(dibdi.getBits()))
451
+ dipadip = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 3, 0, "DIPADIP")
452
+ a_inputs.extend(list(dipadip.getBits()))
453
+ dipbdip = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 3, 0, "DIPBDIP")
454
+ b_inputs.extend(list(dipbdip.getBits()))
455
+ doado = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 31, 0, "DOADO")
456
+ a_outputs.extend(list(doado.getBits()))
457
+ dobdo = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 31, 0, "DOBDO")
458
+ b_outputs.extend(list(dobdo.getBits()))
459
+ dopadop = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 3, 0, "DOPADOP")
460
+ a_outputs.extend(list(dopadop.getBits()))
461
+ dopbdop = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 3, 0, "DOPBDOP")
462
+ b_outputs.extend(list(dopbdop.getBits()))
463
+ eccparity = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 7, 0, "ECCPARITY")
464
+ # not sure about which kind of modeling to put here.
465
+ a_outputs.extend(list(eccparity.getBits()))
466
+ enarden = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "ENARDEN")
467
+ a_inputs.append(enarden)
468
+ enbwren = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "ENBWREN")
469
+ b_inputs.append(enbwren)
470
+ injectdbiterr = naja.SNLScalarTerm.create(
471
+ ramb36e1, naja.SNLTerm.Direction.Input, "INJECTDBITERR"
472
+ )
473
+ injectsbiterr = naja.SNLScalarTerm.create(
474
+ ramb36e1, naja.SNLTerm.Direction.Input, "INJECTSBITERR"
475
+ )
476
+ a_inputs.append(injectdbiterr) # not sure about which kind of modeling to put here.
477
+ a_inputs.append(injectsbiterr) # not sure about which kind of modeling to put here.
478
+ rdaddrecc = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, 8, 0, "RDADDRECC")
479
+ a_outputs.extend(list(rdaddrecc.getBits()))
480
+ regcearegce = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "REGCEAREGCE")
481
+ a_inputs.append(regcearegce)
482
+ regceb = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "REGCEB")
483
+ b_inputs.append(regceb)
484
+ rstramarstram = naja.SNLScalarTerm.create(
485
+ ramb36e1, naja.SNLTerm.Direction.Input, "RSTRAMARSTRAM"
486
+ )
487
+ a_inputs.append(rstramarstram)
488
+ rstramb = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "RSTRAMB")
489
+ b_inputs.append(rstramb)
490
+ rstregarstreg = naja.SNLScalarTerm.create(
491
+ ramb36e1, naja.SNLTerm.Direction.Input, "RSTREGARSTREG"
492
+ )
493
+ a_inputs.append(rstregarstreg)
494
+ rstregb = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, "RSTREGB")
495
+ b_inputs.append(rstregb)
496
+ sbiterr = naja.SNLScalarTerm.create(ramb36e1, naja.SNLTerm.Direction.Output, "SBITERR")
497
+ a_outputs.append(sbiterr) # not sure about which kind of modeling to put here.
498
+ wea = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 3, 0, "WEA")
499
+ a_inputs.extend(list(wea.getBits()))
500
+ webwe = naja.SNLBusTerm.create(ramb36e1, naja.SNLTerm.Direction.Input, 7, 0, "WEBWE")
501
+ b_inputs.extend(list(webwe.getBits()))
502
+ naja.SNLDesign.addInputsToClockArcs(a_inputs, clka)
503
+ naja.SNLDesign.addInputsToClockArcs(b_inputs, clkb)
504
+ naja.SNLDesign.addClockToOutputsArcs(clka, a_outputs)
505
+ naja.SNLDesign.addClockToOutputsArcs(clkb, b_outputs)
406
506
  naja.SNLParameter.create_decimal(ramb36e1, "DOA_REG", 0)
407
507
  naja.SNLParameter.create_decimal(ramb36e1, "DOB_REG", 0)
408
508
  naja.SNLParameter.create_binary(ramb36e1, "INIT_A", 36, 0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: najaeda
3
- Version: 0.2.9
3
+ Version: 0.2.11
4
4
  Summary: Naja EDA Python package
5
5
  Author-Email: Naja Authors <contact@keplertech.io>
6
6
  License: Apache License 2.0
@@ -1,25 +1,25 @@
1
- najaeda-0.2.9.dist-info/WHEEL,sha256=O-kQWbnqYG0EPiwFvyyj4v3pknaA3HygCBC7AmJ4_ZE,158
2
- najaeda-0.2.9.dist-info/METADATA,sha256=GMUJC6rYW2tPNfdLcHNehuXdBa5yuOhnFaSFa8gwbek,3655
3
- najaeda-0.2.9.dist-info/RECORD,,
4
- najaeda-0.2.9.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
5
- najaeda-0.2.9.dist-info/licenses/AUTHORS,sha256=7NYEGDAX_1QZvCCHfq8YVXC5ZbwH_pbNI8DcSmm70GU,377
6
- najaeda/libnaja_python.so,sha256=oiZCw1kAVHmZpaWxZMs5HPMqtlvX6ad1q4F0dZLG5ng,1954081
1
+ najaeda-0.2.11.dist-info/WHEEL,sha256=O-kQWbnqYG0EPiwFvyyj4v3pknaA3HygCBC7AmJ4_ZE,158
2
+ najaeda-0.2.11.dist-info/METADATA,sha256=ZsUuSVVSJ8dJzc6WxNuIn-tdwcrH9C3uIFC0ZkMOpQQ,3656
3
+ najaeda-0.2.11.dist-info/RECORD,,
4
+ najaeda-0.2.11.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
5
+ najaeda-0.2.11.dist-info/licenses/AUTHORS,sha256=7NYEGDAX_1QZvCCHfq8YVXC5ZbwH_pbNI8DcSmm70GU,377
6
+ najaeda/libnaja_python.so,sha256=gALZELp7XXePA96d6aJPaL2xJIq6YzFWDwwFeoqppR0,1954817
7
7
  najaeda/_version.py,sha256=c-4hT20dyE-3BcdzOqR0vd92E7ydR5u2c-VmCc6oU8A,332
8
- najaeda/libnaja_nl.so,sha256=DKFF61GRSJ9HN-EAi4CWId0TAOMo04a5vZzsO8wabN4,1646960
9
- najaeda/naja.so,sha256=h2gNvM88NyTILN5qs3J2BJlP2l9f47wEw6Ufk4LKSR0,206561
8
+ najaeda/libnaja_nl.so,sha256=OsVNt5Xg3ZiLX9_LYibN2oT486Q673338vzsBeIo8RQ,1646968
9
+ najaeda/naja.so,sha256=tsg_vPNAoHoNETtKiaG4Bo-siSH3kOs-1f0Y8dfWxIo,206561
10
10
  najaeda/pandas_stats.py,sha256=yOb4ka965U7rN4D6AwvSGmRyeT_O7Ed-5cmT8BFbfeo,1070
11
11
  najaeda/stats.py,sha256=g1F1CEBNVvGgzINOI7sK83123cCbclLDmyUjuep3-EU,16107
12
- najaeda/libnaja_metrics.so,sha256=weTjkcgBVv_aY8Mdr2zPSJv2NtQoMgQYXJKAYrgEsRA,206361
12
+ najaeda/libnaja_metrics.so,sha256=OiBunO0ZP4r1Gpr9a9nxn9DVgIURtWOhK42M2S2lQ_s,276505
13
13
  najaeda/libnaja_bne.so,sha256=ejZf2Zl2AXQagN41HIj8x-3oeoyEffcPTPR0YeY40ng,272577
14
14
  najaeda/__init__.py,sha256=6QrOzlqTfd558FH9Zm6ve54IzkHaDJ8ZO8hTCaEwsL8,218
15
15
  najaeda/libnaja_opt.so,sha256=oFT5aS0zO_0UJMBCqEtOnVJeQgDytasPBBtfrGsBZbA,348713
16
- najaeda/netlist.py,sha256=iDaELvPq9irnAPmk6F7LqjP0W6w9uUpb3b_UG900Q-g,63744
16
+ najaeda/netlist.py,sha256=ul6AMYWKDuAOmo_1P0z8KBiClfcQdhff_XBlYeTnmGk,64921
17
17
  najaeda/net_visitor.py,sha256=P_esjibYb-wBDuF-AyF7es9sJYw1Ha8RhTPu-qKe7G4,1940
18
- najaeda/libnaja_dnl.so,sha256=ErtKaZ2RWYxG_lqmzQXCFakI8yRItTXQEFSvDlaSCQc,276937
18
+ najaeda/libnaja_dnl.so,sha256=nQYOVvmV2dZ2qYkVhp7zhAZ3Ny8X8ay_xsujYV8L6YM,276985
19
19
  najaeda/instance_visitor.py,sha256=JMsPSQaWNiDjxS05rxg83a0PIsrOIuTi9G35hkwdibs,1530
20
20
  najaeda/native/stats.py,sha256=t50hhE9pEFNtlssjES0A-K9TsO_2ZSUAb-e9L3Rt6yc,13063
21
21
  najaeda/native/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- najaeda/primitives/xilinx.py,sha256=Ka-jlu-OxixEZ_yR_niXLHtaUL8HxT1Bg9H9Kpnr4ns,26551
22
+ najaeda/primitives/xilinx.py,sha256=dBzS0bDF9e3kGqadwJDW2H3LmvNfh-AZCU7Hup9ScQQ,31401
23
23
  najaeda/primitives/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  najaeda/primitives/yosys.py,sha256=g1L70AUJoPCkd9B-b9aW4Pzc1AeR9KyIHoXvneW_UEU,8584
25
25
  najaeda/docs/requirements.txt,sha256=1XIBGTIplm2arC9HhDCfLuAjozGdVSXkqmOj8ybuT6U,121