xilinx vivado:从tcl中读取组件.xml文件到项目中。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xilinx vivado:从tcl中读取组件.xml文件到项目中。相关的知识,希望对你有一定的参考价值。
假设,我有一个vivado项目,我的设置如下。
- 创建一个模块设计
- 实例化了一些IP核,并将它们连接在一起。
- 从模块设计中导出我想要的IO。
- 在层次结构浏览器中点击区块设计,并创建了一个HDL包装器。
- 用IP打包器创建一个 "component.xml "文件,代表打包后的IP核。 (Tool->Package IP->打包当前项目)
现在我想在另一个vivado项目中使用这个打包好的IP核,并让它显示在IP集成器的 "用户 "库下。 有没有办法把这个 "component.xml "文件从另一个vivado项目导入到当前项目中? 最好用tcl来导入?
我的vivado块设计是这样的。
答案
答案是你将当前项目的 "设置ip_repos_path属性 "指向另一个项目的 "component.xml "文件所在的目录,然后你发出tcl命令: update_ip_catalog。 这将导致打包后的核心显示在IP integrator的 "用户 "标签下。
下面是一个vivado的tcl脚本,它可以执行这个任务,假设你以前使用过create_project或open_project命令。
proc tool_add_xact {file_component_xml} {
puts "
=> add_xact: $file_component_xml"
global current_xml_name
global current_xml_vlnv
if {! [file exists $file_component_xml]} {
puts "ERROR: file doesn't exist: $file_component_xml"
exit 1;
}
if {! [regexp {component.xml$} $file_component_xml tmp]} {
puts "ERROR: wrong file name ($file). This proc only reads component.xml files created by IP Packager."
exit 1;
}
set xml_dir [file dirname $file_component_xml]
set cfs [current_fileset]
set old_path [get_property ip_repo_paths $cfs]
set new_path [concat $old_path $xml_dir]
puts " xml_dir: ($xml_dir)"
puts " add_repo:($new_path)"
set_property ip_repo_paths $new_path $cfs
puts " update_ip_catalog"
update_ip_catalog
puts " open_core"
set core [ipx::open_core -set_current false $file_component_xml]
set vlnv [get_property vlnv $core]
set tidbits [split $vlnv ":"]
puts " vlnv: $vlnv"
puts " close_core"
ipx::unload_core $core
set current_xml_name [lindex $tidbits 2]
set current_xml_vlnv $vlnv
}
# Instantiate XACT IP
proc tool_add_core {args} {
puts "
=> add_core: $args"
global current_xml_name
global current_xml_vlnv
#flag defaults
set level 1
set inst ""
# Parse Flags
while {[llength $args]} {
set flag [lindex $args 0]
#puts "flag: ($flag)"
#puts "args: ($args)"
switch -glob $flag {
-level {
# Instantion Generation Level
set level [lindex $args 1]
set args [lrange $args 2 end]
puts "level:($level) args($args)"
} -inst {
# Override default instantation name
set autoname 0
set inst [lindex $args 1]
set args [lrange $args 2 end]
puts "inst:($inst) args($args)"
} -h* {
#help
puts "USAGE:"
puts " tool_add_core [flags] <component.xml>"
puts ""
puts "FLAGS:"
puts " -level 0 //Instantiate only"
puts " -level 1 //Instantiate + Generate Instantiation templates"
puts " -level 2 //Instantiate + Generate all"
puts " -level 3 //Instantiate + Synthesize"
puts " -inst <name> //set name of instance, default: ${corename}_1"
exit 1
} -* {
# unknown option
error "unknown option [lindex $args 0]"
} default break
}
}
#puts "args: ($args)"
# remaining argument is component.xml flag
set file_component_xml "$args"
puts "component_xml: $args"
# Add Packaged IP core, aka. "component.xml", to "IP Integator Library"
tool_add_xact $file_component_xml
if {$inst == ""} {
set module_ip "${current_xml_name}_1"
} else {
set module_ip "${inst}"
}
puts "-> level: $level"
puts "-> inst: $module_ip"
# Create XCI by instantiating component just added to "IP Integrator Library"
puts "-> create_ip -verbose -module_name $module_ip -vlnv $current_xml_vlnv"
create_ip
-verbose
-module_name $module_ip
-vlnv $current_xml_vlnv
set ip_obj [get_ips "${module_ip}"]
# Instantate only
if {$level == 0} {
return
}
# Instantiate + Generate Instantiation template only
if {$level == 1} {
puts "
-> generate_target {instantiation_template}"
#generate_target {instantiation_template} [get_files "${module_ip}.xci"]
generate_target {instantiation_template} $ip_obj
return
}
# Instantiate + Generate all
if {$level == 2} {
puts "
-> generate_target {all}"
generate_target {all} $ip_obj
return
}
# Instantiate + Generate all + Synthesize Core
if {$level == 3} {
puts "
-> generate_target {all}"
generate_target {all} $ip_obj
set run_name "${module_ip}_synth_1"
set run_jobs 8
puts "
-> synth_ip name:${run_name} jobs:${run_jobs}"
create_ip_run $ip_obj
launch_run -jobs $run_jobs $run_name
wait_on_run $run_name
return
}
error "unknown -level $level"
}
以上是关于xilinx vivado:从tcl中读取组件.xml文件到项目中。的主要内容,如果未能解决你的问题,请参考以下文章