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.
Files changed (89) hide show
  1. siliconcompiler/_metadata.py +1 -1
  2. siliconcompiler/constraints/__init__.py +4 -1
  3. siliconcompiler/constraints/asic_timing.py +230 -38
  4. siliconcompiler/constraints/fpga_timing.py +209 -14
  5. siliconcompiler/constraints/timing_mode.py +82 -0
  6. siliconcompiler/data/templates/tcl/manifest.tcl.j2 +0 -6
  7. siliconcompiler/flowgraph.py +95 -42
  8. siliconcompiler/flows/generate_openroad_rcx.py +2 -2
  9. siliconcompiler/flows/highresscreenshotflow.py +37 -0
  10. siliconcompiler/library.py +2 -1
  11. siliconcompiler/package/__init__.py +39 -45
  12. siliconcompiler/project.py +4 -1
  13. siliconcompiler/scheduler/scheduler.py +64 -35
  14. siliconcompiler/scheduler/schedulernode.py +5 -2
  15. siliconcompiler/scheduler/slurm.py +7 -6
  16. siliconcompiler/scheduler/taskscheduler.py +19 -16
  17. siliconcompiler/schema/_metadata.py +1 -1
  18. siliconcompiler/schema/namedschema.py +2 -4
  19. siliconcompiler/schema_support/cmdlineschema.py +0 -3
  20. siliconcompiler/schema_support/dependencyschema.py +0 -6
  21. siliconcompiler/schema_support/record.py +4 -3
  22. siliconcompiler/tool.py +58 -27
  23. siliconcompiler/tools/_common/tcl/sc_schema_access.tcl +0 -6
  24. siliconcompiler/tools/chisel/convert.py +44 -0
  25. siliconcompiler/tools/ghdl/convert.py +37 -2
  26. siliconcompiler/tools/icarus/compile.py +14 -0
  27. siliconcompiler/tools/keplerformal/__init__.py +7 -0
  28. siliconcompiler/tools/keplerformal/lec.py +112 -0
  29. siliconcompiler/tools/klayout/drc.py +14 -0
  30. siliconcompiler/tools/klayout/export.py +40 -0
  31. siliconcompiler/tools/klayout/operations.py +40 -0
  32. siliconcompiler/tools/klayout/screenshot.py +66 -1
  33. siliconcompiler/tools/klayout/scripts/klayout_export.py +10 -40
  34. siliconcompiler/tools/klayout/scripts/klayout_show.py +4 -4
  35. siliconcompiler/tools/klayout/scripts/klayout_utils.py +13 -1
  36. siliconcompiler/tools/montage/tile.py +26 -12
  37. siliconcompiler/tools/openroad/__init__.py +11 -0
  38. siliconcompiler/tools/openroad/_apr.py +780 -11
  39. siliconcompiler/tools/openroad/antenna_repair.py +26 -0
  40. siliconcompiler/tools/openroad/fillmetal_insertion.py +14 -0
  41. siliconcompiler/tools/openroad/global_placement.py +67 -0
  42. siliconcompiler/tools/openroad/global_route.py +15 -0
  43. siliconcompiler/tools/openroad/init_floorplan.py +19 -2
  44. siliconcompiler/tools/openroad/macro_placement.py +252 -0
  45. siliconcompiler/tools/openroad/power_grid.py +43 -0
  46. siliconcompiler/tools/openroad/power_grid_analysis.py +1 -1
  47. siliconcompiler/tools/openroad/rcx_bench.py +28 -0
  48. siliconcompiler/tools/openroad/rcx_extract.py +14 -0
  49. siliconcompiler/tools/openroad/rdlroute.py +14 -0
  50. siliconcompiler/tools/openroad/repair_design.py +41 -0
  51. siliconcompiler/tools/openroad/repair_timing.py +54 -0
  52. siliconcompiler/tools/openroad/screenshot.py +31 -1
  53. siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +8 -0
  54. siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +54 -15
  55. siliconcompiler/tools/openroad/scripts/apr/sc_irdrop.tcl +6 -4
  56. siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +4 -4
  57. siliconcompiler/tools/openroad/scripts/common/procs.tcl +14 -5
  58. siliconcompiler/tools/openroad/scripts/common/read_liberty.tcl +2 -2
  59. siliconcompiler/tools/openroad/scripts/common/reports.tcl +6 -3
  60. siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +1 -1
  61. siliconcompiler/tools/openroad/scripts/common/write_data_physical.tcl +8 -0
  62. siliconcompiler/tools/openroad/scripts/common/write_images.tcl +16 -12
  63. siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +3 -1
  64. siliconcompiler/tools/openroad/write_data.py +78 -2
  65. siliconcompiler/tools/opensta/scripts/sc_check_library.tcl +2 -2
  66. siliconcompiler/tools/opensta/scripts/sc_report_libraries.tcl +2 -2
  67. siliconcompiler/tools/opensta/scripts/sc_timing.tcl +12 -14
  68. siliconcompiler/tools/opensta/timing.py +42 -3
  69. siliconcompiler/tools/slang/elaborate.py +16 -1
  70. siliconcompiler/tools/surelog/parse.py +54 -0
  71. siliconcompiler/tools/verilator/compile.py +120 -0
  72. siliconcompiler/tools/vivado/syn_fpga.py +27 -0
  73. siliconcompiler/tools/vpr/route.py +40 -0
  74. siliconcompiler/tools/xdm/convert.py +14 -0
  75. siliconcompiler/tools/xyce/simulate.py +26 -0
  76. siliconcompiler/tools/yosys/lec_asic.py +13 -0
  77. siliconcompiler/tools/yosys/syn_asic.py +332 -3
  78. siliconcompiler/tools/yosys/syn_fpga.py +32 -0
  79. siliconcompiler/toolscripts/_tools.json +9 -4
  80. siliconcompiler/toolscripts/ubuntu22/install-keplerformal.sh +72 -0
  81. siliconcompiler/toolscripts/ubuntu24/install-keplerformal.sh +72 -0
  82. siliconcompiler/utils/multiprocessing.py +11 -0
  83. siliconcompiler/utils/settings.py +70 -49
  84. {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.1.dist-info}/METADATA +4 -4
  85. {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.1.dist-info}/RECORD +89 -83
  86. {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.1.dist-info}/WHEEL +0 -0
  87. {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.1.dist-info}/entry_points.txt +0 -0
  88. {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.1.dist-info}/licenses/LICENSE +0 -0
  89. {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.add_synthesis_corner(scenario.get_libcorner())
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.add_synthesis_corner(scenario.get_libcorner())
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": "dd56d50c413ecd215117898437c57bec68b59a87",
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": "bd3efdc322c0677eb8e3d76f22ab297f7a6048b9",
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": "875539b8cae5a2ac7c86fee43b1e38a743ee8659",
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.3.0",
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
  """