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.
- da4ml/__init__.py +2 -16
- da4ml/_version.py +2 -2
- da4ml/cmvm/__init__.py +2 -2
- da4ml/cmvm/api.py +15 -4
- da4ml/cmvm/core/__init__.py +2 -2
- da4ml/cmvm/types.py +32 -18
- da4ml/cmvm/util/bit_decompose.py +2 -2
- da4ml/codegen/hls/hls_codegen.py +10 -5
- da4ml/codegen/hls/hls_model.py +7 -4
- da4ml/codegen/rtl/common_source/build_binder.mk +6 -5
- da4ml/codegen/rtl/common_source/build_quartus_prj.tcl +104 -0
- da4ml/codegen/rtl/common_source/{build_prj.tcl → build_vivado_prj.tcl} +39 -18
- da4ml/codegen/rtl/common_source/template.sdc +27 -0
- da4ml/codegen/rtl/common_source/template.xdc +11 -13
- da4ml/codegen/rtl/rtl_model.py +105 -53
- da4ml/codegen/rtl/verilog/__init__.py +2 -1
- da4ml/codegen/rtl/verilog/comb.py +47 -7
- da4ml/codegen/rtl/verilog/io_wrapper.py +4 -4
- da4ml/codegen/rtl/verilog/pipeline.py +12 -12
- da4ml/codegen/rtl/verilog/source/lookup_table.v +27 -0
- da4ml/codegen/rtl/vhdl/comb.py +27 -21
- da4ml/codegen/rtl/vhdl/io_wrapper.py +11 -11
- da4ml/codegen/rtl/vhdl/pipeline.py +12 -12
- da4ml/codegen/rtl/vhdl/source/lookup_table.vhd +52 -0
- da4ml/converter/__init__.py +57 -1
- da4ml/converter/hgq2/parser.py +4 -25
- da4ml/converter/hgq2/replica.py +210 -25
- da4ml/trace/fixed_variable.py +239 -29
- da4ml/trace/fixed_variable_array.py +276 -48
- da4ml/trace/ops/__init__.py +31 -15
- da4ml/trace/ops/reduce_utils.py +3 -3
- da4ml/trace/pipeline.py +40 -18
- da4ml/trace/tracer.py +33 -8
- da4ml/typing/__init__.py +3 -0
- {da4ml-0.4.0.dist-info → da4ml-0.5.0b0.dist-info}/METADATA +2 -1
- {da4ml-0.4.0.dist-info → da4ml-0.5.0b0.dist-info}/RECORD +39 -35
- da4ml/codegen/rtl/vhdl/source/template.xdc +0 -32
- {da4ml-0.4.0.dist-info → da4ml-0.5.0b0.dist-info}/WHEEL +0 -0
- {da4ml-0.4.0.dist-info → da4ml-0.5.0b0.dist-info}/licenses/LICENSE +0 -0
- {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
|
|
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
|
-
|
|
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
|
-
|
|
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]) ->
|
|
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) ->
|
|
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 =
|
|
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
|
da4ml/typing/__init__.py
ADDED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: da4ml
|
|
3
|
-
Version: 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=
|
|
2
|
-
da4ml/_version.py,sha256=
|
|
3
|
-
da4ml/cmvm/__init__.py,sha256=
|
|
4
|
-
da4ml/cmvm/api.py,sha256=
|
|
5
|
-
da4ml/cmvm/types.py,sha256=
|
|
6
|
-
da4ml/cmvm/core/__init__.py,sha256=
|
|
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=
|
|
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=
|
|
15
|
-
da4ml/codegen/hls/hls_model.py,sha256=
|
|
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=
|
|
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=
|
|
39
|
-
da4ml/codegen/rtl/common_source/
|
|
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.
|
|
42
|
-
da4ml/codegen/rtl/
|
|
43
|
-
da4ml/codegen/rtl/verilog/
|
|
44
|
-
da4ml/codegen/rtl/verilog/
|
|
45
|
-
da4ml/codegen/rtl/verilog/
|
|
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=
|
|
52
|
-
da4ml/codegen/rtl/vhdl/io_wrapper.py,sha256=
|
|
53
|
-
da4ml/codegen/rtl/vhdl/pipeline.py,sha256=
|
|
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/
|
|
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=
|
|
62
|
-
da4ml/converter/hgq2/replica.py,sha256=
|
|
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=
|
|
65
|
-
da4ml/trace/fixed_variable_array.py,sha256=
|
|
66
|
-
da4ml/trace/pipeline.py,sha256=
|
|
67
|
-
da4ml/trace/tracer.py,sha256=
|
|
68
|
-
da4ml/trace/ops/__init__.py,sha256=
|
|
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=
|
|
72
|
-
da4ml
|
|
73
|
-
da4ml-0.
|
|
74
|
-
da4ml-0.
|
|
75
|
-
da4ml-0.
|
|
76
|
-
da4ml-0.
|
|
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
|
|
File without changes
|
|
File without changes
|