Hog Hog2025.1-6
pre-bitstream.tcl
Go to the documentation of this file.
1 #!/usr/bin/env tclsh
2 # Copyright 2018-2025 The University of Birmingham
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 
16 set old_path [pwd]
17 set tcl_path [file normalize "[file dirname [info script]]/.."]
18 source $tcl_path/hog.tcl
19 
20 # Import tcllib
21 if {[IsSynplify] || [IsDiamond]} {
22  if {[info exists env(HOG_TCLLIB_PATH)]} {
23  lappend auto_path $env(HOG_TCLLIB_PATH)
24  } else {
25  puts "ERROR: To run Hog with Microsemi Libero SoC, you need to define the HOG_TCLLIB_PATH variable."
26  return
27  }
28 }
29 
30 if {[IsQuartus]} {
31  # Quartus
32  Msg Error "Pre-module scripts are not supported in Quartus mode!"
33  return TCL_ERROR
34 }
35 
36 
37 if {[IsXilinx]} {
38  # Vivado + PlanAhead
39  # Vivado + PlanAhead
40  if {[IsISE]} {
41  # planAhead
42  set work_path [get_property DIRECTORY [get_runs impl_1]]
43  } else {
44  # Vivado
45  set work_path $old_path
46  }
47 
48  set proj_name [file tail [file normalize $work_path/../../]]
49  set proj_dir [file normalize "$work_path/../.."]
50 } elseif {[IsDiamond]} {
51  set proj_dir [file normalize "[pwd]/.."]
52  set proj_name [file tail $proj_dir]
53  set project $proj_name
54 } else {
55  #Tclssh
56  set proj_name [file tail [file normalize $old_path/../..]]
57  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/"
58 }
59 
60 set group_name [GetGroupName $proj_dir "$tcl_path/../.."]
61 
62 # Go to repository path
63 cd "$tcl_path/../.."
64 
65 #number of threads
66 set maxThreads [GetMaxThreads [file normalize $tcl_path/../../Top/$group_name/$proj_name]]
67 if {$maxThreads != 1} {
68  Msg CriticalWarning "Multithreading enabled. Bitfile will not be deterministic. Number of threads: $maxThreads"
69 } else {
70  Msg Info "Disabling multithreading to assure deterministic bitfile"
71 }
72 
73 if {[IsXilinx]} {
74  # Vivado
75  set_param general.maxThreads $maxThreads
76 } else {
77  #Tclssh
78 }
79 
80 ######## Reset files before bitstream creation ###########
81 ResetRepoFiles "./Projects/hog_reset_files"
82 
83 set user_pre_bitstream_file "./Top/$group_name/$proj_name/pre-bitstream.tcl"
84 if {[file exists $user_pre_bitstream_file]} {
85  Msg Info "Sourcing user pre-bitstream file $user_pre_bitstream_file"
86  source $user_pre_bitstream_file
87 }
88 
89 cd $old_path
90 Msg Info "All done."