| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- package require fileutil
- set project_name [lindex $argv 0]
- set part_name [lindex $argv 1]
- file delete -force tmp/$project_name.cache tmp/$project_name.gen tmp/$project_name.hw tmp/$project_name.ip_user_files tmp/$project_name.runs tmp/$project_name.sim tmp/$project_name.srcs tmp/$project_name.xpr
- create_project -part $part_name $project_name tmp
- set_property IP_REPO_PATHS tmp/cores [current_project]
- update_ip_catalog
- proc wire {name1 name2} {
- set port1 [get_bd_pins $name1]
- set port2 [get_bd_pins $name2]
- if {[llength $port1] == 1 && [llength $port2] == 1} {
- connect_bd_net $port1 $port2
- return
- }
- set port1 [get_bd_intf_pins $name1]
- set port2 [get_bd_intf_pins $name2]
- if {[llength $port1] == 1 && [llength $port2] == 1} {
- connect_bd_intf_net $port1 $port2
- return
- }
- error "** ERROR: can't connect $name1 and $name2"
- }
- proc cell {cell_vlnv cell_name {cell_props {}} {cell_ports {}}} {
- set cell [create_bd_cell -type ip -vlnv $cell_vlnv $cell_name]
- set prop_list {}
- foreach {prop_name prop_value} [uplevel 1 [list subst $cell_props]] {
- lappend prop_list CONFIG.$prop_name $prop_value
- }
- if {[llength $prop_list] > 1} {
- set_property -dict $prop_list $cell
- }
- foreach {local_name remote_name} [uplevel 1 [list subst $cell_ports]] {
- wire $cell_name/$local_name $remote_name
- }
- }
- proc module {module_name module_body {module_ports {}}} {
- set instance [current_bd_instance .]
- current_bd_instance [create_bd_cell -type hier $module_name]
- eval $module_body
- current_bd_instance $instance
- foreach {local_name remote_name} [uplevel 1 [list subst $module_ports]] {
- wire $module_name/$local_name $remote_name
- }
- }
- proc design {design_name design_body} {
- set design [current_bd_design]
- create_bd_design $design_name
- eval $design_body
- validate_bd_design
- save_bd_design
- current_bd_design $design
- }
- proc container {container_name container_designs {container_ports {}}} {
- set reference [lindex $container_designs 0]
- set container [create_bd_cell -type container -reference $reference $container_name]
- foreach {local_name remote_name} [uplevel 1 [list subst $container_ports]] {
- wire $container_name/$local_name $remote_name
- }
- set list {}
- foreach item $container_designs {
- lappend list $item.bd
- }
- set list [join $list :]
- set_property CONFIG.ENABLE_DFX true $container
- set_property CONFIG.LIST_SYNTH_BD $list $container
- set_property CONFIG.LIST_SIM_BD $list $container
- }
- proc addr {offset range port master} {
- set object [get_bd_intf_pins $port]
- set segment [get_bd_addr_segs -of_objects $object]
- set config [list Master $master Clk Auto]
- apply_bd_automation -rule xilinx.com:bd_rule:axi4 -config $config $object
- assign_bd_address -offset $offset -range $range $segment
- }
- create_bd_design system
- source cfg/ports.tcl
- source projects/$project_name/block_design.tcl
- rename wire {}
- rename cell {}
- rename module {}
- rename design {}
- rename container {}
- rename addr {}
- set system [get_files system.bd]
- set_property SYNTH_CHECKPOINT_MODE None $system
- generate_target all $system
- make_wrapper -files $system -top
- foreach ext {srcs gen} {
- set files [fileutil::findByPattern tmp/$project_name.$ext system_wrapper.v]
- if {[llength $files] > 0} {
- add_files -norecurse $files
- break
- }
- }
- set_property TOP system_wrapper [current_fileset]
- set files [glob -nocomplain cfg/*.mem projects/$project_name/*.v projects/$project_name/*.sv]
- if {[llength $files] > 0} {
- add_files -norecurse $files
- }
- set files [glob -nocomplain cfg/*.xdc projects/$project_name/*.xdc]
- if {[llength $files] > 0} {
- add_files -norecurse -fileset constrs_1 $files
- }
- set_property VERILOG_DEFINE {TOOL_VIVADO} [current_fileset]
- set_property STRATEGY Flow_PerfOptimized_high [get_runs synth_1]
- set_property STRATEGY Performance_ExploreWithRemap [get_runs impl_1]
- close_project
|