design_field_updates.tcl
1###############################################################################
2# This script provides the setup information for a Tandem with Field Updates
3# design. This script is sourced at the beginning of all synthesis,
4# implementation, and bitstream generation scripts to obtain information about the design structure.
5###############################################################################
6
7# Setup the desired script and output directories
8# These paths need to be updated to match your environment
9set projDir "."
10set scriptDir $projDir/field_update_scripts
11set synthDir $projDir/Synth
12set implDir $projDir/Implement
13set bitDir $projDir/Bitstreams
14set runSummary $projDir/run_summary.log
15set tclFiles [list $projDir/../../include.tcl]
16
17# Add additional update versions as required by your application.
18# NOTE: If known, the most complex update version of your design should be
19# Update1. This will improve the timing results for subsequent updates
20# versions. If your update versions are not defined ahead of time this can
21# be ignored. The most complex update version can be different than the version loaded into flash.
22set updateVer1Name ver1
23# Additional updates should be added as needed.
24set updateVer2Name ver2
25
26# PCIe Example design information. This should be updated to match
27# your design.
28set part xcku115-flvb2104-2-e
29set projName xdma_0_ex
30set ipName xdma_0
31set topModuleName xilinx_dma_pcie_ep
32set updateTopFile ./imports/xdma_app.v
33set updateModuleName xdma_app
34set updateInstName xdma_app_i
35
36
37# Identify which steps should be run when this script is executed. If
38# desired all of the steps can be disabled and run individually once
39# this file has been sourced into vivado. Additional updates versions
40# should be added as required by your application. The commands and
41# scripts for the corresponding steps must be replicated as desired.
42# Steps for the static portion of the design
43set runStaticSynth 1
44# Steps for the update version 1 portion of the design dependent on having completed runSynthStatic.
45set runUpdateVer1Synth 1
46set runUpdateVer1Impl 1
47set runUpdateVer1Bitstreams 1
48# Steps for the update version 2 portion of the design dependent on having completed runImplUpdateVer1.
49set runUpdateVer2Synth 1
50set runUpdateVer2Impl 1
51set runUpdateVer2Bitstreams 1
52# Steps for PR Verify across all Update versions
53set runPrVerify 1
54
55# Create a results file
56file delete -force $runSummary
57set fp [open $runSummary w]
58puts $fp "Run Summary for a Tandem with Field Updates design started at: [clock format [clock seconds]]"
59close $fp
60# Source the script containing the supporting procedures for write_bitstream
61source $scriptDir/generate_bitstreams.tcl
62# Source any required .tcl files if they exist
63foreach tclFile $tclFiles {
64 if {[file exists $tclFile]} {
65 source $tclFile
66 }
67}
68
69# -----------------------------------------------------------------------------
70# Process steps for the static portion of the design. This includes everything not included in the update region.
71# -----------------------------------------------------------------------------
72# Source the script to run synthesis on the static portion of the design.
73set staticSynthResult {0 0 0}
74if {$runStaticSynth} { set staticSynthResult [source $scriptDir/static_synth.tcl] }
75
76
77# -----------------------------------------------------------------------------
78# Process steps for the update version 1 portion of the design. This uses the
79# post synthesis .dcp created by the runSynthStatic step.
80# NOTE: This should be the most complex version of the update region and this
81# implementation step must be run prior to all other implementation runs.
82# This will be create placed, routed, and static logic LOC'ed .dcp files. The
83# static LOC'ed .dcp file will be used to implement subsequent updates versions.
84# -----------------------------------------------------------------------------
85# Source the script to run synthesis this update version of the design.
86set updateVer1SynthResult {0 0 0}
87if {$runUpdateVer1Synth} { set updateVer1SynthResult [source $scriptDir/update_ver1_synth.tcl] }
88
89# Source the script to run implementation with static and this update version.
90set updateVer1ImplResult {0 0 0}
91if {$runUpdateVer1Impl} { set updateVer1ImplResult [source $scriptDir/update_ver1_impl.tcl] }
92
93# Generate bitstreams for this version of the update.
94set updateVer1BitstreamsResult {0 0 0}
95if {$runUpdateVer1Bitstreams} {
96 puts "# HD INFO: Running bitstream generation on $updateVer1Name."
97 # Generate bitstreams for update version 1. This procedure takes in two arguments,
98 # the update name and the desired bitfiles that should be generated. Valid setting
99 # for the generated bitfiles field are one or more of the following TandemPCIe,
100 # TandemPROM, and/or PR. It is. Either of the Tandem options should be used to
101 # generate the bitfiles that will be loaded into the on-board flash. for US devices
102 # there is a one-to-one relationship between stage1 and stage2 files. You cannot
103 # mix and match stage2 files. A stage2 file must only be loaded into the device once
104 # following the stage1 programming. PR files cannot be loaded until stage1 and stage2
105 # files have been loaded. Updates should only be done using PR files.
106 set updateVer1BitstreamsResult [genBitForTandemFieldUpdate $updateVer1Name {TandemPCIe TandemPROM PR}]
107}
108
109
110# -----------------------------------------------------------------------------
111# Process steps for the update version 2 portion of the design. This used they
112# routed and LOC'ed .dcp created by the runImplUpdateVer1 step.
113# -----------------------------------------------------------------------------
114# Source the script to run synthesis this update version of the design.
115set updateVer2SynthResult {0 0 0}
116if {$runUpdateVer2Synth} { set updateVer2SynthResult [source $scriptDir/update_ver2_synth.tcl] }
117
118# Source the script to run implementation with static and this update version.
119set updateVer2ImplResult {0 0 0}
120if {$runUpdateVer2Impl} { set updateVer2ImplResult [source $scriptDir/update_ver2_impl.tcl] }
121
122# Generate bitstreams for this version of the update.
123set updateVer2BitstreamsResult {0 0 0}
124if {$runUpdateVer2Bitstreams} {
125 puts "# HD INFO: Running bitstream generation on $updateVer2Name."
126 # Generate bitstreams for update version 1. This procedure takes in two arguments,
127 # the update name and the desired bitfiles that should be generated. Valid setting
128 # for the generated bitfiles field are one or more of the following TandemPCIe,
129 # TandemPROM, and/or PR. It is. Either of the Tandem options should be used to
130 # generate the bitfiles that will be loaded into the on-board flash. for US devices
131 # there is a one-to-one relationship between stage1 and stage2 files. You cannot
132 # mix and match stage2 files. A stage2 file must only be loaded into the device once
133 # following the stage1 programming. PR files cannot be loaded until stage1 and stage2
134 # files have been loaded. Updates should only be done using PR files.
135 set updateVer2BitstreamsResult [genBitForTandemFieldUpdate $updateVer2Name {PR}]
136}
137
138
139# -------------------------------------------------------------------------
140# Add run steps for subsequent update versions as desired here. This should
141# be accomplished by doing the following:
142# - Replicating the updateVer2* variables in this file for updateVer3*
143# - Replicating and updating the process steps from the update version 2 section for update version 3
144# - Replicate and update the update_ver2_synth.tcl and update_ver2_impl.tcl files for update version 3
145# - Add the new update to the update_checkpoints list in the PrVerify section below
146# - Replicate and update the error reporting commands in the error reporting section of this file.
147# These steps should be repeated to create additional update versions as
148# desired.
149# -------------------------------------------------------------------------
150
151
152# -----------------------------------------------------------------------------
153# Process steps for the PR Verify operation. This used the placed and routed
154# .dcp files created from all prior implementation setps.
155# -----------------------------------------------------------------------------
156# The update_checkpoints list should include checkpoints for each update that
157# was created beyond update1. This must be updated if additional update versions have been added.
158set update_checkpoints [list \
159 $implDir/$updateVer2Name/${topModuleName}_route_design.dcp \
160]
161# Run the PR Verify operation and generate bitstreams for each implementation.
162set prVerifyResult {0 0 0}
163if {$runPrVerify } {
164 puts "# HD INFO: Running compatibility check between checkpoints."
165 # Verify that the update versions of the design are compatible with each other.
166 pr_verify -initial $implDir/$updateVer1Name/${topModuleName}_route_design.dcp -additional $update_checkpoints
167 # Error and Message Reporting
168 set warningCount [get_msg_config -severity {Warning} -count]
169 set criticalCount [get_msg_config -severity {Critical Warning} -count]
170 set errorCount [get_msg_config -severity {Error} -count]
171 puts "# HD INFO: PR Verify completed with $errorCount Errors, $criticalCount Critical Warnings, and $warningCount Warnings.\n"
172 set fp [open $runSummary a]
173 puts $fp "PR Verify completed with $errorCount Errors, $criticalCount Critical Warnings, and $warningCount Warnings at [clock format [clock seconds]]."
174 close $fp
175 set prVerifyResult "$errorCount $criticalCount $warningCount"
176}
177
178
179# -------------------------------------------------------------------------
180# Error reporting steps. Add additional error reporting for subsequent
181# update versions here as desired. This should be accomplished by replicating the commands below as needed.
182# -------------------------------------------------------------------------
183set errorFlag false
184
185# Static Error Reporting
186if {[lindex $staticSynthResult 0] != 0 || [lindex $staticSynthResult 1] != 0} {
187 set errorFlag true
188 puts "HD ERROR: Synthesis for Static had [lindex $staticSynthResult 0] Errors and [lindex $staticSynthResult 1] Critical Warnings."
189}
190
191# Update version 1 error reporting
192if {[lindex $updateVer1SynthResult 0] != 0 || [lindex $updateVer1SynthResult 1] != 0} {
193 set errorFlag true
194 puts "HD ERROR: Synthesis for $updateVer1Name had [lindex $updateVer1SynthResult 0] Errors and [lindex $updateVer1SynthResult 1] Critical Warnings."
195}
196if {[lindex $updateVer1ImplResult 0] != 0 || [lindex $updateVer1ImplResult 1] != 0} {
197 set errorFlag true
198 puts "HD ERROR: Implementation for $updateVer1Name had [lindex $updateVer1ImplResult 0] Errors and [lindex $updateVer1ImplResult 1] Critical Warnings."
199}
200if {[lindex $updateVer1BitstreamsResult 0] != 0 || [lindex $updateVer1BitstreamsResult 1] != 0} {
201 set errorFlag true
202 puts "HD ERROR: Bitstream generation for $updateVer1Name had [lindex $updateVer1BitstreamsResult 0] Errors and [lindex $updateVer1BitstreamsResult 1] Critical Warnings."
203}
204
205# Update version 2 error reporting
206if {[lindex $updateVer2SynthResult 0] != 0 || [lindex $updateVer2SynthResult 1] != 0} {
207 set errorFlag true
208 puts "HD ERROR: Synthesis for $updateVer2Name had [lindex $updateVer2SynthResult 0] Errors and [lindex $updateVer2SynthResult 1] Critical Warnings."
209}
210if {[lindex $updateVer2ImplResult 0] != 0 || [lindex $updateVer2ImplResult 1] != 0} {
211 set errorFlag true
212 puts "HD ERROR: Implementation for $updateVer2Name had [lindex $updateVer2ImplResult 0] Errors and [lindex $updateVer2ImplResult 1] Critical Warnings."
213}
214if {[lindex $updateVer2BitstreamsResult 0] != 0 || [lindex $updateVer2BitstreamsResult 1] != 0} {
215 set errorFlag true
216 puts "HD ERROR: Bitstream generation for $updateVer2Name had [lindex $updateVer2BitstreamsResult 0] Errors and [lindex $updateVer2BitstreamsResult 1] Critical Warnings."
217}
218
219# PR Verify Error Reporting
220if {[lindex $prVerifyResult 0] != 0 || [lindex $prVerifyResult 1] != 0} {
221 set errorFlag true
222 puts "HD ERROR: PR Verify had [lindex $prVerifyResult 0] Errors and [lindex $prVerifyResult 1] Critical Warnings."
223}
224
225# Generate a tcl Error as needed
226if { $errorFlag } {
227 return "ERROR: Design Run had Errors or Critical Warnings."
228} else {
229 return PASS
230}
generate_bitstreams.tcl
1
2# Setup of additional variables
3
4###############################################################################
5# This script defines the procedure genBitForTandemFieldUpdate which should be
6# used to generate bitstreams for Tandem with Field Updates designs.
7###############################################################################
8
9# Generate bitstreams for a Tandem with Field Updates Design. The inputs to this
10# procedure is the update name and the desired bitfiles to generate. Valid
11# options for the desired bitfiles include one or more of the following:
12# TandemPCIe, TandemPROM, and PR.
13proc genBitForTandemFieldUpdate { updateName bitstreamTypes } {
14
15 # Set the required variables
16 upvar 1 bitDir bitDir
17 upvar 1 implDir implDir
18 upvar 1 topModuleName topModuleName
19 upvar 1 runSummary runSummary
20 upvar 1 updateInstName updateInstName
21 upvar 1 tclFiles tclFiles
22 set outputPrefix $bitDir/$updateName/$updateName
23 # Create the output directory and remove previously generated files.
24 file mkdir $bitDir
25 file delete -force $bitDir/$updateName
26 file mkdir $bitDir/$updateName
27
28 puts "# HD INFO: Running bitstream generation for $updateName."
29
30 # Open the checkpoint for the initial configuration
31 open_checkpoint $implDir/$updateName/${topModuleName}_route_design.dcp
32
33 # Source any required .tcl files if they exist
34 foreach tclFile $tclFiles {
35 if {[file exists $tclFile]} {
36 source $tclFile
37 }
38 }
39
40 # Any constraints specific to bitstream generation can be added here or
41 # in the user created .xdc files.
42 # This may include but not be limited to the following constraints.
43 # set_property CONFIG_VOLTAGE <I/O voltage on the config bank> [current_design]
44 # set_property CFGBVS <GND | VCC> [current_design]
45 # set_property CONFIG_MODE <BPI16 | SPIx4> [current_design]
46
47 ###############################################################################
48 # Flash Programming Example Settings: Uncomment or modify as required by your
49 # design.
50 ###############################################################################
51 # SPI Flash Programming
52 set_property CONFIG_MODE SPIx4 [current_design]
53 set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
54 set_property BITSTREAM.CONFIG.CONFIGRATE 9 [current_design]
55 set_property CFGBVS GND [current_design]
56 set_property CONFIG_VOLTAGE 1.8 [current_design]
57
58 # BPI Flash Programming
59 #set_property CONFIG_MODE BPI16 [current_design]
60 #set_property BITSTREAM.CONFIG.BPI_SYNC_MODE Type1 [current_design]
61 #set_property BITSTREAM.CONFIG.CONFIGRATE 9 [current_design]
62 #set_property CFGBVS <GND | VCC> [current_design]
63 #set_property CONFIG_VOLTAGE <voltage> [current_design]
64
65
66 # Generate Tandem PCIe Bitstreams
67 if { [lsearch -exact $bitstreamTypes "TandemPCIe"] >= 0 } {
68 set_property HD.OVERRIDE_PERSIST False [current_design]
69 set_property HD.TANDEM_BITSTREAMS Separate [current_design]
70 write_bitstream -force -bin_file -file ${outputPrefix}_tpcie > ${outputPrefix}_tpcie_write_bitstream.log
71 # Generate Flash Files Example. This must be updated to match your board and flash settings.
72 ###############################################################################
73 # Flash Programming Example Settings: Modify as required by your design.
74 ###############################################################################
75 write_cfgmem -force -format mcs -interface spix4 -size 256 -loadbit "up 0x0 ${outputPrefix}_tpcie_tandem1.bit" ${outputPrefix}_tpcie_tandem1.mcs
76 }
77
78 # Generate a Tandem PROM Bitstream
79 if { [lsearch -exact $bitstreamTypes "TandemPROM"] >= 0 } {
80 set_property HD.OVERRIDE_PERSIST False [current_design]
81 set_property HD.TANDEM_BITSTREAMS Combined [current_design]
82 write_bitstream -force -bin_file -file ${outputPrefix}_tprom > ${outputPrefix}_tprom_write_bitstream.log
83 # Generate Flash Files Example. This must be updated to match your board and flash settings.
84 ###############################################################################
85 # Flash Programming Example Settings: Modify as required by your design.
86 ###############################################################################
87 write_cfgmem -force -format mcs -interface spix4 -size 256 -loadbit "up 0x0 ${outputPrefix}_tpcie_tandem1.bit" ${outputPrefix}_tpcie_tandem1.mcs
88 }
89
90 # Generate update region PR Only Bitstreams
91 if { [lsearch -exact $bitstreamTypes "PR"] >= 0 && [lsearch -exact $bitstreamTypes "TandemPCIe"] < 0 && [lsearch -exact $bitstreamTypes "TandemPROM"] < 0 } {
92 set_property HD.OVERRIDE_PERSIST False [current_design]
93 set_property HD.TANDEM_BITSTREAMS None [current_design]
94 write_bitstream -force -cell [get_cells $updateInstName] -bin_file -file ${outputPrefix}_update_region_partial > ${outputPrefix}_update_region_partial_write_bitstream.log
95 }
96
97 # Error and Message Reporting
98 set warningCount [get_msg_config -severity {Warning} -count]
99 set criticalCount [get_msg_config -severity {Critical Warning} -count]
100 set errorCount [get_msg_config -severity {Error} -count]
101 puts "# HD INFO: Bitstream generation for $updateName completed with $errorCount Errors, $criticalCount Critical Warnings, and $warningCount Warnings.\n"
102 set fp [open $runSummary a]
103 puts $fp "Bitstream generation for $updateName completed with $errorCount Errors, $criticalCount Critical Warnings, and $warningCount Warnings at [clock format [clock seconds]]."
104 close $fp
105
106 close_project
107 return "$errorCount $criticalCount $warningCount"
108}
static_synth.tcl
1
2# Setup of additional variables
3
4###############################################################################
5# This script demonstrates how to synthesize the static portion of the example
6# design for a Tandem with Field Updates design.
7###############################################################################
8
9# Create the output directory and delete the previously generated files.
10file mkdir $synthDir
11file delete -force $synthDir/$topModuleName
12file mkdir $synthDir/$topModuleName
13
14puts "# HD INFO: Generating a blackbox module for $updateModuleName"
15
16# Generate a blackbox module for the update module by performing a search and
17# replace on the update top module file. This inserts "(* black_box *)" before the module declaration.
18set updateTopBlackboxFile "$synthDir/$topModuleName/[file rootname [file tail $updateTopFile]]_blackbox.v"
19set inFile [open $updateTopFile r]
20set outFile [open $updateTopBlackboxFile w]
21while {[gets $inFile lineIn] != -1} {
22 # Match a string "<whitespace>module<whitespace>moduleName>"
23 [regsub -line [subst -nocommands {^[ \t]*module[ \t]*${updateModuleName}}] $lineIn [subst -nocommands {(* black_box *) module ${updateModuleName}}] lineOut]
24 puts $outFile $lineOut
25}
26close $inFile
27close $outFile
28
29puts "# HD INFO: Running synthesis for module $topModuleName"
30
31# Create a project and add the required static synthesis files.
32create_project -in_memory -part $part
33set_property BOARD_PART xilinx.com:kcu1500:part0:1.2 [current_project]
34# Add the required static files.
35add_files $projDir/imports/xilinx_dma_pcie_ep.sv
36
37add_files $projDir/imports/xilinx_pcie_xdma_ref_board.xdc
38
39add_files $projDir/$projName.srcs/sources_1/ip/$ipName/xdma_0_board.xdc
40
41add_files $updateTopBlackboxFile
42# At this point the Out-of-Context IP module checkpoint can be used or the IP source can be used directly.
43if {[file exists $projDir/$projName.srcs/sources_1/ip/$ipName.xcix]} {
44 # Add the IP .xcix file if it exists.
45 add_files $projDir/$projName.srcs/sources_1/ip/$ipName.xcix
46 # Generate the IP .dcp file if required and it doesn't exist
47 if {[get_property generate_synth_checkpoint [get_files $projDir/$projName.srcs/sources_1/ip/$ipName.xcix]]} {
48 if {[get_files -quiet $projDir/$projName.srcs/sources_1/ip/$ipName/$ipName.dcp] == {}} {
49 synth_ip [get_files $projDir/$projName.srcs/sources_1/ip/$ipName.xcix] > $synthDir/$topModuleName/${ipName}_ooc_synth.log
50 }
51 }
52} else {
53 # Add the IP .xci file if the .xcix does not exist.
54 add_files $projDir/$projName.srcs/sources_1/ip/$ipName/$ipName.xci
55 # Generate the IP .dcp file if required and it doesn't exist
56 if {[get_property generate_synth_checkpoint [get_files $projDir/$projName.srcs/sources_1/ip/$ipName/$ipName.xci]]} {
57 if {![file exists $projDir/$projName.srcs/sources_1/ip/$ipName/$ipName.dcp]} {
58 synth_ip [get_files $projDir/$projName.srcs/sources_1/ip/$ipName/$ipName.xci] > $synthDir/$topModuleName/${ipName}_ooc_synth.log
59 }
60 }
61}
62
63# Downgrade DRC related to unconnected BSCAN ports. These are intentionally left uconnected.
64# Messages not related to these 12 BSCAN ports should be addressed appropriately
65set_msg_config -id {Synth 8-4442} -new_severity {Warning}
66
67# Run Synthesis on the static portion of the Tandem with Field Updates design and generate a post-synthesis checkpoint for the netlist.
68update_compile_order -fileset sources_1
69synth_design -flatten_hierarchy rebuilt -no_iobuf -top $topModuleName -part $part > $synthDir/$topModuleName/${topModuleName}_synth_design.log
70# Write the post_sysnthesis .dcp for use in later parts of the flow.
71write_checkpoint $synthDir/$topModuleName/${topModuleName}_synth.dcp
72
73# Error and Message Reporting
74set warningCount [get_msg_config -severity {Warning} -count]
75set criticalCount [get_msg_config -severity {Critical Warning} -count]
76set errorCount [get_msg_config -severity {Error} -count]
77puts "# HD INFO: Synthesis completed for Static with $errorCount Errors, $criticalCount Critical Warnings, and $warningCount Warnings.\n"
78set fp [open $runSummary a]
79puts $fp "Synthesis completed for Static with $errorCount Errors, $criticalCount Critical Warnings, and $warningCount Warnings at [clock format [clock seconds]]."
80close $fp
81
82# close the in-memory project.
83close_project
84return "$errorCount $criticalCount $warningCount"
update_ver1_impl.tcl
1
2# Setup of additional variables
3set updateName $updateVer1Name
4
5###############################################################################
6# This script runs implementation for a configuration of a Tandem with Field
7# Update design. This script is dependent on already having run synthesis for
8# the static design and this version of the update module. This script will
9# generate a place, routed, and LOC'ed static netlist used in implementation runs for subsequent field updates.
10# Note: This should be the most complex update design (if known) to improve the timing result of subsequent update runs.
11###############################################################################
12
13# Create the output directory and remove previously generated files.
14file mkdir $implDir
15file delete -force $implDir/$updateName
16file mkdir $implDir/$updateName
17
18puts "# HD INFO: Running implementation for configuration $updateName"
19
20# Create an in-memory project
21create_project -in_memory -part $part
22
23# Read in the synthesized static netlist
24add_files $synthDir/$topModuleName/${topModuleName}_synth.dcp
25link_design -mode default -part $part -top $topModuleName
26
27# Source any required .tcl files if they exist
28foreach tclFile $tclFiles {
29 if {[file exists $tclFile]} {
30 source $tclFile
31 }
32}
33
34# Read in this version of the update checkpoint and associated constraints.
35set_property HD.RECONFIGURABLE 1 [get_cells $updateInstName]
36read_checkpoint -cell $updateInstName $synthDir/$updateName/${updateModuleName}_synth.dcp -strict
37
38read_xdc $projDir/imports/xilinx_pcie_xdma_ref_board.xdc
39read_xdc $projDir/imports/${ipName}_tandem.xdc
40
41read_xdc $projDir/$projName.srcs/sources_1/ip/$ipName/xdma_0_board.xdc
42
43# Add additional properties that might be necessary
44
45# Write out a post link design checkpoint for this update of the Tandem with Field Update design.
46write_checkpoint -force $implDir/$updateName/${topModuleName}_link_design.dcp
47
48# Run the desired implementation steps. Additional implementation steps and
49# options can be added here as desired. A checkpoint is written after each step for convenience.
50opt_design > $implDir/$updateName/${topModuleName}_opt_design.log
51# Add the tool inserted dbg_hub instance to stage1 main pblock if it exists.
52if {[get_cells -quiet dbg_hub] != ""} {
53 set_property HD.TANDEM_IP_PBLOCK Stage1_Main [get_cells -quiet dbg_hub]
54}
55# Add the tool inserted dbg_hub clock buffer to stage1 config IO pblock if it exists.
56if {[get_cells -quiet -hierarchical -filter { PRIMITIVE_TYPE =~ CLOCK.*.* && NAME =~ "dbg_hub/*" }] != ""} {
57 set_property HD.TANDEM_IP_PBLOCK Stage1_Config_IO [get_cells -quiet -hierarchical -filter { PRIMITIVE_TYPE =~ CLOCK.*.* && NAME =~ "dbg_hub/*" }]
58}
59# Add the tool inserted xvc_vsec clock buffer to stage1 config IO pblock if it exists.
60if {[get_cells -quiet -hierarchical -filter { PRIMITIVE_TYPE =~ CLOCK.*.* && NAME =~ "xdma_0_support_i/xvc_vsec_i/*" }] != ""} {
61 set_property HD.TANDEM_IP_PBLOCK Stage1_Config_IO [get_cells -quiet -hierarchical -filter { PRIMITIVE_TYPE =~ CLOCK.*.* && NAME =~ "xdma_0_support_i/xvc_vsec_i/*" }]
62}
63write_checkpoint -force $implDir/$updateName/${topModuleName}_opt_design.dcp
64place_design > $implDir/$updateName/${topModuleName}_place_design.log
65write_checkpoint -force $implDir/$updateName/${topModuleName}_place_design.dcp
66route_design > $implDir/$updateName/${topModuleName}_route_design.log
67write_checkpoint -force $implDir/$updateName/${topModuleName}_route_design.dcp
68
69# Generate a timing report for convenience.
70report_timing_summary -warn_on_violation -file $implDir/$updateName/report_timing_summary.rpt
71
72# Generate a placed, routed, and LOC'ed update of the static netlist Blackbox the update module to remove it from the design.
73update_design -cell $updateInstName -black_box
74# Lock the placement and routing of the static portion of the design.
75lock_design -level routing
76# Generate a static checkpoint that will be used during the generation of all Update implementation runs.
77write_checkpoint -force $implDir/$updateName/${topModuleName}_static_routed.dcp
78
79# Error and Message Reporting
80set warningCount [get_msg_config -severity {Warning} -count]
81set criticalCount [get_msg_config -severity {Critical Warning} -count]
82set errorCount [get_msg_config -severity {Error} -count]
83puts "# HD INFO: Implementation for $updateName completed with $errorCount Errors, $criticalCount Critical Warnings, and $warningCount Warnings.\n"
84set fp [open $runSummary a]
85puts $fp "Implementation for $updateName completed with $errorCount Errors, $criticalCount Critical Warnings, and $warningCount Warnings at [clock format [clock seconds]]."
86close $fp
87
88# Close the in-memory project.
89close_project
90return "$errorCount $criticalCount $warningCount"
update_ver1_synth.tcl
1
2# Setup of additional variables
3set updateName $updateVer1Name
4
5###############################################################################
6# This script demonstrates how to synthesize the out-of-context, update module
7# that will be used for a Tandem with Field Updates design. This file is for
8# update version 1 which should be the most complex version of the design.
9###############################################################################
10
11# Create the output directory and delete the previously generated files.
12file mkdir $synthDir
13file delete -force $synthDir/$updateName
14file mkdir $synthDir/$updateName
15
16puts "# HD INFO: Running synthesis for module $updateName"
17
18# Create a synthesis project
19create_project -in_memory -part $part
20set_property BOARD_PART xilinx.com:kcu1500:part0:1.2 [current_project]
21# Add the required source files for this version of the update module.
22# This includes all files necessary for compiling this version of the update
23# module. This should be updated as desired for your application.
24add_files $projDir/imports/xdma_app.v
25# Add the blk_mem_gen_0 IP in the form it is found.
26if {[file exists $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0.xcix]} {
27 # Add the IP .xcix file if it exists.
28 add_files $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0.xcix
29 # Generate the IP .dcp file if required and it doesn't exist
30 if {[get_property generate_synth_checkpoint [get_files $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0.xcix]]} {
31 if {[get_files -quiet $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0/blk_mem_gen_0.dcp] == {}} {
32 synth_ip [get_files $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0.xcix] > $synthDir/$topModuleName/blk_mem_gen_0_ooc_synth.log
33 }
34 }
35} else {
36 # Add the IP .xci file if the .xcix does not exist.
37 add_files $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0/blk_mem_gen_0.xci
38 # Generate the IP .dcp file if required and it doesn't exist
39 if {[get_property generate_synth_checkpoint [get_files $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0/blk_mem_gen_0.xci]]} {
40 if {![file exists $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0/blk_mem_gen_0.dcp]} {
41 synth_ip [get_files $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0/blk_mem_gen_0.xci] > $synthDir/$topModuleName/blk_mem_gen_0_ooc_synth.log
42 }
43 }
44}
45
46
47# Add in the ILA core
48# Generate the IP if needed.
49if {[file exists $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.xcix]} {
50 # Add the IP .xcix file if it exists.
51 add_files $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.xcix
52 # Generate the IP .dcp file if required and it doesn't exist
53 if {[get_property generate_synth_checkpoint [get_files $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.xcix]]} {
54 if {[get_files -quiet $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.dcp] == {}} {
55 synth_ip [get_files $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.xcix] > $synthDir/$topModuleName/user_app_ila_ooc_synth.log
56 }
57 }
58} else {
59 # Add the IP .xci file if the .xcix does not exist.
60 add_files $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.xci
61 # Generate the IP .dcp file if required and it doesn't exist
62 if {[get_property generate_synth_checkpoint [get_files $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.xci]]} {
63 if {![file exists $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.dcp]} {
64 synth_ip [get_files $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.xci] > $synthDir/$topModuleName/user_app_ila_ooc_synth.log
65 }
66 }
67}
68
69# Run out-of-context synthesis on this version of the update module.
70update_compile_order -fileset sources_1
71synth_design -mode out_of_context -flatten_hierarchy rebuilt -top $updateModuleName -part $part > $synthDir/$updateName/${updateModuleName}_synth_design.log
72# Create the synthesized checkpoint for this version of the update module.
73write_checkpoint -force $synthDir/$updateName/${updateModuleName}_synth.dcp
74
75# Error and Message Reporting
76set warningCount [get_msg_config -severity {Warning} -count]
77set criticalCount [get_msg_config -severity {Critical Warning} -count]
78set errorCount [get_msg_config -severity {Error} -count]
79puts "# HD INFO: Synthesis completed for $updateName with $errorCount Errors, $criticalCount Critical Warnings, and $warningCount Warnings.\n"
80set fp [open $runSummary a]
81puts $fp "Synthesis completed for $updateName with $errorCount Errors, $criticalCount Critical Warnings, and $warningCount Warnings at [clock format [clock seconds]]."
82close $fp
83
84# Close the in memory project that was created.
85close_project
86return "$errorCount $criticalCount $warningCount"
update_ver2_impl.tcl
1
2# Setup of additional variables
3set updateName $updateVer2Name
4
5###############################################################################
6# This script runs implementation for a configuration of a Tandem with Field
7# Update design. This script is dependent on already having run synthesis for
8# this version of the update module and having generated a place, routed, and
9# LOC'ed .dcp of the static netlist. This file must be replicated for
10# additional versions of the update module.
11###############################################################################
12
13# Create the output directory and remove previously generated files.
14file mkdir $implDir
15file delete -force $implDir/$updateName
16file mkdir $implDir/$updateName
17
18puts "# HD INFO: Running implementation for configuration $updateName"
19
20# Create an in-memory project
21create_project -in_memory -part $part
22
23# Read in the placed, routed, and LOC'ed static netlist
24add_files $implDir/$updateVer1Name/${topModuleName}_static_routed.dcp
25link_design -mode default -part $part -top $topModuleName
26
27# Source any required .tcl files if they exist
28foreach tclFile $tclFiles {
29 if {[file exists $tclFile]} {
30 source $tclFile
31 }
32}
33
34# Read in this version of update checkpoint and associated constraints.
35read_checkpoint -cell $updateInstName $synthDir/$updateName/${updateModuleName}_synth.dcp -strict
36read_xdc $projDir/imports/xilinx_pcie_xdma_ref_board.xdc
37read_xdc $projDir/imports/${ipName}_tandem.xdc
38
39read_xdc $projDir/$projName.srcs/sources_1/ip/$ipName/xdma_0_board.xdc
40
41
42# Add additional properties that might be necessary
43
44# Write out a post link design checkpoint for this update of the Tandem with Field Update design.
45write_checkpoint -force $implDir/$updateName/${topModuleName}_link_design.dcp
46
47# Run the desired implementation steps. Additional implementation steps and
48# options can be added here as desired. A checkpoint is written after each step for convenience.
49opt_design > $implDir/$updateName/${topModuleName}_opt_design.log
50write_checkpoint -force $implDir/$updateName/${topModuleName}_opt_design.dcp
51place_design > $implDir/$updateName/${topModuleName}_place_design.log
52write_checkpoint -force $implDir/$updateName/${topModuleName}_place_design.dcp
53route_design > $implDir/$updateName/${topModuleName}_route_design.log
54write_checkpoint -force $implDir/$updateName/${topModuleName}_route_design.dcp
55
56# Generate a timing report for convenience.
57report_timing_summary -warn_on_violation -file $implDir/$updateName/report_timing_summary.rpt
58
59# Error and Message Reporting
60set warningCount [get_msg_config -severity {Warning} -count]
61set criticalCount [get_msg_config -severity {Critical Warning} -count]
62set errorCount [get_msg_config -severity {Error} -count]
63puts "# HD INFO: Implementation for $updateName completed with $errorCount Errors, $criticalCount Critical Warnings, and $warningCount Warnings.\n"
64set fp [open $runSummary a]
65puts $fp "Implementation for $updateName completed with $errorCount Errors, $criticalCount Critical Warnings, and $warningCount Warnings at [clock format [clock seconds]]."
66close $fp
67
68# Close the in-memory project.
69close_project
70return "$errorCount $criticalCount $warningCount"
update_ver2_synth.tcl
1
2# Setup of additional variables
3set updateName $updateVer2Name
4
5###############################################################################
6# This script demonstrates how to synthesize the out-of-context, update module
7# that will be used for a Tandem with Field Updates design. This file should be
8# replicated for additional versions of the update module.
9###############################################################################
10
11# Create the output directory and delete the previously generated files.
12file mkdir $synthDir
13file delete -force $synthDir/$updateName
14file mkdir $synthDir/$updateName
15
16puts "# HD INFO: Running synthesis for module $updateName"
17
18# Create a synthesis project
19create_project -in_memory -part $part
20set_property BOARD_PART xilinx.com:kcu1500:part0:1.2 [current_project]
21# Add the required source files for this version of the update module.
22# This includes all files necessary for compiling this version of the update
23# module. This should be updated as desired for your application.
24add_files $projDir/imports/xdma_app.v
25# Add the blk_mem_gen_0 IP in the form it is found.
26if {[file exists $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0.xcix]} {
27 # Add the IP .xcix file if it exists.
28 add_files $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0.xcix
29 # Generate the IP .dcp file if required and it doesn't exist
30 if {[get_property generate_synth_checkpoint [get_files $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0.xcix]]} {
31 if {[get_files -quiet $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0/blk_mem_gen_0.dcp] == {}} {
32 synth_ip [get_files $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0.xcix] > $synthDir/$topModuleName/blk_mem_gen_0_ooc_synth.log
33 }
34 }
35} else {
36 # Add the IP .xci file if the .xcix does not exist.
37 add_files $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0/blk_mem_gen_0.xci
38 # Generate the IP .dcp file if required and it doesn't exist
39 if {[get_property generate_synth_checkpoint [get_files $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0/blk_mem_gen_0.xci]]} {
40 if {![file exists $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0/blk_mem_gen_0.dcp]} {
41 synth_ip [get_files $projDir/$projName.srcs/sources_1/ip/blk_mem_gen_0/blk_mem_gen_0.xci] > $synthDir/$topModuleName/blk_mem_gen_0_ooc_synth.log
42 }
43 }
44}
45
46
47# Add in the ILA core
48# Generate the IP if needed.
49if {[file exists $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.xcix]} {
50 # Add the IP .xcix file if it exists.
51 add_files $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.xcix
52 # Generate the IP .dcp file if required and it doesn't exist
53 if {[get_property generate_synth_checkpoint [get_files $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.xcix]]} {
54 if {[get_files -quiet $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.dcp] == {}} {
55 synth_ip [get_files $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.xcix] > $synthDir/$topModuleName/user_app_ila_ooc_synth.log
56 }
57 }
58} else {
59 # Add the IP .xci file if the .xcix does not exist.
60 add_files $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.xci
61 # Generate the IP .dcp file if required and it doesn't exist
62 if {[get_property generate_synth_checkpoint [get_files $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.xci]]} {
63 if {![file exists $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.dcp]} {
64 synth_ip [get_files $projDir/$projName.srcs/sources_1/ip/user_app_ila/user_app_ila.xci] > $synthDir/$topModuleName/user_app_ila_ooc_synth.log
65 }
66 }
67}
68
69# Run out-of-context synthesis on this version of the update module.
70update_compile_order -fileset sources_1
71synth_design -mode out_of_context -flatten_hierarchy rebuilt -top $updateModuleName -part $part > $synthDir/$updateName/${updateModuleName}_synth_design.log
72# Create the synthesized checkpoint for this version of the update module.
73write_checkpoint -force $synthDir/$updateName/${updateModuleName}_synth.dcp
74
75# Error and Message Reporting
76set warningCount [get_msg_config -severity {Warning} -count]
77set criticalCount [get_msg_config -severity {Critical Warning} -count]
78set errorCount [get_msg_config -severity {Error} -count]
79puts "# HD INFO: Synthesis completed for $updateName with $errorCount Errors, $criticalCount Critical Warnings, and $warningCount Warnings.\n"
80set fp [open $runSummary a]
81puts $fp "Synthesis completed for $updateName with $errorCount Errors, $criticalCount Critical Warnings, and $warningCount Warnings at [clock format [clock seconds]]."
82close $fp
83
84# Close the in memory project that was created.
85close_project
86return "$errorCount $criticalCount $warningCount"
xdma_0_tandem.xdc
1
2###############################################################################
3# Enable Tandem PCIE Bitstream Generation
4###############################################################################
5# Uncomment the following two constraints to generate Tandem PCIe Bitstreams.
6# Without these constraints Tandem PROM bitstreams will be generated.
7#set_property HD.OVERRIDE_PERSIST FALSE [current_design]
8#set_property HD.TANDEM_BITSTREAMS Separate [current_design]
9
10###############################################################################
11# Tandem Pblocks for the Example Design:
12# All Stage1 primitives must be in a PBlock that is aligned to a Programmable
13# Unit boundary. This PBlock must have exclude placement to prevent other
14# primitives from being included in the region boundary.
15###############################################################################
16
17## Since the reset pin is within the config IO Bank, add the Reset IOB to the
18## config IO Bank pblock that is already created by the solution IP
19set_property HD.TANDEM_IP_PBLOCK Stage1_Config_IO [get_cells sys_reset_n_ibuf]
20
21## If the reset pin is NOT in the config bank the reset pin IOB must also have a pblock
22## The following commands might be helpful in achiving this. For US devices you must
23## disable dedicated PCIe reset routing to move the reset pin to a new location.
24## Create the PBlock for the IO bank containing the system reset pin
25#set stage1Pblock [create_pblock resetPblock]
26## Resize the PBlock for the IO bank containing the system reset pin
27#resize_pblock $stage1Pblock -add {IOB_X2Y52:IOB_X2Y103 \
28# SLICE_X96Y60:SLICE_X96Y119 \
29# MMCME3_ADV_X2Y1 \
30# PLLE3_ADV_X2Y2:PLLE3_ADV_X2Y3 \
31# PLL_SELECT_SITE_X2Y8:PLL_SELECT_SITE_X2Y15 \
32# BITSLICE_CONTROL_X2Y8:BITSLICE_CONTROL_X2Y15 \
33# BITSLICE_TX_X2Y8:BITSLICE_TX_X2Y15 \
34# BITSLICE_RX_TX_X2Y52:BITSLICE_RX_TX_X2Y103 \
35# XIPHY_FEEDTHROUGH_X8Y1:XIPHY_FEEDTHROUGH_X11Y1 \
36# RIU_OR_X2Y4:RIU_OR_X2Y7 \
37#}
38## Map the reset IOB to the reset_iob pblock using the Stage1_IO tag.
39#set_property HD.TANDEM_IP_PBLOCK Stage1_IO $stage1Pblock
40#set_property HD.TANDEM_IP_PBLOCK Stage1_IO [get_cells sys_reset_n_ibuf]
41
42# Since the LEDs are within the stage1 config IO Bank, add the LED IOBs to the
43# config IO Bank pblock that is already created by the solution IP and mark them as stage1.
44# set_property HD.TANDEM_IP_PBLOCK Stage1_Config_IO [get_cells {led_0_obuf led_1_obuf led_2_obuf led_3_obuf}]
45
46
47# Since the refclk is within the range of the main pblock, add the refclk IBUF and its BUFG_GT to the main pblock.
48set_property HD.TANDEM_IP_PBLOCK Stage1_Main [get_cells refclk_ibuf]
49
50###############################################################################
51# The following constraints can be used to demonstrate Tandem with
52# Field-Updates. For this example the user_application will be setup
53# for field updates. The required steps are below to enable this.
54###############################################################################
55## Store the sites for existing stage1 pblocks so that they can be removed from the Update Region Pblock.
56set existingStage1Sites [get_sites -of_objects [get_pblocks -filter { \
57 NAME =~ *_xdma_0_pcie3_ip_Stage1_main || \
58 NAME =~ *_Stage1_cfgiob \
59}]]
60
61#####################################################################################################
62## Set the module as reconfigurable
63set_property HD.RECONFIGURABLE 1 [get_cells xdma_app_i]
64## Create the Update Region PBlock
65set updatePblock [create_pblock -quiet update_region]
66## Add the Update Region module to the Update Region pblock
67## Note: One and only one module/cell can be added to this pblock
68add_cells_to_pblock -quiet $updatePblock [get_cells xdma_app_i]
69## Resize the Update Region PBlock to include all available programmable units
70resize_pblock -quiet $updatePblock -add {SLICE_X0Y0:SLICE_X142Y599 \
71 DSP48E2_X0Y0:DSP48E2_X22Y239 \
72 RAMB18_X0Y0:RAMB18_X17Y239 \
73 RAMB36_X0Y0:RAMB36_X17Y119 \
74 GTHE3_CHANNEL_X0Y8:GTHE3_CHANNEL_X0Y39 GTHE3_CHANNEL_X1Y0:GTHE3_CHANNEL_X1Y39 \
75 GTHE3_COMMON_X0Y2:GTHE3_COMMON_X0Y9 GTHE3_COMMON_X1Y0:GTHE3_COMMON_X1Y9 \
76 PCIE_3_1_X0Y0:PCIE_3_1_X0Y5 \
77 MMCME3_ADV_X0Y0:MMCME3_ADV_X2Y9 \
78 PLLE3_ADV_X0Y0:PLLE3_ADV_X2Y19 \
79 RIU_OR_X0Y0:RIU_OR_X2Y39 \
80 PLL_SELECT_SITE_X0Y0:PLL_SELECT_SITE_X2Y79 \
81 BITSLICE_CONTROL_X0Y0:BITSLICE_CONTROL_X2Y79 \
82 BITSLICE_TX_X0Y0:BITSLICE_TX_X2Y79 \
83 BITSLICE_RX_TX_X0Y0:BITSLICE_RX_TX_X2Y519 \
84 IOB_X0Y0:IOB_X2Y519 \
85 XIPHY_FEEDTHROUGH_X0Y0:XIPHY_FEEDTHROUGH_X11Y9 \
86 SYSMONE1_X0Y0:SYSMONE1_X0Y1 \
87 LAGUNA_X0Y120:LAGUNA_X23Y479 \
88}
89## Resize the Update Region PBlock to remove sites adjacent to the config sites
90resize_pblock -quiet $updatePblock -remove {SLICE_X129Y360:SLICE_X130Y419}
91## Remove Config site programmable units from the update region. These are not reconfigurable.
92resize_pblock $updatePblock -remove [get_sites -of_objects [get_tiles -pu -of_objects [get_tiles -of_objects [get_sites -filter {SITE_TYPE == "CONFIG_SITE"}]]]]
93## Resize the Update PBlock to remove sites already associated with Stage1
94resize_pblock -quiet $updatePblock -remove $existingStage1Sites
95## Resize the Update PBlock to remove sites for the XDMA logic. this logic will
96## be part of stage2 for the initial configuration, but will NOT be reconfigured during an "Update".
97resize_pblock -quiet $updatePblock -remove "SLICE_X97Y0:SLICE_X125Y149 SLICE_X126Y60:SLICE_X128Y149 \
98 DSP48E2_X18Y0:DSP48E2_X22Y59 \
99 RAMB18_X12Y0:RAMB18_X15Y59 RAMB18_X16Y24:RAMB18_X16Y59 \
100 RAMB36_X12Y0:RAMB36_X15Y29 RAMB36_X16Y12:RAMB36_X16Y29 \
101"
102
103## Increase the partition pin density near the PCIe core. This is done to improve timing
104## accross the PR boundary. If the design is unable to partition pin and/or routing
105## congestion, this number should be decreased.
106#set_property PARTPIN_SPREADING 8 [get_pblocks update_region]
107
108## Set the Part Pin Range to improve the placement of the RM Partition Pins.
109set_property HD.PARTPIN_RANGE -quiet {SLICE_X80Y0:SLICE_X96Y59 SLICE_X80Y60:SLICE_X95Y119 SLICE_X80Y120:SLICE_X96Y149} [get_pins -of_objects [get_cells xdma_app_i]]
110
111## Set a location constraint on logic directly connected to the partition pins. This will
112## aid the placer to ensure the connected logic is placed next to the partition pins and
113## improve timing.
114set stage2LogicPblock [create_pblock pcie_interface_logic]
115resize_pblock -quiet $stage2LogicPblock -add {SLICE_X80Y0:SLICE_X96Y59 SLICE_X80Y60:SLICE_X95Y119 SLICE_X80Y120:SLICE_X96Y149 \
116 DSP48E2_X15Y0:DSP48E2_X17Y59 \
117 RAMB18_X10Y0:RAMB18_X11Y59 \
118 RAMB36_X10Y0:RAMB36_X11Y29 \
119}
120## This constraint will need to be modified for your application and desired
121## connectivity and design
122add_cells_to_pblock $stage2LogicPblock [get_cells -hierarchical -filter { \
123 PARENT == xdma_app_i && \
124 ( !IS_PRIMITIVE || \
125 ( IS_PRIMITIVE && \
126 PRIMITIVE_LEVEL != INTERNAL && \
127 PRIMITIVE_TYPE != OTHERS.others.GND && \
128 PRIMITIVE_TYPE != OTHERS.others.VCC ))}]
xilinx_pcie_xdma_ref_board.xdc
1
2#########################################################################################################################
3# User Constraints
4#########################################################################################################################
5###############################################################################
6# User Time Names / User Time Groups / Time Specs
7###############################################################################
8create_clock -period 10.000 -name sys_clk [get_ports sys_clk_p]
9set_false_path -from [get_ports sys_rst_n]
10#set_false_path -through [get_pins xdma_0_i/inst/pcie3_ip_i/inst/xdma_0_pcie3_ip_pcie3_uscale_top_inst/pcie3_uscale_wrapper_inst/PCIE_3_1_inst/CFGMAX*]
11#set_false_path -through [get_nets xdma_0_i/inst/cfg_max*]
12
13###############################################################################
14# User Physical Constraints
15###############################################################################
16###############################################################################
17# Pinout and Related I/O Constraints
18###############################################################################
19
20
21#set_property LOC [get_package_pins -filter {PIN_FUNC == IO_T3U_N12_PERSTN0_65}] [get_ports sys_rst_n]
22set_property PACKAGE_PIN AR26 [get_ports sys_rst_n]
23set_property PULLUP true [get_ports sys_rst_n]
24set_property IOSTANDARD LVCMOS18 [get_ports sys_rst_n]
25
26set_property CONFIG_VOLTAGE 1.8 [current_design]
27set_property CFGBVS GND [current_design]
28
29##### REFCLK_IBUF###########
30#set_property LOC GTHE3_COMMON_X1Y1 [get_cells refclk_ibuf]
31set_property LOC AT11 [get_ports sys_clk_p]
32##### LED's ###########
33set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
34######################################################################
35#
36set_false_path -to [get_pins -hier *sync_reg[0]/D]
37#