siliconcompiler 0.32.3__py3-none-any.whl → 0.33.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- siliconcompiler/__init__.py +19 -2
- siliconcompiler/_metadata.py +1 -1
- siliconcompiler/apps/sc.py +2 -2
- siliconcompiler/apps/sc_install.py +3 -3
- siliconcompiler/apps/sc_issue.py +1 -1
- siliconcompiler/apps/sc_remote.py +4 -4
- siliconcompiler/apps/sc_show.py +2 -2
- siliconcompiler/apps/utils/replay.py +5 -3
- siliconcompiler/asic.py +120 -0
- siliconcompiler/checklist.py +150 -0
- siliconcompiler/core.py +267 -289
- siliconcompiler/flowgraph.py +803 -515
- siliconcompiler/fpga.py +84 -0
- siliconcompiler/metric.py +420 -0
- siliconcompiler/optimizer/vizier.py +2 -3
- siliconcompiler/package/__init__.py +29 -6
- siliconcompiler/pdk.py +415 -0
- siliconcompiler/record.py +449 -0
- siliconcompiler/remote/client.py +6 -3
- siliconcompiler/remote/schema.py +116 -112
- siliconcompiler/remote/server.py +3 -5
- siliconcompiler/report/dashboard/cli/__init__.py +13 -722
- siliconcompiler/report/dashboard/cli/board.py +895 -0
- siliconcompiler/report/dashboard/web/__init__.py +10 -10
- siliconcompiler/report/dashboard/web/components/__init__.py +5 -4
- siliconcompiler/report/dashboard/web/components/flowgraph.py +3 -3
- siliconcompiler/report/dashboard/web/components/graph.py +6 -3
- siliconcompiler/report/dashboard/web/state.py +1 -1
- siliconcompiler/report/dashboard/web/utils/__init__.py +4 -3
- siliconcompiler/report/html_report.py +2 -3
- siliconcompiler/report/report.py +13 -7
- siliconcompiler/report/summary_image.py +1 -1
- siliconcompiler/report/summary_table.py +3 -3
- siliconcompiler/report/utils.py +11 -10
- siliconcompiler/scheduler/__init__.py +145 -280
- siliconcompiler/scheduler/run_node.py +2 -1
- siliconcompiler/scheduler/send_messages.py +4 -4
- siliconcompiler/scheduler/slurm.py +2 -2
- siliconcompiler/schema/__init__.py +19 -2
- siliconcompiler/schema/baseschema.py +493 -0
- siliconcompiler/schema/cmdlineschema.py +250 -0
- siliconcompiler/{sphinx_ext → schema/docs}/__init__.py +3 -1
- siliconcompiler/{sphinx_ext → schema/docs}/dynamicgen.py +63 -81
- siliconcompiler/{sphinx_ext → schema/docs}/schemagen.py +73 -85
- siliconcompiler/{sphinx_ext → schema/docs}/utils.py +12 -13
- siliconcompiler/schema/editableschema.py +136 -0
- siliconcompiler/schema/journalingschema.py +238 -0
- siliconcompiler/schema/namedschema.py +41 -0
- siliconcompiler/schema/packageschema.py +101 -0
- siliconcompiler/schema/parameter.py +791 -0
- siliconcompiler/schema/parametertype.py +323 -0
- siliconcompiler/schema/parametervalue.py +736 -0
- siliconcompiler/schema/safeschema.py +37 -0
- siliconcompiler/schema/schema_cfg.py +109 -1789
- siliconcompiler/schema/utils.py +5 -68
- siliconcompiler/schema_obj.py +119 -0
- siliconcompiler/tool.py +1308 -0
- siliconcompiler/tools/_common/__init__.py +6 -10
- siliconcompiler/tools/_common/sdc/sc_constraints.sdc +1 -1
- siliconcompiler/tools/bluespec/convert.py +7 -7
- siliconcompiler/tools/builtin/_common.py +1 -1
- siliconcompiler/tools/builtin/concatenate.py +2 -2
- siliconcompiler/tools/builtin/minimum.py +1 -1
- siliconcompiler/tools/builtin/mux.py +2 -1
- siliconcompiler/tools/builtin/nop.py +1 -1
- siliconcompiler/tools/builtin/verify.py +6 -4
- siliconcompiler/tools/chisel/convert.py +4 -4
- siliconcompiler/tools/genfasm/bitstream.py +3 -3
- siliconcompiler/tools/ghdl/convert.py +1 -1
- siliconcompiler/tools/icarus/compile.py +4 -4
- siliconcompiler/tools/icepack/bitstream.py +6 -1
- siliconcompiler/tools/klayout/convert_drc_db.py +5 -0
- siliconcompiler/tools/klayout/klayout_export.py +0 -1
- siliconcompiler/tools/klayout/klayout_utils.py +3 -10
- siliconcompiler/tools/nextpnr/apr.py +6 -1
- siliconcompiler/tools/nextpnr/nextpnr.py +4 -4
- siliconcompiler/tools/openroad/_apr.py +13 -0
- siliconcompiler/tools/openroad/rdlroute.py +3 -3
- siliconcompiler/tools/openroad/scripts/apr/postamble.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +5 -5
- siliconcompiler/tools/openroad/scripts/apr/sc_antenna_repair.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_detailed_placement.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_endcap_tapcell_insertion.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_fillercell_insertion.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_fillmetal_insertion.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_global_placement.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_metrics.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_pin_placement.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_repair_design.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/common/procs.tcl +57 -1
- siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/common/write_images.tcl +28 -3
- siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/sc_show.tcl +6 -6
- siliconcompiler/tools/slang/__init__.py +10 -10
- siliconcompiler/tools/surelog/parse.py +4 -4
- siliconcompiler/tools/sv2v/convert.py +20 -3
- siliconcompiler/tools/verilator/compile.py +2 -2
- siliconcompiler/tools/verilator/verilator.py +3 -3
- siliconcompiler/tools/vpr/place.py +1 -1
- siliconcompiler/tools/vpr/route.py +4 -4
- siliconcompiler/tools/vpr/screenshot.py +1 -1
- siliconcompiler/tools/vpr/show.py +5 -5
- siliconcompiler/tools/vpr/vpr.py +24 -24
- siliconcompiler/tools/xdm/convert.py +2 -2
- siliconcompiler/tools/xyce/simulate.py +1 -1
- siliconcompiler/tools/yosys/sc_synth_asic.tcl +74 -68
- siliconcompiler/tools/yosys/syn_asic.py +2 -2
- siliconcompiler/toolscripts/_tools.json +7 -7
- siliconcompiler/toolscripts/ubuntu22/install-vpr.sh +0 -2
- siliconcompiler/toolscripts/ubuntu24/install-vpr.sh +0 -2
- siliconcompiler/utils/__init__.py +8 -112
- siliconcompiler/utils/flowgraph.py +339 -0
- siliconcompiler/{issue.py → utils/issue.py} +4 -3
- siliconcompiler/utils/logging.py +1 -2
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/METADATA +9 -8
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/RECORD +151 -134
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/WHEEL +1 -1
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/entry_points.txt +8 -8
- siliconcompiler/schema/schema_obj.py +0 -1936
- siliconcompiler/toolscripts/ubuntu20/install-vpr.sh +0 -29
- siliconcompiler/toolscripts/ubuntu20/install-yosys-parmys.sh +0 -61
- /siliconcompiler/{templates → data/templates}/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/email/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/email/general.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/email/summary.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/issue/README.txt +0 -0
- /siliconcompiler/{templates → data/templates}/issue/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/issue/run.sh +0 -0
- /siliconcompiler/{templates → data/templates}/replay/replay.py.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/replay/replay.sh.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/replay/requirements.txt +0 -0
- /siliconcompiler/{templates → data/templates}/replay/setup.sh +0 -0
- /siliconcompiler/{templates → data/templates}/report/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/report/bootstrap.min.css +0 -0
- /siliconcompiler/{templates → data/templates}/report/bootstrap.min.js +0 -0
- /siliconcompiler/{templates → data/templates}/report/bootstrap_LICENSE.md +0 -0
- /siliconcompiler/{templates → data/templates}/report/sc_report.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/slurm/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/slurm/run.sh +0 -0
- /siliconcompiler/{templates → data/templates}/tcl/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/tcl/manifest.tcl.j2 +0 -0
- /siliconcompiler/{units.py → utils/units.py} +0 -0
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/licenses/LICENSE +0 -0
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/top_level.txt +0 -0
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
###############################
|
|
15
15
|
# Error checking
|
|
@@ -122,4 +122,4 @@ if { [llength $pdn_blockages] > 0 } {
|
|
|
122
122
|
# Task Postamble
|
|
123
123
|
###############################
|
|
124
124
|
|
|
125
|
-
source
|
|
125
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
###############################
|
|
15
15
|
# Buffer ports
|
|
@@ -70,4 +70,4 @@ estimate_parasitics -placement
|
|
|
70
70
|
# Task Postamble
|
|
71
71
|
###############################
|
|
72
72
|
|
|
73
|
-
source
|
|
73
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
###############################
|
|
15
15
|
# Timing Repair
|
|
@@ -159,4 +159,4 @@ estimate_parasitics $parasitics_stage
|
|
|
159
159
|
# Task Postamble
|
|
160
160
|
###############################
|
|
161
161
|
|
|
162
|
-
source
|
|
162
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
###############################
|
|
15
15
|
# Generate LEF
|
|
@@ -122,4 +122,4 @@ foreach net [sc_psm_check_nets] {
|
|
|
122
122
|
# Task Postamble
|
|
123
123
|
###############################
|
|
124
124
|
|
|
125
|
-
source
|
|
125
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -411,12 +411,18 @@ proc sc_psm_check_nets { } {
|
|
|
411
411
|
# Save an image
|
|
412
412
|
###########################
|
|
413
413
|
|
|
414
|
-
proc sc_save_image { title path { pixels 1000 } } {
|
|
414
|
+
proc sc_save_image { title path { gif false } { pixels 1000 } } {
|
|
415
415
|
utl::info FLW 1 "Saving \"$title\" to $path"
|
|
416
416
|
|
|
417
417
|
save_image -resolution [sc_image_resolution $pixels] \
|
|
418
418
|
-area [sc_image_area] \
|
|
419
419
|
$path
|
|
420
|
+
|
|
421
|
+
if { $gif } {
|
|
422
|
+
save_animated_gif -add \
|
|
423
|
+
-resolution [sc_image_resolution $pixels] \
|
|
424
|
+
-area [sc_image_area]
|
|
425
|
+
}
|
|
420
426
|
}
|
|
421
427
|
|
|
422
428
|
###########################
|
|
@@ -480,6 +486,9 @@ proc sc_image_setup_default { } {
|
|
|
480
486
|
gui::set_display_controls "Misc/Scale bar" visible true
|
|
481
487
|
gui::set_display_controls "Misc/Highlight selected" visible true
|
|
482
488
|
gui::set_display_controls "Misc/Detailed view" visible true
|
|
489
|
+
if { [sc_check_version 21574] } {
|
|
490
|
+
gui::set_display_controls "Misc/Labels" visible true
|
|
491
|
+
}
|
|
483
492
|
}
|
|
484
493
|
|
|
485
494
|
###########################
|
|
@@ -597,6 +606,22 @@ proc sc_has_input_files { type key } {
|
|
|
597
606
|
return [expr { [sc_get_input_files $type $key] != [] }]
|
|
598
607
|
}
|
|
599
608
|
|
|
609
|
+
proc sc_path_group { args } {
|
|
610
|
+
sta::parse_key_args "sc_path_group" args \
|
|
611
|
+
keys {-name -to -from} \
|
|
612
|
+
flags {}
|
|
613
|
+
|
|
614
|
+
sta::check_argc_eq0 "sc_path_group" $args
|
|
615
|
+
|
|
616
|
+
if { [llength $keys(-from)] == 0 } {
|
|
617
|
+
return
|
|
618
|
+
}
|
|
619
|
+
if { [llength $keys(-to)] == 0 } {
|
|
620
|
+
return
|
|
621
|
+
}
|
|
622
|
+
group_path -name $keys(-name) -from $keys(-from) -to $keys(-to)
|
|
623
|
+
}
|
|
624
|
+
|
|
600
625
|
proc sc_setup_sta { } {
|
|
601
626
|
set sta_early_timing_derate [lindex [sc_cfg_tool_task_get var sta_early_timing_derate] 0]
|
|
602
627
|
set sta_late_timing_derate [lindex [sc_cfg_tool_task_get var sta_late_timing_derate] 0]
|
|
@@ -609,6 +634,37 @@ proc sc_setup_sta { } {
|
|
|
609
634
|
set_timing_derate -late $sta_late_timing_derate
|
|
610
635
|
}
|
|
611
636
|
|
|
637
|
+
# Create path groups
|
|
638
|
+
if {
|
|
639
|
+
[lindex [sc_cfg_tool_task_get var sta_define_path_groups] 0] == "true" &&
|
|
640
|
+
[llength [sta::path_group_names]] == 0
|
|
641
|
+
} {
|
|
642
|
+
sc_path_group -name in2out -from [all_inputs -no_clocks] -to [all_outputs]
|
|
643
|
+
|
|
644
|
+
if {
|
|
645
|
+
[llength [all_clocks]] == 1 ||
|
|
646
|
+
[lindex [sc_cfg_tool_task_get var sta_unique_path_groups_per_clock] 0] == "false"
|
|
647
|
+
} {
|
|
648
|
+
sc_path_group -name in2reg -from [all_inputs -no_clocks] -to [all_registers]
|
|
649
|
+
sc_path_group -name reg2reg -from [all_registers] -to [all_registers]
|
|
650
|
+
sc_path_group -name reg2out -from [all_registers] -to [all_outputs]
|
|
651
|
+
} else {
|
|
652
|
+
foreach clock [all_clocks] {
|
|
653
|
+
set clk_name [get_property $clock name]
|
|
654
|
+
sc_path_group -name in2reg.${clk_name} \
|
|
655
|
+
-from [all_inputs -no_clocks] \
|
|
656
|
+
-to [all_registers -clock $clock]
|
|
657
|
+
sc_path_group -name reg2reg.${clk_name} \
|
|
658
|
+
-from [all_registers -clock $clock] \
|
|
659
|
+
-to [all_registers -clock $clock]
|
|
660
|
+
sc_path_group -name reg2out.${clk_name} \
|
|
661
|
+
-from [all_registers -clock $clock] \
|
|
662
|
+
-to [all_outputs]
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
utl::info FLW 1 "Timing path groups: [sta::path_group_names]"
|
|
667
|
+
|
|
612
668
|
# Check timing setup
|
|
613
669
|
if { [sc_cfg_tool_task_check_in_list check_setup var reports] } {
|
|
614
670
|
tee -file "reports/check_timing_setup.rpt" {check_setup -verbose}
|
|
@@ -5,7 +5,7 @@ set sc_resolution \
|
|
|
5
5
|
|
|
6
6
|
sc_image_setup_default
|
|
7
7
|
|
|
8
|
-
sc_save_image "screenshot" "outputs/${sc_design}.png" $sc_resolution
|
|
8
|
+
sc_save_image "screenshot" "outputs/${sc_design}.png" false $sc_resolution
|
|
9
9
|
|
|
10
10
|
gui::restore_display_controls
|
|
11
11
|
|
|
@@ -14,5 +14,5 @@ if {
|
|
|
14
14
|
[lindex [sc_cfg_tool_task_get {var} include_report_images] 0]
|
|
15
15
|
== "true"
|
|
16
16
|
} {
|
|
17
|
-
source
|
|
17
|
+
source "${sc_refdir}/sc_write_images.tcl"
|
|
18
18
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Adopted from https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/blob/3f9740e6b3643835e918d78ae1d377d65af0f0fb/flow/scripts/save_images.tcl
|
|
2
2
|
|
|
3
|
-
proc sc_image_heatmap { name ident image_name title { allow_bin_adjust 1 } } {
|
|
3
|
+
proc sc_image_heatmap { name ident image_name title { gif false } { allow_bin_adjust 1 } } {
|
|
4
4
|
set ord_heatmap_bins_x [lindex [sc_cfg_tool_task_get var ord_heatmap_bins_x] 0]
|
|
5
5
|
set ord_heatmap_bins_y [lindex [sc_cfg_tool_task_get var ord_heatmap_bins_y] 0]
|
|
6
6
|
|
|
@@ -49,7 +49,7 @@ proc sc_image_heatmap { name ident image_name title { allow_bin_adjust 1 } } {
|
|
|
49
49
|
|
|
50
50
|
gui::set_display_controls "Heat Maps/${name}" visible true
|
|
51
51
|
|
|
52
|
-
sc_save_image "$title heatmap" reports/images/heatmap/${image_name}
|
|
52
|
+
sc_save_image "$title heatmap" reports/images/heatmap/${image_name} $gif
|
|
53
53
|
|
|
54
54
|
gui::set_display_controls "Heat Maps/${name}" visible false
|
|
55
55
|
}
|
|
@@ -125,6 +125,13 @@ proc sc_image_irdrop { net corner } {
|
|
|
125
125
|
return
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
+
set gif false
|
|
129
|
+
if { [sc_check_version 21574] } {
|
|
130
|
+
set gif true
|
|
131
|
+
}
|
|
132
|
+
if { $gif } {
|
|
133
|
+
save_animated_gif -start "reports/images/heatmap/irdrop/${net}.${corner}.gif"
|
|
134
|
+
}
|
|
128
135
|
foreach layer [[ord::get_db_tech] getLayers] {
|
|
129
136
|
if { [$layer getRoutingLevel] == 0 } {
|
|
130
137
|
continue
|
|
@@ -136,10 +143,26 @@ proc sc_image_irdrop { net corner } {
|
|
|
136
143
|
gui::set_heatmap IRDrop Layer $layer_name
|
|
137
144
|
gui::set_heatmap IRDrop rebuild
|
|
138
145
|
|
|
146
|
+
set label ""
|
|
147
|
+
if { [sc_check_version 21574] } {
|
|
148
|
+
set box [[ord::get_db_block] getDieArea]
|
|
149
|
+
set x [ord::dbu_to_microns [$box xMax]]
|
|
150
|
+
set y [ord::dbu_to_microns [$box yMin]]
|
|
151
|
+
set label [add_label -position "$x $y" -anchor "bottom right" -color white $layer_name]
|
|
152
|
+
}
|
|
153
|
+
|
|
139
154
|
sc_image_heatmap "IR Drop" \
|
|
140
155
|
"IRDrop" \
|
|
141
156
|
"irdrop/${net}.${corner}.${layer_name}.png" \
|
|
142
|
-
"IR drop for $net on $layer_name for $corner"
|
|
157
|
+
"IR drop for $net on $layer_name for $corner" \
|
|
158
|
+
$gif
|
|
159
|
+
|
|
160
|
+
if { $label != "" } {
|
|
161
|
+
gui::delete_label $label
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if { $gif } {
|
|
165
|
+
save_animated_gif -end
|
|
143
166
|
}
|
|
144
167
|
}
|
|
145
168
|
|
|
@@ -154,6 +177,7 @@ proc sc_image_routing_congestion { } {
|
|
|
154
177
|
"Routing" \
|
|
155
178
|
"routing_congestion.png" \
|
|
156
179
|
"routing congestion" \
|
|
180
|
+
0 \
|
|
157
181
|
0
|
|
158
182
|
}
|
|
159
183
|
|
|
@@ -170,6 +194,7 @@ proc sc_image_estimated_routing_congestion { } {
|
|
|
170
194
|
"RUDY" \
|
|
171
195
|
"estimated_routing_congestion.png" \
|
|
172
196
|
"estimated routing congestion" \
|
|
197
|
+
0 \
|
|
173
198
|
0
|
|
174
199
|
} err
|
|
175
200
|
unsuppress_message GRT 10
|
|
@@ -39,7 +39,7 @@ set sc_macrolibs [sc_get_asic_libraries macro]
|
|
|
39
39
|
# Setup debugging
|
|
40
40
|
###############################
|
|
41
41
|
|
|
42
|
-
source
|
|
42
|
+
source "$sc_refdir/common/debugging.tcl"
|
|
43
43
|
|
|
44
44
|
###############################
|
|
45
45
|
# Source helper functions
|
|
@@ -85,7 +85,7 @@ utl::push_metrics_stage "sc__prestep__{}"
|
|
|
85
85
|
if { [sc_cfg_tool_task_exists prescript] } {
|
|
86
86
|
foreach sc_pre_script [sc_cfg_tool_task_get prescript] {
|
|
87
87
|
puts "Sourcing pre script: ${sc_pre_script}"
|
|
88
|
-
source
|
|
88
|
+
source $sc_pre_script
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
utl::pop_metrics_stage
|
|
@@ -160,7 +160,7 @@ utl::push_metrics_stage "sc__poststep__{}"
|
|
|
160
160
|
if { [sc_cfg_tool_task_exists postscript] } {
|
|
161
161
|
foreach sc_post_script [sc_cfg_tool_task_get postscript] {
|
|
162
162
|
puts "Sourcing post script: ${sc_post_script}"
|
|
163
|
-
source
|
|
163
|
+
source $sc_post_script
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
166
|
utl::pop_metrics_stage
|
|
@@ -20,7 +20,7 @@ set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
|
20
20
|
# Setup debugging
|
|
21
21
|
###############################
|
|
22
22
|
|
|
23
|
-
source
|
|
23
|
+
source "$sc_refdir/common/debugging.tcl"
|
|
24
24
|
|
|
25
25
|
###############################
|
|
26
26
|
# Setup helper functions
|
|
@@ -58,11 +58,11 @@ set_thread_count [sc_cfg_tool_task_get threads]
|
|
|
58
58
|
# Read Files
|
|
59
59
|
###############################
|
|
60
60
|
|
|
61
|
-
source
|
|
61
|
+
source "$sc_refdir/common/read_liberty.tcl"
|
|
62
62
|
|
|
63
|
-
source
|
|
63
|
+
source "$sc_refdir/common/read_input_files.tcl"
|
|
64
64
|
|
|
65
|
-
source
|
|
65
|
+
source "$sc_refdir/common/read_timing_constraints.tcl"
|
|
66
66
|
|
|
67
67
|
###############################
|
|
68
68
|
# Common Setup
|
|
@@ -84,7 +84,7 @@ utl::push_metrics_stage "sc__prestep__{}"
|
|
|
84
84
|
if { [sc_cfg_tool_task_exists prescript] } {
|
|
85
85
|
foreach sc_pre_script [sc_cfg_tool_task_get prescript] {
|
|
86
86
|
puts "Sourcing pre script: ${sc_pre_script}"
|
|
87
|
-
source
|
|
87
|
+
source $sc_pre_script
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
utl::pop_metrics_stage
|
|
@@ -102,7 +102,7 @@ if { [llength $openroad_dont_touch] > 0 } {
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
if { $sc_task == "screenshot" } {
|
|
105
|
-
source
|
|
105
|
+
source "$sc_refdir/common/screenshot.tcl"
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
if { [lindex [sc_cfg_tool_task_get {var} show_exit] 0] == "true" } {
|
|
@@ -70,38 +70,38 @@ def common_runtime_options(chip):
|
|
|
70
70
|
'param'])
|
|
71
71
|
|
|
72
72
|
if opts['libext']:
|
|
73
|
-
options.
|
|
73
|
+
options.extend(['--libext', f'{",".join(opts["libext"])}'])
|
|
74
74
|
|
|
75
75
|
#####################
|
|
76
76
|
# Library directories
|
|
77
77
|
#####################
|
|
78
78
|
if opts['ydir']:
|
|
79
|
-
options.
|
|
79
|
+
options.extend(['-y', f'{",".join(opts["ydir"])}'])
|
|
80
80
|
|
|
81
81
|
#####################
|
|
82
82
|
# Library files
|
|
83
83
|
#####################
|
|
84
84
|
if opts['vlib']:
|
|
85
|
-
options.
|
|
85
|
+
options.extend(['-libfile', f'{",".join(opts["vlib"])}'])
|
|
86
86
|
|
|
87
87
|
#####################
|
|
88
88
|
# Include paths
|
|
89
89
|
#####################
|
|
90
90
|
if opts['idir']:
|
|
91
|
-
options.
|
|
91
|
+
options.extend(['--include-directory', f'{",".join(opts["idir"])}'])
|
|
92
92
|
|
|
93
93
|
#######################
|
|
94
94
|
# Variable Definitions
|
|
95
95
|
#######################
|
|
96
96
|
for value in opts['define']:
|
|
97
|
-
options.
|
|
97
|
+
options.extend(['-D', value])
|
|
98
98
|
|
|
99
99
|
#######################
|
|
100
100
|
# Command files
|
|
101
101
|
#######################
|
|
102
102
|
cmdfiles = get_input_files(chip, 'input', 'cmdfile', 'f')
|
|
103
103
|
if cmdfiles:
|
|
104
|
-
options.
|
|
104
|
+
options.extend(['-F', f'{",".join(cmdfiles)}'])
|
|
105
105
|
|
|
106
106
|
#######################
|
|
107
107
|
# Sources
|
|
@@ -114,7 +114,7 @@ def common_runtime_options(chip):
|
|
|
114
114
|
#######################
|
|
115
115
|
# Top Module
|
|
116
116
|
#######################
|
|
117
|
-
options.
|
|
117
|
+
options.extend(['--top', chip.top(step, index)])
|
|
118
118
|
|
|
119
119
|
###############################
|
|
120
120
|
# Parameters (top module only)
|
|
@@ -122,7 +122,7 @@ def common_runtime_options(chip):
|
|
|
122
122
|
# Set up user-provided parameters to ensure we elaborate the correct modules
|
|
123
123
|
for param, value in opts['param']:
|
|
124
124
|
value = value.replace('"', '\\"')
|
|
125
|
-
options.
|
|
125
|
+
options.extend(['-G', f'{param}={value}'])
|
|
126
126
|
|
|
127
127
|
return options
|
|
128
128
|
|
|
@@ -211,5 +211,5 @@ def _diagnostics(chip, driver, compilation):
|
|
|
211
211
|
for diag in compilation.getAllDiagnostics():
|
|
212
212
|
diags.issue(diag)
|
|
213
213
|
|
|
214
|
-
record_metric(chip, step, index, 'errors', diags.numErrors, [])
|
|
215
|
-
record_metric(chip, step, index, 'warnings', diags.numWarnings, [])
|
|
214
|
+
record_metric(chip, step, index, 'errors', diags.numErrors, [f'sc_{step}{index}.log'])
|
|
215
|
+
record_metric(chip, step, index, 'warnings', diags.numWarnings, [f'sc_{step}{index}.log'])
|
|
@@ -83,13 +83,13 @@ def runtime_options(chip):
|
|
|
83
83
|
# Library directories
|
|
84
84
|
#####################
|
|
85
85
|
for value in opts['ydir']:
|
|
86
|
-
cmdlist.
|
|
86
|
+
cmdlist.extend(['-y', value])
|
|
87
87
|
|
|
88
88
|
#####################
|
|
89
89
|
# Library files
|
|
90
90
|
#####################
|
|
91
91
|
for value in opts['vlib']:
|
|
92
|
-
cmdlist.
|
|
92
|
+
cmdlist.extend(['-v', value])
|
|
93
93
|
|
|
94
94
|
#####################
|
|
95
95
|
# Include paths
|
|
@@ -107,7 +107,7 @@ def runtime_options(chip):
|
|
|
107
107
|
# Command files
|
|
108
108
|
#######################
|
|
109
109
|
for value in get_input_files(chip, 'input', 'cmdfile', 'f'):
|
|
110
|
-
cmdlist.
|
|
110
|
+
cmdlist.extend(['-f', + value])
|
|
111
111
|
|
|
112
112
|
#######################
|
|
113
113
|
# Sources
|
|
@@ -120,7 +120,7 @@ def runtime_options(chip):
|
|
|
120
120
|
#######################
|
|
121
121
|
# Top Module
|
|
122
122
|
#######################
|
|
123
|
-
cmdlist.
|
|
123
|
+
cmdlist.extend(['-top', chip.top(step, index)])
|
|
124
124
|
|
|
125
125
|
###############################
|
|
126
126
|
# Parameters (top module only)
|
|
@@ -23,6 +23,26 @@ def setup(chip):
|
|
|
23
23
|
chip.set('tool', tool, 'vswitch', '--numeric-version')
|
|
24
24
|
chip.set('tool', tool, 'version', '>=0.0.9', clobber=False)
|
|
25
25
|
|
|
26
|
+
chip.add('tool', tool, 'task', task, 'require',
|
|
27
|
+
",".join(['tool', tool, 'task', task, 'var', 'skip_convert']), step=step, index=index)
|
|
28
|
+
chip.set('tool', tool, 'task', task, 'var', 'skip_convert',
|
|
29
|
+
'true/false, if true will skip converting system verilog to verilog', field='help')
|
|
30
|
+
skip = chip.get('tool', tool, 'task', task, 'var', 'skip_convert', step=step, index=index)
|
|
31
|
+
if skip:
|
|
32
|
+
skip = skip[0] == "true"
|
|
33
|
+
else:
|
|
34
|
+
skip = False
|
|
35
|
+
chip.set('tool', tool, 'task', task, 'var', 'skip_convert', skip,
|
|
36
|
+
step=step, index=index, clobber=False)
|
|
37
|
+
|
|
38
|
+
chip.set('tool', tool, 'task', task, 'input', f'{topmodule}.sv', step=step, index=index)
|
|
39
|
+
|
|
40
|
+
if skip:
|
|
41
|
+
chip.set('tool', tool, 'task', task, 'output', f'{topmodule}.sv', step=step, index=index)
|
|
42
|
+
return "passing system verilog along"
|
|
43
|
+
|
|
44
|
+
chip.set('tool', tool, 'task', task, 'output', f'{topmodule}.v', step=step, index=index)
|
|
45
|
+
|
|
26
46
|
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
27
47
|
step=step, index=index, clobber=False)
|
|
28
48
|
|
|
@@ -41,6 +61,3 @@ def setup(chip):
|
|
|
41
61
|
step=step, index=index)
|
|
42
62
|
chip.add('tool', tool, 'task', task, 'option', "--write=outputs/" + topmodule + ".v",
|
|
43
63
|
step=step, index=index)
|
|
44
|
-
|
|
45
|
-
chip.set('tool', tool, 'task', task, 'input', f'{topmodule}.sv', step=step, index=index)
|
|
46
|
-
chip.set('tool', tool, 'task', task, 'output', f'{topmodule}.v', step=step, index=index)
|
|
@@ -161,12 +161,12 @@ def runtime_options(chip):
|
|
|
161
161
|
|
|
162
162
|
if c_flags:
|
|
163
163
|
cflags_str = ' '.join(c_flags)
|
|
164
|
-
cmdlist.extend(['-CFLAGS',
|
|
164
|
+
cmdlist.extend(['-CFLAGS', cflags_str])
|
|
165
165
|
|
|
166
166
|
ld_flags = chip.get('tool', tool, 'task', task, 'var', 'ldflags', step=step, index=index)
|
|
167
167
|
if ld_flags:
|
|
168
168
|
ldflags_str = ' '.join(ld_flags)
|
|
169
|
-
cmdlist.extend(['-LDFLAGS',
|
|
169
|
+
cmdlist.extend(['-LDFLAGS', ldflags_str])
|
|
170
170
|
|
|
171
171
|
for value in get_input_files(chip, 'input', 'hll', 'c'):
|
|
172
172
|
cmdlist.append(value)
|
|
@@ -144,9 +144,9 @@ def runtime_options(chip):
|
|
|
144
144
|
cmdlist.append(f'inputs/{design}.v')
|
|
145
145
|
else:
|
|
146
146
|
for value in frontend_opts['ydir']:
|
|
147
|
-
cmdlist.
|
|
147
|
+
cmdlist.extend(['-y', value])
|
|
148
148
|
for value in frontend_opts['vlib']:
|
|
149
|
-
cmdlist.
|
|
149
|
+
cmdlist.extend(['-v', value])
|
|
150
150
|
for value in frontend_opts['idir']:
|
|
151
151
|
cmdlist.append(f'-I{value}')
|
|
152
152
|
for value in frontend_opts['define']:
|
|
@@ -160,7 +160,7 @@ def runtime_options(chip):
|
|
|
160
160
|
cmdlist.append(value)
|
|
161
161
|
|
|
162
162
|
for value in get_input_files(chip, 'input', 'cmdfile', 'f'):
|
|
163
|
-
cmdlist.
|
|
163
|
+
cmdlist.extend(['-f', value])
|
|
164
164
|
|
|
165
165
|
return cmdlist
|
|
166
166
|
|
|
@@ -62,8 +62,8 @@ def runtime_options(chip):
|
|
|
62
62
|
|
|
63
63
|
options.append('--route')
|
|
64
64
|
# To run only the routing step we need to pass in the placement files
|
|
65
|
-
options.
|
|
66
|
-
options.
|
|
65
|
+
options.extend(['--net_file', f'inputs/{design}.net'])
|
|
66
|
+
options.extend(['--place_file', f'inputs/{design}.place'])
|
|
67
67
|
|
|
68
68
|
enable_images = chip.get('tool', tool, 'task', task, 'var', 'enable_images',
|
|
69
69
|
step=step, index=index)[0]
|
|
@@ -72,7 +72,7 @@ def runtime_options(chip):
|
|
|
72
72
|
step=step, index=index)
|
|
73
73
|
|
|
74
74
|
if (len(route_iterations) > 0):
|
|
75
|
-
options.
|
|
75
|
+
options.extend(['--max_router_iterations', route_iterations[0]])
|
|
76
76
|
|
|
77
77
|
if enable_images == 'true':
|
|
78
78
|
design = chip.top()
|
|
@@ -102,7 +102,7 @@ def runtime_options(chip):
|
|
|
102
102
|
graphics_command_str = " ".join(graphics_commands)
|
|
103
103
|
|
|
104
104
|
options.append("--graphics_commands")
|
|
105
|
-
options.append(
|
|
105
|
+
options.append(graphics_command_str)
|
|
106
106
|
|
|
107
107
|
return options
|
|
108
108
|
|
|
@@ -64,14 +64,14 @@ def generic_show_options(chip):
|
|
|
64
64
|
raise SiliconCompilerError("Blif file does not exist", chip=chip)
|
|
65
65
|
|
|
66
66
|
if os.path.exists(net_file):
|
|
67
|
-
options.
|
|
67
|
+
options.extend(['--net_file', net_file])
|
|
68
68
|
else:
|
|
69
69
|
raise SiliconCompilerError("Net file does not exist", chip=chip)
|
|
70
70
|
|
|
71
71
|
if os.path.exists(route_file) and os.path.exists(place_file):
|
|
72
72
|
options.append('--analysis')
|
|
73
|
-
options.
|
|
74
|
-
options.
|
|
73
|
+
options.extend(['--place_file', place_file])
|
|
74
|
+
options.extend(['--route_file', route_file])
|
|
75
75
|
elif os.path.exists(place_file):
|
|
76
76
|
# NOTE: This is a workaround to display the VPR GUI on the output of the place step.
|
|
77
77
|
# VPR GUI can be invoked during the place, route or analysis steps - not after they are run.
|
|
@@ -81,8 +81,8 @@ def generic_show_options(chip):
|
|
|
81
81
|
# the placed design. Setting max_router_iterations to 0 avoids running routing iterations
|
|
82
82
|
# and provides a fast way to invoke VPR GUI on the placed design.
|
|
83
83
|
options.append('--route')
|
|
84
|
-
options.
|
|
85
|
-
options.
|
|
84
|
+
options.extend(['--max_router_iterations', 0])
|
|
85
|
+
options.extend(['--place_file', place_file])
|
|
86
86
|
else:
|
|
87
87
|
raise SiliconCompilerError("Place file does not exist", chip=chip)
|
|
88
88
|
|