《在Vivado下利用Tcl实现IP的高效管理.docx》由会员分享,可在线阅读,更多相关《在Vivado下利用Tcl实现IP的高效管理.docx(7页珍藏版)》请在第一文库网上搜索。
1、在Vivado下利用Tc1实现IP的高效管理在ViV理。下,有两种方式管理IP。一种是创建FPGA工程之后,在当前工程中选中IPCata1og,生成所需IP,这时相应的IP会被自动添加到当前工程中;另一种是利用ManageIP,创建独立的IP工程,缺省情况下,IP工程的名字为magaged_ip_project。在这个工程中生成所需要的IP,之后把IP添加到FPGA工程中。Xi1inX推荐使用第二种方法,尤其是设计中调用的IP较多时或者采用团队设计时。TCI作为脚本语言,在FPGA设计中被越来越广泛地使用。借助TCI可以完成很多图形界面操作所不能完成的工作,从而,可提高设计效率和设计自动化程度
2、。ViVado对TCI具有很好的支持,专门设置了TCIShe11(纯脚本模式)和TCIConso1e(图形界面模式)用于Te1脚本的输入和执行。本文介绍了如何利用Tc1脚本在ManageIP方式下实现对IP的高效管理。ManageIP的特点:(1) ViVado在ManageIP模式下只显示IPCata1og,便于直观地定制IP;(2) IP工程目录独立于FPGA工程目录,可独立管理并便于IP复用;(3)对IP采用OOC(Out-Of-Context)的综合方式,生成相应的匹P文件,添加到FPGA工程中,无需再次综合;与ISECoreGenerator的不同之处:(1) ISECoreGene
3、ratOr不同IP的生成文件会在同一目录下,而ViVadO下每个IP有独立的文件夹,该文件夹下包含了IP所有相关文件,这为IP复用提供了便利;(2) ISECoreGenerator生成的IP定制文件为.xco,Vivado生成IP的定制文件为.xci;(3) ISECoreGeneratOr生成的网表文件为.ngc,ViVadO生成的网表文件为.dcp,DCP不仅包含网表文件还包含约束文件;(4) ISECoreGeneratOr不支持TC1脚本,ViVado则支持TC1脚本;Vivado下IP生成文件:(1)用于综合的RT1文件和约束文件;(2)实例化模板文件;(3)行为级仿真文件;(4)
4、综合后的网表文件DCP;(5)用于第三方综合工具的StUb文件;(6)例子工程;生成文件是可以定制的,这可通过gencrate_target命令完成,同时,生成的文件也可以通过rcset_target被清除掉,如TCI脚本1所示。Tc1蒯本1生成IP文件,删除IP文件01generate_targetinstantiation_temp1ateget_ips-force02generate_targetSynthesisSimu1ationget_ipschar-fifo03generate_targeta11get_ipssine_1ow04reset-targetinstantiation
5、-temp1ateget_ipsb1k_mem05reset-targeta11get_ipssine_highVivado下每个对象都有自己的属性,这些属性可通过report_property显示。managed_ip_project的属性如图1所示。图中绿色线条标记了该工程所在目录;红色方框MANAGED_IP属性值为1,表明该工程为IP工程;蓝色方框是我们创建或修改IP工程饭置时最常用的一些属性。Tc1脚本2中第1行语句用于显示IP工程属性,第24行语句用于设置仿真工具、目标语言和显型号。set_property命令的第一个参数为属性名,第二个参数为属性值,第三个参数为属性所属对象。di
6、rciortstringtruF:/Vivado/maag*_ip_tb/ip_tb/angd_ip_projtctISj(Dboo11s0isReadok1tboo1fa1s0MAnAGEDIPb河fa1se1!TMEstringtru*AtnCd_ip_projctPARTpartf1sxc7k325tff900-2S1innJ1IORJABGVAGEenumfa1seMixed5OURCH_JNI_IIODHnumf1S4HonIARGEJuBGUAGEnumf1sVMD1AR6EI-SIMU1AI0Rstrin;04set-propertyPARTxc7k160tffg676-2cur
7、rent-project-(采用ViVadoManageIP创建IP工程后,可能会遇到以下情况:(1)软件版本升级,例如ViVad。由2013.4升级至2014.2;(2)芯片型号改变,例如芯片型号由XC7K325TFFG676-2变为XC7K160TFFG676-2;(3)A项目中的一些IP在B项目中也被使用,且这些IP参数配置完全相同。上述三种情况均可通过Tc1命令完成。第一种情况:软件版本升级假如用ViVado2013.4创建的IP工程,当软件版本升级至2014.2时,需要将IP重新生成。此时,若用ViVaeIo2014.2打开该工程会弹出如图2所示的对话框。选择图中蓝色方框标记的选项打
8、开工程,通过report_ip_status命令显示当前IP状况,如图3所示。u,O1derProjectVersionmThisprojectascrtdusnano1drvs1*bfVviItitstrx1yrcMnddthatyuc19thprojectfotcrtUNtkprojectintko14ArcMvFrjtcteIkasi11usura11sowcgind1u4izanyIPsusedbythdsi(nfrprsrvdpror1y.&“Q。itbtrMtMKica11y旬CrsStbcwrvrt)A”Gthrjctinr4MdyN乖吵,斗电虚叫syRmutVKttdytQ5t
9、tQ1Mtc11yvppr44Qhcwrtatvrnnprojctinr*fd“1cKH图2高版本软件打开低版本软件生成的IP工程时弹出的对话梅/图3中蓝色方框显示了IP处于锁定状态,可通过get_property查看ISJ0CKED属性确定;红色方框显示了IP当前版本号和建议升级到的新版本号。相应的TCI脚本如TC1脚本3所示。对处于锁定状态的IP可选择升级,这可通过Tc1脚本4完成指定IP的升级。Tc1脚本4可内嵌到Vivado中作为用户常用命令。Td脚本3查看IP状况和届性,01report-ip-status-nameip-status02get-proertyIS_1OCKEDget
10、_ipsc1k-coreTd属本4重新生成指定IP“01procregen-ipsmyips)02foreachip$myips03upgrade_ipget_ips$ip04de1ete_ip_run-quietget-ips$ip05setipnameget_propertyNAMEget_ips$ip06generate_targeta11$ip07create_ip_run$ip81aunch-run$ipname_synth_109wait_on_run$ipname)_synth_11)11第二种情况:芯片型号改变若芯片型号改变,首先要对旧型号芯片对应的工程做备份处理,这可通过ar
11、chive_project命令完成;然后修改芯片型号。相应的Tc1脚本如Tc1脚本5所示。完成这些操作之后,会发现IP处于锁定状态,此时可通过TC1脚本4对IP升级。Td哪本5工程备份,修改芯片型号,01archive_projectF:/iptest2/managed_ip_project.xpr.zip-force-inc1ude_config_settings02set_propertyPARTxc7k160tffg676-2current-,project第三种情况:A项目中的一些IP在B项目中也被使用,且这些IP参数配置完全相同在这种情况下,可将A项目中的IP导入到B项目的IP工程中
12、,这可通过import_ip命令完成,如TC1脚本6所示。ImPOrtjP的第一个参数为原始IP所在目录,第二个参数为该IP的新名字,缺省情况下与原始IP名一致。导入之后,可通过TC1脚本4重新生成IP。如前所述,Vivado下生成的IP都有独立的文件目录,在添加IP到VivadoFPGA工程中时,若采用图形界面方式就需要一个一个地浏览到IP所在文件目录,找到.xci文件,然后添加到工程中,如果调用的IP较多,显然这种方式不够高效。此时可用TCI脚本7所示的TCI命令找到所有IP相关文件,文件类型可以是XCi或dcp。该命令会返回完整的文件路径,如TeI脚本6中的文件路径。然后通过add.fi
13、1es命令将其添加到当前工程中。01pi:get_ip_fi1esip_1ocfi1e-typeip-prj-namemanaged_ip_project0203040506070809101112131415161718192021222324252627282930313233setip_1ocfCnorma1ize$ip1ocsettota1g1ob-nocomp1ain$ipIoc/*putsA11fi1esanddirshereare:njoin$tota1nseta11_dir1istseta11_dir_tai11istforeacrtota1_e$tota1iffi1eisdirectory$tota1e)!appenda11_dir$tota1eIappenda11_dir_tai1fi1etai1$tota1_eputs,IrepeatputsnA11dirsputsnIrepeatputs,A11dirss”temp.Xi1)2=whereare:njoin$a11_dirm20=mtai1name:njoin$a11_dir_tai1nsetip-dir1istforeacha11_dir_tai1_e$a11_dir_tai1ifstringequa1$a11_dir_tai1_e$ip_prj_nane=0&stringequ