siliconcompiler 0.26.5__py3-none-any.whl → 0.27.1__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.
- siliconcompiler/_metadata.py +1 -1
- siliconcompiler/apps/sc.py +7 -5
- siliconcompiler/apps/sc_issue.py +2 -16
- siliconcompiler/checklists/oh_tapeout.py +2 -2
- siliconcompiler/core.py +104 -56
- siliconcompiler/flows/_common.py +2 -2
- siliconcompiler/flows/asicflow.py +4 -5
- siliconcompiler/flows/asictopflow.py +3 -3
- siliconcompiler/flows/dvflow.py +3 -4
- siliconcompiler/flows/fpgaflow.py +4 -8
- siliconcompiler/flows/generate_openroad_rcx.py +3 -3
- siliconcompiler/flows/lintflow.py +3 -3
- siliconcompiler/flows/screenshotflow.py +3 -3
- siliconcompiler/flows/showflow.py +11 -6
- siliconcompiler/flows/signoffflow.py +3 -3
- siliconcompiler/flows/synflow.py +4 -5
- siliconcompiler/fpgas/lattice_ice40.py +3 -4
- siliconcompiler/fpgas/vpr_example.py +3 -4
- siliconcompiler/scheduler/send_messages.py +2 -1
- siliconcompiler/schema/schema_cfg.py +1 -14
- siliconcompiler/schema/schema_obj.py +35 -24
- siliconcompiler/sphinx_ext/dynamicgen.py +4 -4
- siliconcompiler/targets/asic_demo.py +1 -1
- siliconcompiler/targets/fpgaflow_demo.py +1 -1
- siliconcompiler/tools/klayout/klayout.py +2 -1
- siliconcompiler/tools/magic/magic.py +2 -1
- siliconcompiler/tools/openroad/openroad.py +2 -1
- siliconcompiler/tools/opensta/__init__.py +2 -1
- siliconcompiler/tools/verilator/verilator.py +2 -1
- siliconcompiler/tools/vivado/vivado.py +2 -1
- siliconcompiler/tools/vpr/vpr.py +2 -1
- siliconcompiler/tools/yosys/syn_asic.py +2 -1
- siliconcompiler/tools/yosys/syn_fpga.py +2 -1
- siliconcompiler/tools/yosys/yosys.py +2 -1
- siliconcompiler/use.py +20 -20
- {siliconcompiler-0.26.5.dist-info → siliconcompiler-0.27.1.dist-info}/METADATA +10 -8
- {siliconcompiler-0.26.5.dist-info → siliconcompiler-0.27.1.dist-info}/RECORD +41 -41
- {siliconcompiler-0.26.5.dist-info → siliconcompiler-0.27.1.dist-info}/WHEEL +1 -1
- {siliconcompiler-0.26.5.dist-info → siliconcompiler-0.27.1.dist-info}/LICENSE +0 -0
- {siliconcompiler-0.26.5.dist-info → siliconcompiler-0.27.1.dist-info}/entry_points.txt +0 -0
- {siliconcompiler-0.26.5.dist-info → siliconcompiler-0.27.1.dist-info}/top_level.txt +0 -0
siliconcompiler/flows/synflow.py
CHANGED
|
@@ -15,14 +15,13 @@ from siliconcompiler.tools.builtin import minimum
|
|
|
15
15
|
def make_docs(chip):
|
|
16
16
|
n = 3
|
|
17
17
|
_make_docs(chip)
|
|
18
|
-
return setup(
|
|
18
|
+
return setup(syn_np=n, timing_np=n)
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
###########################################################################
|
|
22
22
|
# Flowgraph Setup
|
|
23
23
|
############################################################################
|
|
24
|
-
def setup(
|
|
25
|
-
flowname='synflow',
|
|
24
|
+
def setup(flowname='synflow',
|
|
26
25
|
syn_np=1,
|
|
27
26
|
timing_np=1):
|
|
28
27
|
'''
|
|
@@ -44,7 +43,7 @@ def setup(chip,
|
|
|
44
43
|
* timing_np : Number of parallel timing jobs to launch
|
|
45
44
|
'''
|
|
46
45
|
|
|
47
|
-
flow = siliconcompiler.Flow(
|
|
46
|
+
flow = siliconcompiler.Flow(flowname)
|
|
48
47
|
|
|
49
48
|
# Linear flow, up until branch to run parallel verification steps.
|
|
50
49
|
longpipe = ['syn',
|
|
@@ -80,7 +79,7 @@ def setup(chip,
|
|
|
80
79
|
flowtasks.append((step, tasks[step]))
|
|
81
80
|
|
|
82
81
|
# Programmatically build linear portion of flowgraph and fanin/fanout args
|
|
83
|
-
prevstep = setup_multiple_frontends(
|
|
82
|
+
prevstep = setup_multiple_frontends(flow)
|
|
84
83
|
for step, task in flowtasks:
|
|
85
84
|
fanout = 1
|
|
86
85
|
if step in np:
|
|
@@ -5,7 +5,7 @@ from siliconcompiler.utils import register_sc_data_source
|
|
|
5
5
|
####################################################
|
|
6
6
|
# Setup for ICE40 Family FPGAs
|
|
7
7
|
####################################################
|
|
8
|
-
def setup(
|
|
8
|
+
def setup():
|
|
9
9
|
'''
|
|
10
10
|
Lattice ICE40 FPGAs are a family of small parts
|
|
11
11
|
made by Lattice Semiconductor. A fully open source
|
|
@@ -23,10 +23,9 @@ def setup(chip):
|
|
|
23
23
|
"ice40up5k-sg48",
|
|
24
24
|
]
|
|
25
25
|
|
|
26
|
-
register_sc_data_source(chip)
|
|
27
|
-
|
|
28
26
|
for part_name in all_part_names:
|
|
29
|
-
fpga = siliconcompiler.FPGA(
|
|
27
|
+
fpga = siliconcompiler.FPGA(part_name, package='siliconcompiler_data')
|
|
28
|
+
register_sc_data_source(fpga)
|
|
30
29
|
|
|
31
30
|
fpga.set('fpga', part_name, 'vendor', vendor)
|
|
32
31
|
fpga.set('fpga', part_name, 'lutsize', lut_size)
|
|
@@ -6,7 +6,7 @@ from siliconcompiler.utils import register_sc_data_source
|
|
|
6
6
|
####################################################
|
|
7
7
|
# Setup for vpr_example Family FPGAs
|
|
8
8
|
####################################################
|
|
9
|
-
def setup(
|
|
9
|
+
def setup():
|
|
10
10
|
'''
|
|
11
11
|
The vpr_example FPGA family is a set of
|
|
12
12
|
open source architectures used as illustrative
|
|
@@ -36,11 +36,10 @@ def setup(chip):
|
|
|
36
36
|
'example_arch_X030Y030',
|
|
37
37
|
]
|
|
38
38
|
|
|
39
|
-
register_sc_data_source(chip)
|
|
40
|
-
|
|
41
39
|
# Settings common to all parts in family
|
|
42
40
|
for part_name in all_part_names:
|
|
43
|
-
fpga = siliconcompiler.FPGA(
|
|
41
|
+
fpga = siliconcompiler.FPGA(part_name, package='siliconcompiler_data')
|
|
42
|
+
register_sc_data_source(fpga)
|
|
44
43
|
|
|
45
44
|
fpga.set('fpga', part_name, 'vendor', vendor)
|
|
46
45
|
|
|
@@ -12,6 +12,7 @@ import fastjsonschema
|
|
|
12
12
|
from pathlib import Path
|
|
13
13
|
from siliconcompiler.flowgraph import get_executed_nodes
|
|
14
14
|
import uuid
|
|
15
|
+
from siliconcompiler.targets import freepdk45_demo
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
# Compile validation code for API request bodies.
|
|
@@ -172,7 +173,7 @@ def send(chip, msg_type, step, index):
|
|
|
172
173
|
if __name__ == "__main__":
|
|
173
174
|
from siliconcompiler import Chip
|
|
174
175
|
chip = Chip('test')
|
|
175
|
-
chip.
|
|
176
|
+
chip.use(freepdk45_demo)
|
|
176
177
|
chip.set('option', 'scheduler', 'msgevent', 'ALL')
|
|
177
178
|
# chip.set('option', 'scheduler', 'msgcontact', 'fillin')
|
|
178
179
|
send(chip, "BEGIN", "import", "0")
|
|
@@ -10,7 +10,7 @@ try:
|
|
|
10
10
|
except ImportError:
|
|
11
11
|
from siliconcompiler.schema.utils import trim
|
|
12
12
|
|
|
13
|
-
SCHEMA_VERSION = '0.44.
|
|
13
|
+
SCHEMA_VERSION = '0.44.4'
|
|
14
14
|
|
|
15
15
|
#############################################################################
|
|
16
16
|
# PARAM DEFINITION
|
|
@@ -2540,19 +2540,6 @@ def schema_option(cfg):
|
|
|
2540
2540
|
`Unix 'nice' <https://en.wikipedia.org/wiki/Nice_(Unix)>`_.""")
|
|
2541
2541
|
|
|
2542
2542
|
# Compilation
|
|
2543
|
-
scparam(cfg, ['option', 'target'],
|
|
2544
|
-
sctype='str',
|
|
2545
|
-
scope='job',
|
|
2546
|
-
shorthelp="Compilation target",
|
|
2547
|
-
switch="-target <str>",
|
|
2548
|
-
example=["cli: -target freepdk45_demo",
|
|
2549
|
-
"api: chip.set('option', 'target', 'freepdk45_demo')"],
|
|
2550
|
-
schelp="""
|
|
2551
|
-
Sets a target module to be used for compilation. The target
|
|
2552
|
-
module must set up all parameters needed. The target module
|
|
2553
|
-
may load multiple flows and libraries.
|
|
2554
|
-
""")
|
|
2555
|
-
|
|
2556
2543
|
scparam(cfg, ['option', 'pdk'],
|
|
2557
2544
|
sctype='str',
|
|
2558
2545
|
scope='job',
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
# that have isolated Python environments.
|
|
6
6
|
|
|
7
7
|
import copy
|
|
8
|
-
import json
|
|
9
8
|
import logging
|
|
10
9
|
import os
|
|
11
10
|
import re
|
|
@@ -14,6 +13,13 @@ import argparse
|
|
|
14
13
|
import sys
|
|
15
14
|
import shlex
|
|
16
15
|
|
|
16
|
+
try:
|
|
17
|
+
import orjson as json
|
|
18
|
+
_has_orjson = True
|
|
19
|
+
except ModuleNotFoundError:
|
|
20
|
+
import json
|
|
21
|
+
_has_orjson = False
|
|
22
|
+
|
|
17
23
|
try:
|
|
18
24
|
import gzip
|
|
19
25
|
_has_gzip = True
|
|
@@ -223,7 +229,7 @@ class Schema:
|
|
|
223
229
|
|
|
224
230
|
try:
|
|
225
231
|
if re.search(r'(\.json|\.sup)(\.gz)*$', filepath, flags=re.IGNORECASE):
|
|
226
|
-
localcfg = json.
|
|
232
|
+
localcfg = json.loads(fin.read())
|
|
227
233
|
elif re.search(r'(\.yaml|\.yml)(\.gz)*$', filepath, flags=re.IGNORECASE):
|
|
228
234
|
if not _has_yaml:
|
|
229
235
|
raise ImportError('yaml package required to read YAML manifest')
|
|
@@ -1023,7 +1029,11 @@ class Schema:
|
|
|
1023
1029
|
localcfg = {**self.cfg}
|
|
1024
1030
|
if self.__journal is not None:
|
|
1025
1031
|
localcfg['__journal__'] = self.__journal
|
|
1026
|
-
|
|
1032
|
+
if _has_orjson:
|
|
1033
|
+
manifest_str = json.dumps(localcfg, option=json.OPT_INDENT_2).decode()
|
|
1034
|
+
else:
|
|
1035
|
+
manifest_str = json.dumps(localcfg, indent=2)
|
|
1036
|
+
fout.write(manifest_str)
|
|
1027
1037
|
|
|
1028
1038
|
###########################################################################
|
|
1029
1039
|
def write_yaml(self, fout):
|
|
@@ -1467,6 +1477,26 @@ class Schema:
|
|
|
1467
1477
|
help=helpstr,
|
|
1468
1478
|
default=argparse.SUPPRESS)
|
|
1469
1479
|
|
|
1480
|
+
print_additional_arg_value = {}
|
|
1481
|
+
if additional_args:
|
|
1482
|
+
# Add additional user specified arguments
|
|
1483
|
+
arg_dests = []
|
|
1484
|
+
for arg, arg_detail in additional_args.items():
|
|
1485
|
+
do_print = True
|
|
1486
|
+
if "sc_print" in arg_detail:
|
|
1487
|
+
do_print = arg_detail["sc_print"]
|
|
1488
|
+
del arg_detail["sc_print"]
|
|
1489
|
+
argument = parser.add_argument(arg, **arg_detail)
|
|
1490
|
+
print_additional_arg_value[argument.dest] = do_print
|
|
1491
|
+
|
|
1492
|
+
arg_dests.append(argument.dest)
|
|
1493
|
+
used_switches.add(arg)
|
|
1494
|
+
# rewrite additional_args with new dest information
|
|
1495
|
+
additional_args = arg_dests
|
|
1496
|
+
|
|
1497
|
+
if version:
|
|
1498
|
+
parser.add_argument('-version', action='version', version=version)
|
|
1499
|
+
|
|
1470
1500
|
# Check if there are invalid switches
|
|
1471
1501
|
if switchlist:
|
|
1472
1502
|
for switch in switchlist:
|
|
@@ -1503,25 +1533,6 @@ class Schema:
|
|
|
1503
1533
|
else:
|
|
1504
1534
|
scargs.append(argument)
|
|
1505
1535
|
|
|
1506
|
-
if version:
|
|
1507
|
-
parser.add_argument('-version', action='version', version=version)
|
|
1508
|
-
|
|
1509
|
-
print_additional_arg_value = {}
|
|
1510
|
-
if additional_args:
|
|
1511
|
-
# Add additional user specified arguments
|
|
1512
|
-
arg_dests = []
|
|
1513
|
-
for arg, arg_detail in additional_args.items():
|
|
1514
|
-
do_print = True
|
|
1515
|
-
if "sc_print" in arg_detail:
|
|
1516
|
-
do_print = arg_detail["sc_print"]
|
|
1517
|
-
del arg_detail["sc_print"]
|
|
1518
|
-
argument = parser.add_argument(arg, **arg_detail)
|
|
1519
|
-
print_additional_arg_value[argument.dest] = do_print
|
|
1520
|
-
|
|
1521
|
-
arg_dests.append(argument.dest)
|
|
1522
|
-
# rewrite additional_args with new dest information
|
|
1523
|
-
additional_args = arg_dests
|
|
1524
|
-
|
|
1525
1536
|
# Grab argument from pre-process sysargs
|
|
1526
1537
|
cmdargs = vars(parser.parse_args(scargs))
|
|
1527
1538
|
|
|
@@ -1535,7 +1546,7 @@ class Schema:
|
|
|
1535
1546
|
for arg in additional_args:
|
|
1536
1547
|
if arg in cmdargs:
|
|
1537
1548
|
val = cmdargs[arg]
|
|
1538
|
-
if print_additional_arg_value[arg]:
|
|
1549
|
+
if print_additional_arg_value[arg] and val:
|
|
1539
1550
|
msg = f'Command line argument entered: "{arg}" Value: {val}'
|
|
1540
1551
|
self.logger.info(msg)
|
|
1541
1552
|
extra_params[arg] = val
|
|
@@ -1656,7 +1667,7 @@ class Schema:
|
|
|
1656
1667
|
self.set(*args, val, step=step, index=index, clobber=True)
|
|
1657
1668
|
|
|
1658
1669
|
if post_process:
|
|
1659
|
-
post_process(cmdargs)
|
|
1670
|
+
extra_params = post_process(cmdargs, extra_params)
|
|
1660
1671
|
|
|
1661
1672
|
return extra_params
|
|
1662
1673
|
|
|
@@ -386,7 +386,7 @@ class DynamicGen(SphinxDirective):
|
|
|
386
386
|
setup = self.get_setup_method(module)
|
|
387
387
|
if not setup:
|
|
388
388
|
return None
|
|
389
|
-
new_chip = setup(
|
|
389
|
+
new_chip = setup()
|
|
390
390
|
if new_chip:
|
|
391
391
|
return new_chip
|
|
392
392
|
else:
|
|
@@ -399,7 +399,7 @@ class DynamicGen(SphinxDirective):
|
|
|
399
399
|
if docs_chip and docs_configured:
|
|
400
400
|
return docs_chip
|
|
401
401
|
|
|
402
|
-
return self._handle_setup(
|
|
402
|
+
return self._handle_setup(module)
|
|
403
403
|
|
|
404
404
|
def get_ref_prefix(self):
|
|
405
405
|
return self.REF_PREFIX
|
|
@@ -635,7 +635,7 @@ class ToolGen(DynamicGen):
|
|
|
635
635
|
if toolmodule:
|
|
636
636
|
return chip
|
|
637
637
|
else:
|
|
638
|
-
return self._handle_setup(
|
|
638
|
+
return self._handle_setup(module)
|
|
639
639
|
|
|
640
640
|
def display_config(self, chip, modname):
|
|
641
641
|
'''Display config under `eda, <modname>` in a single table.'''
|
|
@@ -726,7 +726,7 @@ class ToolGen(DynamicGen):
|
|
|
726
726
|
s += p
|
|
727
727
|
|
|
728
728
|
try:
|
|
729
|
-
task_setup(
|
|
729
|
+
task_setup()
|
|
730
730
|
|
|
731
731
|
config = build_section("Configuration", self.get_configuration_ref_key(toolname,
|
|
732
732
|
taskname))
|
|
@@ -34,7 +34,7 @@ def setup(chip):
|
|
|
34
34
|
raise SiliconCompilerError(f'{part_name} has not been loaded', chip=chip)
|
|
35
35
|
|
|
36
36
|
# 3. Load flow
|
|
37
|
-
chip.use(fpgaflow)
|
|
37
|
+
chip.use(fpgaflow, partname=part_name)
|
|
38
38
|
|
|
39
39
|
# 4. Select default flow
|
|
40
40
|
chip.set('option', 'flow', 'fpgaflow', clobber=False)
|
|
@@ -15,13 +15,14 @@ from pathlib import Path
|
|
|
15
15
|
import platform
|
|
16
16
|
import shutil
|
|
17
17
|
from siliconcompiler.tools._common import get_tool_task
|
|
18
|
+
from siliconcompiler.targets import freepdk45_demo
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
####################################################################
|
|
21
22
|
# Make Docs
|
|
22
23
|
####################################################################
|
|
23
24
|
def make_docs(chip):
|
|
24
|
-
chip.
|
|
25
|
+
chip.use(freepdk45_demo)
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
####################################################################
|
|
@@ -11,13 +11,14 @@ Sources: https://github.com/RTimothyEdwards/magic
|
|
|
11
11
|
|
|
12
12
|
import os
|
|
13
13
|
from siliconcompiler.tools._common import input_provides, get_tool_task
|
|
14
|
+
from siliconcompiler.targets import freepdk45_demo
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
####################################################################
|
|
17
18
|
# Make Docs
|
|
18
19
|
####################################################################
|
|
19
20
|
def make_docs(chip):
|
|
20
|
-
chip.
|
|
21
|
+
chip.use(freepdk45_demo)
|
|
21
22
|
|
|
22
23
|
|
|
23
24
|
################################
|
|
@@ -18,13 +18,14 @@ from siliconcompiler import utils
|
|
|
18
18
|
from siliconcompiler.tools._common import input_provides, add_common_file, \
|
|
19
19
|
get_tool_task, record_metric
|
|
20
20
|
from siliconcompiler.tools._common.asic import get_mainlib, set_tool_task_var, get_libraries
|
|
21
|
+
from siliconcompiler.targets import asap7_demo
|
|
21
22
|
|
|
22
23
|
|
|
23
24
|
####################################################################
|
|
24
25
|
# Make Docs
|
|
25
26
|
####################################################################
|
|
26
27
|
def make_docs(chip):
|
|
27
|
-
chip.
|
|
28
|
+
chip.use(asap7_demo)
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
################################
|
|
@@ -12,13 +12,14 @@ import os
|
|
|
12
12
|
from siliconcompiler.tools.openroad.openroad import get_library_timing_keypaths
|
|
13
13
|
from siliconcompiler.tools._common import get_tool_task
|
|
14
14
|
from siliconcompiler.tools._common.asic import get_libraries
|
|
15
|
+
from siliconcompiler.targets import asap7_demo
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
####################################################################
|
|
18
19
|
# Make Docs
|
|
19
20
|
####################################################################
|
|
20
21
|
def make_docs(chip):
|
|
21
|
-
chip.
|
|
22
|
+
chip.use(asap7_demo)
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
################################
|
|
@@ -33,13 +33,14 @@ from siliconcompiler.tools._common import (
|
|
|
33
33
|
get_tool_task,
|
|
34
34
|
input_provides
|
|
35
35
|
)
|
|
36
|
+
from siliconcompiler.targets import freepdk45_demo
|
|
36
37
|
|
|
37
38
|
|
|
38
39
|
####################################################################
|
|
39
40
|
# Make Docs
|
|
40
41
|
####################################################################
|
|
41
42
|
def make_docs(chip):
|
|
42
|
-
chip.
|
|
43
|
+
chip.use(freepdk45_demo)
|
|
43
44
|
|
|
44
45
|
|
|
45
46
|
def setup(chip):
|
|
@@ -10,11 +10,12 @@ import os
|
|
|
10
10
|
import re
|
|
11
11
|
from siliconcompiler import sc_open
|
|
12
12
|
from siliconcompiler.tools._common import record_metric
|
|
13
|
+
from siliconcompiler.targets import fpgaflow_demo
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
def make_docs(chip):
|
|
16
17
|
chip.set('fpga', 'partname', 'ice40up5k-sg48')
|
|
17
|
-
chip.
|
|
18
|
+
chip.use(fpgaflow_demo)
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
tool = 'vivado'
|
siliconcompiler/tools/vpr/vpr.py
CHANGED
|
@@ -31,8 +31,9 @@ __block_file = "reports/block_usage.json"
|
|
|
31
31
|
# Make Docs
|
|
32
32
|
######################################################################
|
|
33
33
|
def make_docs(chip):
|
|
34
|
+
from siliconcompiler.targets import fpgaflow_demo
|
|
34
35
|
chip.set('fpga', 'partname', 'example_arch_X005Y005')
|
|
35
|
-
chip.
|
|
36
|
+
chip.use(fpgaflow_demo)
|
|
36
37
|
setup_tool(chip)
|
|
37
38
|
return chip
|
|
38
39
|
|
|
@@ -7,10 +7,11 @@ from siliconcompiler import sc_open
|
|
|
7
7
|
from siliconcompiler import utils
|
|
8
8
|
from siliconcompiler.tools._common.asic import set_tool_task_var, get_libraries, get_mainlib
|
|
9
9
|
from siliconcompiler.tools._common import get_tool_task
|
|
10
|
+
from siliconcompiler.targets import asap7_demo
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
def make_docs(chip):
|
|
13
|
-
chip.
|
|
14
|
+
chip.use(asap7_demo)
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
def setup(chip):
|
|
@@ -2,6 +2,7 @@ from siliconcompiler.tools.yosys.yosys import syn_setup, syn_post_process
|
|
|
2
2
|
import json
|
|
3
3
|
from siliconcompiler import sc_open
|
|
4
4
|
from siliconcompiler.tools._common import get_tool_task, record_metric
|
|
5
|
+
from siliconcompiler.targets import fpgaflow_demo
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
######################################################################
|
|
@@ -9,7 +10,7 @@ from siliconcompiler.tools._common import get_tool_task, record_metric
|
|
|
9
10
|
######################################################################
|
|
10
11
|
def make_docs(chip):
|
|
11
12
|
chip.set('fpga', 'partname', 'ice40up5k-sg48')
|
|
12
|
-
chip.
|
|
13
|
+
chip.use(fpgaflow_demo)
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
def setup(chip):
|
|
@@ -17,13 +17,14 @@ import re
|
|
|
17
17
|
import json
|
|
18
18
|
from siliconcompiler import sc_open
|
|
19
19
|
from siliconcompiler.tools._common import get_tool_task, record_metric
|
|
20
|
+
from siliconcompiler.targets import asap7_demo
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
######################################################################
|
|
23
24
|
# Make Docs
|
|
24
25
|
######################################################################
|
|
25
26
|
def make_docs(chip):
|
|
26
|
-
chip.
|
|
27
|
+
chip.use(asap7_demo)
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
################################
|
siliconcompiler/use.py
CHANGED
|
@@ -4,12 +4,15 @@ from siliconcompiler import Chip
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class PackageChip(Chip):
|
|
7
|
-
def __init__(self,
|
|
7
|
+
def __init__(self, *args, package=None):
|
|
8
8
|
# Start with None as init setting will not depend on package
|
|
9
9
|
self.__package = None
|
|
10
10
|
|
|
11
|
+
name = args[-1]
|
|
11
12
|
super().__init__(name)
|
|
12
|
-
|
|
13
|
+
|
|
14
|
+
if len(args) == 2:
|
|
15
|
+
self.logger.warning(f'passing Chip object to {type(self)} is deprecated')
|
|
13
16
|
|
|
14
17
|
path = None
|
|
15
18
|
ref = None
|
|
@@ -83,11 +86,10 @@ class PDK(PackageChip):
|
|
|
83
86
|
This inherits all methods from :class:`~siliconcompiler.Chip`.
|
|
84
87
|
|
|
85
88
|
Args:
|
|
86
|
-
chip (Chip): A real only copy of the parent chip.
|
|
87
89
|
name (string): Name of the PDK.
|
|
88
90
|
package (string): Name of the data source
|
|
89
91
|
Examples:
|
|
90
|
-
>>> siliconcompiler.PDK(
|
|
92
|
+
>>> siliconcompiler.PDK("asap7")
|
|
91
93
|
Creates a flow object with name "asap7".
|
|
92
94
|
"""
|
|
93
95
|
|
|
@@ -101,11 +103,10 @@ class FPGA(PackageChip):
|
|
|
101
103
|
This inherits all methods from :class:`~siliconcompiler.Chip`.
|
|
102
104
|
|
|
103
105
|
Args:
|
|
104
|
-
chip (Chip): A real only copy of the parent chip.
|
|
105
106
|
name (string): Name of the FPGA.
|
|
106
107
|
package (string): Name of the data source
|
|
107
108
|
Examples:
|
|
108
|
-
>>> siliconcompiler.FPGA(
|
|
109
|
+
>>> siliconcompiler.FPGA("lattice_ice40")
|
|
109
110
|
Creates a flow object with name "lattice_ice40".
|
|
110
111
|
"""
|
|
111
112
|
|
|
@@ -119,17 +120,16 @@ class Library(PackageChip):
|
|
|
119
120
|
This inherits all methods from :class:`~siliconcompiler.Chip`.
|
|
120
121
|
|
|
121
122
|
Args:
|
|
122
|
-
chip (Chip): A real only copy of the parent chip.
|
|
123
123
|
name (string): Name of the library.
|
|
124
124
|
package (string): Name of the data source
|
|
125
125
|
auto_enable (boolean): If True, will automatically be added to ['option','library'].
|
|
126
126
|
This is only valid for non-logiclibs and macrolibs
|
|
127
127
|
Examples:
|
|
128
|
-
>>> siliconcompiler.Library(
|
|
128
|
+
>>> siliconcompiler.Library("asap7sc7p5t")
|
|
129
129
|
Creates a library object with name "asap7sc7p5t".
|
|
130
130
|
"""
|
|
131
|
-
def __init__(self,
|
|
132
|
-
super().__init__(
|
|
131
|
+
def __init__(self, *args, package=None, auto_enable=False):
|
|
132
|
+
super().__init__(*args, package=package)
|
|
133
133
|
|
|
134
134
|
self.__auto_enable = auto_enable
|
|
135
135
|
|
|
@@ -146,15 +146,15 @@ class Flow(Chip):
|
|
|
146
146
|
This inherits all methods from :class:`~siliconcompiler.Chip`.
|
|
147
147
|
|
|
148
148
|
Args:
|
|
149
|
-
chip (Chip): A real only copy of the parent chip.
|
|
150
149
|
name (string): Name of the flow.
|
|
151
150
|
Examples:
|
|
152
|
-
>>> siliconcompiler.Flow(
|
|
151
|
+
>>> siliconcompiler.Flow("asicflow")
|
|
153
152
|
Creates a flow object with name "asicflow".
|
|
154
153
|
"""
|
|
155
|
-
def __init__(self,
|
|
156
|
-
super().__init__(
|
|
157
|
-
|
|
154
|
+
def __init__(self, *args):
|
|
155
|
+
super().__init__(args[-1])
|
|
156
|
+
if len(args) == 2:
|
|
157
|
+
self.logger.warning(f'passing Chip object to {type(self)} is deprecated')
|
|
158
158
|
|
|
159
159
|
|
|
160
160
|
class Checklist(Chip):
|
|
@@ -166,12 +166,12 @@ class Checklist(Chip):
|
|
|
166
166
|
This inherits all methods from :class:`~siliconcompiler.Chip`.
|
|
167
167
|
|
|
168
168
|
Args:
|
|
169
|
-
chip (Chip): A real only copy of the parent chip.
|
|
170
169
|
name (string): Name of the checklist.
|
|
171
170
|
Examples:
|
|
172
|
-
>>> siliconcompiler.Checklist(
|
|
171
|
+
>>> siliconcompiler.Checklist("tapeout")
|
|
173
172
|
Creates a checklist object with name "tapeout".
|
|
174
173
|
"""
|
|
175
|
-
def __init__(self,
|
|
176
|
-
super().__init__(
|
|
177
|
-
|
|
174
|
+
def __init__(self, *args):
|
|
175
|
+
super().__init__(args[-1])
|
|
176
|
+
if len(args) == 2:
|
|
177
|
+
self.logger.warning(f'passing Chip object to {type(self)} is deprecated')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: siliconcompiler
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.27.1
|
|
4
4
|
Summary: A compiler framework that automates translation from source code to silicon.
|
|
5
5
|
Author-email: Andreas Olofsson <andreas.d.olofsson@gmail.com>
|
|
6
6
|
License: Apache License 2.0
|
|
@@ -30,6 +30,7 @@ Requires-Dist: fasteners ==0.19
|
|
|
30
30
|
Requires-Dist: fastjsonschema ==2.20.0
|
|
31
31
|
Requires-Dist: docker ==7.1.0
|
|
32
32
|
Requires-Dist: sc-surelog ==1.84.1
|
|
33
|
+
Requires-Dist: orjson ==3.10.7
|
|
33
34
|
Requires-Dist: streamlit ==1.37.1
|
|
34
35
|
Requires-Dist: streamlit-agraph ==0.0.45
|
|
35
36
|
Requires-Dist: streamlit-tree-select ==0.0.5
|
|
@@ -90,15 +91,16 @@ SiliconCompiler is available as wheel packages on PyPI for macOS, Windows and
|
|
|
90
91
|
Linux platforms. For working Python 3.8-3.12 environment, just use pip.
|
|
91
92
|
|
|
92
93
|
```sh
|
|
93
|
-
|
|
94
|
+
python3 -m pip install --upgrade siliconcompiler
|
|
94
95
|
```
|
|
95
96
|
|
|
96
|
-
Converting RTL into DRC clean GDS takes
|
|
97
|
+
Converting RTL into DRC clean GDS takes 10 lines of simple Python code.
|
|
97
98
|
|
|
98
99
|
```python
|
|
99
|
-
import
|
|
100
|
-
|
|
101
|
-
chip
|
|
100
|
+
from siliconcompiler import Chip # import python package
|
|
101
|
+
from siliconcompiler.targets import skywater130_demo
|
|
102
|
+
chip = Chip('heartbeat') # create chip object
|
|
103
|
+
chip.use(skywater130_demo) # load a pre-defined target
|
|
102
104
|
chip.input('heartbeat.v') # set input sources
|
|
103
105
|
chip.clock('clk', period=10) # set constraints
|
|
104
106
|
chip.set('option','remote', True) # enable remote execution
|
|
@@ -161,8 +163,8 @@ To install the project from source (recommended for developers only).
|
|
|
161
163
|
```bash
|
|
162
164
|
git clone https://github.com/siliconcompiler/siliconcompiler
|
|
163
165
|
cd siliconcompiler
|
|
164
|
-
|
|
165
|
-
|
|
166
|
+
python3 -m pip install -e . # Required install step
|
|
167
|
+
python3 -m pip install -e .[docs,test] # Optional install step for generating docs and running tests
|
|
166
168
|
```
|
|
167
169
|
|
|
168
170
|
# EDA Tool Installation
|