| # Copyright (C) 2017-2020  The Project X-Ray Authors | 
 | # | 
 | # Use of this source code is governed by a ISC-style | 
 | # license that can be found in the LICENSE file or at | 
 | # https://opensource.org/licenses/ISC | 
 | # | 
 | # SPDX-License-Identifier: ISC | 
 | source $::env(XRAY_UTILS_DIR)/write_timing_info.tcl | 
 |  | 
 | proc create_design {design_name sig_mask verilogs} { | 
 |     create_project -part $::env(XRAY_PART) -force design_$design_name \ | 
 |             design_$design_name | 
 |  | 
 |     foreach src $verilogs { | 
 |         read_verilog $src | 
 |     } | 
 |     synth_design -verilog_define SIG_MASK=$sig_mask -top top | 
 |  | 
 |     create_clock -period 10.000 -name clk -waveform {0.000 5.000} [get_ports clk] | 
 |     set_property -dict "PACKAGE_PIN W5 IOSTANDARD LVCMOS33" [get_ports clk] | 
 |     set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_01) IOSTANDARD LVCMOS33" [get_ports stb] | 
 |     set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_02) IOSTANDARD LVCMOS33" [get_ports di] | 
 |     set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_03) IOSTANDARD LVCMOS33" [get_ports do] | 
 |  | 
 |     set_property CFGBVS VCCO [current_design] | 
 |     set_property CONFIG_VOLTAGE 3.3 [current_design] | 
 |     set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design] | 
 |  | 
 |     if { $design_name == "fanout_ex_0" } { | 
 |         set_property FIXED_ROUTE "{ CLBLL_LL_D CLBLL_LL_DMUX }" [get_nets the_net] | 
 |     } | 
 |  | 
 |     place_design | 
 |     route_design | 
 |  | 
 |     write_checkpoint -force design_$design_name.dcp | 
 |     write_bitstream -force design_$design_name.bit | 
 |     save_project_as -force design_$design_name.xpr | 
 | } | 
 |  | 
 | proc run_timing {design_name sig_mask verilogs} { | 
 |     set name ${design_name}_${sig_mask} | 
 |     create_design $name $sig_mask $verilogs | 
 |     write_timing_info timing_$name.json5 | 
 | } | 
 |  | 
 | run_timing $::env(DESIGN_NAME) $::env(ITER) $::env(VERILOGS) |