siliconcompiler 0.35.4__py3-none-any.whl → 0.36.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/constraints/__init__.py +4 -1
- siliconcompiler/constraints/asic_timing.py +230 -38
- siliconcompiler/constraints/fpga_timing.py +209 -14
- siliconcompiler/constraints/timing_mode.py +82 -0
- siliconcompiler/data/templates/tcl/manifest.tcl.j2 +0 -6
- siliconcompiler/flowgraph.py +95 -42
- siliconcompiler/flows/generate_openroad_rcx.py +2 -2
- siliconcompiler/flows/highresscreenshotflow.py +37 -0
- siliconcompiler/library.py +2 -1
- siliconcompiler/package/__init__.py +39 -45
- siliconcompiler/project.py +4 -1
- siliconcompiler/scheduler/scheduler.py +64 -35
- siliconcompiler/scheduler/schedulernode.py +5 -2
- siliconcompiler/scheduler/slurm.py +7 -6
- siliconcompiler/scheduler/taskscheduler.py +19 -16
- siliconcompiler/schema/_metadata.py +1 -1
- siliconcompiler/schema/namedschema.py +2 -4
- siliconcompiler/schema_support/cmdlineschema.py +0 -3
- siliconcompiler/schema_support/dependencyschema.py +0 -6
- siliconcompiler/schema_support/record.py +4 -3
- siliconcompiler/tool.py +58 -27
- siliconcompiler/tools/_common/tcl/sc_schema_access.tcl +0 -6
- siliconcompiler/tools/chisel/convert.py +44 -0
- siliconcompiler/tools/ghdl/convert.py +37 -2
- siliconcompiler/tools/icarus/compile.py +14 -0
- siliconcompiler/tools/keplerformal/__init__.py +7 -0
- siliconcompiler/tools/keplerformal/lec.py +112 -0
- siliconcompiler/tools/klayout/drc.py +14 -0
- siliconcompiler/tools/klayout/export.py +40 -0
- siliconcompiler/tools/klayout/operations.py +40 -0
- siliconcompiler/tools/klayout/screenshot.py +66 -1
- siliconcompiler/tools/klayout/scripts/klayout_export.py +10 -40
- siliconcompiler/tools/klayout/scripts/klayout_show.py +4 -4
- siliconcompiler/tools/klayout/scripts/klayout_utils.py +13 -1
- siliconcompiler/tools/montage/tile.py +26 -12
- siliconcompiler/tools/openroad/__init__.py +11 -0
- siliconcompiler/tools/openroad/_apr.py +780 -11
- siliconcompiler/tools/openroad/antenna_repair.py +26 -0
- siliconcompiler/tools/openroad/fillmetal_insertion.py +14 -0
- siliconcompiler/tools/openroad/global_placement.py +67 -0
- siliconcompiler/tools/openroad/global_route.py +15 -0
- siliconcompiler/tools/openroad/init_floorplan.py +19 -2
- siliconcompiler/tools/openroad/macro_placement.py +252 -0
- siliconcompiler/tools/openroad/power_grid.py +43 -0
- siliconcompiler/tools/openroad/power_grid_analysis.py +1 -1
- siliconcompiler/tools/openroad/rcx_bench.py +28 -0
- siliconcompiler/tools/openroad/rcx_extract.py +14 -0
- siliconcompiler/tools/openroad/rdlroute.py +14 -0
- siliconcompiler/tools/openroad/repair_design.py +41 -0
- siliconcompiler/tools/openroad/repair_timing.py +54 -0
- siliconcompiler/tools/openroad/screenshot.py +31 -1
- siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +8 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +54 -15
- siliconcompiler/tools/openroad/scripts/apr/sc_irdrop.tcl +6 -4
- siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +4 -4
- siliconcompiler/tools/openroad/scripts/common/procs.tcl +14 -5
- siliconcompiler/tools/openroad/scripts/common/read_liberty.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/common/reports.tcl +6 -3
- siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/common/write_data_physical.tcl +8 -0
- siliconcompiler/tools/openroad/scripts/common/write_images.tcl +16 -12
- siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +3 -1
- siliconcompiler/tools/openroad/write_data.py +78 -2
- siliconcompiler/tools/opensta/scripts/sc_check_library.tcl +2 -2
- siliconcompiler/tools/opensta/scripts/sc_report_libraries.tcl +2 -2
- siliconcompiler/tools/opensta/scripts/sc_timing.tcl +12 -14
- siliconcompiler/tools/opensta/timing.py +42 -3
- siliconcompiler/tools/slang/elaborate.py +16 -1
- siliconcompiler/tools/surelog/parse.py +54 -0
- siliconcompiler/tools/verilator/compile.py +120 -0
- siliconcompiler/tools/vivado/syn_fpga.py +27 -0
- siliconcompiler/tools/vpr/route.py +40 -0
- siliconcompiler/tools/xdm/convert.py +14 -0
- siliconcompiler/tools/xyce/simulate.py +26 -0
- siliconcompiler/tools/yosys/lec_asic.py +13 -0
- siliconcompiler/tools/yosys/syn_asic.py +332 -3
- siliconcompiler/tools/yosys/syn_fpga.py +32 -0
- siliconcompiler/toolscripts/_tools.json +9 -4
- siliconcompiler/toolscripts/ubuntu22/install-keplerformal.sh +72 -0
- siliconcompiler/toolscripts/ubuntu24/install-keplerformal.sh +72 -0
- siliconcompiler/utils/multiprocessing.py +11 -0
- siliconcompiler/utils/settings.py +70 -49
- {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.1.dist-info}/METADATA +4 -4
- {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.1.dist-info}/RECORD +89 -83
- {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.1.dist-info}/WHEEL +0 -0
- {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.1.dist-info}/entry_points.txt +0 -0
- {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.1.dist-info}/licenses/LICENSE +0 -0
- {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.1.dist-info}/top_level.txt +0 -0
|
@@ -2,7 +2,7 @@ import json
|
|
|
2
2
|
|
|
3
3
|
import os.path
|
|
4
4
|
|
|
5
|
-
from typing import Optional
|
|
5
|
+
from typing import Optional, Union, List
|
|
6
6
|
|
|
7
7
|
from siliconcompiler.tools.yosys.prepareLib import process_liberty_file
|
|
8
8
|
from siliconcompiler import sc_open
|
|
@@ -56,14 +56,14 @@ class _ASICTask(ASICTask, YosysTask):
|
|
|
56
56
|
if not scenario.get_libcorner():
|
|
57
57
|
continue
|
|
58
58
|
if "setup" in scenario.get_check():
|
|
59
|
-
self.
|
|
59
|
+
self.add_yosys_synthesiscorner(scenario.get_libcorner())
|
|
60
60
|
return
|
|
61
61
|
|
|
62
62
|
if scenarios:
|
|
63
63
|
# try getting it from first constraint with a valid libcorner
|
|
64
64
|
for scenario in scenarios.get_scenario().values():
|
|
65
65
|
if scenario.get_libcorner():
|
|
66
|
-
self.
|
|
66
|
+
self.add_yosys_synthesiscorner(scenario.get_libcorner())
|
|
67
67
|
return
|
|
68
68
|
|
|
69
69
|
def pre_process(self):
|
|
@@ -132,6 +132,28 @@ class _ASICTask(ASICTask, YosysTask):
|
|
|
132
132
|
self.add("var", 'synthesis_libraries', output_file)
|
|
133
133
|
|
|
134
134
|
def add_synthesis_corner(self, corner, step=None, index=None, clobber=True):
|
|
135
|
+
"""Deprecated"""
|
|
136
|
+
import warnings
|
|
137
|
+
warnings.warn(
|
|
138
|
+
"add_synthesis_corner is deprecated. "
|
|
139
|
+
"Please use add_yosys_synthesiscorner instead.",
|
|
140
|
+
DeprecationWarning,
|
|
141
|
+
stacklevel=2
|
|
142
|
+
)
|
|
143
|
+
self.add_yosys_synthesiscorner(corner, step=step, index=index, clobber=clobber)
|
|
144
|
+
|
|
145
|
+
def add_yosys_synthesiscorner(self, corner: str,
|
|
146
|
+
step: Optional[str] = None, index: Optional[str] = None,
|
|
147
|
+
clobber: bool = False):
|
|
148
|
+
"""
|
|
149
|
+
Adds a timing corner to use for synthesis.
|
|
150
|
+
|
|
151
|
+
Args:
|
|
152
|
+
corner (str): The name of the corner.
|
|
153
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
154
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
155
|
+
clobber (bool, optional): If True, overwrites the existing list. Defaults to False.
|
|
156
|
+
"""
|
|
135
157
|
if clobber:
|
|
136
158
|
self.set("var", "synthesis_corner", corner, step=step, index=index)
|
|
137
159
|
else:
|
|
@@ -316,24 +338,331 @@ class ASICSynthesis(_ASICTask, YosysTask):
|
|
|
316
338
|
|
|
317
339
|
def set_yosys_useslang(self, enable: bool,
|
|
318
340
|
step: Optional[str] = None, index: Optional[str] = None):
|
|
341
|
+
"""
|
|
342
|
+
Enables or disables using the slang frontend.
|
|
343
|
+
|
|
344
|
+
Args:
|
|
345
|
+
enable (bool): True to enable, False to disable.
|
|
346
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
347
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
348
|
+
"""
|
|
319
349
|
self.set("var", "use_slang", enable, step=step, index=index)
|
|
320
350
|
|
|
351
|
+
def set_yosys_autoname(self, enable: bool,
|
|
352
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
353
|
+
"""
|
|
354
|
+
Enables or disables renaming wires based on registers.
|
|
355
|
+
|
|
356
|
+
Args:
|
|
357
|
+
enable (bool): True to enable, False to disable.
|
|
358
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
359
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
360
|
+
"""
|
|
361
|
+
self.set("var", "autoname", enable, step=step, index=index)
|
|
362
|
+
|
|
321
363
|
def set_yosys_tieundefined(self, tie: str,
|
|
322
364
|
step: Optional[str] = None, index: Optional[str] = None):
|
|
365
|
+
"""
|
|
366
|
+
Sets how to handle undefined signals in the netlist.
|
|
367
|
+
|
|
368
|
+
Args:
|
|
369
|
+
tie (str): The tie strategy ('high', 'low', 'none').
|
|
370
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
371
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
372
|
+
"""
|
|
323
373
|
self.set("var", "tie_undef", tie, step=step, index=index)
|
|
324
374
|
|
|
325
375
|
def set_yosys_addtiecells(self, enable: bool,
|
|
326
376
|
step: Optional[str] = None, index: Optional[str] = None):
|
|
377
|
+
"""
|
|
378
|
+
Enables or disables adding tie high and tie low cells.
|
|
379
|
+
|
|
380
|
+
Args:
|
|
381
|
+
enable (bool): True to enable, False to disable.
|
|
382
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
383
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
384
|
+
"""
|
|
327
385
|
self.set("var", "add_tieoffs", enable, step=step, index=index)
|
|
328
386
|
|
|
329
387
|
def set_yosys_addbuffers(self, enable: bool,
|
|
330
388
|
step: Optional[str] = None, index: Optional[str] = None):
|
|
389
|
+
"""
|
|
390
|
+
Enables or disables adding buffers.
|
|
391
|
+
|
|
392
|
+
Args:
|
|
393
|
+
enable (bool): True to enable, False to disable.
|
|
394
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
395
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
396
|
+
"""
|
|
331
397
|
self.set("var", "add_buffers", enable, step=step, index=index)
|
|
332
398
|
|
|
333
399
|
def set_yosys_optundriven(self, enable: bool,
|
|
334
400
|
step: Optional[str] = None, index: Optional[str] = None):
|
|
401
|
+
"""
|
|
402
|
+
Enables or disables marking undriven nets during optimization.
|
|
403
|
+
|
|
404
|
+
Args:
|
|
405
|
+
enable (bool): True to enable, False to disable.
|
|
406
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
407
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
408
|
+
"""
|
|
335
409
|
self.set("var", "opt_undriven", enable, step=step, index=index)
|
|
336
410
|
|
|
411
|
+
def set_yosys_mapadders(self, enable: bool,
|
|
412
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
413
|
+
"""
|
|
414
|
+
Enables or disables techmapping adders in Yosys.
|
|
415
|
+
|
|
416
|
+
Args:
|
|
417
|
+
enable (bool): True to enable, False to disable.
|
|
418
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
419
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
420
|
+
"""
|
|
421
|
+
self.set("var", "map_adders", enable, step=step, index=index)
|
|
422
|
+
|
|
423
|
+
def set_yosys_memorylibmap(self, file: str,
|
|
424
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
425
|
+
"""
|
|
426
|
+
Sets the file used to map memories with Yosys.
|
|
427
|
+
|
|
428
|
+
Args:
|
|
429
|
+
file (str): The path to the library map file.
|
|
430
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
431
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
432
|
+
"""
|
|
433
|
+
self.set("var", "memory_libmap", file, step=step, index=index)
|
|
434
|
+
|
|
435
|
+
def set_yosys_memorytechmap(self, file: str,
|
|
436
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
437
|
+
"""
|
|
438
|
+
Sets the file used to techmap memories with Yosys.
|
|
439
|
+
|
|
440
|
+
Args:
|
|
441
|
+
file (str): The path to the technology map file.
|
|
442
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
443
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
444
|
+
"""
|
|
445
|
+
self.set("var", "memory_techmap", file, step=step, index=index)
|
|
446
|
+
|
|
447
|
+
def add_yosys_synthextramap(self, map: Union[str, List[str]],
|
|
448
|
+
step: Optional[str] = None, index: Optional[str] = None,
|
|
449
|
+
clobber: bool = False):
|
|
450
|
+
"""
|
|
451
|
+
Adds files used in synthesis to perform additional techmapping.
|
|
452
|
+
|
|
453
|
+
Args:
|
|
454
|
+
map (Union[str, List[str]]): The map file(s) to add.
|
|
455
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
456
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
457
|
+
clobber (bool, optional): If True, overwrites the existing list. Defaults to False.
|
|
458
|
+
"""
|
|
459
|
+
if clobber:
|
|
460
|
+
self.set("var", "synth_extra_map", map, step=step, index=index)
|
|
461
|
+
else:
|
|
462
|
+
self.add("var", "synth_extra_map", map, step=step, index=index)
|
|
463
|
+
|
|
464
|
+
def add_yosys_preservemodules(self, modules: Union[str, List[str]],
|
|
465
|
+
step: Optional[str] = None, index: Optional[str] = None,
|
|
466
|
+
clobber: bool = False):
|
|
467
|
+
"""
|
|
468
|
+
Adds modules to prevent flattening.
|
|
469
|
+
|
|
470
|
+
Args:
|
|
471
|
+
modules (Union[str, List[str]]): The module name(s) to preserve.
|
|
472
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
473
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
474
|
+
clobber (bool, optional): If True, overwrites the existing list. Defaults to False.
|
|
475
|
+
"""
|
|
476
|
+
if clobber:
|
|
477
|
+
self.set("var", "preserve_modules", modules, step=step, index=index)
|
|
478
|
+
else:
|
|
479
|
+
self.add("var", "preserve_modules", modules, step=step, index=index)
|
|
480
|
+
|
|
481
|
+
def add_yosys_blackboxmodules(self, modules: Union[str, List[str]],
|
|
482
|
+
step: Optional[str] = None, index: Optional[str] = None,
|
|
483
|
+
clobber: bool = False):
|
|
484
|
+
"""
|
|
485
|
+
Adds modules to exclude from synthesis by replacing them with empty blackboxes.
|
|
486
|
+
|
|
487
|
+
Args:
|
|
488
|
+
modules (Union[str, List[str]]): The module name(s) to blackbox.
|
|
489
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
490
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
491
|
+
clobber (bool, optional): If True, overwrites the existing list. Defaults to False.
|
|
492
|
+
"""
|
|
493
|
+
if clobber:
|
|
494
|
+
self.set("var", "blackbox_modules", modules, step=step, index=index)
|
|
495
|
+
else:
|
|
496
|
+
self.add("var", "blackbox_modules", modules, step=step, index=index)
|
|
497
|
+
|
|
498
|
+
def set_yosys_flatten(self, enable: bool,
|
|
499
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
500
|
+
"""
|
|
501
|
+
Enables or disables invoking synth with the -flatten option.
|
|
502
|
+
|
|
503
|
+
Args:
|
|
504
|
+
enable (bool): True to enable, False to disable.
|
|
505
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
506
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
507
|
+
"""
|
|
508
|
+
self.set("var", "flatten", enable, step=step, index=index)
|
|
509
|
+
|
|
510
|
+
def set_yosys_autoflatten(self, enable: bool,
|
|
511
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
512
|
+
"""
|
|
513
|
+
Enables or disables attempting to determine how to flatten the design.
|
|
514
|
+
|
|
515
|
+
Args:
|
|
516
|
+
enable (bool): True to enable, False to disable.
|
|
517
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
518
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
519
|
+
"""
|
|
520
|
+
self.set("var", "auto_flatten", enable, step=step, index=index)
|
|
521
|
+
|
|
522
|
+
def set_yosys_hierthreshold(self, threshold: int,
|
|
523
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
524
|
+
"""
|
|
525
|
+
Sets the instance limit for the number of cells in a module to preserve.
|
|
526
|
+
|
|
527
|
+
Args:
|
|
528
|
+
threshold (int): The instance limit.
|
|
529
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
530
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
531
|
+
"""
|
|
532
|
+
self.set("var", "hier_threshold", threshold, step=step, index=index)
|
|
533
|
+
|
|
534
|
+
def set_yosys_hierarchyseparator(self, separator: str,
|
|
535
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
536
|
+
"""
|
|
537
|
+
Sets the hierarchy separator used during design flattening.
|
|
538
|
+
|
|
539
|
+
Args:
|
|
540
|
+
separator (str): The separator character.
|
|
541
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
542
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
543
|
+
"""
|
|
544
|
+
self.set("var", "hierarchy_separator", separator, step=step, index=index)
|
|
545
|
+
|
|
546
|
+
def set_yosys_strategy(self, strategy: str,
|
|
547
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
548
|
+
"""
|
|
549
|
+
Sets the ABC synthesis strategy.
|
|
550
|
+
|
|
551
|
+
Args:
|
|
552
|
+
strategy (str): The strategy name (e.g., 'DELAY1', 'AREA2').
|
|
553
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
554
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
555
|
+
"""
|
|
556
|
+
self.set("var", "strategy", strategy, step=step, index=index)
|
|
557
|
+
|
|
558
|
+
def set_yosys_abcconstraintdriver(self, driver: str,
|
|
559
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
560
|
+
"""
|
|
561
|
+
Sets the buffer that drives the ABC techmapping.
|
|
562
|
+
|
|
563
|
+
Args:
|
|
564
|
+
driver (str): The driver cell name.
|
|
565
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
566
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
567
|
+
"""
|
|
568
|
+
self.set("var", "abc_constraint_driver", driver, step=step, index=index)
|
|
569
|
+
|
|
570
|
+
def set_yosys_abcclockperiod(self, period: float,
|
|
571
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
572
|
+
"""
|
|
573
|
+
Sets the clock period to use for synthesis.
|
|
574
|
+
|
|
575
|
+
Args:
|
|
576
|
+
period (float): The clock period in ps.
|
|
577
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
578
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
579
|
+
"""
|
|
580
|
+
self.set("var", "abc_clock_period", period, step=step, index=index)
|
|
581
|
+
|
|
582
|
+
def set_yosys_abcconstraintload(self, load: float,
|
|
583
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
584
|
+
"""
|
|
585
|
+
Sets the capacitive load for the ABC techmapping.
|
|
586
|
+
|
|
587
|
+
Args:
|
|
588
|
+
load (float): The load in fF.
|
|
589
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
590
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
591
|
+
"""
|
|
592
|
+
self.set("var", "abc_constraint_load", load, step=step, index=index)
|
|
593
|
+
|
|
594
|
+
def set_yosys_abcclockderating(self, derating: float,
|
|
595
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
596
|
+
"""
|
|
597
|
+
Sets the derating to apply to the clock period for ABC synthesis.
|
|
598
|
+
|
|
599
|
+
Args:
|
|
600
|
+
derating (float): The derating factor.
|
|
601
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
602
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
603
|
+
"""
|
|
604
|
+
self.set("var", "abc_clock_derating", derating, step=step, index=index)
|
|
605
|
+
|
|
606
|
+
def set_yosys_mapclockgates(self, enable: bool,
|
|
607
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
608
|
+
"""
|
|
609
|
+
Enables or disables mapping clockgates during synthesis.
|
|
610
|
+
|
|
611
|
+
Args:
|
|
612
|
+
enable (bool): True to enable, False to disable.
|
|
613
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
614
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
615
|
+
"""
|
|
616
|
+
self.set("var", "map_clockgates", enable, step=step, index=index)
|
|
617
|
+
|
|
618
|
+
def set_yosys_minclockgatefanout(self, fanout: int,
|
|
619
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
620
|
+
"""
|
|
621
|
+
Sets the minimum clockgate fanout.
|
|
622
|
+
|
|
623
|
+
Args:
|
|
624
|
+
fanout (int): The minimum fanout.
|
|
625
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
626
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
627
|
+
"""
|
|
628
|
+
self.set("var", "min_clockgate_fanout", fanout, step=step, index=index)
|
|
629
|
+
|
|
630
|
+
def set_yosys_lockdesign(self, enable: bool,
|
|
631
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
632
|
+
"""
|
|
633
|
+
Enables or disables attempting to lock the design with moosic.
|
|
634
|
+
|
|
635
|
+
Args:
|
|
636
|
+
enable (bool): True to enable, False to disable.
|
|
637
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
638
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
639
|
+
"""
|
|
640
|
+
self.set("var", "lock_design", enable, step=step, index=index)
|
|
641
|
+
|
|
642
|
+
def set_yosys_lockdesignkey(self, key: str,
|
|
643
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
644
|
+
"""
|
|
645
|
+
Sets the lock locking key.
|
|
646
|
+
|
|
647
|
+
Args:
|
|
648
|
+
key (str): The key.
|
|
649
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
650
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
651
|
+
"""
|
|
652
|
+
self.set("var", "lock_design_key", key, step=step, index=index)
|
|
653
|
+
|
|
654
|
+
def set_yosys_lockdesignport(self, port: str,
|
|
655
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
656
|
+
"""
|
|
657
|
+
Sets the lock locking port name.
|
|
658
|
+
|
|
659
|
+
Args:
|
|
660
|
+
port (str): The port name.
|
|
661
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
662
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
663
|
+
"""
|
|
664
|
+
self.set("var", "lock_design_port", port, step=step, index=index)
|
|
665
|
+
|
|
337
666
|
def task(self):
|
|
338
667
|
return "syn_asic"
|
|
339
668
|
|
|
@@ -30,8 +30,40 @@ class FPGASynthesis(YosysTask):
|
|
|
30
30
|
|
|
31
31
|
def set_yosys_useslang(self, enable: bool,
|
|
32
32
|
step: Optional[str] = None, index: Optional[str] = None):
|
|
33
|
+
"""
|
|
34
|
+
Enables or disables using the slang frontend.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
enable (bool): True to enable, False to disable.
|
|
38
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
39
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
40
|
+
"""
|
|
33
41
|
self.set("var", "use_slang", enable, step=step, index=index)
|
|
34
42
|
|
|
43
|
+
def set_yosys_synthoptmode(self, mode: str,
|
|
44
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
45
|
+
"""
|
|
46
|
+
Sets the optimization mode for synthesis.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
mode (str): The optimization mode ('none', 'delay', 'area').
|
|
50
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
51
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
52
|
+
"""
|
|
53
|
+
self.set("var", "synth_opt_mode", mode, step=step, index=index)
|
|
54
|
+
|
|
55
|
+
def set_yosys_synthinsertbuffers(self, enable: bool,
|
|
56
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
57
|
+
"""
|
|
58
|
+
Enables or disables buffer insertion during synthesis.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
enable (bool): True to enable, False to disable.
|
|
62
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
63
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
64
|
+
"""
|
|
65
|
+
self.set("var", "synth_insert_buffers", enable, step=step, index=index)
|
|
66
|
+
|
|
35
67
|
def task(self):
|
|
36
68
|
return "syn_fpga"
|
|
37
69
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"openroad": {
|
|
3
3
|
"git-url": "https://github.com/The-OpenROAD-Project/OpenROAD.git",
|
|
4
|
-
"git-commit": "
|
|
4
|
+
"git-commit": "0004adbadb9b28cbc00b87c0b2a089164e439441",
|
|
5
5
|
"docker-cmds": [
|
|
6
6
|
"# Remove OR-Tools files",
|
|
7
7
|
"RUN rm -f $SC_PREFIX/Makefile $SC_PREFIX/README.md",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"opensta": {
|
|
19
19
|
"git-url": "https://github.com/parallaxsw/OpenSTA.git",
|
|
20
|
-
"git-commit": "
|
|
20
|
+
"git-commit": "128ea3cf283ba2ac0af699543c8e037cc9bfc0a5",
|
|
21
21
|
"auto-update": true
|
|
22
22
|
},
|
|
23
23
|
"netgen": {
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
},
|
|
146
146
|
"yosys-slang": {
|
|
147
147
|
"git-url": "https://github.com/povik/yosys-slang.git",
|
|
148
|
-
"git-commit": "
|
|
148
|
+
"git-commit": "64b44616a3798f07453b14ea03e4ac8a16b77313",
|
|
149
149
|
"docker-depends": "yosys",
|
|
150
150
|
"auto-update": true
|
|
151
151
|
},
|
|
@@ -163,7 +163,12 @@
|
|
|
163
163
|
},
|
|
164
164
|
"surfer": {
|
|
165
165
|
"git-url": "https://gitlab.com/surfer-project/surfer.git",
|
|
166
|
-
"git-commit": "v0.
|
|
166
|
+
"git-commit": "v0.5.0",
|
|
167
|
+
"auto-update": true
|
|
168
|
+
},
|
|
169
|
+
"keplerformal": {
|
|
170
|
+
"git-url": "https://github.com/keplertech/kepler-formal.git",
|
|
171
|
+
"git-commit": "c1edd4a196536385255f4c882e4001d534d4638b",
|
|
167
172
|
"auto-update": false
|
|
168
173
|
}
|
|
169
174
|
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -ex
|
|
4
|
+
|
|
5
|
+
# Get directory of script
|
|
6
|
+
src_path=$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)/..
|
|
7
|
+
|
|
8
|
+
USE_SUDO_INSTALL="${USE_SUDO_INSTALL:-yes}"
|
|
9
|
+
if [ "${USE_SUDO_INSTALL:-yes}" = "yes" ]; then
|
|
10
|
+
SUDO_INSTALL=sudo
|
|
11
|
+
else
|
|
12
|
+
SUDO_INSTALL=""
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
sudo apt-get update
|
|
16
|
+
|
|
17
|
+
sudo apt-get install -y build-essential libfl-dev
|
|
18
|
+
|
|
19
|
+
# From: https://github.com/keplertech/kepler-formal/blob/ea6b0ce62f6f8fd2327e79913a07c74a3210551d/README.md
|
|
20
|
+
sudo apt-get install -y g++ libboost-dev python3-dev capnproto libcapnp-dev libtbb-dev \
|
|
21
|
+
pkg-config bison flex doxygen libspdlog-dev libfmt-dev libboost-iostreams-dev zlib1g-dev
|
|
22
|
+
|
|
23
|
+
sudo apt-get install -y git
|
|
24
|
+
|
|
25
|
+
mkdir -p deps
|
|
26
|
+
cd deps
|
|
27
|
+
|
|
28
|
+
python3 -m venv .keplerformal --clear
|
|
29
|
+
. .keplerformal/bin/activate
|
|
30
|
+
python3 -m pip install cmake==3.31.6
|
|
31
|
+
|
|
32
|
+
git clone $(python3 ${src_path}/_tools.py --tool keplerformal --field git-url) keplerformal
|
|
33
|
+
cd keplerformal
|
|
34
|
+
git checkout $(python3 ${src_path}/_tools.py --tool keplerformal --field git-commit)
|
|
35
|
+
git submodule update --init --recursive
|
|
36
|
+
|
|
37
|
+
git apply - <<EOF
|
|
38
|
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
39
|
+
index 65d0d04..a67d38f 100644
|
|
40
|
+
--- a/CMakeLists.txt
|
|
41
|
+
+++ b/CMakeLists.txt
|
|
42
|
+
@@ -26,9 +26,9 @@ add_subdirectory(thirdparty)
|
|
43
|
+
|
|
44
|
+
# option(ENABLE_UNIT_TESTS ON)
|
|
45
|
+
# if(ENABLE_UNIT_TESTS)
|
|
46
|
+
-include(CTest)
|
|
47
|
+
-enable_testing()
|
|
48
|
+
-add_subdirectory(test)
|
|
49
|
+
+# include(CTest)
|
|
50
|
+
+# enable_testing()
|
|
51
|
+
+# add_subdirectory(test)
|
|
52
|
+
# endif()
|
|
53
|
+
|
|
54
|
+
option(CODE_COVERAGE "Enable coverage reporting" OFF)
|
|
55
|
+
EOF
|
|
56
|
+
|
|
57
|
+
cmake_args=""
|
|
58
|
+
if [ ! -z ${PREFIX} ]; then
|
|
59
|
+
cmake_args="-DCMAKE_INSTALL_PREFIX=$PREFIX"
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
mkdir -p build
|
|
63
|
+
cd build
|
|
64
|
+
cmake .. -DCMAKE_BUILD_TYPE=Release \
|
|
65
|
+
-DCMAKE_CXX_FLAGS_RELEASE="-Ofast -march=native -ffast-math -flto" \
|
|
66
|
+
-DCMAKE_EXE_LINKER_FLAGS="-flto" \
|
|
67
|
+
-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE \
|
|
68
|
+
$cmake_args
|
|
69
|
+
make -j$(nproc)
|
|
70
|
+
$SUDO_INSTALL make install
|
|
71
|
+
|
|
72
|
+
cd -
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -ex
|
|
4
|
+
|
|
5
|
+
# Get directory of script
|
|
6
|
+
src_path=$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)/..
|
|
7
|
+
|
|
8
|
+
USE_SUDO_INSTALL="${USE_SUDO_INSTALL:-yes}"
|
|
9
|
+
if [ "${USE_SUDO_INSTALL:-yes}" = "yes" ]; then
|
|
10
|
+
SUDO_INSTALL=sudo
|
|
11
|
+
else
|
|
12
|
+
SUDO_INSTALL=""
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
sudo apt-get update
|
|
16
|
+
|
|
17
|
+
sudo apt-get install -y build-essential libfl-dev
|
|
18
|
+
|
|
19
|
+
# From: https://github.com/keplertech/kepler-formal/blob/ea6b0ce62f6f8fd2327e79913a07c74a3210551d/README.md
|
|
20
|
+
sudo apt-get install -y g++ libboost-dev python3-dev capnproto libcapnp-dev libtbb-dev \
|
|
21
|
+
pkg-config bison flex doxygen libspdlog-dev libfmt-dev libboost-iostreams-dev zlib1g-dev
|
|
22
|
+
|
|
23
|
+
sudo apt-get install -y git
|
|
24
|
+
|
|
25
|
+
mkdir -p deps
|
|
26
|
+
cd deps
|
|
27
|
+
|
|
28
|
+
python3 -m venv .keplerformal --clear
|
|
29
|
+
. .keplerformal/bin/activate
|
|
30
|
+
python3 -m pip install cmake==3.31.6
|
|
31
|
+
|
|
32
|
+
git clone $(python3 ${src_path}/_tools.py --tool keplerformal --field git-url) keplerformal
|
|
33
|
+
cd keplerformal
|
|
34
|
+
git checkout $(python3 ${src_path}/_tools.py --tool keplerformal --field git-commit)
|
|
35
|
+
git submodule update --init --recursive
|
|
36
|
+
|
|
37
|
+
git apply - <<EOF
|
|
38
|
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
39
|
+
index 65d0d04..a67d38f 100644
|
|
40
|
+
--- a/CMakeLists.txt
|
|
41
|
+
+++ b/CMakeLists.txt
|
|
42
|
+
@@ -26,9 +26,9 @@ add_subdirectory(thirdparty)
|
|
43
|
+
|
|
44
|
+
# option(ENABLE_UNIT_TESTS ON)
|
|
45
|
+
# if(ENABLE_UNIT_TESTS)
|
|
46
|
+
-include(CTest)
|
|
47
|
+
-enable_testing()
|
|
48
|
+
-add_subdirectory(test)
|
|
49
|
+
+# include(CTest)
|
|
50
|
+
+# enable_testing()
|
|
51
|
+
+# add_subdirectory(test)
|
|
52
|
+
# endif()
|
|
53
|
+
|
|
54
|
+
option(CODE_COVERAGE "Enable coverage reporting" OFF)
|
|
55
|
+
EOF
|
|
56
|
+
|
|
57
|
+
cmake_args=""
|
|
58
|
+
if [ ! -z ${PREFIX} ]; then
|
|
59
|
+
cmake_args="-DCMAKE_INSTALL_PREFIX=$PREFIX"
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
mkdir -p build
|
|
63
|
+
cd build
|
|
64
|
+
cmake .. -DCMAKE_BUILD_TYPE=Release \
|
|
65
|
+
-DCMAKE_CXX_FLAGS_RELEASE="-Ofast -march=native -ffast-math -flto" \
|
|
66
|
+
-DCMAKE_EXE_LINKER_FLAGS="-flto" \
|
|
67
|
+
-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE \
|
|
68
|
+
$cmake_args
|
|
69
|
+
make -j$(nproc)
|
|
70
|
+
$SUDO_INSTALL make install
|
|
71
|
+
|
|
72
|
+
cd -
|
|
@@ -145,6 +145,7 @@ class MPManager(metaclass=_ManagerSingleton):
|
|
|
145
145
|
|
|
146
146
|
# Settings
|
|
147
147
|
self.__settings = SettingsManager(default_sc_path("settings.json"), self.__logger)
|
|
148
|
+
self.__transient_settings = SettingsManager(None, self.__logger)
|
|
148
149
|
|
|
149
150
|
# Register cleanup function to run at exit
|
|
150
151
|
atexit.register(MPManager.stop)
|
|
@@ -272,6 +273,16 @@ class MPManager(metaclass=_ManagerSingleton):
|
|
|
272
273
|
"""
|
|
273
274
|
return MPManager().__settings
|
|
274
275
|
|
|
276
|
+
@staticmethod
|
|
277
|
+
def get_transient_settings() -> SettingsManager:
|
|
278
|
+
"""
|
|
279
|
+
Provides access to the shared transient SettingsManager instance.
|
|
280
|
+
|
|
281
|
+
Returns:
|
|
282
|
+
SettingsManager: The singleton transient settings instance.
|
|
283
|
+
"""
|
|
284
|
+
return MPManager().__transient_settings
|
|
285
|
+
|
|
275
286
|
@staticmethod
|
|
276
287
|
def get_dashboard() -> Board:
|
|
277
288
|
"""
|