23 if {[
catch {
package require struct::matrix} ERROR]} {
24 puts "$ERROR\n If you are running this script on tclsh, you can fix this by installing 'tcllib'"
28 set tcl_path [
file normalize "[
file dirname [
info script]]/.."]
29 source $tcl_path/hog.tcl
33 set old_path [
file normalize "../../Projects/$project/$project.runs/synth_1"]
42 set proj_file [get_property DIRECTORY [current_project]]
44 set proj_file [get_property parent.project_path [current_project]]
46 set proj_dir [
file normalize [
file dirname $proj_file]]
47 set proj_name [
file rootname [
file tail $proj_file]]
48 set top_name [get_property top [current_fileset]]
51 set proj_name [
lindex $quartus(args) 1]
54 set proj_file [
file normalize "$proj_dir/$proj_name.qpf"]
56 set hogQsysFileName [
file normalize "$proj_dir/.hog/.hogQsys.md5"]
57 if { [
file exists $hogQsysFileName] != 0} {
58 set hogQsysFile [open $hogQsysFileName r]
59 set hogQsysFileLines [
split [read $hogQsysFile] "\n"]
60 foreach line $hogQsysFileLines {
61 set fileEntry [
split $line "\t"]
62 set fileEntryName [
lindex $fileEntry 0]
63 if {$fileEntryName != ""} {
64 if {[
file exists $fileEntryName]} {
65 set newMd5Sum [
Md5Sum $fileEntryName]
66 set oldMd5Sum [
lindex $fileEntry 1]
67 if { $newMd5Sum != $oldMd5Sum } {
68 Msg Warning "The checksum for file $fileEntryName not equal to the one saved in $hogQsysFileName: new checksum $newMd5Sum, old checksum $oldMd5Sum. Please check the any changes in the file are correctly propagated to git!"
71 Msg Warning "File $fileEntryName not found... Will not check Md5Sum!"
79 set proj_file $old_path/[
file tail $old_path].xpr
80 set proj_dir [
file normalize [
file dirname $proj_file]]
81 set proj_name [
file rootname [
file tail $proj_file]]
82 Msg CriticalWarning "You seem to be running locally on tclsh, so this is a debug, the project file will be set to $proj_file and was derived from the path you launched this script from: $old_path. If you want this script to work properly in debug mode, please launch it from the top folder of one project, for example Repo/Projects/fpga1/ or Repo/Top/fpga1/"
86 set repo_path [
file normalize "$tcl_path/../.."]
87 set bin_dir [
file normalize "$repo_path/bin"]
91 set group_name [
GetGroupName $proj_dir "$tcl_path/../.."]
93 Msg Info "Evaluating Git sha for $proj_name..."
94 lassign [
GetRepoVersions [
file normalize ./Top/$group_name/$proj_name] $repo_path] sha
97 Msg Info "Git describe set to: $describe"
98 set dst_dir [
file normalize "$bin_dir/$group_name/$proj_name\-$describe"]
100 Msg Info "Creating $dst_dir..."
103 file mkdir $dst_dir/reports
113 set work_path [get_property DIRECTORY [get_runs synth_1]]
116 set work_path $old_path
118 set run_dir [
file normalize "$work_path/.."]
121 set reps [glob -nocomplain "$run_dir/*/*{.syr,.srp,.mrp,.map,.twr,.drc,.bgn,_routed.par,_routed_pad.txt,_routed.unroutes}"]
123 set reps [glob -nocomplain "$run_dir/*/*.rpt"]
125 if {[
file exists [
lindex $reps 0]]} {
126 file copy -force {*}$reps $dst_dir/reports
127 if {[
file exists [glob -nocomplain "$dst_dir/reports/${top_name}_utilization_synth.rpt"]]} {
128 set utilization_file [
file normalize $dst_dir/utilization.txt]
129 set report_file [glob -nocomplain "$dst_dir/reports/${top_name}_utilization_synth.rpt"]
130 if {$group_name != ""} {
137 Msg Warning "No reports found in $run_dir subfolders"
143 if {[
info exists env(HOG_IP_PATH)]} {
144 set ip_repo $env(HOG_IP_PATH)
146 set run_paths [glob -nocomplain "$run_dir/*"]
148 foreach r $run_paths {
149 if {[regexp -all {^(.+)_synth_1} $r whole_match run]} {
150 lappend runs [
file tail $run]
160 Msg Info "Copying synthesised IP $ip to $ip_repo..."
161 HandleIP push [get_property IP_FILE $ip] $ip_repo $repo_path [get_property IP_OUTPUT_DIR $ip] $force
166 if {[
info exists env(HOG_SAVE_DCP)] && ($env(HOG_SAVE_DCP) == 1 || $env(HOG_SAVE_DCP) == 2)} {
167 set dcp_dir [
file normalize "$repo_path/DCPs/$group_name/$proj_name/synth_dcp"]
169 set dcps [glob -nocomplain "$run_dir/synth*/*.dcp"]
170 if {[
file exists [
lindex $dcps 0]]} {
171 file copy -force {*}$dcps $dcp_dir/
180 set logs [glob -nocomplain "$run_dir/*/runme.log"]
182 set run_name [
file tail [
file dirname $log]]
183 file copy -force $log $dst_dir/reports/$run_name.log
187 set reps [glob -nocomplain "$proj_dir/output_files/*.rpt"]
189 if {[
file exists [
lindex $reps 0]]} {
190 file copy -force {*}$reps $dst_dir/reports
192 Msg Warning "No reports found in $proj_dir/output_files subfolders"
197 set user_post_synthesis_file "./Top/$group_name/$proj_name/post-synthesis.tcl"
198 if {[
file exists $user_post_synthesis_file]} {
199 Msg Info "Sourcing user post-synthesis file $user_post_synthesis_file"
200 source $user_post_synthesis_file