mirror of
https://github.com/lowRISC/ibex.git
synced 2025-04-25 06:17:39 -04:00
Adds significant functionality to synthesis flow. Timing reports are generated using OpenSTA and an area report is generated. Flow supports open Nangate45 library from OpenROAD.
124 lines
4.2 KiB
Tcl
124 lines
4.2 KiB
Tcl
# Copyright lowRISC contributors.
|
|
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
proc print_lr_synth_banner {} {
|
|
puts { _ ______ _____ _____ _____ }
|
|
puts {| | | ___ \|_ _|/ ___|/ __ \ }
|
|
puts {| | ___ __ __| |_/ / | | \ `--. | / \/ }
|
|
puts {| | / _ \ \ \ /\ / /| / | | `--. \| | }
|
|
puts {| || (_) | \ V V / | |\ \ _| |_ /\__/ /| \__/\ }
|
|
puts {|_| \___/ \_/\_/ \_| \_| \___/ \____/ \____/ }
|
|
puts { }
|
|
puts { }
|
|
puts { _ _ }
|
|
puts { | | | | }
|
|
puts { ___ _ _ _ __ | |_ | |__ }
|
|
puts { / __|| | | || '_ \ | __|| '_ \ }
|
|
puts { \__ \| |_| || | | || |_ | | | | }
|
|
puts { |___/ \__, ||_| |_| \__||_| |_| }
|
|
puts { __/ | }
|
|
puts { |___/ }
|
|
puts {}
|
|
puts {****** o p e n t o t h e c o r e ******* }
|
|
puts {}
|
|
}
|
|
|
|
proc print_yosys_banner {} {
|
|
puts { +---------------------------------+}
|
|
puts { | _ _ ___ ___ _ _ ___ |}
|
|
puts { | | | | | / _ \ / __|| | | |/ __| |}
|
|
puts { | | |_| || (_) |\__ \| |_| |\__ \ |}
|
|
puts { | \__, | \___/ |___/ \__, ||___/ |}
|
|
puts { | __/ | __/ | |}
|
|
puts { | |___/ |___/ |}
|
|
puts { +---------------------------------+}
|
|
puts {}
|
|
}
|
|
|
|
proc print_opensta_banner {} {
|
|
puts {+--------------------------------------------------+}
|
|
puts {| _____ _____ _____ ___ |}
|
|
puts {| | _ | / ___||_ _| / _ \ |}
|
|
puts {| | | | | _ __ ___ _ __ \ `--. | | / /_\ \ |}
|
|
puts {| | | | || '_ \ / _ \| '_ \ `--. \ | | | _ | |}
|
|
puts {| \ \_/ /| |_) || __/| | | |/\__/ / | | | | | | |}
|
|
puts {| \___/ | .__/ \___||_| |_|\____/ \_/ \_| |_/ |}
|
|
puts {| | | |}
|
|
puts {| |_| |}
|
|
puts {+--------------------------------------------------+}
|
|
puts {}
|
|
}
|
|
|
|
proc set_flow_var {var_name var_default var_friendly_name} {
|
|
global lr_synth_flow_var_quiet
|
|
|
|
set var_name "lr_synth_${var_name}"
|
|
global $var_name
|
|
set env_var_name [string toupper $var_name]
|
|
|
|
if { [info exists ::env($env_var_name)] } {
|
|
set $var_name $::env($env_var_name)
|
|
puts "$var_friendly_name: $::env($env_var_name)"
|
|
} else {
|
|
set $var_name $var_default
|
|
puts "$var_friendly_name: $var_default (default)"
|
|
}
|
|
}
|
|
|
|
proc set_flow_bool_var {var_name var_default var_friendly_name} {
|
|
global lr_synth_flow_var_quiet
|
|
|
|
set var_name "lr_synth_${var_name}"
|
|
global $var_name
|
|
set env_var_name [string toupper $var_name]
|
|
|
|
if { [info exists ::env($env_var_name)] } {
|
|
if { $::env($env_var_name) } {
|
|
set $var_name 1
|
|
} else {
|
|
set $var_name 0
|
|
}
|
|
} else {
|
|
set $var_name $var_default
|
|
}
|
|
|
|
if { [set $var_name] } {
|
|
puts "$var_friendly_name: Enabled"
|
|
} else {
|
|
puts "$var_friendly_name: Disabled"
|
|
}
|
|
}
|
|
|
|
proc write_sdc_out {sdc_file_in sdc_file_out} {
|
|
global lr_synth_clk_period
|
|
global lr_synth_clk_input
|
|
global lr_synth_outputs
|
|
global lr_synth_inputs
|
|
|
|
set sdc_out [open $sdc_file_out "w"]
|
|
set sdc_in [open $sdc_file_in "r"]
|
|
|
|
set sdc_in_contents [read $sdc_in]
|
|
puts $sdc_out $sdc_in_contents
|
|
|
|
puts $sdc_out "#============ Auto-generated from config ============"
|
|
|
|
set clk_period_ns [expr $lr_synth_clk_period / 1000.0]
|
|
puts $sdc_out "create_clock -name $lr_synth_clk_input -period $clk_period_ns {$lr_synth_clk_input}"
|
|
|
|
foreach output $lr_synth_outputs {
|
|
set output_constraint [lindex $output 1]
|
|
set output_constraint [expr (1.0 - ($output_constraint / 100.0)) * $clk_period_ns]
|
|
puts $sdc_out "set_output_delay -clock $lr_synth_clk_input $output_constraint [lindex $output 0]"
|
|
}
|
|
|
|
foreach input $lr_synth_inputs {
|
|
set input_constraint [lindex $input 1]
|
|
set input_constraint [expr ($input_constraint / 100.0) * $clk_period_ns]
|
|
puts $sdc_out "set_input_delay -clock $lr_synth_clk_input $input_constraint [lindex $input 0]"
|
|
}
|
|
|
|
close $sdc_out
|
|
close $sdc_in
|
|
}
|