24 set tcl_path [
file normalize "[
file dirname [
info script]]/.."]
25 source $tcl_path/hog.tcl
29 set old_path [
file normalize "../../Projects/$project/$project.runs/synth_1"]
38 set proj_dir [get_property DIRECTORY [current_project]]
39 set project [
file tail $proj_dir]
40 set proj_file $proj_dir/$project.prr
42 set proj_file [get_property parent.project_path [current_project]]
44 set proj_dir [
file normalize [
file dirname $proj_file]]
45 set proj_name [
file rootname [
file tail $proj_file]]
46 set top_name [get_property top [current_fileset]]
49 set proj_name [
lindex $quartus(args) 1]
52 set proj_file [
file normalize "$proj_dir/$proj_name.qpf"]
54 set hogQsysFileName [
file normalize "$proj_dir/.hog/.hogQsys.md5"]
55 if {[
file exists $hogQsysFileName] != 0} {
56 set hogQsysFile [open $hogQsysFileName r]
57 set hogQsysFileLines [
split [read $hogQsysFile] "\n"]
58 foreach line $hogQsysFileLines {
59 set fileEntry [
split $line "\t"]
60 set fileEntryName [
lindex $fileEntry 0]
61 if {$fileEntryName != ""} {
62 if {[
file exists $fileEntryName]} {
63 set newMd5Sum [
Md5Sum $fileEntryName]
64 set oldMd5Sum [
lindex $fileEntry 1]
65 if {$newMd5Sum != $oldMd5Sum} {
66 Msg Warning "The checksum for file $fileEntryName is not equal to the one saved in $hogQsysFileName.\n\
67 New checksum $newMd5Sum, old checksum $oldMd5Sum. \
68 Please check the any changes in the file are correctly propagated to git!"
71 Msg Warning "File $fileEntryName not found... Will not check Md5Sum!"
78 if {[
info exists env(HOG_TCLLIB_PATH)]} {
79 lappend auto_path $env(HOG_TCLLIB_PATH)
81 puts "ERROR: To run Hog with Microsemi Libero SoC, you need to define the HOG_TCLLIB_PATH variable."
84 set proj_dir [
file normalize "[
pwd]/.."]
85 set proj_name [
file tail $proj_dir]
86 set project $proj_name
89 set proj_file $old_path/[
file tail $old_path].xpr
90 set proj_dir [
file normalize [
file dirname $proj_file]]
91 set proj_name [
file rootname [
file tail $proj_file]]
92 Msg CriticalWarning "You seem to be running locally on tclsh, so this is a debug message. \
93 The project file will be set to $proj_file and was derived from the path you launched this script from: $old_path. \
94 If you want this script to work properly in debug mode, please launch it from the top folder of one project, \
95 for example Repo/Projects/fpga1/ or Repo/Top/fpga1/"
98 if {[
catch {
package require struct::matrix} ERROR]} {
99 puts "$ERROR\n If you are running this script on tclsh, you can fix this by installing 'tcllib'"
104 set repo_path [
file normalize "$tcl_path/../.."]
105 set bin_dir [
file normalize "$repo_path/bin"]
109 set group_name [
GetGroupName $proj_dir "$tcl_path/../.."]
111 Msg Info "Evaluating Hog describe for $proj_name..."
112 set describe [
GetHogDescribe [
file normalize ./Top/$group_name/$proj_name] $repo_path]
113 Msg Info "Git describe set to: $describe"
114 set dst_dir [
file normalize "$bin_dir/$group_name/$proj_name\-$describe"]
116 Msg Info "Creating $dst_dir..."
119 file mkdir $dst_dir/reports
127 set work_path [get_property DIRECTORY [get_runs synth_1]]
130 set work_path $old_path
132 set run_dir [
file normalize "$work_path/.."]
135 set reps [glob -nocomplain "$run_dir/*/*{.syr,.srp,.mrp,.map,.twr,.drc,.bgn,_routed.par,_routed_pad.txt,_routed.unroutes}"]
137 set reps [glob -nocomplain "$run_dir/*/*.rpt"]
139 if {[
file exists [
lindex $reps 0]]} {
140 file copy -force {*}$reps $dst_dir/reports
141 if {[
file exists [glob -nocomplain "$dst_dir/reports/${top_name}_utilization_synth.rpt"]]} {
142 set utilization_file [
file normalize $dst_dir/utilization.txt]
143 set report_file [glob -nocomplain "$dst_dir/reports/${top_name}_utilization_synth.rpt"]
144 if {$group_name != ""} {
151 Msg Warning "No reports found in $run_dir subfolders"
157 if {[
info exists env(HOG_IP_PATH)]} {
158 set ip_repo $env(HOG_IP_PATH)
160 set run_paths [glob -nocomplain "$run_dir/*"]
162 foreach r $run_paths {
163 if {[regexp -all {^(.+)_synth_1} $r whole_match run]} {
164 lappend runs [
file tail $run]
174 Msg Info "Copying synthesised IP $ip to $ip_repo..."
175 HandleIP push [get_property IP_FILE $ip] $ip_repo $repo_path [get_property IP_OUTPUT_DIR $ip] $force
180 if {[
info exists env(HOG_SAVE_DCP)] && ($env(HOG_SAVE_DCP) == 1 || $env(HOG_SAVE_DCP) == 2)} {
181 set dcp_dir [
file normalize "$repo_path/DCPs/$group_name/$proj_name/synth_dcp"]
183 set dcps [glob -nocomplain "$run_dir/synth*/*.dcp"]
184 if {[
file exists [
lindex $dcps 0]]} {
185 file copy -force {*}$dcps $dcp_dir/
192 set logs [glob -nocomplain "$run_dir/*/runme.log"]
194 set run_name [
file tail [
file dirname $log]]
195 file copy -force $log $dst_dir/reports/$run_name.log
199 set reps [glob -nocomplain "$proj_dir/output_files/*.rpt"]
201 if {[
file exists [
lindex $reps 0]]} {
202 file copy -force {*}$reps $dst_dir/reports
204 Msg Warning "No reports found in $proj_dir/output_files subfolders"
208 set logs [glob -nocomplain "$proj_dir/Implementation0/*.log"]
210 if {[
file exists [
lindex $logs 0]]} {
211 file copy -force {*}$logs $dst_dir/reports
213 Msg Warning "No .log reports found in $proj_dir/Implementation0 subfolders"
217 set areas [glob -nocomplain "$proj_dir/Implementation0/*.arearep"]
219 if {[
file exists [
lindex $areas 0]]} {
220 file copy -force {*}$areas $dst_dir/reports
222 Msg Warning "No .arearep reports found in $proj_dir/Implementation0 subfolders"
226 set t_reps [glob -nocomplain "$proj_dir/Implementation0/*.twr"]
228 if {[
file exists [
lindex $t_reps 0]]} {
229 file copy -force {*}$t_reps $dst_dir/reports
231 Msg Warning "No .twr reports found in $proj_dir/Implementation0 subfolders"
236 set user_post_synthesis_file "./Top/$group_name/$proj_name/post-synthesis.tcl"
237 if {[
file exists $user_post_synthesis_file]} {
238 Msg Info "Sourcing user post-synthesis file $user_post_synthesis_file"
239 source $user_post_synthesis_file