opencos-eda 0.2.35__py3-none-any.whl → 0.2.38__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.
- opencos/commands/__init__.py +2 -0
- opencos/commands/targets.py +49 -0
- opencos/eda.py +39 -99
- opencos/eda_base.py +8 -3
- opencos/eda_config.py +20 -11
- opencos/eda_config_defaults.yml +28 -1
- opencos/eda_config_reduced.yml +0 -1
- opencos/eda_deps_bash_completion.bash +2 -2
- opencos/{eda_extract_deps_keys.py → eda_extract_targets.py} +37 -19
- opencos/export_helper.py +20 -19
- opencos/files.py +2 -2
- opencos/tests/helpers.py +7 -6
- opencos/tests/test_eda.py +22 -0
- opencos/tools/invio.py +4 -5
- opencos/tools/invio_yosys.py +28 -20
- opencos/tools/slang_yosys.py +10 -135
- opencos/tools/yosys.py +135 -0
- {opencos_eda-0.2.35.dist-info → opencos_eda-0.2.38.dist-info}/METADATA +1 -1
- {opencos_eda-0.2.35.dist-info → opencos_eda-0.2.38.dist-info}/RECORD +24 -23
- {opencos_eda-0.2.35.dist-info → opencos_eda-0.2.38.dist-info}/entry_points.txt +1 -1
- {opencos_eda-0.2.35.dist-info → opencos_eda-0.2.38.dist-info}/WHEEL +0 -0
- {opencos_eda-0.2.35.dist-info → opencos_eda-0.2.38.dist-info}/licenses/LICENSE +0 -0
- {opencos_eda-0.2.35.dist-info → opencos_eda-0.2.38.dist-info}/licenses/LICENSE.spdx +0 -0
- {opencos_eda-0.2.35.dist-info → opencos_eda-0.2.38.dist-info}/top_level.txt +0 -0
opencos/tools/yosys.py
CHANGED
|
@@ -5,6 +5,7 @@ Contains classes for ToolYosys
|
|
|
5
5
|
|
|
6
6
|
# pylint: disable=R0801 # (calling functions with same arguments)
|
|
7
7
|
|
|
8
|
+
import os
|
|
8
9
|
import shutil
|
|
9
10
|
import subprocess
|
|
10
11
|
|
|
@@ -84,15 +85,44 @@ class CommonSynthYosys(CommandSynth, ToolYosys):
|
|
|
84
85
|
ToolYosys.__init__(self, config=self.config)
|
|
85
86
|
|
|
86
87
|
self.args.update({
|
|
88
|
+
'sta': False,
|
|
89
|
+
'liberty-file': '',
|
|
90
|
+
'sdc-file': '',
|
|
87
91
|
'yosys-synth': 'synth', # synth_xilinx, synth_altera, etc (see: yosys help)
|
|
88
92
|
'yosys-pre-synth': ['prep', 'proc'], # command run in yosys prior to yosys-synth.
|
|
89
93
|
'yosys-blackbox': [], # list of modules that yosys will blackbox.
|
|
90
94
|
})
|
|
95
|
+
self.args_help.update({
|
|
96
|
+
'sta': 'After running Yosys, run "sta" with --liberty-file.' \
|
|
97
|
+
+ ' sta can be installed via: https://github.com/The-OpenROAD-Project/OpenSTA',
|
|
98
|
+
'sdc-file': '.sdc file to use with --sta, if not present will use auto constraints',
|
|
99
|
+
'liberty-file': 'Single liberty file for synthesis and sta,' \
|
|
100
|
+
+ ' for example: github/OpenSTA/examples/nangate45_slow.lib.gz',
|
|
101
|
+
'yosys-synth': 'The synth command provided to Yosys, see: yosys help.',
|
|
102
|
+
'yosys-pre-synth': 'Yosys commands performed prior to running "synth"' \
|
|
103
|
+
+ ' (or eda arg value for --yosys-synth)',
|
|
104
|
+
'yosys-blackbox': 'List of modules that yosys will blackbox, likely will need these' \
|
|
105
|
+
+ ' in Verilog-2001 for yosys to read outside of slang and synth',
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
self.yosys_out_dir = ''
|
|
109
|
+
self.yosys_v_path = ''
|
|
110
|
+
self.full_work_dir = ''
|
|
111
|
+
self.blackbox_list = []
|
|
91
112
|
|
|
92
113
|
def do_it(self) -> None:
|
|
93
114
|
self.set_tool_defines()
|
|
94
115
|
self.write_eda_config_and_args()
|
|
95
116
|
|
|
117
|
+
# Set up some dirs and filenames.
|
|
118
|
+
self.full_work_dir = self.args.get('work-dir', '')
|
|
119
|
+
if not self.full_work_dir:
|
|
120
|
+
self.error(f'work_dir={self.full_work_dir} is not set')
|
|
121
|
+
self.full_work_dir = os.path.abspath(self.full_work_dir)
|
|
122
|
+
self.yosys_out_dir = os.path.join(self.full_work_dir, 'yosys')
|
|
123
|
+
util.safe_mkdir(self.yosys_out_dir)
|
|
124
|
+
self.yosys_v_path = os.path.join(self.yosys_out_dir, f'{self.args["top"]}.v')
|
|
125
|
+
|
|
96
126
|
if self.is_export_enabled():
|
|
97
127
|
self.do_export()
|
|
98
128
|
return
|
|
@@ -102,3 +132,108 @@ class CommonSynthYosys(CommandSynth, ToolYosys):
|
|
|
102
132
|
def write_and_run_yosys_f_files(self, **kwargs) -> None:
|
|
103
133
|
'''Derived classes must define, to run remainder of do_it() steps'''
|
|
104
134
|
raise NotImplementedError
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def create_yosys_synth_f(self) -> util.ShellCommandList:
|
|
138
|
+
'''Derived classes may define, if they wish to get a list of yosys commands'''
|
|
139
|
+
return util.ShellCommandList([])
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def get_synth_command_lines(self) -> list:
|
|
143
|
+
'''Common yosys tcl after all blackbox and read_verilog commands'''
|
|
144
|
+
|
|
145
|
+
lines = []
|
|
146
|
+
lines += self.args.get('yosys-pre-synth', [])
|
|
147
|
+
|
|
148
|
+
synth_command = self.args.get('yosys-synth', 'synth')
|
|
149
|
+
if self.args['flatten-all']:
|
|
150
|
+
synth_command += ' -flatten'
|
|
151
|
+
|
|
152
|
+
lines.append(synth_command)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
# TODO(drew): I need a blackbox flow here? Or a memory_libmap?
|
|
156
|
+
# --> https://yosyshq.readthedocs.io/projects/yosys/en/latest/cmd/memory_libmap.html
|
|
157
|
+
# TODO(drew): can I run multiple liberty files?
|
|
158
|
+
if self.args['liberty-file']:
|
|
159
|
+
lines += [
|
|
160
|
+
'dfflibmap -liberty ' + self.args['liberty-file'],
|
|
161
|
+
#'memory_libmap -lib ' + self.args['liberty-file'], # Has to be unzipped?
|
|
162
|
+
'abc -liberty ' + self.args['liberty-file'],
|
|
163
|
+
]
|
|
164
|
+
lines += [
|
|
165
|
+
'opt_clean',
|
|
166
|
+
f'write_verilog {self.yosys_v_path}',
|
|
167
|
+
f'write_json {self.yosys_v_path}.json',
|
|
168
|
+
]
|
|
169
|
+
return lines
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def create_sta_f(self) -> util.ShellCommandList:
|
|
173
|
+
'''Returns command list, for running 'sta' on sta.f'''
|
|
174
|
+
|
|
175
|
+
if not self.args['sta']:
|
|
176
|
+
return []
|
|
177
|
+
|
|
178
|
+
if not self.args['liberty-file']:
|
|
179
|
+
self.error('--sta is set, but need to also set --liberty-file=<file>')
|
|
180
|
+
|
|
181
|
+
if self.args['sdc-file']:
|
|
182
|
+
if not os.path.exists(self.args['sdc-file']):
|
|
183
|
+
self.error(f'--sdc-file={self.args["sdc-file"]} file does not exist')
|
|
184
|
+
|
|
185
|
+
if not self.sta_exe:
|
|
186
|
+
self.error(f'--sta is set, but "sta" was not found in PATH, see: {self._URL}')
|
|
187
|
+
|
|
188
|
+
sta_command_list = util.ShellCommandList(
|
|
189
|
+
[ self.sta_exe, '-no_init', '-exit', 'sta.f' ],
|
|
190
|
+
tee_fpath = 'sta.log'
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
# Need to create sta.f:
|
|
194
|
+
if self.args['sdc-file']:
|
|
195
|
+
sdc_path = self.args['sdc-file']
|
|
196
|
+
else:
|
|
197
|
+
# Need to create sdc.f:
|
|
198
|
+
sdc_path = 'sdc.f'
|
|
199
|
+
self.create_sdc_f()
|
|
200
|
+
|
|
201
|
+
with open(os.path.join(self.args['work-dir'], 'sta.f'), 'w',
|
|
202
|
+
encoding='utf-8') as f:
|
|
203
|
+
lines = [
|
|
204
|
+
'read_liberty ' + self.args['liberty-file'],
|
|
205
|
+
'read_verilog ' + self.yosys_v_path,
|
|
206
|
+
'link_design ' + self.args['top'],
|
|
207
|
+
'read_sdc ' + sdc_path,
|
|
208
|
+
'report_checks',
|
|
209
|
+
]
|
|
210
|
+
f.write('\n'.join(lines))
|
|
211
|
+
|
|
212
|
+
return util.ShellCommandList(
|
|
213
|
+
sta_command_list,
|
|
214
|
+
tee_fpath = 'sta.log'
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
def create_sdc_f(self) -> None:
|
|
219
|
+
'''Returns None, creates sdc.f'''
|
|
220
|
+
|
|
221
|
+
if self.args['sdc-file']:
|
|
222
|
+
# already exists from args, return b/c nothing to create.
|
|
223
|
+
return
|
|
224
|
+
|
|
225
|
+
with open(os.path.join(self.args['work-dir'], 'sdc.f'), 'w',
|
|
226
|
+
encoding='utf-8') as f:
|
|
227
|
+
clock_name = self.args['clock-name']
|
|
228
|
+
period = self.args['clock-ns']
|
|
229
|
+
name_not_equal_clocks_str = f'NAME !~ "{clock_name}"'
|
|
230
|
+
lines = [
|
|
231
|
+
f'create_clock -add -name {clock_name} -period {period} [get_ports ' \
|
|
232
|
+
+ '{' + clock_name + '}];',
|
|
233
|
+
f'set_input_delay -max {self.args["idelay-ns"]} -clock {clock_name}' \
|
|
234
|
+
+ ' [get_ports * -filter {DIRECTION == IN && ' \
|
|
235
|
+
+ name_not_equal_clocks_str + '}];',
|
|
236
|
+
f'set_output_delay -max {self.args["odelay-ns"]} -clock {clock_name}' \
|
|
237
|
+
+ ' [get_ports * -filter {DIRECTION == OUT}];',
|
|
238
|
+
]
|
|
239
|
+
f.write('\n'.join(lines))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: opencos-eda
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.38
|
|
4
4
|
Summary: A simple Python package for wrapping RTL simuliatons and synthesis
|
|
5
5
|
Author-email: Simon Sabato <simon@cognichip.ai>, Drew Ranck <drew@cognichip.ai>
|
|
6
6
|
Project-URL: Homepage, https://github.com/cognichip/opencos
|
|
@@ -3,25 +3,25 @@ opencos/_version.py,sha256=qN7iBoOv-v4tEZz-Pu9sVUJwefshJOsgdaddn8HcHio,510
|
|
|
3
3
|
opencos/_waves_pkg.sv,sha256=1lbhQOVGc3t_R8czYjP40hssP0I3FlZOpHTkI7yKFbI,1251
|
|
4
4
|
opencos/deps_helpers.py,sha256=Pgo3dO_QBHzGB0lE2B0uf2vWWDy3dSDN0pvW-eA6ocs,56939
|
|
5
5
|
opencos/deps_schema.py,sha256=MhytzXwp071F14RwxqHt78ak8Qruoe4FeK5XSzkO2f0,14658
|
|
6
|
-
opencos/eda.py,sha256=
|
|
7
|
-
opencos/eda_base.py,sha256=
|
|
8
|
-
opencos/eda_config.py,sha256=
|
|
9
|
-
opencos/eda_config_defaults.yml,sha256=
|
|
6
|
+
opencos/eda.py,sha256=k0_7ppBBPFsQ8Jd0mJGOnc6llUNo2hryHwx8DZ_B_jU,18832
|
|
7
|
+
opencos/eda_base.py,sha256=8kDrKM5YpwSmSqnSIItiV6R9FDr5QjraiEF3PeXe7Lw,77580
|
|
8
|
+
opencos/eda_config.py,sha256=FVp-dg9IVq78LZoh43kFYo9WXKfFxsMQMo6JGulEbEM,8818
|
|
9
|
+
opencos/eda_config_defaults.yml,sha256=0tqs4paxCYZJshb2WW2GfaZyeh_l9ZUKWMh8hh17AWk,10235
|
|
10
10
|
opencos/eda_config_max_verilator_waivers.yml,sha256=lTAU4IOEbUWVlPzuer1YYhIyxpPINeA4EJqcRIT-Ymk,840
|
|
11
|
-
opencos/eda_config_reduced.yml,sha256=
|
|
12
|
-
opencos/eda_deps_bash_completion.bash,sha256=
|
|
13
|
-
opencos/
|
|
11
|
+
opencos/eda_config_reduced.yml,sha256=cQ9jY4J7EvAbeHTiP6bvpDSVJAYiitjLZPSxxLKIEbk,1440
|
|
12
|
+
opencos/eda_deps_bash_completion.bash,sha256=jMkQKY82HBgOnQeMdA1hMrXguRFtB52SMBxUemKovL4,1958
|
|
13
|
+
opencos/eda_extract_targets.py,sha256=LLf8pGia0HxqXQFRck0E990EchbEdiFTC1fQyA8FZqs,4101
|
|
14
14
|
opencos/eda_tool_helper.py,sha256=MxNd_ImyA13DZbzMol1R5H8tJZddJfqyDgFVR2ad374,1666
|
|
15
|
-
opencos/export_helper.py,sha256=
|
|
15
|
+
opencos/export_helper.py,sha256=2SfzHM3m6b5Wh-OMgRWv5I_A95MHIYBn8-H_P3YC7ZQ,19680
|
|
16
16
|
opencos/export_json_convert.py,sha256=KsP1ESmSWs8ouecDC5ikuwOFZNJtLjmiYOvYLeN5UZU,3768
|
|
17
|
-
opencos/files.py,sha256=
|
|
17
|
+
opencos/files.py,sha256=z7HYk5j7cMyjK8e25xzCyyUzOnj9iZt9IpGJibbbh-U,1495
|
|
18
18
|
opencos/names.py,sha256=LMhAE5UH5LEy4zqHp3rOe6tP26i_Dka6JOJzKMo_bkg,1201
|
|
19
19
|
opencos/oc_cli.py,sha256=kj2OXvgxli2WPj4MQ4zTBb36eFtsP2gsqDdeNeWGL4E,132108
|
|
20
20
|
opencos/pcie.py,sha256=VUJljaZJYgScAAx5yn7F6GoA8K9eTcw24otYZbkMpYs,3035
|
|
21
21
|
opencos/peakrdl_cleanup.py,sha256=vLhSOVs6cEzsi_PwAP4pSXu5_ZMZjDvfK_WmHDLbDac,486
|
|
22
22
|
opencos/seed.py,sha256=8TA2uXhBuT_lOaQdAKqdReYvfBWi_KuyQCFJzA2rOVM,549
|
|
23
23
|
opencos/util.py,sha256=3rADW0tUzq69wdHsa2GB060N1jCAK2Dk0NLx6N6BMcc,27861
|
|
24
|
-
opencos/commands/__init__.py,sha256=
|
|
24
|
+
opencos/commands/__init__.py,sha256=d-8heMkBjjm6_yeduZgUv34lPfHVpj9MWP1ifpdjJws,916
|
|
25
25
|
opencos/commands/build.py,sha256=jI5ul53qfwn6X-yfSdSQIcLBhGtzZUk7r_wKBBmKJI0,1425
|
|
26
26
|
opencos/commands/elab.py,sha256=m6Gk03wSzX8UkcmReooK7turF7LpqO0IcdOZwJ8XiyI,1596
|
|
27
27
|
opencos/commands/export.py,sha256=uGDI5_lUhyNB54gFjm9cWv9g_3waEOJN4wOC01oFlCY,3535
|
|
@@ -32,15 +32,16 @@ opencos/commands/proj.py,sha256=MdHTOtQYG93_gT97dWuSyAgUxX2vi9FRhL0dtc-rM98,1096
|
|
|
32
32
|
opencos/commands/sim.py,sha256=phATz_wR0BAH6B_IJ4zyzg_Hptp5hSEOe_-9NLaL_bY,14058
|
|
33
33
|
opencos/commands/sweep.py,sha256=L4AYF3vQHR-fi0871f1CwrD0y4tydrsNpWSDjVf1xIA,8719
|
|
34
34
|
opencos/commands/synth.py,sha256=quB-HWS4LKYTiFBHiYarQi4pMnRmt12wQTZpi14VvlE,4355
|
|
35
|
+
opencos/commands/targets.py,sha256=_jRNhm2Fqj0fmMvTw6Ba39DCsRHf_r_uZCy_R064kpA,1472
|
|
35
36
|
opencos/commands/upload.py,sha256=nlb4nlxrDCQPcabEmH3nP19g4PFILDqFDab4LwJ95Z4,796
|
|
36
37
|
opencos/commands/waves.py,sha256=SRfjfsqhuszXHylQrgqYiUT3a5CQs9doxJQzuV4Ae0w,7055
|
|
37
38
|
opencos/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
39
|
opencos/tests/custom_config.yml,sha256=TRoVM9ZFKPOA_8JmlpzaMhnGO1txmaD14N_8P1oqzew,257
|
|
39
|
-
opencos/tests/helpers.py,sha256=
|
|
40
|
+
opencos/tests/helpers.py,sha256=zzQQP8ZeNUwrvJRQVlpTnvz9yxFG0Jfuss50ZPjxa-c,8240
|
|
40
41
|
opencos/tests/test_build.py,sha256=FQAxOpLVQShAHD_L5rqJctPeSAoqoOCNFI0RXflLuY0,387
|
|
41
42
|
opencos/tests/test_deps_helpers.py,sha256=_nJSgLN6WVlMKqu6sCr29gjQyN3Jj-dVk8Ac64ygpJs,5928
|
|
42
43
|
opencos/tests/test_deps_schema.py,sha256=mWTWI4wriGXC8UAnaeq_MIvWJOvf08-fPUqUgELptQ4,896
|
|
43
|
-
opencos/tests/test_eda.py,sha256=
|
|
44
|
+
opencos/tests/test_eda.py,sha256=eraWvyJJHrlq4CVoeWakYckRG8RRUYtecJRzlcXX45Q,38545
|
|
44
45
|
opencos/tests/test_eda_elab.py,sha256=75bJpOaoO8rn1FXFxiE4KSu5FdjZP1IbW6SyTCjM_ao,2553
|
|
45
46
|
opencos/tests/test_eda_synth.py,sha256=C_1LzblTuK_lHFv_Hh8v3DKUN4hGfxoChYR77GricX4,2871
|
|
46
47
|
opencos/tests/test_oc_cli.py,sha256=-ZmwVX_CPBXCGT9hXIBEr_XUSIGG2eky89YpSJIbRAg,731
|
|
@@ -53,23 +54,23 @@ opencos/tests/deps_files/non_sv_reqs/DEPS.yml,sha256=VZkahO1AKhD9GUV5lK8VwUONEi5
|
|
|
53
54
|
opencos/tests/deps_files/tags_with_tools/DEPS.yml,sha256=-5U1qfJElgpVhmkLEu3lYuvDYva8kDlt6JOdB9jidmc,1377
|
|
54
55
|
opencos/tests/deps_files/test_err_fatal/DEPS.yml,sha256=GnXIUJvshQWR9PlYxX67T53ejf5KhDbtD8sUJB4Rwd0,95
|
|
55
56
|
opencos/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
56
|
-
opencos/tools/invio.py,sha256=
|
|
57
|
+
opencos/tools/invio.py,sha256=q9E9n6xsozDfar-1rLvJEZbCpPb_bQEy6WKEI3KS3dk,3163
|
|
57
58
|
opencos/tools/invio_helpers.py,sha256=1au4CYmV5aC7DHjaZBNemydH6Eq0i-Yt5L3HyKfQOfY,7638
|
|
58
|
-
opencos/tools/invio_yosys.py,sha256=
|
|
59
|
+
opencos/tools/invio_yosys.py,sha256=4zWBeFKXHSyb5WSnf6ZpVG2UwoKF0SC-00I1_VqgXZM,6016
|
|
59
60
|
opencos/tools/iverilog.py,sha256=1SmkJAtG096ozIY6N19UtpD-YT1UKJAcMLJ9blfraP0,6413
|
|
60
61
|
opencos/tools/modelsim_ase.py,sha256=x5xFWBNaln2lVLixN0Od0uNaLKN_Bt1q6a91QmhKoNA,13162
|
|
61
62
|
opencos/tools/questa.py,sha256=AX_3USyf6eMcssH4b-8WLbCzz-cXYnQzlHvCyL9C7Og,7505
|
|
62
63
|
opencos/tools/slang.py,sha256=74EDAAnN7mrrYxgxaPDaoRJZK7Se9B_HsW8Ioi2Nw44,7425
|
|
63
|
-
opencos/tools/slang_yosys.py,sha256=
|
|
64
|
+
opencos/tools/slang_yosys.py,sha256=mw4AfutGjKyCj7NLrHDy2j3p0XC2H7uuBf9RkVQJYoQ,9856
|
|
64
65
|
opencos/tools/surelog.py,sha256=JOMs8SqnzJ_ZL5mEdyyn3Z1r1Kc8hfbV3Pnen1YzxWA,4980
|
|
65
66
|
opencos/tools/tabbycad_yosys.py,sha256=h9kkAi479cZzYfb4R9WBNY_JmR6BgVFj4s3VShnGpoA,7813
|
|
66
67
|
opencos/tools/verilator.py,sha256=0ZHAkkUqnsM1A4B8-u6tff3lhl-cgfDUx-Dq7DaRwkI,18080
|
|
67
68
|
opencos/tools/vivado.py,sha256=cL5IZdudqquddvZqHQGDVmaHSxgBZsMUmAq18q8AgoM,39134
|
|
68
|
-
opencos/tools/yosys.py,sha256=
|
|
69
|
-
opencos_eda-0.2.
|
|
70
|
-
opencos_eda-0.2.
|
|
71
|
-
opencos_eda-0.2.
|
|
72
|
-
opencos_eda-0.2.
|
|
73
|
-
opencos_eda-0.2.
|
|
74
|
-
opencos_eda-0.2.
|
|
75
|
-
opencos_eda-0.2.
|
|
69
|
+
opencos/tools/yosys.py,sha256=aZnRFbsODYRe4BHbfxl6vfWeEP7WJYJk50gCZcn8Fu0,8902
|
|
70
|
+
opencos_eda-0.2.38.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
|
|
71
|
+
opencos_eda-0.2.38.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
|
|
72
|
+
opencos_eda-0.2.38.dist-info/METADATA,sha256=kKhYeLRFFBsjoHaLMNW-xyGGbQejy0hEnW00rsC6puQ,604
|
|
73
|
+
opencos_eda-0.2.38.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
74
|
+
opencos_eda-0.2.38.dist-info/entry_points.txt,sha256=V8OE1lySAFcFQpDNJuVxVZteeSmDH-joLMhGvrxrvmg,164
|
|
75
|
+
opencos_eda-0.2.38.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
|
|
76
|
+
opencos_eda-0.2.38.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|