siliconcompiler 0.27.1__py3-none-any.whl → 0.28.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 (94) hide show
  1. siliconcompiler/_metadata.py +1 -1
  2. siliconcompiler/core.py +4 -1
  3. siliconcompiler/data/RobotoMono/__init__.py +0 -0
  4. siliconcompiler/data/__init__.py +0 -0
  5. siliconcompiler/flows/dvflow.py +51 -14
  6. siliconcompiler/flows/generate_openroad_rcx.py +1 -1
  7. siliconcompiler/libs/sg13g2_stdcell.py +8 -0
  8. siliconcompiler/pdks/ihp130.py +8 -0
  9. siliconcompiler/remote/server_schema/__init__.py +0 -0
  10. siliconcompiler/remote/server_schema/requests/__init__.py +0 -0
  11. siliconcompiler/remote/server_schema/responses/__init__.py +0 -0
  12. siliconcompiler/scheduler/__init__.py +6 -4
  13. siliconcompiler/scheduler/validation/__init__.py +0 -0
  14. siliconcompiler/schema/schema_cfg.py +351 -281
  15. siliconcompiler/schema/schema_obj.py +5 -3
  16. siliconcompiler/sphinx_ext/dynamicgen.py +35 -15
  17. siliconcompiler/sphinx_ext/schemagen.py +4 -1
  18. siliconcompiler/targets/ihp130_demo.py +68 -0
  19. siliconcompiler/templates/__init__.py +0 -0
  20. siliconcompiler/templates/email/__init__.py +0 -0
  21. siliconcompiler/templates/issue/__init__.py +0 -0
  22. siliconcompiler/templates/report/__init__.py +0 -0
  23. siliconcompiler/templates/slurm/__init__.py +0 -0
  24. siliconcompiler/templates/tcl/__init__.py +0 -0
  25. siliconcompiler/tools/_common/sdc/__init__.py +0 -0
  26. siliconcompiler/tools/_common/tcl/__init__.py +0 -0
  27. siliconcompiler/tools/_common/tcl/sc_pin_constraints.tcl +1 -2
  28. siliconcompiler/tools/bambu/__init__.py +0 -0
  29. siliconcompiler/tools/bluespec/__init__.py +0 -0
  30. siliconcompiler/tools/builtin/__init__.py +0 -0
  31. siliconcompiler/tools/builtin/concatenate.py +16 -0
  32. siliconcompiler/tools/chisel/__init__.py +0 -0
  33. siliconcompiler/tools/execute/__init__.py +0 -0
  34. siliconcompiler/tools/genfasm/__init__.py +0 -0
  35. siliconcompiler/tools/ghdl/__init__.py +0 -0
  36. siliconcompiler/tools/icarus/__init__.py +0 -0
  37. siliconcompiler/tools/icepack/__init__.py +0 -0
  38. siliconcompiler/tools/klayout/__init__.py +0 -0
  39. siliconcompiler/tools/klayout/klayout.py +1 -0
  40. siliconcompiler/tools/magic/__init__.py +0 -0
  41. siliconcompiler/tools/magic/sc_drc.tcl +5 -5
  42. siliconcompiler/tools/magic/sc_extspice.tcl +3 -3
  43. siliconcompiler/tools/magic/sc_magic.tcl +2 -2
  44. siliconcompiler/tools/montage/__init__.py +0 -0
  45. siliconcompiler/tools/netgen/__init__.py +0 -0
  46. siliconcompiler/tools/netgen/sc_lvs.tcl +3 -3
  47. siliconcompiler/tools/nextpnr/__init__.py +0 -0
  48. siliconcompiler/tools/openroad/scripts/__init__.py +0 -0
  49. siliconcompiler/tools/openroad/scripts/sc_apr.tcl +36 -34
  50. siliconcompiler/tools/openroad/scripts/sc_cts.tcl +0 -1
  51. siliconcompiler/tools/openroad/scripts/sc_dfm.tcl +4 -2
  52. siliconcompiler/tools/openroad/scripts/sc_export.tcl +4 -2
  53. siliconcompiler/tools/openroad/scripts/sc_floorplan.tcl +27 -35
  54. siliconcompiler/tools/openroad/scripts/sc_metrics.tcl +4 -2
  55. siliconcompiler/tools/openroad/scripts/sc_physyn.tcl +0 -1
  56. siliconcompiler/tools/openroad/scripts/sc_procs.tcl +38 -6
  57. siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +9 -9
  58. siliconcompiler/tools/openroad/scripts/sc_route.tcl +8 -4
  59. siliconcompiler/tools/openroad/scripts/sc_screenshot.tcl +5 -3
  60. siliconcompiler/tools/openroad/scripts/sc_write_images.tcl +27 -25
  61. siliconcompiler/tools/openroad/templates/__init__.py +0 -0
  62. siliconcompiler/tools/opensta/scripts/__init__.py +0 -0
  63. siliconcompiler/tools/opensta/scripts/sc_procs.tcl +0 -1
  64. siliconcompiler/tools/surelog/templates/__init__.py +0 -0
  65. siliconcompiler/tools/sv2v/__init__.py +0 -0
  66. siliconcompiler/tools/template/__init__.py +0 -0
  67. siliconcompiler/tools/verilator/__init__.py +0 -0
  68. siliconcompiler/tools/verilator/compile.py +1 -4
  69. siliconcompiler/tools/verilator/verilator.py +1 -2
  70. siliconcompiler/tools/vivado/scripts/__init__.py +0 -0
  71. siliconcompiler/tools/vivado/scripts/sc_run.tcl +7 -8
  72. siliconcompiler/tools/vivado/vivado.py +1 -1
  73. siliconcompiler/tools/vpr/__init__.py +0 -0
  74. siliconcompiler/tools/vpr/place.py +20 -6
  75. siliconcompiler/tools/vpr/vpr.py +1 -1
  76. siliconcompiler/tools/xdm/__init__.py +28 -0
  77. siliconcompiler/tools/xdm/convert.py +71 -0
  78. siliconcompiler/tools/xyce/{xyce.py → __init__.py} +13 -9
  79. siliconcompiler/tools/xyce/simulate.py +70 -0
  80. siliconcompiler/tools/yosys/__init__.py +0 -0
  81. siliconcompiler/tools/yosys/sc_lec.tcl +7 -7
  82. siliconcompiler/tools/yosys/sc_syn.tcl +9 -9
  83. siliconcompiler/tools/yosys/syn_asic.tcl +21 -13
  84. siliconcompiler/tools/yosys/syn_fpga.tcl +20 -17
  85. siliconcompiler/tools/yosys/techmaps/__init__.py +0 -0
  86. siliconcompiler/tools/yosys/templates/__init__.py +0 -0
  87. siliconcompiler/use.py +2 -1
  88. {siliconcompiler-0.27.1.dist-info → siliconcompiler-0.28.1.dist-info}/METADATA +9 -8
  89. {siliconcompiler-0.27.1.dist-info → siliconcompiler-0.28.1.dist-info}/RECORD +93 -48
  90. {siliconcompiler-0.27.1.dist-info → siliconcompiler-0.28.1.dist-info}/WHEEL +1 -1
  91. siliconcompiler/tools/openfpgaloader/openfpgaloader.py +0 -39
  92. {siliconcompiler-0.27.1.dist-info → siliconcompiler-0.28.1.dist-info}/LICENSE +0 -0
  93. {siliconcompiler-0.27.1.dist-info → siliconcompiler-0.28.1.dist-info}/entry_points.txt +0 -0
  94. {siliconcompiler-0.27.1.dist-info → siliconcompiler-0.28.1.dist-info}/top_level.txt +0 -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.4'
13
+ SCHEMA_VERSION = '0.48.2'
14
14
 
15
15
  #############################################################################
16
16
  # PARAM DEFINITION
@@ -175,7 +175,7 @@ def schema_cfg():
175
175
  sctype='[file]',
176
176
  pernode='optional',
177
177
  copy=val[1],
178
- shorthelp=f"{val[0]}: files",
178
+ shorthelp=f"{val[0]} files",
179
179
  switch=f"-{item} 'fileset filetype <file>'",
180
180
  example=[
181
181
  f"cli: -{item} 'rtl verilog hello_world.v'",
@@ -215,6 +215,71 @@ def schema_cfg():
215
215
  # Packaging
216
216
  cfg = schema_package(cfg)
217
217
 
218
+ # Packaging
219
+ cfg = schema_schematic(cfg)
220
+
221
+ return cfg
222
+
223
+
224
+ ###############################################################################
225
+ # SCHEMATIC
226
+ ###############################################################################
227
+ def schema_schematic(cfg, name='default'):
228
+ ''' Schematic
229
+ '''
230
+
231
+ scparam(cfg, ['schematic', 'component', name, 'model'],
232
+ sctype='str',
233
+ shorthelp="Schematic: component model",
234
+ switch="-schematic_component_model 'name <str>'",
235
+ example=["cli: -schematic_component_model 'B0 NAND2X1'",
236
+ "api: chip.set('schematic', 'component', 'B0, 'model', 'NAND2X1')"],
237
+ schelp="""Model of a component, specified on a per instance basis.""")
238
+
239
+ scparam(cfg, ['schematic', 'pin', name, 'dir'],
240
+ sctype='enum',
241
+ enum=['input', 'output', 'inout'],
242
+ shorthelp="Schematic: pin direction",
243
+ switch="-schematic_pin_dir 'name <str>'",
244
+ example=["cli: -schematic_pin_dir 'A input'",
245
+ "api: chip.set('schematic', 'pin', 'A', 'dir', 'input')"],
246
+ schelp="""Direction of pin specified on a per pin basis.""")
247
+
248
+ scparam(cfg, ['schematic', 'net', name, 'connect'],
249
+ sctype='[str]',
250
+ shorthelp="Schematic: net connection",
251
+ switch="-schematic_net_connect 'name <str>'",
252
+ example=["cli: -schematic_net_connect 'net0 I42.Z'",
253
+ "api: chip.set('schematic', 'net', 'net0', 'connect', 'I42.Z')"],
254
+ schelp="""Component and pin connectivity specified as a list
255
+ of connection points on a per net basis. The connection point
256
+ point format is "INSTANCE.PIN", where "." is the hierarchy
257
+ character. Connections without ".PIN" implies the connection is
258
+ a primary design I/O pin. Specifying "INSTANCE.*" implies that
259
+ all pins of INSTANCE get connected to the net.""")
260
+
261
+ scparam(cfg, ['schematic', 'hierchar'],
262
+ sctype='str',
263
+ defvalue='.',
264
+ shorthelp="Schematic: hierarchy character",
265
+ switch="-schematic_hierchar <str>",
266
+ example=["cli: -schematic_hierchar '/'",
267
+ "api: chip.set('schematic', 'hierchar', '/')"],
268
+ schelp="""Specifies the character used to express hierarchy. If
269
+ the hierarchy character is used as part of a name, it must be
270
+ escaped with a backslash('\').""")
271
+
272
+ scparam(cfg, ['schematic', 'buschar'],
273
+ sctype='str',
274
+ defvalue='[]',
275
+ shorthelp="Schematic: bus character",
276
+ switch="-schematic_buschar <str>",
277
+ example=["cli: -schematic_buschar '[]'",
278
+ "api: chip.set('schematic', 'buschar', '[]')"],
279
+ schelp="""Specifies the character used to express bus bits. If the
280
+ bus character is used as part of a name, it must be
281
+ escaped with a backslash('\').""")
282
+
218
283
  return cfg
219
284
 
220
285
 
@@ -307,6 +372,7 @@ def schema_pdk(cfg, stackup='default'):
307
372
  scparam(cfg, ['pdk', pdkname, 'node'],
308
373
  sctype='float',
309
374
  scope='global',
375
+ unit='nm',
310
376
  shorthelp="PDK: process node",
311
377
  switch="-pdk_node 'pdkname <float>'",
312
378
  example=["cli: -pdk_node 'asap7 130'",
@@ -387,7 +453,7 @@ def schema_pdk(cfg, stackup='default'):
387
453
  Wafer diameter used in wafer based manufacturing process.
388
454
  The standard diameter for leading edge manufacturing is 300mm. For
389
455
  older process technologies and specialty fabs, smaller diameters
390
- such as 200, 100, 125, 100 are common. The value is used to
456
+ such as 200, 150, 125, and 100 are common. The value is used to
391
457
  calculate dies per wafer and full factory chip costs.""")
392
458
 
393
459
  scparam(cfg, ['pdk', pdkname, 'panelsize'],
@@ -555,7 +621,7 @@ def schema_pdk(cfg, stackup='default'):
555
621
  'filetype' used in the aprtech is used by the tool specific APR TCL scripts
556
622
  to set up the technology parameters. Some tools may require additional
557
623
  files beyond the tech.lef file. Examples of extra file types include
558
- antenna, tracks, tapcell, viarules, em.""")
624
+ antenna, tracks, tapcell, viarules, and em.""")
559
625
 
560
626
  checks = ['lvs', 'drc', 'erc', 'fill']
561
627
  name = 'default'
@@ -590,7 +656,7 @@ def schema_pdk(cfg, stackup='default'):
590
656
  scparam(cfg, ['pdk', pdkname, 'file', tool, key, stackup],
591
657
  sctype='[file]',
592
658
  scope='global',
593
- shorthelp="PDK: special file",
659
+ shorthelp="PDK: custom file",
594
660
  switch="-pdk_file 'pdkname tool key stackup <file>'",
595
661
  example=[
596
662
  "cli: -pdk_file 'asap7 xyce spice M10 asap7.sp'",
@@ -603,7 +669,7 @@ def schema_pdk(cfg, stackup='default'):
603
669
  scparam(cfg, ['pdk', pdkname, 'dir', tool, key, stackup],
604
670
  sctype='[dir]',
605
671
  scope='global',
606
- shorthelp="PDK: special directory",
672
+ shorthelp="PDK: custom directory",
607
673
  switch="-pdk_dir 'pdkname tool key stackup <dir>'",
608
674
  example=[
609
675
  "cli: -pdk_dir 'asap7 xyce rfmodel M10 rftechdir'",
@@ -617,7 +683,7 @@ def schema_pdk(cfg, stackup='default'):
617
683
  scparam(cfg, ['pdk', pdkname, 'var', tool, key, stackup],
618
684
  sctype='[str]',
619
685
  scope='global',
620
- shorthelp="PDK: special variable",
686
+ shorthelp="PDK: custom, variable",
621
687
  switch="-pdk_var 'pdkname tool stackup key <str>'",
622
688
  example=[
623
689
  "cli: -pdk_var 'asap7 xyce modeltype M10 bsim4'",
@@ -639,8 +705,7 @@ def schema_pdk(cfg, stackup='default'):
639
705
  switch="-pdk_doc 'pdkname doctype <file>'",
640
706
  example=["cli: -pdk_doc 'asap7 reference reference.pdf'",
641
707
  "api: chip.set('pdk', 'asap7', 'doc', 'reference', 'reference.pdf')"],
642
- schelp="""
643
- Filepath to pdk documentation.""")
708
+ schelp="""Filepath to pdk documentation.""")
644
709
 
645
710
  return cfg
646
711
 
@@ -660,44 +725,44 @@ def schema_datasheet(cfg, name='default', mode='default'):
660
725
  'sram', 'dram', 'flash', 'rom',
661
726
  'interface', 'clock', 'amplifier',
662
727
  'filter', 'mixer', 'modulator', 'lna'],
663
- shorthelp="Datasheet: part type",
728
+ shorthelp="Datasheet: type",
664
729
  switch="-datasheet_type '<str>'",
665
730
  example=[
666
731
  "cli: -datasheet_type 'digital'",
667
732
  "api: chip.set('datasheet', 'type', 'digital')"],
668
- schelp="""Part type.""")
733
+ schelp="""Device type.""")
669
734
 
670
735
  # Documentation
671
736
  scparam(cfg, ['datasheet', 'doc'],
672
737
  sctype='[file]',
673
- shorthelp="Datasheet: part documentation",
738
+ shorthelp="Datasheet: documentation",
674
739
  switch="-datasheet_doc '<file>'",
675
740
  example=[
676
741
  "cli: -datasheet_doc 'za001.pdf'",
677
742
  "api: chip.set('datasheet', 'doc', 'za001.pdf)"],
678
- schelp="""Device datasheet document.""")
743
+ schelp="""Datasheet document.""")
679
744
 
680
745
  # Series
681
746
  scparam(cfg, ['datasheet', 'series'],
682
747
  sctype='str',
683
- shorthelp="Datasheet: device series",
748
+ shorthelp="Datasheet: series",
684
749
  switch="-datasheet_series '<str>'",
685
750
  example=[
686
751
  "cli: -datasheet_series 'ZA0'",
687
752
  "api: chip.set('datasheet', 'series', 'ZA0)"],
688
753
  schelp="""Device series describing a family of devices or
689
754
  a singular device with multiple packages and/or qualification
690
- SKUs.""")
755
+ `SKUs <https://en.wikipedia.org/wiki/Stock_keeping_unit>`_.""")
691
756
 
692
757
  # Manufacturer
693
758
  scparam(cfg, ['datasheet', 'manufacturer'],
694
759
  sctype='str',
695
- shorthelp="Datasheet: part manufacturer",
760
+ shorthelp="Datasheet: manufacturer",
696
761
  switch="-datasheet_manufacturer '<str>'",
697
762
  example=[
698
763
  "cli: -datasheet_manufacturer 'Acme'",
699
764
  "api: chip.set('datasheet', 'manufacturer', 'Acme')"],
700
- schelp="""Device manufacturer/vendor.""")
765
+ schelp="""Device manufacturer.""")
701
766
 
702
767
  # Device description
703
768
  scparam(cfg, ['datasheet', 'description'],
@@ -707,17 +772,17 @@ def schema_datasheet(cfg, name='default', mode='default'):
707
772
  example=[
708
773
  "cli: -datasheet_description 'Yet another CPU'",
709
774
  "api: chip.set('datasheet', 'description', 'Yet another CPU')"],
710
- schelp="""Free text device description""")
775
+ schelp="""Device description entered as free text.""")
711
776
 
712
777
  # Features
713
778
  scparam(cfg, ['datasheet', 'features'],
714
779
  sctype='[str]',
715
- shorthelp="Datasheet: part features",
780
+ shorthelp="Datasheet: features",
716
781
  switch="-datasheet_features '<str>'",
717
782
  example=[
718
783
  "cli: -datasheet_features 'usb3.0'",
719
784
  "api: chip.set('datasheet', 'features', 'usb3.0')"],
720
- schelp="""List of manufacturer specified device features""")
785
+ schelp="""Device features.""")
721
786
 
722
787
  # Grade
723
788
  scparam(cfg, ['datasheet', 'grade'],
@@ -725,7 +790,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
725
790
  enum=['consumer', 'industrial',
726
791
  'medical', 'automotive',
727
792
  'military', 'space'],
728
- shorthelp="Datasheet: part manufacturing grade",
793
+ shorthelp="Datasheet: manufacturing grade",
729
794
  switch="-datasheet_grade '<str>'",
730
795
  example=[
731
796
  "cli: -datasheet_grade 'automotive'",
@@ -735,7 +800,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
735
800
  # Qualification
736
801
  scparam(cfg, ['datasheet', 'qual'],
737
802
  sctype='[str]',
738
- shorthelp="Datasheet: qualification",
803
+ shorthelp="Datasheet: qualification level",
739
804
  switch="-datasheet_qual '<str>'",
740
805
  example=[
741
806
  "cli: -datasheet_qual 'AEC-Q100'",
@@ -770,7 +835,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
770
835
  scparam(cfg, ['datasheet', 'fmax'],
771
836
  sctype='float',
772
837
  unit='MHz',
773
- shorthelp="Datasheet: device maximum frequency",
838
+ shorthelp="Datasheet: maximum frequency",
774
839
  switch="-datasheet_fmax '<float>'",
775
840
  example=[
776
841
  "cli: -datasheet_fmax 100'",
@@ -859,7 +924,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
859
924
  "cli: -datasheet_io_arch 'pio spi'",
860
925
  "api: chip.set('datasheet', 'io', 'pio', 'arch', 'spi')"],
861
926
  schelp="""Datasheet: List of IO standard architectures supported
862
- by the named port.""")
927
+ by the named IO port.""")
863
928
 
864
929
  metrics = {'fmax': ['maximum frequency', 100, 'float', 'MHz'],
865
930
  'width': ['width', 4, 'int', None],
@@ -875,7 +940,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
875
940
  example=[
876
941
  f"cli: -datasheet_io_{i} 'name {v[1]}'",
877
942
  f"api: chip.set('datasheet', 'io', name, '{i}', {v[1]})"],
878
- schelp=f"""Datasheet: IO {v[1]} metrics specified on a named port basis.
943
+ schelp=f"""Datasheet: IO {v[1]} metrics specified on a per IO port basis.
879
944
  """)
880
945
 
881
946
  ######################
@@ -889,7 +954,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
889
954
  example=[
890
955
  "cli: -datasheet_proc_arch '0 RV64GC'",
891
956
  "api: chip.set('datasheet', 'proc', name, 'arch', 'openfpga')"],
892
- schelp="""Processor architecture.""")
957
+ schelp="""Processor architecture specified on a per core basis.""")
893
958
 
894
959
  scparam(cfg, ['datasheet', 'proc', name, 'features'],
895
960
  sctype='[str]',
@@ -898,7 +963,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
898
963
  example=[
899
964
  "cli: -datasheet_proc_features '0 SIMD'",
900
965
  "api: chip.set('datasheet','proc','cpu','features', 'SIMD')"],
901
- schelp="""List of maker specified processor features.""")
966
+ schelp="""List of maker specified processor features specified on a per core basis.""")
902
967
 
903
968
  scparam(cfg, ['datasheet', 'proc', name, 'datatypes'],
904
969
  sctype='[enum]',
@@ -910,13 +975,14 @@ def schema_datasheet(cfg, name='default', mode='default'):
910
975
  example=[
911
976
  "cli: -datasheet_proc_datatypes '0 int8'",
912
977
  "api: chip.set('datasheet', 'proc', 'cpu', 'datatypes', 'int8')"],
913
- schelp="""List of datatypes supported by the processor.""")
978
+ schelp="""List of datatypes supported by the processor specified
979
+ on a per core basis.""")
914
980
 
915
981
  metrics = {'archsize': ['architecture size', 64, None],
916
982
  'cores': ['number of cores', 4, None],
917
983
  'fmax': ['maximum frequency', 100, 'MHz'],
918
- 'ops': ['operations per cycle per core', 4, None],
919
- 'mults': ['hard multiplier units per core', 100, None],
984
+ 'ops': ['operations per cycle', 4, None],
985
+ 'mults': ['hard multiplier units', 100, None],
920
986
  'icache': ['l1 icache size', 32, 'KB'],
921
987
  'dcache': ['l1 dcache size', 32, 'KB'],
922
988
  'l2cache': ['l2 cache size', 1024, 'KB'],
@@ -933,7 +999,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
933
999
  example=[
934
1000
  f"cli: -datasheet_proc_{i} 'cpu {v[1]}'",
935
1001
  f"api: chip.set('datasheet', 'proc', 'cpu', '{i}', {v[1]})"],
936
- schelp=f"""Processor metric: {v[0]}.""")
1002
+ schelp=f"""Processor metric: {v[0]} specified on a per core basis.""")
937
1003
 
938
1004
  ######################
939
1005
  # Memory
@@ -946,7 +1012,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
946
1012
  example=[
947
1013
  "cli: -datasheet_memory_bits 'm0 1024'",
948
1014
  "api: chip.set('datasheet', 'memory', 'm0', 'bits', 1024)"],
949
- schelp="""Memory total number of bits.""")
1015
+ schelp="""Memory total number of bits specified on a per memory basis.""")
950
1016
 
951
1017
  scparam(cfg, ['datasheet', 'memory', name, 'width'],
952
1018
  sctype='int',
@@ -955,7 +1021,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
955
1021
  example=[
956
1022
  "cli: -datasheet_memory_width 'm0 16'",
957
1023
  "api: chip.set('datasheet', 'memory', 'm0', 'width', 16)"],
958
- schelp="""Memory width.""")
1024
+ schelp="""Memory width specified on a per memory basis.""")
959
1025
 
960
1026
  scparam(cfg, ['datasheet', 'memory', name, 'depth'],
961
1027
  sctype='int',
@@ -964,7 +1030,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
964
1030
  example=[
965
1031
  "cli: -datasheet_memory_depth 'm0 128'",
966
1032
  "api: chip.set('datasheet', 'memory', 'm0', 'depth', 128)"],
967
- schelp="""Memory depth.""")
1033
+ schelp="""Memory depth specified on a per memory basis.""")
968
1034
 
969
1035
  scparam(cfg, ['datasheet', 'memory', name, 'banks'],
970
1036
  sctype='int',
@@ -973,7 +1039,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
973
1039
  example=[
974
1040
  "cli: -datasheet_memory_banks 'm0 4'",
975
1041
  "api: chip.set('datasheet', 'memory', 'm0', 'banks', 4)"],
976
- schelp="""Memory banks.""")
1042
+ schelp="""Memory banks specified on a per memory basis.""")
977
1043
 
978
1044
  # Timing
979
1045
  metrics = {'fmax': ['max frequency', (1e9, 1e9, 1e9), 'Hz'],
@@ -998,7 +1064,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
998
1064
  example=[
999
1065
  f"cli: -datasheet_memory_{i} 'name {v[1]}'",
1000
1066
  f"api: chip.set('datasheet', 'memory', name, '{i}', {v[1]})"],
1001
- schelp=f"""Memory {v[1]}.""")
1067
+ schelp=f"""Memory {v[1]} specified on a per memory basis.""")
1002
1068
 
1003
1069
  # Latency (cycles)
1004
1070
  metrics = {'tcl': ['column address latency', (100, 100, 100), 'cycles'],
@@ -1016,7 +1082,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
1016
1082
  example=[
1017
1083
  f"cli: -datasheet_memory_{i} 'name {v[1]}'",
1018
1084
  f"api: chip.set('datasheet', 'memory', name, '{i}', {v[1]})"],
1019
- schelp=f"""Memory {v[1]}.""")
1085
+ schelp=f"""Memory {v[1]} specified on a per memory basis.""")
1020
1086
 
1021
1087
  ######################
1022
1088
  # FPGA
@@ -1032,7 +1098,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
1032
1098
  schelp="""FPGA architecture.
1033
1099
  """)
1034
1100
 
1035
- metrics = {'luts': ['LUTs (4 input)', 32000, None],
1101
+ metrics = {'luts': ['LUTs', 32000, None],
1036
1102
  'registers': ['registers', 100, None],
1037
1103
  'plls': ['pll blocks', 1, None],
1038
1104
  'mults': ['multiplier/dsp elements', 100, None],
@@ -1079,7 +1145,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
1079
1145
  for i, v in metrics.items():
1080
1146
  scparam(cfg, ['datasheet', 'analog', name, i],
1081
1147
  sctype='int',
1082
- shorthelp=f"Datasheet: Analog {v[0]}",
1148
+ shorthelp=f"Datasheet: analog {v[0]}",
1083
1149
  switch=f"-datasheet_analog_{i} 'name <int>'",
1084
1150
  example=[
1085
1151
  f"cli: -datasheet_analog_{i} 'i0 {v[1]}'",
@@ -1122,7 +1188,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
1122
1188
  scparam(cfg, ['datasheet', 'analog', name, i],
1123
1189
  unit=v[2],
1124
1190
  sctype='(float,float,float)',
1125
- shorthelp=f"Datasheet: Analog {v[0]}",
1191
+ shorthelp=f"Datasheet: analog {v[0]}",
1126
1192
  switch=f"-datasheet_analog_{i} 'name <(float,float,float)>'",
1127
1193
  example=[
1128
1194
  f"cli: -datasheet_analog_{i} 'i0 {v[1]}'",
@@ -1186,6 +1252,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
1186
1252
  # Package Description
1187
1253
  #########################
1188
1254
 
1255
+ # high level description
1189
1256
  scparam(cfg, ['datasheet', 'package', name, 'type'],
1190
1257
  sctype='enum',
1191
1258
  enum=['bga', 'lga', 'csp', 'qfn', 'qfp', 'sop', 'die', 'wafer'],
@@ -1194,7 +1261,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
1194
1261
  example=[
1195
1262
  "cli: -datasheet_package_type 'abcd bga'",
1196
1263
  "api: chip.set('datasheet', 'package', 'abcd', 'type', 'bga')"],
1197
- schelp="""Datasheet: package type.""")
1264
+ schelp="""Package type specified on a named package basis.""")
1198
1265
 
1199
1266
  scparam(cfg, ['datasheet', 'package', name, 'drawing'],
1200
1267
  sctype='[file]',
@@ -1203,21 +1270,38 @@ def schema_datasheet(cfg, name='default', mode='default'):
1203
1270
  example=[
1204
1271
  "cli: -datasheet_package_drawing 'abcd p484.pdf'",
1205
1272
  "api: chip.set('datasheet', 'package', 'abcd', 'drawing', 'p484.pdf')"],
1206
- schelp="""Datasheet: package drawing""")
1273
+ schelp="""Mechanical package outline for documentation purposes.
1274
+ Common file formats include PDF, DOC, SVG, and PNG.""")
1207
1275
 
1208
1276
  scparam(cfg, ['datasheet', 'package', name, 'pincount'],
1209
1277
  sctype='int',
1210
- shorthelp="Datasheet: package pincount",
1278
+ shorthelp="Datasheet: package total pincount",
1211
1279
  switch="-datasheet_package_pincount 'name <int>'",
1212
1280
  example=[
1213
1281
  "cli: -datasheet_package_pincount 'abcd 484'",
1214
1282
  "api: chip.set('datasheet', 'package', 'abcd', 'pincount', '484')"],
1215
- schelp="""Datasheet: package pincount""")
1283
+ schelp="""Total number package pins of the named package.""")
1216
1284
 
1217
- metrics = {'length': ['length', (20, 20, 20), 'mm'],
1218
- 'width': ['width', (20, 20, 20), 'mm'],
1219
- 'thickness': ['thickness', (1.0, 1.1, 1.2), 'mm'],
1220
- 'pitch': ['pitch', (0.8, 0.85, 0.9), 'mm']
1285
+ scparam(cfg, ['datasheet', 'package', name, 'anchor'],
1286
+ sctype='(float,float)',
1287
+ defvalue=(0.0, 0.0),
1288
+ unit='um',
1289
+ shorthelp="Datasheeet: package anchor",
1290
+ switch="-datasheet_package_anchor 'name <(float,float)>'",
1291
+ example=[
1292
+ "cli: -datasheet_package_anchor 'i0 (3.0,3.0)'",
1293
+ "api: chip.set('datasheet', 'package', 'i0', 'anchor', (3.0, 3.0))"],
1294
+ schelp="""
1295
+ Package anchor point with respect to the lower left corner of the package.
1296
+ When placing a component on a substrate, the placement location specifies
1297
+ the distance from the substrate origin to the anchor point of the placed
1298
+ object.""")
1299
+
1300
+ # critical dimensions
1301
+ metrics = {'length': ['length', (4000, 4000, 4000), 'um'],
1302
+ 'width': ['width', (4000, 4000, 4000), 'um'],
1303
+ 'thickness': ['thickness', (900, 1000, 1100), 'um'],
1304
+ 'pitch': ['pitch', (800, 850, 900), 'um']
1221
1305
  }
1222
1306
 
1223
1307
  for i, v in metrics.items():
@@ -1232,62 +1316,60 @@ def schema_datasheet(cfg, name='default', mode='default'):
1232
1316
  schelp=f"""Datasheet: package {v[0]}. Values are tuples of
1233
1317
  (min, nominal, max).""")
1234
1318
 
1235
- scparam(cfg, ['datasheet', 'package', name, 'pinshape', name],
1319
+ # pinout diagram
1320
+ pinnumber = 'default'
1321
+ scparam(cfg, ['datasheet', 'package', name, 'pin', pinnumber, 'shape'],
1236
1322
  sctype='enum',
1237
- enum=['circle', 'rectangle'],
1323
+ enum=['circle', 'rectangle', 'square', 'octagon'],
1238
1324
  shorthelp="Datasheet: package pin shape",
1239
- switch="-datasheet_package_pinshape 'name name <str>'",
1325
+ switch="-datasheet_package_pin_shape 'name pinnumber <str>'",
1240
1326
  example=[
1241
- "cli: -datasheet_package_pinshape 'abcd B1 circle'",
1242
- "api: chip.set('datasheet', 'package', 'abcd', 'pinshape', 'B1', 'circle')"],
1243
- schelp="""Datasheet: pin shape (rectangle or circle) specified on a per package
1244
- and per pin basis.""")
1327
+ "cli: -datasheet_package_pin_shape 'abcd B1 circle'",
1328
+ "api: chip.set('datasheet', 'package', 'abcd', 'pin', 'B1', 'shape', 'circle')"],
1329
+ schelp="""Datasheet: package pin shape specified on a per package
1330
+ and per pin number basis.""")
1245
1331
 
1246
- metrics = {'pinwidth': ['pinwidth', (0.2, 0.25, 0.3), 'mm'],
1247
- 'pinlength': ['pinlength', (0.2, 0.25, 0.3), 'mm']
1332
+ metrics = {'width': ['width', (200, 250, 300), 'um'],
1333
+ 'length': ['length', (200, 250, 300), 'um']
1248
1334
  }
1249
1335
 
1250
1336
  for i, v in metrics.items():
1251
- scparam(cfg, ['datasheet', 'package', name, i, name],
1337
+ scparam(cfg, ['datasheet', 'package', name, 'pin', pinnumber, i],
1252
1338
  unit=v[2],
1253
1339
  sctype='(float,float,float)',
1254
1340
  shorthelp=f"Datasheet: package pin {v[0]}",
1255
- switch=f"-datasheet_package_{i} 'name name <(float,float,float)>'",
1341
+ switch=f"-datasheet_package_pin_{i} 'name pinnumber <(float,float,float)>'",
1256
1342
  example=[
1257
- f"cli: -datasheet_package_{i} 'abcd B1 {v[1]}'",
1258
- f"api: chip.set('datasheet', 'package', 'abcd', '{i}', 'B1', {v[1]}"],
1259
- schelp=f"""Datsheet: {v[0]} specified on a per package and per pin basis.
1260
- Values are tuples of (min, nominal, max).""")
1343
+ f"cli: -datasheet_package_pin_{i} 'abcd B1 {v[1]}'",
1344
+ f"api: chip.set('datasheet', 'package', 'abcd', 'pin', 'B1', '{i}', {v[1]}"],
1345
+ schelp=f"""Datsheet: {v[0]} specified on a per package and per pin number
1346
+ basis. Values are tuples of (min, nominal, max).""")
1261
1347
 
1262
- scparam(cfg, ['datasheet', 'package', name, 'pinloc', name],
1348
+ scparam(cfg, ['datasheet', 'package', name, 'pin', pinnumber, 'loc'],
1263
1349
  sctype='(float,float)',
1264
- unit='mm',
1350
+ unit='um',
1265
1351
  shorthelp="Datasheet: package pin location",
1266
- switch="-datasheet_package_pinloc 'name name <(float,float)>'",
1352
+ switch="-datasheet_package_pin_loc 'name pinnumber <(float,float)>'",
1267
1353
  example=[
1268
- "cli: -datasheet_package_pinloc 'abcd B1 (0.5,0.5)'",
1269
- "api: chip.set('datasheet', 'package', 'abcd', 'pinloc', 'B1', (0.5,0.5)"],
1270
- schelp="""Datsheet: Pin location specified as an (x,y) tuple. Locations
1271
- specify the center of the pin with respect to the center of the package.
1272
- """)
1354
+ "cli: -datasheet_package_pin_loc 'abcd B1 (500,500)'",
1355
+ "api: chip.set('datasheet', 'package', 'abcd', 'pin', 'B1', 'loc', (500,500)"],
1356
+ schelp="""Datsheet: Package pin location specified as an (x,y) tuple on a per
1357
+ package and per pin number basis. Locations specify the center of the pin with
1358
+ respect to the center of the package.""")
1273
1359
 
1274
- scparam(cfg, ['datasheet', 'package', name, 'netname', name],
1360
+ scparam(cfg, ['datasheet', 'package', name, 'pin', pinnumber, 'name'],
1275
1361
  sctype='str',
1276
- shorthelp="Datasheet: package pin net name",
1277
- switch="-datasheet_package_netname 'name name <str>'",
1278
- example=[
1279
- "cli: -datasheet_package_netname 'abcd B1 VDD'",
1280
- "api: chip.set('datasheet', 'package', 'abcd', 'netname', 'B1', 'VDD')"],
1281
- schelp="""Datsheet: Device net connected to the pin.""")
1282
-
1283
- scparam(cfg, ['datasheet', 'package', name, 'portname', name],
1284
- sctype='str',
1285
- shorthelp="Datasheet: package pin port name",
1286
- switch="-datasheet_package_portname 'name name <str>'",
1287
- example=[
1288
- "cli: -datasheet_package_portname 'abcd B1 VDD'",
1289
- "api: chip.set('datasheet', 'package', 'abcd', 'portname', 'B1', 'VDD')"],
1290
- schelp="""Datsheet: Device port connected to the pin.""")
1362
+ shorthelp="Datasheet: package pin name",
1363
+ switch="-datasheet_package_pin_name 'name pinnumber <str>'",
1364
+ example=[
1365
+ "cli: -datasheet_package_pin_name 'abcd B1 clk'",
1366
+ "api: chip.set('datasheet', 'package', 'abcd', 'pin', 'B1', 'name', 'clk')"],
1367
+ schelp="""Datsheet: Package pin name specified on a per package and per pin
1368
+ number basis. The pin number is generally an integer starting at '1' in the case of
1369
+ packages like qfn, qfp and an array index ('A1', 'A2') in the case of array packages
1370
+ like bgas. The pin name refers to the logical function assigned to the physical
1371
+ pin number (e.g clk, vss, in). Details regarding the logical pin is stored in
1372
+ the :keypath:`datasheet,pin`.""")
1291
1373
 
1292
1374
  ######################
1293
1375
  # Pin Specifications
@@ -1313,8 +1395,7 @@ def schema_datasheet(cfg, name='default', mode='default'):
1313
1395
  example=[
1314
1396
  "cli: -datasheet_pin_dir 'clk global input'",
1315
1397
  "api: chip.set('datasheet', 'pin', 'clk', 'dir', 'global', 'input')"],
1316
- schelp="""Pin direction specified on a per mode basis. Acceptable pin
1317
- directions include: input, output, inout.""")
1398
+ schelp="""Pin direction specified on a per mode basis.""")
1318
1399
 
1319
1400
  # Pin complement (for differential pair)
1320
1401
  scparam(cfg, ['datasheet', 'pin', name, 'complement', mode],
@@ -1490,8 +1571,7 @@ def schema_flowgraph(cfg, flow='default', step='default', index='default'):
1490
1571
  example=[
1491
1572
  "cli: -flowgraph_tool 'asicflow place 0 openroad'",
1492
1573
  "api: chip.set('flowgraph', 'asicflow', 'place', '0', 'tool', 'openroad')"],
1493
- schelp="""Name of the tool name used for task execution. The 'tool' parameter
1494
- is ignored for builtin tasks.""")
1574
+ schelp="""Name of the tool name used for task execution.""")
1495
1575
 
1496
1576
  # task (belonging to tool)
1497
1577
  scparam(cfg, ['flowgraph', flow, step, index, 'task'],
@@ -1501,8 +1581,7 @@ def schema_flowgraph(cfg, flow='default', step='default', index='default'):
1501
1581
  example=[
1502
1582
  "cli: -flowgraph_task 'asicflow myplace 0 place'",
1503
1583
  "api: chip.set('flowgraph', 'asicflow', 'myplace', '0', 'task', 'place')"],
1504
- schelp="""Name of the tool associated task used for step execution. Builtin
1505
- task names include: minimum, maximum, join, verify, mux. """)
1584
+ schelp="""Name of the tool associated task used for step execution.""")
1506
1585
 
1507
1586
  scparam(cfg, ['flowgraph', flow, step, index, 'taskmodule'],
1508
1587
  sctype='str',
@@ -1573,7 +1652,7 @@ def schema_tool(cfg, tool='default'):
1573
1652
  schelp="""
1574
1653
  File system path to tool executable. The path is prepended to the
1575
1654
  system PATH environment variable for batch and interactive runs. The
1576
- path parameter can be left blank if the 'exe' is already in the
1655
+ path parameter can be left blank if the :keypath:`tool,<tool>,exe` is already in the
1577
1656
  environment search path.""")
1578
1657
 
1579
1658
  scparam(cfg, ['tool', tool, 'vswitch'],
@@ -1584,8 +1663,8 @@ def schema_tool(cfg, tool='default'):
1584
1663
  "api: chip.set('tool', 'openroad', 'vswitch', '-version')"],
1585
1664
  schelp="""
1586
1665
  Command line switch to use with executable used to print out
1587
- the version number. Common switches include -v, -version,
1588
- --version. Some tools may require extra flags to run in batch mode.""")
1666
+ the version number. Common switches include ``-v``, ``-version``,
1667
+ ``--version``. Some tools may require extra flags to run in batch mode.""")
1589
1668
 
1590
1669
  scparam(cfg, ['tool', tool, 'vendor'],
1591
1670
  sctype='str',
@@ -1616,7 +1695,7 @@ def schema_tool(cfg, tool='default'):
1616
1695
  then the job is halted pre-execution. For backwards compatibility,
1617
1696
  entries that do not conform to the standard will be interpreted as a
1618
1697
  version with an '==' specifier. This check can be disabled by
1619
- setting 'novercheck' to True.""")
1698
+ setting :keypath:`option,novercheck` to True.""")
1620
1699
 
1621
1700
  scparam(cfg, ['tool', tool, 'format'],
1622
1701
  sctype='enum',
@@ -1641,7 +1720,7 @@ def schema_tool(cfg, tool='default'):
1641
1720
  Defines a set of tool specific environment variables used by the executable
1642
1721
  that depend on license key servers to control access. For multiple servers,
1643
1722
  separate each server by a 'colon'. The named license variable are read at
1644
- runtime (run()) and the environment variables are set.
1723
+ runtime (:meth:`.run()`) and the environment variables are set.
1645
1724
  """)
1646
1725
 
1647
1726
  return cfg
@@ -1747,7 +1826,7 @@ def schema_task(cfg, tool='default', task='default', step='default', index='defa
1747
1826
  sctype='[file]',
1748
1827
  pernode='optional',
1749
1828
  copy=True,
1750
- shorthelp="Task: setup files",
1829
+ shorthelp="Task: custom setup files",
1751
1830
  switch="-tool_task_file 'tool task key <file>'",
1752
1831
  example=[
1753
1832
  "cli: -tool_task_file 'openroad floorplan macroplace macroplace.tcl'",
@@ -1763,7 +1842,7 @@ def schema_task(cfg, tool='default', task='default', step='default', index='defa
1763
1842
  sctype='[dir]',
1764
1843
  pernode='optional',
1765
1844
  copy=True,
1766
- shorthelp="Task: setup directories",
1845
+ shorthelp="Task: custom setup directories",
1767
1846
  switch="-tool_task_dir 'tool task key <dir>'",
1768
1847
  example=[
1769
1848
  "cli: -tool_task_dir 'verilator compile cincludes include'",
@@ -1779,7 +1858,7 @@ def schema_task(cfg, tool='default', task='default', step='default', index='defa
1779
1858
  scparam(cfg, ['tool', tool, 'task', task, 'input'],
1780
1859
  sctype='[file]',
1781
1860
  pernode='required',
1782
- shorthelp="Task: inputs",
1861
+ shorthelp="Task: input files",
1783
1862
  switch="-tool_task_input 'tool task <file>'",
1784
1863
  example=[
1785
1864
  "cli: -tool_task_input 'openroad place place 0 oh_add.def'",
@@ -1788,14 +1867,14 @@ def schema_task(cfg, tool='default', task='default', step='default', index='defa
1788
1867
  schelp="""
1789
1868
  List of data files to be copied from previous flowgraph steps 'output'
1790
1869
  directory. The list of steps to copy files from is defined by the
1791
- list defined by the dictionary key ['flowgraph', step, index, 'input'].
1870
+ list defined by the dictionary key :keypath:`flowgraph,<step>,<index>',input`.
1792
1871
  All files must be available for flow to continue. If a file
1793
1872
  is missing, the program exists on an error.""")
1794
1873
 
1795
1874
  scparam(cfg, ['tool', tool, 'task', task, 'output'],
1796
1875
  sctype='[file]',
1797
1876
  pernode='required',
1798
- shorthelp="Task: outputs",
1877
+ shorthelp="Task: output files",
1799
1878
  switch="-tool_task_output 'tool task <file>'",
1800
1879
  example=[
1801
1880
  "cli: -tool_task_output 'openroad place place 0 oh_add.def'",
@@ -1813,7 +1892,7 @@ def schema_task(cfg, tool='default', task='default', step='default', index='defa
1813
1892
  defvalue='log',
1814
1893
  scope='job',
1815
1894
  pernode='optional',
1816
- shorthelp="Task: Destination for stdout",
1895
+ shorthelp="Task: destination for stdout",
1817
1896
  switch="-tool_task_stdout_destination 'tool task <str>'",
1818
1897
  example=["cli: -tool_task_stdout_destination 'ghdl import log'",
1819
1898
  "api: chip.set('tool', 'ghdl', 'task', 'import', 'stdout', 'destination', "
@@ -1831,7 +1910,7 @@ def schema_task(cfg, tool='default', task='default', step='default', index='defa
1831
1910
  defvalue='log',
1832
1911
  scope='job',
1833
1912
  pernode='optional',
1834
- shorthelp="Task: File suffix for redirected stdout",
1913
+ shorthelp="Task: file suffix for redirected stdout",
1835
1914
  switch="-tool_task_stdout_suffix 'tool task <str>'",
1836
1915
  example=["cli: -tool_task_stdout_suffix 'ghdl import log'",
1837
1916
  "api: chip.set('tool', ghdl', 'task', 'import', 'stdout', 'suffix', 'log')"],
@@ -1844,7 +1923,7 @@ def schema_task(cfg, tool='default', task='default', step='default', index='defa
1844
1923
  defvalue='log',
1845
1924
  scope='job',
1846
1925
  pernode='optional',
1847
- shorthelp="Task: Destination for stderr",
1926
+ shorthelp="Task: destination for stderr",
1848
1927
  switch="-tool_task_stderr_destination 'tool task <str>'",
1849
1928
  example=["cli: -tool_task_stderr_destination 'ghdl import log'",
1850
1929
  "api: chip.set('tool', ghdl', 'task', 'import', 'stderr', 'destination', "
@@ -1862,7 +1941,7 @@ def schema_task(cfg, tool='default', task='default', step='default', index='defa
1862
1941
  defvalue='log',
1863
1942
  scope='job',
1864
1943
  pernode='optional',
1865
- shorthelp="Task: File suffix for redirected stderr",
1944
+ shorthelp="Task: file suffix for redirected stderr",
1866
1945
  switch="-tool_task_stderr_suffix 'tool task <str>'",
1867
1946
  example=["cli: -tool_task_stderr_suffix 'ghdl import log'",
1868
1947
  "api: chip.set('tool', 'ghdl', 'task', 'import', 'stderr', 'suffix', 'log')"],
@@ -1879,14 +1958,14 @@ def schema_task(cfg, tool='default', task='default', step='default', index='defa
1879
1958
  "api: chip.set('tool', 'openroad', 'task', 'cts', 'require', 'design')"],
1880
1959
  schelp="""
1881
1960
  List of keypaths to required task parameters. The list is used
1882
- by check_manifest() to verify that all parameters have been set up before
1961
+ by :meth:`.check_manifest()` to verify that all parameters have been set up before
1883
1962
  step execution begins.""")
1884
1963
 
1885
1964
  metric = 'default'
1886
1965
  scparam(cfg, ['tool', tool, 'task', task, 'report', metric],
1887
1966
  sctype='[file]',
1888
1967
  pernode='required',
1889
- shorthelp="Task: reports",
1968
+ shorthelp="Task: metric report files",
1890
1969
  switch="-tool_task_report 'tool task metric <file>'",
1891
1970
  example=[
1892
1971
  "cli: -tool_task_report 'openroad place holdtns place 0 place.log'",
@@ -1976,7 +2055,7 @@ def schema_arg(cfg):
1976
2055
  scparam(cfg, ['arg', 'step'],
1977
2056
  sctype='str',
1978
2057
  scope='scratch',
1979
- shorthelp="ARG: Step argument",
2058
+ shorthelp="ARG: step argument",
1980
2059
  switch="-arg_step <str>",
1981
2060
  example=["cli: -arg_step 'route'",
1982
2061
  "api: chip.set('arg', 'step', 'route')"],
@@ -1984,13 +2063,13 @@ def schema_arg(cfg):
1984
2063
  Dynamic parameter passed in by the SC runtime as an argument to
1985
2064
  a runtime task. The parameter enables configuration code
1986
2065
  (usually TCL) to use control flow that depend on the current
1987
- 'step'. The parameter is used the run() function and
2066
+ 'step'. The parameter is used the :meth:`.run()` function and
1988
2067
  is not intended for external use.""")
1989
2068
 
1990
2069
  scparam(cfg, ['arg', 'index'],
1991
2070
  sctype='str',
1992
2071
  scope='scratch',
1993
- shorthelp="ARG: Index argument",
2072
+ shorthelp="ARG: index argument",
1994
2073
  switch="-arg_index <str>",
1995
2074
  example=["cli: -arg_index 0",
1996
2075
  "api: chip.set('arg', 'index', '0')"],
@@ -1998,7 +2077,7 @@ def schema_arg(cfg):
1998
2077
  Dynamic parameter passed in by the SC runtime as an argument to
1999
2078
  a runtime task. The parameter enables configuration code
2000
2079
  (usually TCL) to use control flow that depend on the current
2001
- 'index'. The parameter is used the run() function and
2080
+ 'index'. The parameter is used the :meth:`.run()` function and
2002
2081
  is not intended for external use.""")
2003
2082
 
2004
2083
  return cfg
@@ -2292,7 +2371,7 @@ def schema_metric(cfg, step='default', index='default'):
2292
2371
  f"api: chip.set('metric', '{item}', 10.0, step='dfm', index=0)"],
2293
2372
  pernode='required',
2294
2373
  schelp="""
2295
- Metric tracking time spent by the EDA executable 'exe' on a
2374
+ Metric tracking time spent by the EDA executable :keypath:`tool,<tool>,exe` on a
2296
2375
  per step and index basis. It does not include the SiliconCompiler
2297
2376
  runtime overhead or time waiting for I/O operations and
2298
2377
  inter-processor communication to complete.""")
@@ -2479,7 +2558,7 @@ def schema_option(cfg):
2479
2558
  scparam(cfg, ['option', 'remote'],
2480
2559
  sctype='bool',
2481
2560
  scope='job',
2482
- shorthelp="Enable remote processing",
2561
+ shorthelp="Option: enable remote processing",
2483
2562
  switch="-remote <bool>",
2484
2563
  example=[
2485
2564
  "cli: -remote",
@@ -2493,7 +2572,7 @@ def schema_option(cfg):
2493
2572
  scparam(cfg, ['option', 'credentials'],
2494
2573
  sctype='file',
2495
2574
  scope='job',
2496
- shorthelp="User credentials file",
2575
+ shorthelp="Option: user credentials file",
2497
2576
  switch="-credentials <file>",
2498
2577
  example=[
2499
2578
  "cli: -credentials /home/user/.sc/credentials",
@@ -2515,7 +2594,7 @@ def schema_option(cfg):
2515
2594
  scparam(cfg, ['option', 'cachedir'],
2516
2595
  sctype='file',
2517
2596
  scope='job',
2518
- shorthelp="User cache directory",
2597
+ shorthelp="Option: user cache directory",
2519
2598
  switch="-cachedir <file>",
2520
2599
  example=[
2521
2600
  "cli: -cachedir /home/user/.sc/cache",
@@ -2529,7 +2608,7 @@ def schema_option(cfg):
2529
2608
  sctype='int',
2530
2609
  scope='job',
2531
2610
  pernode='optional',
2532
- shorthelp="Tool execution scheduling priority",
2611
+ shorthelp="Option: tool scheduling priority",
2533
2612
  switch="-nice <int>",
2534
2613
  example=[
2535
2614
  "cli: -nice 5",
@@ -2543,7 +2622,7 @@ def schema_option(cfg):
2543
2622
  scparam(cfg, ['option', 'pdk'],
2544
2623
  sctype='str',
2545
2624
  scope='job',
2546
- shorthelp="PDK target",
2625
+ shorthelp="Option: PDK target",
2547
2626
  switch="-pdk <str>",
2548
2627
  example=["cli: -pdk freepdk45",
2549
2628
  "api: chip.set('option', 'pdk', 'freepdk45')"],
@@ -2553,7 +2632,7 @@ def schema_option(cfg):
2553
2632
  scparam(cfg, ['option', 'stackup'],
2554
2633
  sctype='str',
2555
2634
  scope='job',
2556
- shorthelp="Stackup target",
2635
+ shorthelp="Option: stackup target",
2557
2636
  switch="-stackup <str>",
2558
2637
  example=["cli: -stackup 2MA4MB2MC",
2559
2638
  "api: chip.set('option', 'stackup', '2MA4MB2MC')"],
@@ -2564,7 +2643,7 @@ def schema_option(cfg):
2564
2643
  scparam(cfg, ['option', 'flow'],
2565
2644
  sctype='str',
2566
2645
  scope='job',
2567
- shorthelp="Flow target",
2646
+ shorthelp="Option: flow target",
2568
2647
  switch="-flow <str>",
2569
2648
  example=["cli: -flow asicflow",
2570
2649
  "api: chip.set('option', 'flow', 'asicflow')"],
@@ -2577,7 +2656,7 @@ def schema_option(cfg):
2577
2656
  pernode='optional',
2578
2657
  scope='job',
2579
2658
  defvalue='O0',
2580
- shorthelp="Optimization mode",
2659
+ shorthelp="Option: optimization mode",
2581
2660
  switch=["-O<str>",
2582
2661
  "-optmode <str>"],
2583
2662
  example=["cli: -O3",
@@ -2598,7 +2677,7 @@ def schema_option(cfg):
2598
2677
  scparam(cfg, ['option', 'cfg'],
2599
2678
  sctype='[file]',
2600
2679
  scope='job',
2601
- shorthelp="Configuration manifest",
2680
+ shorthelp="Option: configuration manifest",
2602
2681
  switch="-cfg <file>",
2603
2682
  example=["cli: -cfg mypdk.json",
2604
2683
  "api: chip.set('option', 'cfg', 'mypdk.json')"],
@@ -2607,13 +2686,13 @@ def schema_option(cfg):
2607
2686
  manifests. The files are read in automatically when using the
2608
2687
  'sc' command line application. In Python programs, JSON manifests
2609
2688
  can be merged into the current working manifest using the
2610
- read_manifest() method.""")
2689
+ :meth:`Chip.read_manifest()` method.""")
2611
2690
 
2612
2691
  key = 'default'
2613
2692
  scparam(cfg, ['option', 'env', key],
2614
2693
  sctype='str',
2615
2694
  scope='job',
2616
- shorthelp="Environment variables",
2695
+ shorthelp="Option: environment variables",
2617
2696
  switch="-env 'key <str>'",
2618
2697
  example=[
2619
2698
  "cli: -env 'PDK_HOME /disk/mypdk'",
@@ -2626,7 +2705,7 @@ def schema_option(cfg):
2626
2705
  scparam(cfg, ['option', 'var', key],
2627
2706
  sctype='[str]',
2628
2707
  scope='job',
2629
- shorthelp="Custom variables",
2708
+ shorthelp="Option: custom variables",
2630
2709
  switch="-var 'key <str>'",
2631
2710
  example=[
2632
2711
  "cli: -var 'openroad_place_density 0.4'",
@@ -2641,7 +2720,7 @@ def schema_option(cfg):
2641
2720
  sctype='[file]',
2642
2721
  scope='job',
2643
2722
  copy=True,
2644
- shorthelp="Custom files",
2723
+ shorthelp="Option: custom files",
2645
2724
  switch="-file 'key <file>'",
2646
2725
  example=[
2647
2726
  "cli: -file 'openroad_tapcell ./tapcell.tcl'",
@@ -2656,7 +2735,7 @@ def schema_option(cfg):
2656
2735
  sctype='[dir]',
2657
2736
  scope='job',
2658
2737
  copy=True,
2659
- shorthelp="Custom directories",
2738
+ shorthelp="Option: custom directories",
2660
2739
  switch="-dir 'key <dir>'",
2661
2740
  example=[
2662
2741
  "cli: -dir 'openroad_tapcell ./tapcell.tcl'",
@@ -2673,7 +2752,7 @@ def schema_option(cfg):
2673
2752
  pernode='optional',
2674
2753
  scope='job',
2675
2754
  defvalue='info',
2676
- shorthelp="Logging level",
2755
+ shorthelp="Option: logging level",
2677
2756
  switch="-loglevel <str>",
2678
2757
  example=[
2679
2758
  "cli: -loglevel info",
@@ -2685,27 +2764,27 @@ def schema_option(cfg):
2685
2764
  sctype='dir',
2686
2765
  scope='job',
2687
2766
  defvalue='build',
2688
- shorthelp="Build directory",
2767
+ shorthelp="Option: build directory",
2689
2768
  switch="-builddir <dir>",
2690
2769
  example=[
2691
2770
  "cli: -builddir ./build_the_future",
2692
2771
  "api: chip.set('option', 'builddir', './build_the_future')"],
2693
2772
  schelp="""
2694
2773
  The default build directory is in the local './build' where SC was
2695
- executed. The 'builddir' parameter can be used to set an alternate
2774
+ executed. This can be used to set an alternate
2696
2775
  compilation directory path.""")
2697
2776
 
2698
2777
  scparam(cfg, ['option', 'jobname'],
2699
2778
  sctype='str',
2700
2779
  scope='job',
2701
2780
  defvalue='job0',
2702
- shorthelp="Job name",
2781
+ shorthelp="Option: job name",
2703
2782
  switch="-jobname <str>",
2704
2783
  example=[
2705
2784
  "cli: -jobname may1",
2706
2785
  "api: chip.set('option', 'jobname', 'may1')"],
2707
2786
  schelp="""
2708
- Jobname during invocation of run(). The jobname combined with a
2787
+ Jobname during invocation of :meth:`.run()`. The jobname combined with a
2709
2788
  defined director structure (<dir>/<design>/<jobname>/<step>/<index>)
2710
2789
  enables multiple levels of transparent job, step, and index
2711
2790
  introspection.""")
@@ -2713,7 +2792,7 @@ def schema_option(cfg):
2713
2792
  scparam(cfg, ['option', 'from'],
2714
2793
  sctype='[str]',
2715
2794
  scope='job',
2716
- shorthelp="Start flowgraph execution from",
2795
+ shorthelp="Option: starting step",
2717
2796
  switch="-from <str>",
2718
2797
  example=[
2719
2798
  "cli: -from 'import'",
@@ -2725,7 +2804,7 @@ def schema_option(cfg):
2725
2804
  scparam(cfg, ['option', 'to'],
2726
2805
  sctype='[str]',
2727
2806
  scope='job',
2728
- shorthelp="End flowgraph execution with",
2807
+ shorthelp="Option: ending step",
2729
2808
  switch="-to <str>",
2730
2809
  example=[
2731
2810
  "cli: -to 'syn'",
@@ -2737,7 +2816,7 @@ def schema_option(cfg):
2737
2816
  scparam(cfg, ['option', 'prune'],
2738
2817
  sctype='[(str,str)]',
2739
2818
  scope='job',
2740
- shorthelp="Prune flowgraph branches starting with",
2819
+ shorthelp="Option: flowgraph pruning",
2741
2820
  switch="-prune 'node <(str,str)>'",
2742
2821
  example=[
2743
2822
  "cli: -prune (syn,0)",
@@ -2750,7 +2829,7 @@ def schema_option(cfg):
2750
2829
  sctype='bool',
2751
2830
  scope='job',
2752
2831
  pernode='optional',
2753
- shorthelp="Breakpoint list",
2832
+ shorthelp="Option: breakpoint list",
2754
2833
  switch="-breakpoint <bool>",
2755
2834
  example=[
2756
2835
  "cli: -breakpoint true",
@@ -2765,7 +2844,7 @@ def schema_option(cfg):
2765
2844
  sctype='[str]',
2766
2845
  scope='job',
2767
2846
  pernode='optional',
2768
- shorthelp="Soft libraries",
2847
+ shorthelp="Option: library list",
2769
2848
  switch="-library <str>",
2770
2849
  example=["cli: -library lambdalib_asap7",
2771
2850
  "api: chip.set('option', 'library', 'lambdalib_asap7')"],
@@ -2776,7 +2855,7 @@ def schema_option(cfg):
2776
2855
  scparam(cfg, ['option', 'clean'],
2777
2856
  sctype='bool',
2778
2857
  scope='job',
2779
- shorthelp="Start a job from the beginning",
2858
+ shorthelp="Option: cleanup previous job",
2780
2859
  switch="-clean <bool>",
2781
2860
  example=["cli: -clean",
2782
2861
  "api: chip.set('option', 'clean', True)"],
@@ -2789,7 +2868,7 @@ def schema_option(cfg):
2789
2868
  scparam(cfg, ['option', 'hash'],
2790
2869
  sctype='bool',
2791
2870
  scope='job',
2792
- shorthelp="Enable file hashing",
2871
+ shorthelp="Option: file hashing",
2793
2872
  switch="-hash <bool>",
2794
2873
  example=["cli: -hash",
2795
2874
  "api: chip.set('option', 'hash', True)"],
@@ -2801,19 +2880,19 @@ def schema_option(cfg):
2801
2880
  scparam(cfg, ['option', 'nodisplay'],
2802
2881
  sctype='bool',
2803
2882
  scope='job',
2804
- shorthelp="Headless execution",
2883
+ shorthelp="Option: headless execution",
2805
2884
  switch="-nodisplay <bool>",
2806
2885
  example=["cli: -nodisplay",
2807
2886
  "api: chip.set('option', 'nodisplay', True)"],
2808
2887
  schelp="""
2809
- The '-nodisplay' flag prevents SiliconCompiler from
2810
- opening GUI windows such as the final metrics report.""")
2888
+ This flag prevents SiliconCompiler from opening GUI windows such as
2889
+ the final metrics report.""")
2811
2890
 
2812
2891
  scparam(cfg, ['option', 'quiet'],
2813
2892
  sctype='bool',
2814
2893
  pernode='optional',
2815
2894
  scope='job',
2816
- shorthelp="Quiet execution",
2895
+ shorthelp="Option: quiet execution",
2817
2896
  switch="-quiet <bool>",
2818
2897
  example=["cli: -quiet",
2819
2898
  "api: chip.set('option', 'quiet', True)"],
@@ -2825,7 +2904,7 @@ def schema_option(cfg):
2825
2904
  scparam(cfg, ['option', 'jobincr'],
2826
2905
  sctype='bool',
2827
2906
  scope='job',
2828
- shorthelp="Autoincrement jobname",
2907
+ shorthelp="Option: autoincrement jobname",
2829
2908
  switch="-jobincr <bool>",
2830
2909
  example=["cli: -jobincr",
2831
2910
  "api: chip.set('option', 'jobincr', True)"],
@@ -2841,20 +2920,20 @@ def schema_option(cfg):
2841
2920
  pernode='optional',
2842
2921
  defvalue=False,
2843
2922
  scope='job',
2844
- shorthelp="Disable version checking",
2923
+ shorthelp="Option: disable version checking",
2845
2924
  switch="-novercheck <bool>",
2846
2925
  example=["cli: -novercheck",
2847
2926
  "api: chip.set('option', 'novercheck', True)"],
2848
2927
  schelp="""
2849
2928
  Disables strict version checking on all invoked tools if True.
2850
2929
  The list of supported version numbers is defined in the
2851
- 'version' parameter in the 'tool' dictionary for each tool.""")
2930
+ :keypath:`tool,<tool>,version`.""")
2852
2931
 
2853
2932
  scparam(cfg, ['option', 'track'],
2854
2933
  sctype='bool',
2855
2934
  pernode='optional',
2856
2935
  scope='job',
2857
- shorthelp="Enable provenance tracking",
2936
+ shorthelp="Option: enable provenance tracking",
2858
2937
  switch="-track <bool>",
2859
2938
  example=["cli: -track",
2860
2939
  "api: chip.set('option', 'track', True)"],
@@ -2868,16 +2947,16 @@ def schema_option(cfg):
2868
2947
  scparam(cfg, ['option', 'entrypoint'],
2869
2948
  sctype='str',
2870
2949
  pernode='optional',
2871
- shorthelp="Program entry point",
2950
+ shorthelp="Option: program entry point",
2872
2951
  switch="-entrypoint <str>",
2873
2952
  example=["cli: -entrypoint top",
2874
2953
  "api: chip.set('option', 'entrypoint', 'top')"],
2875
2954
  schelp="""Alternative entrypoint for compilation and
2876
- simulation. The default entry point is 'design'.""")
2955
+ simulation. The default entry point is :keypath:`design`.""")
2877
2956
 
2878
2957
  scparam(cfg, ['option', 'idir'],
2879
2958
  sctype='[dir]',
2880
- shorthelp="Design search paths",
2959
+ shorthelp="Option: design search paths",
2881
2960
  copy=True,
2882
2961
  switch=['+incdir+<dir>',
2883
2962
  '-I <dir>',
@@ -2893,7 +2972,7 @@ def schema_option(cfg):
2893
2972
 
2894
2973
  scparam(cfg, ['option', 'ydir'],
2895
2974
  sctype='[dir]',
2896
- shorthelp="Design module search paths",
2975
+ shorthelp="Option: design module search paths",
2897
2976
  copy=True,
2898
2977
  switch=['-y <dir>',
2899
2978
  '-ydir <dir>'],
@@ -2904,11 +2983,11 @@ def schema_option(cfg):
2904
2983
  schelp="""
2905
2984
  Search paths to look for verilog modules found in the the
2906
2985
  source list. The import engine will look for modules inside
2907
- files with the specified +libext+ param suffix.""")
2986
+ files with the specified :keypath:`option,libext` param suffix.""")
2908
2987
 
2909
2988
  scparam(cfg, ['option', 'vlib'],
2910
2989
  sctype='[file]',
2911
- shorthelp="Design libraries",
2990
+ shorthelp="Option: design libraries",
2912
2991
  copy=True,
2913
2992
  switch=['-v <file>',
2914
2993
  '-vlib <file>'],
@@ -2921,7 +3000,7 @@ def schema_option(cfg):
2921
3000
 
2922
3001
  scparam(cfg, ['option', 'define'],
2923
3002
  sctype='[str]',
2924
- shorthelp="Design pre-processor symbol",
3003
+ shorthelp="Option: design pre-processor symbol",
2925
3004
  switch=["-D<str>",
2926
3005
  "-define <str>"],
2927
3006
  example=["cli: -DCFG_ASIC=1",
@@ -2931,7 +3010,7 @@ def schema_option(cfg):
2931
3010
 
2932
3011
  scparam(cfg, ['option', 'libext'],
2933
3012
  sctype='[str]',
2934
- shorthelp="Design file extensions",
3013
+ shorthelp="Option: design file extensions",
2935
3014
  switch=["+libext+<str>",
2936
3015
  "-libext <str>"],
2937
3016
  example=[
@@ -2940,14 +3019,14 @@ def schema_option(cfg):
2940
3019
  "api: chip.set('option', 'libext', 'sv')"],
2941
3020
  schelp="""
2942
3021
  List of file extensions that should be used for finding modules.
2943
- For example, if -y is specified as ./lib", and '.v' is specified as
2944
- libext then the files ./lib/\\*.v ", will be searched for
3022
+ For example, if :keypath:`option,ydir` is specified as ./lib", and '.v'
3023
+ is specified as libext then the files ./lib/\\*.v ", will be searched for
2945
3024
  module matches.""")
2946
3025
 
2947
3026
  name = 'default'
2948
3027
  scparam(cfg, ['option', 'param', name],
2949
3028
  sctype='str',
2950
- shorthelp="Design parameter",
3029
+ shorthelp="Option: design parameter",
2951
3030
  switch="-param 'name <str>'",
2952
3031
  example=[
2953
3032
  "cli: -param 'N 64'",
@@ -2962,7 +3041,7 @@ def schema_option(cfg):
2962
3041
  scparam(cfg, ['option', 'continue'],
2963
3042
  sctype='bool',
2964
3043
  pernode='optional',
2965
- shorthelp='continue-on-error',
3044
+ shorthelp='Option: continue-on-error',
2966
3045
  switch='-continue <bool>',
2967
3046
  example=["cli: -continue",
2968
3047
  "api: chip.set('option', 'continue', True)"],
@@ -2979,19 +3058,18 @@ def schema_option(cfg):
2979
3058
  pernode='optional',
2980
3059
  scope='job',
2981
3060
  unit='s',
2982
- shorthelp="Option: Timeout value",
3061
+ shorthelp="Option: timeout value",
2983
3062
  switch="-timeout <float>",
2984
3063
  example=["cli: -timeout 3600",
2985
3064
  "api: chip.set('option', 'timeout', 3600)"],
2986
3065
  schelp="""
2987
3066
  Timeout value in seconds. The timeout value is compared
2988
3067
  against the wall time tracked by the SC runtime to determine
2989
- if an operation should continue. The timeout value is also
2990
- used by the jobscheduler to automatically kill jobs.""")
3068
+ if an operation should continue.""")
2991
3069
 
2992
3070
  scparam(cfg, ['option', 'strict'],
2993
3071
  sctype='bool',
2994
- shorthelp="Option: Strict checking",
3072
+ shorthelp="Option: strict checking",
2995
3073
  switch="-strict <bool>",
2996
3074
  example=["cli: -strict true",
2997
3075
  "api: chip.set('option', 'strict', True)"],
@@ -3007,7 +3085,7 @@ def schema_option(cfg):
3007
3085
  enum=["slurm", "lsf", "sge", "docker"],
3008
3086
  scope='job',
3009
3087
  pernode='optional',
3010
- shorthelp="Option: Scheduler platform",
3088
+ shorthelp="Option: scheduler platform",
3011
3089
  switch="-scheduler <str>",
3012
3090
  example=[
3013
3091
  "cli: -scheduler slurm",
@@ -3040,7 +3118,7 @@ def schema_option(cfg):
3040
3118
  unit='MB',
3041
3119
  scope='job',
3042
3120
  pernode='optional',
3043
- shorthelp="Option: Scheduler memory constraint",
3121
+ shorthelp="Option: scheduler memory constraint",
3044
3122
  switch="-memory <int>",
3045
3123
  example=["cli: -memory 8000",
3046
3124
  "api: chip.set('option', 'scheduler', 'memory', '8000')"],
@@ -3054,7 +3132,7 @@ def schema_option(cfg):
3054
3132
  sctype='str',
3055
3133
  scope='job',
3056
3134
  pernode='optional',
3057
- shorthelp="Option: Scheduler queue",
3135
+ shorthelp="Option: scheduler queue",
3058
3136
  switch="-queue <str>",
3059
3137
  example=["cli: -queue nightrun",
3060
3138
  "api: chip.set('option', 'scheduler', 'queue', 'nightrun')"],
@@ -3068,7 +3146,7 @@ def schema_option(cfg):
3068
3146
  sctype='str',
3069
3147
  scope='job',
3070
3148
  pernode='optional',
3071
- shorthelp="Option: Scheduler start time",
3149
+ shorthelp="Option: scheduler start time",
3072
3150
  switch="-defer <str>",
3073
3151
  example=["cli: -defer 16:00",
3074
3152
  "api: chip.set('option', 'scheduler', 'defer', '16:00')"],
@@ -3083,7 +3161,7 @@ def schema_option(cfg):
3083
3161
  scparam(cfg, ['option', 'scheduler', 'options'],
3084
3162
  sctype='[str]',
3085
3163
  pernode='optional',
3086
- shorthelp="Option: Scheduler arguments",
3164
+ shorthelp="Option: scheduler arguments",
3087
3165
  switch="-scheduler_options <str>",
3088
3166
  example=[
3089
3167
  "cli: -scheduler_options \"--pty\"",
@@ -3099,14 +3177,14 @@ def schema_option(cfg):
3099
3177
  enum=['all', 'summary', 'begin', 'end', 'timeout', 'fail'],
3100
3178
  scope='job',
3101
3179
  pernode='optional',
3102
- shorthelp="Option: Message event trigger",
3180
+ shorthelp="Option: message event trigger",
3103
3181
  switch="-msgevent <str>",
3104
3182
  example=[
3105
3183
  "cli: -msgevent all",
3106
3184
  "api: chip.set('option', 'scheduler', 'msgevent', 'all')"],
3107
3185
  schelp="""
3108
3186
  Directs job scheduler to send a message to the user in
3109
- ['optoion', 'scheduler', 'msgcontact'] when certain events occur
3187
+ :keypath:`option,scheduler,msgcontact` when certain events occur
3110
3188
  during a task.
3111
3189
 
3112
3190
  * fail: send an email on failures
@@ -3121,19 +3199,19 @@ def schema_option(cfg):
3121
3199
  sctype='[str]',
3122
3200
  scope='job',
3123
3201
  pernode='optional',
3124
- shorthelp="Option: Message contact",
3202
+ shorthelp="Option: message contact",
3125
3203
  switch="-msgcontact <str>",
3126
3204
  example=[
3127
3205
  "cli: -msgcontact 'wile.e.coyote@acme.com'",
3128
3206
  "api: chip.set('option', 'scheduler', 'msgcontact', 'wiley@acme.com')"],
3129
3207
  schelp="""
3130
- List of email addresses to message on a 'msgevent'. Support for
3131
- email messages relies on job scheduler daemon support.
3208
+ List of email addresses to message on a :keypath:`option,scheduler,msgevent`.
3209
+ Support for email messages relies on job scheduler daemon support.
3132
3210
  For more information, see the job scheduler documentation. """)
3133
3211
 
3134
3212
  scparam(cfg, ['option', 'scheduler', 'maxnodes'],
3135
3213
  sctype='int',
3136
- shorthelp="Option: Maximum concurrent nodes",
3214
+ shorthelp="Option: maximum concurrent nodes",
3137
3215
  switch="-maxnodes <int>",
3138
3216
  example=["cli: -maxnodes 4",
3139
3217
  "api: chip.set('option', 'scheduler', 'maxnodes', 4)"],
@@ -3214,7 +3292,7 @@ def schema_package(cfg):
3214
3292
  example=[
3215
3293
  f"cli: -package_doc_{item} {item}.pdf",
3216
3294
  f"api: chip.set('package', 'doc', '{item}', '{item}.pdf')"],
3217
- schelp=f""" Package list of {item} documents.""")
3295
+ schelp=f"""Package list of {item} documents.""")
3218
3296
 
3219
3297
  scparam(cfg, ['package', 'license'],
3220
3298
  sctype='[str]',
@@ -3236,7 +3314,7 @@ def schema_package(cfg):
3236
3314
  "api: chip.set('package', 'licensefile', './LICENSE')"],
3237
3315
  schelp="""Package list of license files for to be
3238
3316
  applied in cases when a SPDX identifier is not available.
3239
- (eg. proprietary licenses).list of SPDX license identifiers.""")
3317
+ (eg. proprietary licenses).""")
3240
3318
 
3241
3319
  scparam(cfg, ['package', 'organization'],
3242
3320
  sctype='[str]',
@@ -3273,7 +3351,7 @@ def schema_package(cfg):
3273
3351
  scparam(cfg, ['package', 'source', source, 'path'],
3274
3352
  sctype='str',
3275
3353
  scope='global',
3276
- shorthelp="Package data source path",
3354
+ shorthelp="Package: data source path",
3277
3355
  switch="-package_source_path 'source <str>'",
3278
3356
  example=[
3279
3357
  "cli: -package_source_path "
@@ -3297,14 +3375,12 @@ def schema_package(cfg):
3297
3375
  scparam(cfg, ['package', 'source', source, 'ref'],
3298
3376
  sctype='str',
3299
3377
  scope='global',
3300
- shorthelp="Package data source reference",
3378
+ shorthelp="Package: data source reference",
3301
3379
  switch="-package_source_ref 'source <str>'",
3302
3380
  example=[
3303
3381
  "cli: -package_source_ref 'freepdk45_data 07ec4aa'",
3304
3382
  "api: chip.set('package', 'source', 'freepdk45_data', 'ref', '07ec4aa')"],
3305
- schelp="""
3306
- Package data source reference
3307
- """)
3383
+ schelp="""Package data source reference""")
3308
3384
 
3309
3385
  return cfg
3310
3386
 
@@ -3473,7 +3549,7 @@ def schema_asic(cfg):
3473
3549
  example=["cli: -asic_delaymodel ccs",
3474
3550
  "api: chip.set('asic', 'delaymodel', 'ccs')"],
3475
3551
  schelp="""
3476
- Delay model to use for the target libs. Supported values
3552
+ Delay model to use for the target libs. Commonly supported values
3477
3553
  are nldm and ccs.""")
3478
3554
 
3479
3555
  # TODO: Expand on the exact definitions of these types of cells.
@@ -3522,7 +3598,7 @@ def schema_asic(cfg):
3522
3598
  scparam(cfg, ['asic', 'site', libarch],
3523
3599
  sctype='[str]',
3524
3600
  pernode='optional',
3525
- shorthelp="ASIC: Library sites",
3601
+ shorthelp="ASIC: library sites",
3526
3602
  switch="-asic_site 'libarch <str>'",
3527
3603
  example=[
3528
3604
  "cli: -asic_site '12track Site_12T'",
@@ -3585,8 +3661,7 @@ def schema_constraint(cfg):
3585
3661
  example=["cli: -constraint_timing_pexcorner 'worst max'",
3586
3662
  "api: chip.set('constraint', 'timing', 'worst', 'pexcorner', 'max')"],
3587
3663
  schelp="""Parasitic corner applied to the scenario. The
3588
- 'pexcorner' string must match a corner found in the pdk
3589
- pexmodel setup.""")
3664
+ 'pexcorner' string must match a corner found in :keypath:`pdk,<pdk>,pexmodel`.""")
3590
3665
 
3591
3666
  scparam(cfg, ['constraint', 'timing', scenario, 'opcond'],
3592
3667
  sctype='str',
@@ -3598,7 +3673,7 @@ def schema_constraint(cfg):
3598
3673
  "api: chip.set('constraint', 'timing', 'worst', 'opcond', 'typical_1.0')"],
3599
3674
  schelp="""Operating condition applied to the scenario. The value
3600
3675
  can be used to access specific conditions within the library
3601
- timing models from the 'logiclib' timing models.""")
3676
+ timing models from the :keypath:`asic,logiclib` timing models.""")
3602
3677
 
3603
3678
  scparam(cfg, ['constraint', 'timing', scenario, 'mode'],
3604
3679
  sctype='str',
@@ -3647,38 +3722,30 @@ def schema_constraint(cfg):
3647
3722
  inst = 'default'
3648
3723
 
3649
3724
  scparam(cfg, ['constraint', 'component', inst, 'placement'],
3650
- sctype='(float,float,float)',
3725
+ sctype='(float,float)',
3651
3726
  pernode='optional',
3652
3727
  unit='um',
3653
- shorthelp="Constraint: Component placement",
3654
- switch="-constraint_component_placement 'inst <(float,float,float)>'",
3655
- example=[
3656
- "cli: -constraint_component_placement 'i0 (2.0,3.0,0.0)'",
3657
- "api: chip.set('constraint', 'component', 'i0', 'placement', (2.0, 3.0, 0.0))"],
3658
- schelp="""
3659
- Placement location of a named instance, specified as a (x, y, z) tuple of
3660
- floats. The location refers to the placement of the center/centroid of the
3661
- component. The 'placement' parameter is a goal/intent, not an exact specification.
3662
- The compiler and layout system may adjust coordinates to meet competing
3663
- goals such as manufacturing design rules and grid placement
3664
- guidelines. The 'z' coordinate shall be set to 0 for planar systems
3665
- with only (x, y) coordinates. Discretized systems like PCB stacks,
3666
- package stacks, and breadboards only allow a reduced
3667
- set of floating point values (0, 1, 2, 3). The user specifying the
3668
- placement will need to have some understanding of the type of
3669
- layout system the component is being placed in (ASIC, SIP, PCB) but
3670
- should not need to know exact manufacturing specifications.""")
3728
+ shorthelp="Constraint: component placement",
3729
+ switch="-constraint_component_placement 'inst <(float,float)>'",
3730
+ example=[
3731
+ "cli: -constraint_component_placement 'i0 (2.0,3.0)'",
3732
+ "api: chip.set('constraint', 'component', 'i0', 'placement', (2.0, 3.0))"],
3733
+ schelp="""
3734
+ Placement location of a named instance, specified as a (x, y) tuple of
3735
+ floats. The location refers to the distance from the substrate origin to
3736
+ the anchor point of the placed component, defined by
3737
+ the :keypath:`datasheet,package,<name>,anchor` parameter.""")
3671
3738
 
3672
3739
  scparam(cfg, ['constraint', 'component', inst, 'partname'],
3673
3740
  sctype='str',
3674
3741
  pernode='optional',
3675
- shorthelp="Constraint: Component part name",
3742
+ shorthelp="Constraint: component part name",
3676
3743
  switch="-constraint_component_partname 'inst <str>'",
3677
3744
  example=[
3678
3745
  "cli: -constraint_component_partname 'i0 filler_x1'",
3679
3746
  "api: chip.set('constraint', 'component', 'i0', 'partname', 'filler_x1')"],
3680
3747
  schelp="""
3681
- Part name of a named instance. The parameter is required for instances
3748
+ Part name of the instance. The parameter is required for instances
3682
3749
  that are not contained within the design netlist (ie. physical only cells).
3683
3750
  """)
3684
3751
 
@@ -3686,75 +3753,81 @@ def schema_constraint(cfg):
3686
3753
  sctype='(float,float)',
3687
3754
  pernode='optional',
3688
3755
  unit='um',
3689
- shorthelp="Constraint: Component halo",
3756
+ shorthelp="Constraint: component halo",
3690
3757
  switch="-constraint_component_halo 'inst <(float,float)>'",
3691
3758
  example=[
3692
3759
  "cli: -constraint_component_halo 'i0 (1,1)'",
3693
3760
  "api: chip.set('constraint', 'component', 'i0', 'halo', (1, 1))"],
3694
3761
  schelp="""
3695
3762
  Placement keepout halo around the named component, specified as a
3696
- (horizontal, vertical) tuple represented in microns.
3697
- """)
3763
+ (horizontal, vertical) tuple represented in microns.""")
3698
3764
 
3699
3765
  scparam(cfg, ['constraint', 'component', inst, 'rotation'],
3700
- sctype='float',
3701
- pernode='optional',
3702
- shorthelp="Constraint: Component rotation",
3703
- switch="-constraint_component_rotation 'inst <float>'",
3704
- example=[
3705
- "cli: -constraint_component_rotation 'i0 90'",
3706
- "api: chip.set('constraint', 'component', 'i0', 'rotation', '90')"],
3707
- schelp="""
3708
- Placement rotation of the component specified in degrees. Rotation
3709
- goes counter-clockwise for all parts on top and clock-wise for parts
3710
- on the bottom. In both cases, this is from the perspective of looking
3711
- at the top of the board. Rotation is specified in degrees. Most gridded
3712
- layout systems (like ASICs) only allow a finite number of rotation
3713
- values (0, 90, 180, 270).""")
3714
-
3715
- scparam(cfg, ['constraint', 'component', inst, 'flip'],
3716
- sctype='bool',
3717
- pernode='optional',
3718
- shorthelp="Constraint: Component flip option",
3719
- switch="-constraint_component_flip 'inst <bool>'",
3720
- example=[
3721
- "cli: -constraint_component_flip 'i0 true'",
3722
- "api: chip.set('constraint', 'component', 'i0', 'flip', True)"],
3723
- schelp="""
3724
- Boolean parameter specifying that the instanced library component should be flipped
3725
- around the vertical axis before being placed on the substrate. The need to
3726
- flip a component depends on the component footprint. Most dies have pads
3727
- facing up and so must be flipped when assembled face down (eg. flip-chip,
3728
- WCSP).""")
3766
+ sctype='enum',
3767
+ defvalue='R0',
3768
+ enum=['R0', 'R90', 'R180', 'R270',
3769
+ 'MX', 'MX_R90', 'MX_R180', 'MX_R270',
3770
+ 'MY', 'MY_R90', 'MY_R180', 'MY_R270',
3771
+ 'MZ', 'MZ_R90', 'MZ_R180', 'MZ_R270',
3772
+ 'MZ_MX', 'MZ_MX_R90', 'MZ_MX_R180', 'MZ_MX_R270',
3773
+ 'MZ_MY', 'MZ_MY_R90', 'MZ_MY_R180', 'MZ_MY_R270'],
3774
+ pernode='optional',
3775
+ shorthelp="Constraint: component rotation",
3776
+ switch="-constraint_component_rotation 'inst <str>'",
3777
+ example=[
3778
+ "cli: -constraint_component_rotation 'i0 R90'",
3779
+ "api: chip.set('constraint', 'component', 'i0', 'rotation', 'R90')"],
3780
+ schelp="""
3781
+ Placement rotation of the component. Components are always placed
3782
+ such that the lower left corner of the cell is at the anchor point
3783
+ (0,0) after any orientation. The MZ type rotations are for 3D design and
3784
+ typically not supported by 2D layout systems like traditional
3785
+ ASIC tools. For graphical illustrations of the rotation types, see
3786
+ the SiliconCompiler documentation.
3787
+
3788
+ * ``R0``: North orientation (no rotation)
3789
+ * ``R90``: West orientation, rotate 90 deg counter clockwise (ccw)
3790
+ * ``R180``: South orientation, rotate 180 deg counter ccw
3791
+ * ``R270``: East orientation, rotate 180 deg counter ccw
3792
+
3793
+ * ``MX``, ``MY_R180``: Flip on x-axis
3794
+ * ``MX_R90``, ``MY_R270``: Flip on x-axis and rotate 90 deg ccw
3795
+ * ``MX_R180``, ``MY``: Flip on x-axis and rotate 180 deg ccw
3796
+ * ``MX_R270``, ``MY_R90``: Flip on x-axis and rotate 270 deg ccw
3797
+
3798
+ * ``MZ``: Reverse component metal stack
3799
+ * ``MZ_R90``: Reverse metal stack and rotate 90 deg ccw
3800
+ * ``MZ_R180``: Reverse metal stack and rotate 180 deg ccw
3801
+ * ``MZ_R270``: Reverse metal stack and rotate 270 deg ccw
3802
+ * ``MZ_MX``, ``MZ_MY_R180``: Reverse metal stack and flip on x-axis
3803
+ * ``MZ_MX_R90``, ``MZ_MY_R270``: Reverse metal stack, flip on x-axis, and rotate 90 deg ccw
3804
+ * ``MZ_MX_R180``, ``MZ_MY``: Reverse metal stack, flip on x-axis, and rotate 180 deg ccw
3805
+ * ``MZ_MX_R270``, ``MZ_MY_R90``: Reverse metal stack, flip on x-axis and rotate 270 deg ccw
3806
+ """)
3729
3807
 
3730
3808
  # PINS
3731
3809
  name = 'default'
3732
-
3733
3810
  scparam(cfg, ['constraint', 'pin', name, 'placement'],
3734
- sctype='(float,float,float)',
3811
+ sctype='(float,float)',
3735
3812
  pernode='optional',
3736
3813
  unit='um',
3737
- shorthelp="Constraint: Pin placement",
3738
- switch="-constraint_pin_placement 'name <(float,float,float)>'",
3739
- example=[
3740
- "cli: -constraint_pin_placement 'nreset (2.0,3.0,0.0)'",
3741
- "api: chip.set('constraint', 'pin', 'nreset', 'placement', (2.0, 3.0, 0.0))"],
3742
- schelp="""
3743
- Placement location of a named pin, specified as a (x, y, z) tuple of
3744
- floats. The location refers to the placement of the center of the
3745
- pin. The 'placement' parameter is a goal/intent, not an exact specification.
3746
- The compiler and layout system may adjust sizes to meet competing
3747
- goals such as manufacturing design rules and grid placement
3748
- guidelines. The 'z' coordinate shall be set to 0 for planar components
3749
- with only (x, y) coordinates. Discretized systems like 3D chips with
3750
- pins on top and bottom may choose to discretize the top and bottom
3751
- layer as 0, 1 or use absolute coordinates. Values are specified
3752
- in microns.""")
3814
+ shorthelp="Constraint: pin placement",
3815
+ switch="-constraint_pin_placement 'name <(float,float)>'",
3816
+ example=[
3817
+ "cli: -constraint_pin_placement 'nreset (2.0,3.0)'",
3818
+ "api: chip.set('constraint', 'pin', 'nreset', 'placement', (2.0, 3.0))"],
3819
+ schelp="""
3820
+ Placement location of a named pin, specified as a (x,y) tuple of
3821
+ floats with respect to the lower left corner of the substrate. The location
3822
+ refers to the center of the pin. The 'placement' parameter
3823
+ is a goal/intent, not an exact specification. The layout system
3824
+ may adjust sizes to meet competing goals such as manufacturing design
3825
+ rules and grid placement guidelines.""")
3753
3826
 
3754
3827
  scparam(cfg, ['constraint', 'pin', name, 'layer'],
3755
3828
  sctype='str',
3756
3829
  pernode='optional',
3757
- shorthelp="Constraint: Pin layer",
3830
+ shorthelp="Constraint: pin layer",
3758
3831
  switch="-constraint_pin_layer 'name <str>'",
3759
3832
  example=[
3760
3833
  "cli: -constraint_pin_layer 'nreset m4'",
@@ -3767,7 +3840,7 @@ def schema_constraint(cfg):
3767
3840
  scparam(cfg, ['constraint', 'pin', name, 'side'],
3768
3841
  sctype='int',
3769
3842
  pernode='optional',
3770
- shorthelp="Constraint: Pin side",
3843
+ shorthelp="Constraint: pin side",
3771
3844
  switch="-constraint_pin_side 'name <int>'",
3772
3845
  example=[
3773
3846
  "cli: -constraint_pin_side 'nreset 1'",
@@ -3783,7 +3856,7 @@ def schema_constraint(cfg):
3783
3856
  scparam(cfg, ['constraint', 'pin', name, 'order'],
3784
3857
  sctype='int',
3785
3858
  pernode='optional',
3786
- shorthelp="Constraint: Pin order",
3859
+ shorthelp="Constraint: pin order",
3787
3860
  switch="-constraint_pin_order 'name <int>'",
3788
3861
  example=[
3789
3862
  "cli: -constraint_pin_order 'nreset 1'",
@@ -3800,7 +3873,7 @@ def schema_constraint(cfg):
3800
3873
  sctype='float',
3801
3874
  pernode='optional',
3802
3875
  unit='um',
3803
- shorthelp="Constraint: Net max length",
3876
+ shorthelp="Constraint: net max length",
3804
3877
  switch="-constraint_net_maxlength 'name <float>'",
3805
3878
  example=[
3806
3879
  "cli: -constraint_net_maxlength 'nreset 1000'",
@@ -3813,7 +3886,7 @@ def schema_constraint(cfg):
3813
3886
  sctype='float',
3814
3887
  pernode='optional',
3815
3888
  unit='ohm',
3816
- shorthelp="Constraint: Net max resistance",
3889
+ shorthelp="Constraint: net max resistance",
3817
3890
  switch="-constraint_net_maxresistance 'name <float>'",
3818
3891
  example=[
3819
3892
  "cli: -constraint_net_maxresistance 'nreset 1'",
@@ -3826,7 +3899,7 @@ def schema_constraint(cfg):
3826
3899
  sctype='(float,float)',
3827
3900
  pernode='optional',
3828
3901
  unit='um',
3829
- shorthelp="Constraint: Net routing rule",
3902
+ shorthelp="Constraint: net routing rule",
3830
3903
  switch="-constraint_net_ndr 'name <(float,float)>'",
3831
3904
  example=[
3832
3905
  "cli: -constraint_net_ndr 'nreset (0.4,0.4)'",
@@ -3840,7 +3913,7 @@ def schema_constraint(cfg):
3840
3913
  scparam(cfg, ['constraint', 'net', name, 'minlayer'],
3841
3914
  sctype='str',
3842
3915
  pernode='optional',
3843
- shorthelp="Constraint: Net minimum routing layer",
3916
+ shorthelp="Constraint: net minimum routing layer",
3844
3917
  switch="-constraint_net_minlayer 'name <str>'",
3845
3918
  example=[
3846
3919
  "cli: -constraint_net_minlayer 'nreset m1'",
@@ -3854,7 +3927,7 @@ def schema_constraint(cfg):
3854
3927
  scparam(cfg, ['constraint', 'net', name, 'maxlayer'],
3855
3928
  sctype='str',
3856
3929
  pernode='optional',
3857
- shorthelp="Constraint: Net maximum routing layer",
3930
+ shorthelp="Constraint: net maximum routing layer",
3858
3931
  switch="-constraint_net_maxlayer 'name <str>'",
3859
3932
  example=[
3860
3933
  "cli: -constraint_net_maxlayer 'nreset m1'",
@@ -3868,7 +3941,7 @@ def schema_constraint(cfg):
3868
3941
  scparam(cfg, ['constraint', 'net', name, 'shield'],
3869
3942
  sctype='str',
3870
3943
  pernode='optional',
3871
- shorthelp="Constraint: Net shielding",
3944
+ shorthelp="Constraint: net shielding",
3872
3945
  switch="-constraint_net_shield 'name <str>'",
3873
3946
  example=[
3874
3947
  "cli: -constraint_net_shield 'clk vss'",
@@ -3880,7 +3953,7 @@ def schema_constraint(cfg):
3880
3953
  scparam(cfg, ['constraint', 'net', name, 'match'],
3881
3954
  sctype='[str]',
3882
3955
  pernode='optional',
3883
- shorthelp="Constraint: Net matched routing",
3956
+ shorthelp="Constraint: net matched routing",
3884
3957
  switch="-constraint_net_match 'name <str>'",
3885
3958
  example=[
3886
3959
  "cli: -constraint_net_match 'clk1 clk2'",
@@ -3893,7 +3966,7 @@ def schema_constraint(cfg):
3893
3966
  scparam(cfg, ['constraint', 'net', name, 'diffpair'],
3894
3967
  sctype='str',
3895
3968
  pernode='optional',
3896
- shorthelp="Constraint: Net diffpair",
3969
+ shorthelp="Constraint: net diffpair",
3897
3970
  switch="-constraint_net_diffpair 'name <str>'",
3898
3971
  example=[
3899
3972
  "cli: -constraint_net_diffpair 'clkn clkp'",
@@ -3905,7 +3978,7 @@ def schema_constraint(cfg):
3905
3978
  scparam(cfg, ['constraint', 'net', name, 'sympair'],
3906
3979
  sctype='str',
3907
3980
  pernode='optional',
3908
- shorthelp="Constraint: Net sympair",
3981
+ shorthelp="Constraint: net sympair",
3909
3982
  switch="-constraint_net_sympair 'name <str>'",
3910
3983
  example=[
3911
3984
  "cli: -constraint_net_sympair 'netA netB'",
@@ -3921,50 +3994,47 @@ def schema_constraint(cfg):
3921
3994
  pernode='optional',
3922
3995
  unit='um',
3923
3996
  scope='job',
3924
- shorthelp="Constraint: Layout outline",
3997
+ shorthelp="Constraint: layout outline",
3925
3998
  switch="-constraint_outline <(float,float)>",
3926
3999
  example=["cli: -constraint_outline '(0,0)'",
3927
4000
  "api: chip.set('constraint', 'outline', (0, 0))"],
3928
4001
  schelp="""
3929
4002
  List of (x, y) points that define the outline physical layout
3930
4003
  physical design. Simple rectangle areas can be defined with two points,
3931
- one for the lower left corner and one for the upper right corner. All
3932
- values are specified in microns.""")
4004
+ one for the lower left corner and one for the upper right corner.""")
3933
4005
 
3934
4006
  scparam(cfg, ['constraint', 'corearea'],
3935
4007
  sctype='[(float,float)]',
3936
4008
  pernode='optional',
3937
4009
  unit='um',
3938
4010
  scope='job',
3939
- shorthelp="Constraint: Layout core area",
4011
+ shorthelp="Constraint: layout core area",
3940
4012
  switch="-constraint_corearea <(float,float)>",
3941
4013
  example=["cli: -constraint_corearea '(0,0)'",
3942
4014
  "api: chip.set('constraint', 'corearea', (0, 0))"],
3943
4015
  schelp="""
3944
4016
  List of (x, y) points that define the outline of the core area for the
3945
4017
  physical design. Simple rectangle areas can be defined with two points,
3946
- one for the lower left corner and one for the upper right corner. All
3947
- values are specified in microns.""")
4018
+ one for the lower left corner and one for the upper right corner.""")
3948
4019
 
3949
4020
  scparam(cfg, ['constraint', 'coremargin'],
3950
4021
  sctype='float',
3951
4022
  pernode='optional',
3952
4023
  unit='um',
3953
4024
  scope='job',
3954
- shorthelp="Constraint: Layout core margin",
4025
+ shorthelp="Constraint: layout core margin",
3955
4026
  switch="-constraint_coremargin <float>",
3956
4027
  example=["cli: -constraint_coremargin 1",
3957
4028
  "api: chip.set('constraint', 'coremargin', '1')"],
3958
4029
  schelp="""
3959
4030
  Halo/margin between the outline and core area for fully
3960
- automated layout sizing and floorplanning, specified in
3961
- microns.""")
4031
+ automated layout sizing and floorplanning.""")
3962
4032
 
3963
4033
  scparam(cfg, ['constraint', 'density'],
3964
4034
  sctype='float',
3965
4035
  pernode='optional',
3966
4036
  scope='job',
3967
- shorthelp="Constraint: Layout density",
4037
+ shorthelp="Constraint: layout density",
3968
4038
  switch="-constraint_density <float>",
3969
4039
  example=["cli: -constraint_density 30",
3970
4040
  "api: chip.set('constraint', 'density', '30')"],
@@ -3980,7 +4050,7 @@ def schema_constraint(cfg):
3980
4050
  pernode='optional',
3981
4051
  defvalue='1.0',
3982
4052
  scope='job',
3983
- shorthelp="Constraint: Layout aspect ratio",
4053
+ shorthelp="Constraint: layout aspect ratio",
3984
4054
  switch="-constraint_aspectratio <float>",
3985
4055
  example=["cli: -constraint_aspectratio 2.0",
3986
4056
  "api: chip.set('constraint', 'aspectratio', '2.0')"],