Life hack to automate the creation of a project in Vivado.
video source: real time capture of script execution on my laptop
Many projects have repeatable steps at the setup stage. This script helps to automate this. It creates a new project with your typical starting blocks.
Before calling the script, close the currect project, if one is open.
If you just opened Vivado, you are good to go. The Tcl prompt is at the bottom of the startup screen.
Set these two properties using that prompt. The Vivado project will be created with that name and location you define here.
set projectname myProject set projectroot D:/users/jancu/Documents/elektronica/xilinx/zynq/prj
TCL script:
gist: https://gist.github.com/jancumps/a10e0395fe37c70e8d90fdba1ebae948#file-create_project-tcl
create_project $projectname $projectroot/$projectname -part xc7z020clg400-1 set_property board_part tul.com.tw:pynq-z2:part0:1.0 [current_project] set_property target_language VHDL [current_project] create_bd_design "design_1" startgroup create_bd_cell -type ip -vlnv xilinx.com:ip:processing_system7:5.5 processing_system7_0 endgroup startgroup create_bd_cell -type ip -vlnv xilinx.com:ip:proc_sys_reset:5.0 proc_sys_reset_0 endgroup startgroup create_bd_cell -type ip -vlnv xilinx.com:ip:axi_interconnect:2.1 axi_interconnect_0 endgroup startgroup set_property -dict [list CONFIG.NUM_MI {1}] [get_bd_cells axi_interconnect_0] endgroup startgroup create_bd_cell -type ip -vlnv xilinx.com:ip:axi_gpio:2.0 axi_gpio_0 endgroup apply_bd_automation -rule xilinx.com:bd_rule:processing_system7 -config {make_external "FIXED_IO, DDR" apply_board_preset "1" Master "Disable" Slave "Disable" } [get_bd_cells processing_system7_0] connect_bd_net [get_bd_pins processing_system7_0/FCLK_CLK0] [get_bd_pins processing_system7_0/M_AXI_GP0_ACLK] connect_bd_net [get_bd_pins axi_interconnect_0/ACLK] [get_bd_pins processing_system7_0/FCLK_CLK0] connect_bd_net [get_bd_pins axi_interconnect_0/S00_ACLK] [get_bd_pins processing_system7_0/FCLK_CLK0] connect_bd_net [get_bd_pins axi_interconnect_0/M00_ACLK] [get_bd_pins processing_system7_0/FCLK_CLK0] connect_bd_net [get_bd_pins proc_sys_reset_0/slowest_sync_clk] [get_bd_pins processing_system7_0/FCLK_CLK0] connect_bd_net [get_bd_pins processing_system7_0/FCLK_RESET0_N] [get_bd_pins proc_sys_reset_0/ext_reset_in] connect_bd_net [get_bd_pins proc_sys_reset_0/interconnect_aresetn] [get_bd_pins axi_interconnect_0/ARESETN] connect_bd_net [get_bd_pins proc_sys_reset_0/peripheral_aresetn] [get_bd_pins axi_interconnect_0/S00_ARESETN] connect_bd_net [get_bd_pins axi_interconnect_0/M00_ARESETN] [get_bd_pins proc_sys_reset_0/peripheral_aresetn] connect_bd_net [get_bd_pins axi_gpio_0/s_axi_aclk] [get_bd_pins processing_system7_0/FCLK_CLK0] connect_bd_net [get_bd_pins axi_gpio_0/s_axi_aresetn] [get_bd_pins proc_sys_reset_0/peripheral_aresetn] connect_bd_intf_net [get_bd_intf_pins axi_gpio_0/S_AXI] -boundary_type upper [get_bd_intf_pins axi_interconnect_0/M00_AXI] connect_bd_intf_net [get_bd_intf_pins processing_system7_0/M_AXI_GP0] -boundary_type upper [get_bd_intf_pins axi_interconnect_0/S00_AXI] save_bd_design
image source: screen capture of the block design after the script finished
The script
- sets the correct device (for my Pynq-Z2. If you have another board, create one project manually and harvest the steps from the Tcl log)
- creates a project and a block design
- adds the Zynq PS and applies board presets
- adds reset and AXI IPs
- connects and saves.
- is tested with Vivado 2020.2, but doesn't use version specific constructs.
voila.
Top Comments