da4ml 0.4.0__py3-none-any.whl → 0.5.0b0__py3-none-any.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 da4ml might be problematic. Click here for more details.

Files changed (40) hide show
  1. da4ml/__init__.py +2 -16
  2. da4ml/_version.py +2 -2
  3. da4ml/cmvm/__init__.py +2 -2
  4. da4ml/cmvm/api.py +15 -4
  5. da4ml/cmvm/core/__init__.py +2 -2
  6. da4ml/cmvm/types.py +32 -18
  7. da4ml/cmvm/util/bit_decompose.py +2 -2
  8. da4ml/codegen/hls/hls_codegen.py +10 -5
  9. da4ml/codegen/hls/hls_model.py +7 -4
  10. da4ml/codegen/rtl/common_source/build_binder.mk +6 -5
  11. da4ml/codegen/rtl/common_source/build_quartus_prj.tcl +104 -0
  12. da4ml/codegen/rtl/common_source/{build_prj.tcl → build_vivado_prj.tcl} +39 -18
  13. da4ml/codegen/rtl/common_source/template.sdc +27 -0
  14. da4ml/codegen/rtl/common_source/template.xdc +11 -13
  15. da4ml/codegen/rtl/rtl_model.py +105 -53
  16. da4ml/codegen/rtl/verilog/__init__.py +2 -1
  17. da4ml/codegen/rtl/verilog/comb.py +47 -7
  18. da4ml/codegen/rtl/verilog/io_wrapper.py +4 -4
  19. da4ml/codegen/rtl/verilog/pipeline.py +12 -12
  20. da4ml/codegen/rtl/verilog/source/lookup_table.v +27 -0
  21. da4ml/codegen/rtl/vhdl/comb.py +27 -21
  22. da4ml/codegen/rtl/vhdl/io_wrapper.py +11 -11
  23. da4ml/codegen/rtl/vhdl/pipeline.py +12 -12
  24. da4ml/codegen/rtl/vhdl/source/lookup_table.vhd +52 -0
  25. da4ml/converter/__init__.py +57 -1
  26. da4ml/converter/hgq2/parser.py +4 -25
  27. da4ml/converter/hgq2/replica.py +210 -25
  28. da4ml/trace/fixed_variable.py +239 -29
  29. da4ml/trace/fixed_variable_array.py +276 -48
  30. da4ml/trace/ops/__init__.py +31 -15
  31. da4ml/trace/ops/reduce_utils.py +3 -3
  32. da4ml/trace/pipeline.py +40 -18
  33. da4ml/trace/tracer.py +33 -8
  34. da4ml/typing/__init__.py +3 -0
  35. {da4ml-0.4.0.dist-info → da4ml-0.5.0b0.dist-info}/METADATA +2 -1
  36. {da4ml-0.4.0.dist-info → da4ml-0.5.0b0.dist-info}/RECORD +39 -35
  37. da4ml/codegen/rtl/vhdl/source/template.xdc +0 -32
  38. {da4ml-0.4.0.dist-info → da4ml-0.5.0b0.dist-info}/WHEEL +0 -0
  39. {da4ml-0.4.0.dist-info → da4ml-0.5.0b0.dist-info}/licenses/LICENSE +0 -0
  40. {da4ml-0.4.0.dist-info → da4ml-0.5.0b0.dist-info}/top_level.txt +0 -0
da4ml/trace/tracer.py CHANGED
@@ -7,8 +7,8 @@ from uuid import UUID
7
7
 
8
8
  import numpy as np
9
9
 
10
- from ..cmvm.types import Op, QInterval, Solution
11
- from .fixed_variable import FixedVariable, _const_f
10
+ from ..cmvm.types import CombLogic, Op, QInterval
11
+ from .fixed_variable import FixedVariable, _const_f, table_context
12
12
  from .fixed_variable_array import FixedVariableArray
13
13
 
14
14
 
@@ -51,6 +51,19 @@ def _comb_trace(inputs: Sequence[FixedVariable], outputs: Sequence[FixedVariable
51
51
  variables, index = gather_variables(inputs, outputs)
52
52
  ops: list[Op] = []
53
53
  inp_uuids = {v.id: i for i, v in enumerate(inputs)}
54
+ lookup_tables = []
55
+
56
+ table_map: dict[int, int] = {}
57
+ for v in variables:
58
+ if not v.opr == 'lookup':
59
+ continue
60
+ assert v._data is not None
61
+ idx = int(v._data)
62
+ if idx in table_map:
63
+ continue
64
+ table_map[idx] = len(lookup_tables)
65
+ lookup_tables.append(table_context.get_table_from_index(idx))
66
+
54
67
  for i, v in enumerate(variables):
55
68
  if v.id in inp_uuids and v.opr != 'const':
56
69
  id0 = inp_uuids[v.id]
@@ -109,22 +122,33 @@ def _comb_trace(inputs: Sequence[FixedVariable], outputs: Sequence[FixedVariable
109
122
  op = Op(id0, id1, opcode, data, qint, v.latency, v.cost)
110
123
  case 'vmul':
111
124
  v0, v1 = v._from
125
+ opcode = 7
112
126
  id0, id1 = index[v0.id], index[v1.id]
113
- op = Op(id0, id1, 7, 0, v.unscaled.qint, v.latency, v.cost)
127
+ assert id0 < i and id1 < i, f'{id0} {id1} {i} {v.id}'
128
+ op = Op(id0, id1, opcode, 0, v.unscaled.qint, v.latency, v.cost)
129
+ case 'lookup':
130
+ opcode = 8
131
+ v0 = v._from[0]
132
+ id0 = index[v0.id]
133
+ data = v._data
134
+ assert data is not None, 'lookup must have data'
135
+ assert id0 < i, f'{id0} {i} {v.id}'
136
+ op = Op(id0, -1, opcode, table_map[int(data)], v.unscaled.qint, v.latency, v.cost)
114
137
  case _:
115
138
  raise NotImplementedError(f'Operation "{v.opr}" is not supported in tracing')
116
139
 
117
140
  ops.append(op)
118
141
  out_index = [index[v.id] for v in outputs]
119
- return ops, out_index
142
+ lookup_tables = None if not lookup_tables else tuple(lookup_tables)
143
+ return ops, out_index, lookup_tables
120
144
 
121
145
 
122
146
  @overload
123
- def comb_trace(inputs: Sequence[FixedVariable], outputs: Sequence[FixedVariable]) -> Solution: ...
147
+ def comb_trace(inputs: Sequence[FixedVariable], outputs: Sequence[FixedVariable]) -> CombLogic: ...
124
148
 
125
149
 
126
150
  @overload
127
- def comb_trace(inputs: FixedVariableArray, outputs: FixedVariableArray) -> Solution: ...
151
+ def comb_trace(inputs: FixedVariableArray, outputs: FixedVariableArray) -> CombLogic: ...
128
152
 
129
153
 
130
154
  def comb_trace(inputs, outputs):
@@ -138,14 +162,14 @@ def comb_trace(inputs, outputs):
138
162
  if not isinstance(v, FixedVariable):
139
163
  outputs[i] = FixedVariable.from_const(v, hwconf, latency, 1)
140
164
 
141
- ops, out_index = _comb_trace(inputs, outputs)
165
+ ops, out_index, lookup_tables = _comb_trace(inputs, outputs)
142
166
  shape = len(inputs), len(outputs)
143
167
  inp_shift = [0] * shape[0]
144
168
  out_sf = [v._factor for v in outputs]
145
169
  out_shift = [int(log2(abs(sf))) for sf in out_sf]
146
170
  out_neg = [sf < 0 for sf in out_sf]
147
171
 
148
- sol = Solution(
172
+ sol = CombLogic(
149
173
  shape,
150
174
  inp_shift,
151
175
  out_index,
@@ -154,6 +178,7 @@ def comb_trace(inputs, outputs):
154
178
  ops,
155
179
  outputs[0].hwconf.carry_size,
156
180
  outputs[0].hwconf.adder_size,
181
+ lookup_tables,
157
182
  )
158
183
 
159
184
  ref_count = sol.ref_count
@@ -0,0 +1,3 @@
1
+ from ..cmvm.api import solver_options_t
2
+
3
+ __all__ = ['solver_options_t']
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: da4ml
3
- Version: 0.4.0
3
+ Version: 0.5.0b0
4
4
  Summary: Distributed Arithmetic for Machine Learning
5
5
  Author-email: Chang Sun <chsun@cern.ch>
6
6
  License: GNU Lesser General Public License v3 (LGPLv3)
@@ -19,6 +19,7 @@ Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
20
  Requires-Dist: llvmlite>=0.44
21
21
  Requires-Dist: numba>=0.61
22
+ Requires-Dist: quantizers<2,>=1
22
23
  Provides-Extra: docs
23
24
  Requires-Dist: hgq2; extra == "docs"
24
25
  Requires-Dist: myst-parser; extra == "docs"
@@ -1,18 +1,18 @@
1
- da4ml/__init__.py,sha256=IETRRvzsJvPMLu1kzzi8UN5FYaM5MhNaXH2A_ZKr2_w,469
2
- da4ml/_version.py,sha256=2_0GUP7yBCXRus-qiJKxQD62z172WSs1sQ6DVpPsbmM,704
3
- da4ml/cmvm/__init__.py,sha256=4Tbt913k9zP0w8R1p6Oss06v5jrManbUhskyHl6e-U0,154
4
- da4ml/cmvm/api.py,sha256=JpecMt6g8zutGh_uWT61_0iX8TuXct7-jq7N7HMIsgA,9626
5
- da4ml/cmvm/types.py,sha256=O8BuBZ2SyucxoXt_KbulAuHNgim7Ls3M6Ovw8prLgXM,21340
6
- da4ml/cmvm/core/__init__.py,sha256=bp2CXI4EOVOQSho1qwfusNs0RliZRt2dV0hZ33W_Kjo,7703
1
+ da4ml/__init__.py,sha256=m8DvkkwIKMPE37S3H1qJxabwstMUOUAUL9TzrV3hZus,117
2
+ da4ml/_version.py,sha256=n7iqgbpEf_-FhhfPmWgI0ybAcdLMRyOtzBWjQk6Ahug,712
3
+ da4ml/cmvm/__init__.py,sha256=zGEQmYlZjWJdY1IhMtIYydWLDLoAogFprEefAZZP0bo,156
4
+ da4ml/cmvm/api.py,sha256=fRMUgY4XjwFfvkIrWrfUXHdPjg720vlNK2sqcynvwOE,9820
5
+ da4ml/cmvm/types.py,sha256=QGpE5bfVni_rTY4-D3Ubj-dRctCpULIrZm2aFY5V3_0,22102
6
+ da4ml/cmvm/core/__init__.py,sha256=it5SXWpF3cSalS3OOmG3AY2vXuVerRMtI_7K__qc8uo,7705
7
7
  da4ml/cmvm/core/indexers.py,sha256=QjXgvExS-B2abHTJPDG4NufMdMEflo1i6cUhFOgJpH4,2945
8
8
  da4ml/cmvm/core/state_opr.py,sha256=wLqO8qVuM2-qCE5LDeYJDNkUruIPHy63obsv4-x-aR8,8661
9
9
  da4ml/cmvm/util/__init__.py,sha256=DkBlUEKA_Gu7n576ja_xZlAQfToWmNL9VXU-jmj6a-g,145
10
- da4ml/cmvm/util/bit_decompose.py,sha256=SUco70HRYf4r1JU6BXwcgabDrhm_yAmucae5FC67i4I,2216
10
+ da4ml/cmvm/util/bit_decompose.py,sha256=0BPFFIwu3arog9NAvjWNURFAyHOstIWhq1dznhL4BkE,2264
11
11
  da4ml/cmvm/util/mat_decompose.py,sha256=eSJNlXwx_jxgqt5vLJrSLQaeq2ZXu8j9mC4d-eq883M,4094
12
12
  da4ml/codegen/__init__.py,sha256=ldMaaixWMxEpLS6skyAgpGCcIMVHdeRCNy57-JxGn3Y,161
13
13
  da4ml/codegen/hls/__init__.py,sha256=LkTtnKTGKX39-wpf7jb10BZ15-dpw4pIlQoATYfVOec,134
14
- da4ml/codegen/hls/hls_codegen.py,sha256=XuhdYnFVNkz5FoiIF31xAnU2THKKCBytPlGEiLjsIew,6514
15
- da4ml/codegen/hls/hls_model.py,sha256=mj6Oc5JaHA4ogJ3ISJ18XcqHBbJchy1muvSNUXbZEIQ,8988
14
+ da4ml/codegen/hls/hls_codegen.py,sha256=q6bWp4StiQDAg8ukT-4lP5qvFsy_X9KPdxhBQatKhhc,6711
15
+ da4ml/codegen/hls/hls_model.py,sha256=vun4iTX6CSRoa4xOhTGTiubrFa3ye01yl8ApKxQNJrk,9171
16
16
  da4ml/codegen/hls/source/binder_util.hh,sha256=ClECVxcEynE_9i4jWCV4y1dnadG3wFqLZfjxg4qHFQQ,1752
17
17
  da4ml/codegen/hls/source/build_binder.mk,sha256=RLu4TP28aJsveyMOHxuDRGEJVoIPMo9T8WyPtqnmtbQ,584
18
18
  da4ml/codegen/hls/source/vitis_bitshift.hh,sha256=u8wjT_cRn7bXcbC5pH3-rS76ekRbwv-VWAAdaP52-dw,765
@@ -33,44 +33,48 @@ da4ml/codegen/hls/source/ap_types/hls_stream.h,sha256=NTkVfbE48c6XnMIfR9WzJbDwUn
33
33
  da4ml/codegen/hls/source/ap_types/etc/ap_private.h,sha256=TDdxGIX0r3D6Ql8KeXoceRmHhdlwFA3Akr3-vvMVAtk,261465
34
34
  da4ml/codegen/hls/source/ap_types/utils/x_hls_utils.h,sha256=x24cf1HyZKv0J8YQIoUvYE3uw6SNL7vWetRGIiFm2Jw,2227
35
35
  da4ml/codegen/rtl/__init__.py,sha256=51VNqMc0JygphulBB4jjqeL9Sd18IUjGhkp2oyUDdnA,505
36
- da4ml/codegen/rtl/rtl_model.py,sha256=Kb3LwNIkQ6nC591xSU8z-BuemQYwfQk-Bc55LheIHnc,14318
36
+ da4ml/codegen/rtl/rtl_model.py,sha256=m0ooEv6OR8hUlilOPYq0XSoMDsuI7SOKcG9C8dyy4h0,16372
37
37
  da4ml/codegen/rtl/common_source/binder_util.hh,sha256=gAcfnfzgDt2OudljfeQjtUtncNVjwRmEwu5VI7VSF6Q,2545
38
- da4ml/codegen/rtl/common_source/build_binder.mk,sha256=i1CsER5jtY3GmKJCw4H8f70vh_2_FJyNVt3FTLzdJf8,1386
39
- da4ml/codegen/rtl/common_source/build_prj.tcl,sha256=QkKZTJOsOfQxgDUmDw8vnrQvUluYWz_yI5VB3oyIzIo,3651
38
+ da4ml/codegen/rtl/common_source/build_binder.mk,sha256=MIymsMRk0OEYCOrb9_lJRuGUtZbVJ86yFaCeGGgvQfg,1658
39
+ da4ml/codegen/rtl/common_source/build_quartus_prj.tcl,sha256=nnMFMu_iN_O5dJyqlzz1q9qi0QjIOKtl_lR4ZHqFLHg,3155
40
+ da4ml/codegen/rtl/common_source/build_vivado_prj.tcl,sha256=DX_JsYYwOpvOMXSwJoJ-deUiM-r1qXbSPtVPW13fgCk,4237
40
41
  da4ml/codegen/rtl/common_source/ioutil.hh,sha256=QXiHbOfkprOL6b-gBQGwcEOQ39uO-bRxKxwObluiK44,3967
41
- da4ml/codegen/rtl/common_source/template.xdc,sha256=GlSRy8tw_orohSuUwUSNEYJLLkAAHttGTfLTcQqRQDg,1262
42
- da4ml/codegen/rtl/verilog/__init__.py,sha256=ZMFGN7atMF98kDVbbUm8dGPr0C8D8ZBfVUJnDOMEn4o,238
43
- da4ml/codegen/rtl/verilog/comb.py,sha256=9pyZ5n-wefj_yoRaQxxbpY7HAlTZYUx2JY2hrBqgPwU,7174
44
- da4ml/codegen/rtl/verilog/io_wrapper.py,sha256=8uSBMFbWRzSsxe7rP3yJLhiXm-MBwk5cyrLBqnantYE,5045
45
- da4ml/codegen/rtl/verilog/pipeline.py,sha256=Qd_6pJOWN9yzxFhWGnsGlfxDQIEfVx4KTCbzYmwgjD0,2420
42
+ da4ml/codegen/rtl/common_source/template.sdc,sha256=_hb-fwZopC84_I2qkhxPOw6mvc5vC7jat4tGUtg6u4w,1148
43
+ da4ml/codegen/rtl/common_source/template.xdc,sha256=0wVPQ37qQduDbcwb3MoWdlrJ1Cg7Or4JDzl8C3BVNGM,1281
44
+ da4ml/codegen/rtl/verilog/__init__.py,sha256=WfBJ_pZ3EFZaWPEfGpa0SPrNQa2DWNfwGRTNqKwA5hY,274
45
+ da4ml/codegen/rtl/verilog/comb.py,sha256=D5WYtKWOgyAQlp5re4NvCh6_kQG0RZiMJeCziZQa9h4,8450
46
+ da4ml/codegen/rtl/verilog/io_wrapper.py,sha256=eczzKDQHQRwEa-3uR5JYmvEjg8kno193Z_bxu7zs6ds,5025
47
+ da4ml/codegen/rtl/verilog/pipeline.py,sha256=8Vj0o3ujI-VxCJC3VPXkkB3_fkQkf_A4fiiWG1gVgzs,2424
48
+ da4ml/codegen/rtl/verilog/source/lookup_table.v,sha256=9Va5FBQfe3V6HGlz1vUL1ZPUhzhnkvOfMLmnr5kyx7M,476
46
49
  da4ml/codegen/rtl/verilog/source/multiplier.v,sha256=MfgRYi7jYPp4W94KLKWpc2MPu2Dg9CDiQ3lJizSIlIQ,1122
47
50
  da4ml/codegen/rtl/verilog/source/mux.v,sha256=1PMSQKGR_Cku1EQnePBVCuX6we_dqYBXW54WBEURvs0,1928
48
51
  da4ml/codegen/rtl/verilog/source/negative.v,sha256=YRfXVxyVQ1vu6LPCWrFzCsAFJxVIQZGZgwCoTOrMXlw,762
49
52
  da4ml/codegen/rtl/verilog/source/shift_adder.v,sha256=qrpXBX9bhHI-o75v5zshOfq0giEATvbeGgTir20_S3Q,1915
50
53
  da4ml/codegen/rtl/vhdl/__init__.py,sha256=ZMFGN7atMF98kDVbbUm8dGPr0C8D8ZBfVUJnDOMEn4o,238
51
- da4ml/codegen/rtl/vhdl/comb.py,sha256=F6CZbL3XnQUS-ILmF3ubTX_G62kMt1xMQJZEFymCgF8,8272
52
- da4ml/codegen/rtl/vhdl/io_wrapper.py,sha256=tdwIHWv5WnADPHxgAQmk4_qRldkeI7icRbkaneAkt-w,5322
53
- da4ml/codegen/rtl/vhdl/pipeline.py,sha256=tjMYreqo1eHIepdOqX71GYePDLYjlsuphotpw19faKA,2641
54
+ da4ml/codegen/rtl/vhdl/comb.py,sha256=FKnr70OBOOUhg8GsSG9lMj--URBFt6lwYhPx0eI2TUk,8198
55
+ da4ml/codegen/rtl/vhdl/io_wrapper.py,sha256=g1_a0fBFBrismudx77nfZoQWKHTf47j4vz8KAKL_Tsg,5315
56
+ da4ml/codegen/rtl/vhdl/pipeline.py,sha256=q-7MOYczLYAK-MDg4XhmBGQlffIpnXKtIWGFOz-4uOw,2645
57
+ da4ml/codegen/rtl/vhdl/source/lookup_table.vhd,sha256=lcZzyMZOOpn0vrX4qt-ZqHgT4FfmnFlS0s-jI1dBqCE,1518
54
58
  da4ml/codegen/rtl/vhdl/source/multiplier.vhd,sha256=Hx63VZy_nVrv7qokwz50fTQVB7LbSBpfRKXhv4lXRAQ,1323
55
59
  da4ml/codegen/rtl/vhdl/source/mux.vhd,sha256=tN8XbK0kD71arjEU--tidtWFpmdyxT37E7HLRC0zMYw,3442
56
60
  da4ml/codegen/rtl/vhdl/source/negative.vhd,sha256=rTOGEdbONDcpWmOw_g3BTr3f5rZEFIhoG_0X0c_Q2NQ,1019
57
61
  da4ml/codegen/rtl/vhdl/source/shift_adder.vhd,sha256=pIBchIa0zXmRcqwGF308_TEzh6aWOTboTEir6lMiSrE,3455
58
- da4ml/codegen/rtl/vhdl/source/template.xdc,sha256=GlSRy8tw_orohSuUwUSNEYJLLkAAHttGTfLTcQqRQDg,1262
59
- da4ml/converter/__init__.py,sha256=x7J2PEXYZsVWffRAkucLxbwzzU404eaijMdLwdhBxtY,57
62
+ da4ml/converter/__init__.py,sha256=V_CfqjG4B1r0tFLqcaRB_CyyYQbrPj3cTzgFXwrODs8,1790
60
63
  da4ml/converter/hgq2/__init__.py,sha256=-gnT_7zXY-KQtPLxsqngwDKZ2TUIynn996pUjjB03B8,59
61
- da4ml/converter/hgq2/parser.py,sha256=Yc5V-B_aEslqIXXJihRi3GMjF9vMkmUQ2_yHMGHMPVo,5573
62
- da4ml/converter/hgq2/replica.py,sha256=aKi6BF2x4s3VUF1Q-__GE4-is9eSC3H8TGFDT05vTWc,16292
64
+ da4ml/converter/hgq2/parser.py,sha256=R4exrC8B-hlw3MQ0rE9iosmmN2hH7AcHOudmZQ6PVXw,4903
65
+ da4ml/converter/hgq2/replica.py,sha256=IBveVY8IncWfIP1jJgdYr4aM0yxpshyr8ryBDSFQN-c,22310
63
66
  da4ml/trace/__init__.py,sha256=dv-rti3t8iE0RqeThfOb40mAg8FZB2WkkGQq3enJft0,282
64
- da4ml/trace/fixed_variable.py,sha256=7vaXFZToCVzPtUZcHv4aoqpqJp46SHUzSWTQijVT0os,21101
65
- da4ml/trace/fixed_variable_array.py,sha256=mJj9aU-jLCPVkFXrTbcRQndtUKEuhVwiFUGVSGX7PHE,12975
66
- da4ml/trace/pipeline.py,sha256=AVeO9BNpQlo_WO6S1nQl7RxiHs5VFRR10tWMg_36C2o,5354
67
- da4ml/trace/tracer.py,sha256=xnaVO4oTWwasfiEBqqeY9o60Lek3eX65IIbvB7JtVKQ,6099
68
- da4ml/trace/ops/__init__.py,sha256=fz5Cg7ZQqPkZlUj4bIOKY6aaoA1fX_G22TeA8I1n4qY,2166
67
+ da4ml/trace/fixed_variable.py,sha256=NeqQ2Bcyu4dQwI6mkhm5uz-foWNZg4u3B8I5-xAQFG0,28398
68
+ da4ml/trace/fixed_variable_array.py,sha256=Ec8WVJ28K8WgcqdBhbuAkv2LnOq4RUBlkvqo2tlTsNs,21473
69
+ da4ml/trace/pipeline.py,sha256=sqWDX3TvD439ayTBQVEbr1Nj2FFl-l7oMxyvVqKG1bA,6188
70
+ da4ml/trace/tracer.py,sha256=YLOhxbCNkmFI79sIB1xo9S8W43yEL4eXfDsdNRWYuz4,7078
71
+ da4ml/trace/ops/__init__.py,sha256=RiWQTfO6aD1NEZFqU2qgGXEeRW88NH3hdGbFOxdsTrA,2823
69
72
  da4ml/trace/ops/conv_utils.py,sha256=Yn73t4F6Tcs1hBwK08L1DPOin2HYVcng4PSkU4vuZFo,8245
70
73
  da4ml/trace/ops/einsum_utils.py,sha256=ODofbvR98FwKBTDZsJ0ObbMjU9_GjPu5AbGuWX6sdCY,11453
71
- da4ml/trace/ops/reduce_utils.py,sha256=vQjEUUbvnW8inAYJWHDzgy-PbgwIdHlH-uzPzSEvrSc,3494
72
- da4ml-0.4.0.dist-info/licenses/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
73
- da4ml-0.4.0.dist-info/METADATA,sha256=TbsF6SmOrTNwmH7r9yAjpzfIiRJCUpYgbDADHtqvMfM,4059
74
- da4ml-0.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
75
- da4ml-0.4.0.dist-info/top_level.txt,sha256=N0tnKVwRqFiffFdeAzCgFq71hUNySh5-ITbNd6-R58Q,6
76
- da4ml-0.4.0.dist-info/RECORD,,
74
+ da4ml/trace/ops/reduce_utils.py,sha256=FE0S6nrZYqww4LxspU-jXfBaNFN614NpZ-98UVnVfdg,3480
75
+ da4ml/typing/__init__.py,sha256=9w6s4LZi7wGIqaRs3rLioPXsf6lErYdo1_rHTqGqb2Q,72
76
+ da4ml-0.5.0b0.dist-info/licenses/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
77
+ da4ml-0.5.0b0.dist-info/METADATA,sha256=a2XAdDSsp752Xp58RfwW09ReycZfHGhiewmZfDuPxVM,4093
78
+ da4ml-0.5.0b0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
79
+ da4ml-0.5.0b0.dist-info/top_level.txt,sha256=N0tnKVwRqFiffFdeAzCgFq71hUNySh5-ITbNd6-R58Q,6
80
+ da4ml-0.5.0b0.dist-info/RECORD,,
@@ -1,32 +0,0 @@
1
- set clock_period ${CLOCK_PERIOD}
2
-
3
- # Clock uncertainty as percentage of clock period
4
- set uncertainty_setup_r ${UNCERTAINITY_SETUP}
5
- set uncertainty_hold_r ${UNCERTAINITY_HOLD}
6
- set delay_max_r ${DELAY_MAX}
7
- set delay_min_r ${DELAY_MIN}
8
-
9
- # Calculate actual uncertainty values
10
- set uncertainty_setup [expr {$clock_period * $uncertainty_setup_r}]
11
- set uncertainty_hold [expr {$clock_period * $uncertainty_hold_r}]
12
- set delay_max [expr {$clock_period * $delay_max_r}]
13
- set delay_min [expr {$clock_period * $delay_min_r}]
14
-
15
- # Create clock with variable period
16
- create_clock -period $clock_period -name sys_clk [get_ports {clk}]
17
-
18
- # Input/Output constraints
19
- set_input_delay -clock sys_clk -max $delay_max [get_ports {inp[*]}]
20
- set_input_delay -clock sys_clk -min $delay_min [get_ports {inp[*]}]
21
-
22
- set_output_delay -clock sys_clk -max $delay_max [get_ports {out[*]}]
23
- set_output_delay -clock sys_clk -min $delay_min [get_ports {out[*]}]
24
-
25
- # Apply calculated uncertainty values
26
- set_clock_uncertainty -setup $uncertainty_setup [get_clocks sys_clk]
27
- set_clock_uncertainty -hold $uncertainty_hold [get_clocks sys_clk]
28
-
29
- set_property HD.CLK_SRC BUFG_X0Y0 [get_ports clk]
30
-
31
- set_property retiming_forward 1 [get_cells {stage[*]_inp}]
32
- set_property retiming_backward 1 [get_cells {stage[*]_inp}]
File without changes