You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
4.1 KiB
Tcl

if {![info exists standalone] || $standalone} {
# Read lef
read_lef $::env(TECH_LEF)
read_lef $::env(SC_LEF)
if {[info exist ::env(ADDITIONAL_LEFS)]} {
foreach lef $::env(ADDITIONAL_LEFS) {
read_lef $lef
}
}
# Read liberty files
foreach libFile $::env(LIB_FILES) {
read_liberty $libFile
}
# Read verilog
read_verilog $::env(RESULTS_DIR)/1_synth.v
link_design $::env(DESIGN_NAME)
read_sdc $::env(RESULTS_DIR)/1_synth.sdc
if [file exists $::env(PLATFORM_DIR)/derate.tcl] {
source $::env(PLATFORM_DIR)/derate.tcl
}
set num_instances [llength [get_cells -hier *]]
puts "number instances in verilog is $num_instances"
} else {
puts "Starting floorplan"
}
# Initialize floorplan using ICeWall FOOTPRINT
# ----------------------------------------------------------------------------
if {[info exists ::env(FOOTPRINT)]} {
ICeWall load_footprint $env(FOOTPRINT)
initialize_floorplan \
-die_area [ICeWall get_die_area] \
-core_area [ICeWall get_core_area] \
-site $::env(PLACE_SITE)
ICeWall init_footprint $env(SIG_MAP_FILE)
# Initialize floorplan using CORE_UTILIZATION
# ----------------------------------------------------------------------------
} elseif {[info exists ::env(CORE_UTILIZATION)] && $::env(CORE_UTILIZATION) != "" } {
initialize_floorplan -utilization $::env(CORE_UTILIZATION) \
-aspect_ratio $::env(CORE_ASPECT_RATIO) \
-core_space $::env(CORE_MARGIN) \
-site $::env(PLACE_SITE)
# Initialize floorplan using DIE_AREA/CORE_AREA
# ----------------------------------------------------------------------------
} elseif {[info exists ::env(CORE_AREA)]} {
initialize_floorplan -die_area $::env(DIE_AREA) \
-core_area $::env(CORE_AREA) \
-site $::env(PLACE_SITE)
# Initialize floorplan using DIE_AREA wtf-doesnt work; requires core_area parm
# ----------------------------------------------------------------------------
} else {
initialize_floorplan -die_area $::env(DIE_AREA) \
-site $::env(PLACE_SITE)
}
if { [info exists ::env(MAKE_TRACKS)] } {
source $::env(MAKE_TRACKS)
} else {
source $::env(PLATFORM_DIR)/make_tracks.tcl
}
# If wrappers defined replace macros with their wrapped version
# # ----------------------------------------------------------------------------
if {[info exists ::env(MACRO_WRAPPERS)]} {
source $::env(MACRO_WRAPPERS)
set wrapped_macros [dict keys [dict get $wrapper around]]
set db [ord::get_db]
set block [ord::get_db_block]
foreach inst [$block getInsts] {
if {[lsearch -exact $wrapped_macros [[$inst getMaster] getName]] > -1} {
set new_master [dict get $wrapper around [[$inst getMaster] getName]]
puts "Replacing [[$inst getMaster] getName] with $new_master for [$inst getName]"
$inst swapMaster [$db findMaster $new_master]
}
}
}
#puts "wtf"
#parray ::env
# pre report
puts "\n=========================================================================="
puts "report_checks"
puts "--------------------------------------------------------------------------"
report_checks -digits 3 -fields {fo input slew capacitance} -format full_clock_expanded
report_clock_properties
puts "\n=========================================================================="
puts "report_tns"
puts "--------------------------------------------------------------------------"
report_tns -digits 3
puts "\n=========================================================================="
puts "report_wns"
puts "--------------------------------------------------------------------------"
report_wns
report_worst_slack -digits 3
puts "\n=========================================================================="
puts "report_design_area"
puts "--------------------------------------------------------------------------"
report_design_area
# remove buffers inserted by yosys/abc
#wtf remove_buffers
if {![info exists standalone] || $standalone} {
# write output
write_def $::env(RESULTS_DIR)/2_1_floorplan.def
write_verilog $::env(RESULTS_DIR)/2_floorplan.v
write_sdc $::env(RESULTS_DIR)/2_floorplan.sdc
exit
}