【问题标题】:xilinx vivado: read component.xml file into project from tclxilinx vivado:从 tcl 将 component.xml 文件读入项目
【发布时间】:2020-06-02 17:01:07
【问题描述】:

假设,我有一个 vivado 项目,我设置如下:

  1. 创建块设计。
  2. 实例化了一些 IP 内核,并将它们连接在一起
  3. 从模块设计中导出了我想要的 IO
  4. 在层次结构浏览器中单击块设计并创建 HDL 包装器
  5. 使用 IP 封装器创建了一个“component.xml”文件,表示封装的 IP 内核。 (工具->打包IP->打包当前工程)

现在我想在另一个 vivado 项目中使用这个打包的 IP 核,并让它显示在“用户”库下的 IP 集成器下。有没有办法将这个“component.xml”文件从另一个 vivado 项目导入到当前项目中?最好使用 tcl?

这是我的 vivado 模块设计的样子:

【问题讨论】:

    标签: verilog xilinx vivado


    【解决方案1】:

    答案是您“设置当前项目的 ip_repos_path 属性”以指向包含来自其他项目的“component.xml”文件的目录,然后发出 tcl 命令:update_ip_catalog。这将导致封装的内核显示在“用户”选项卡下的 IP 集成器中。

    这是一个执行此任务的 vivado tcl 脚本,假设您以前使用过 create_project 或 open_project 命令:

    proc tool_add_xact {file_component_xml} {
        puts "\n=> 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 "\n=> 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 "\n-> 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 "\n-> generate_target {all}"
            generate_target {all} $ip_obj
            return      
        }
    
        # Instantiate + Generate all + Synthesize Core
        if {$level == 3} {
            puts "\n-> generate_target {all}"
            generate_target {all} $ip_obj
    
            set run_name "${module_ip}_synth_1"
            set run_jobs 8
    
            puts "\n-> 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"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      相关资源
      最近更新 更多