cuter

【答网友问】Vivado IP核剖析

0
阅读(10904)

Vivado IP核剖析

正像我之前所说的,较XPSIP核而言,Vivado IP核在创建、打包、使用等各方面都更加简单便捷,同样的Vivado IP核抛弃了以往复杂的IP核文件组织模式,仅使用一个component.xml文件对IP核进行描述。

下面,我们就看一下这个component.xml如何替代*.mpd*.pao等文件的。

1IP文件夹

首先,打开一个IP核的文件夹,这里我挑的是用HLS生成的PWM IP核,其他IP核如,Vivado自带IPVivado打包的IP,也是类似的。


从上图中可以看出,文件和文件夹的命名都具有一定的自明性,基本上能看出来是什么作用。constraints存放的是约束文件、doc存放的是描述文档、drivers存放的是IP核的软件驱动程序、hdl存放的是IP核用到的hdl文件。压缩包是供VivadoIP Catalog导入用的,Vivado自带IP和使用Vivado打包的IP貌似是没有这个压缩包的。有兴趣的话可以依次打开这些文件和文件夹,看看内容。

2component.xml分析

在分析xml文件之前,先回归一下XPSIP核的重要描述文件及其作用。

1) mpd(Microprocessor Peripheral Defination,外设定义)文件:mpd文件定义了该IP和外部互联的接口,以及需要外部指定的参数。

2) pao(Peripheral Analyze Order,外设分析顺序)文件,可以看出pao文件定义了需要综合的源文件以及使用什么样的顺序进行综合。

3) BBD(Black-Box Definition)文件,用来管理你用到的黑盒部分的硬件网表文件,指明了这些网标文件的存放位置。

4) hdl目录里面有所有的设计文件,包括.v.vhd

5) 其他,如doc目录

Vivadompdpao等描述文件消失了,但是对应的描述内容都放到了component.xml中,具体情况,看一下代码:

首先给出component.xml的整体结构图,从图中可以看出,2级节点有:

vendorlibrarynameversionbusInterfacesmemoryMapsmode1fileSetsdescriptionparametersvendorExtensions

其中,vendorlibrarynameversion就是所谓的VLNV,是一个IPID,具有唯一性。

busInterfacesparametersmodel三个节点(有可能不止这三个)能够代替mpd文件。展开看一下:

busInterfaces,该节点描述IP和使用的总线所包含的信号,由于AXI-Lite总线信号较多,这里就不展开代码了。

parameters,该节点描述了IP核使用的参数

<spirit:parameters>
	<spirit:parameter>
		<spirit:name>C_S_AXI_PWM_IO_ADDR_WIDTH</spirit:name>
		<spirit:displayName>Address width</spirit:displayName>
		<spirit:value spirit:format="long"
				spirit:resolve="user"
				spirit:id="PARAM_VALUE.C_S_AXI_PWM_IO_ADDR_WIDTH"
				spirit:order="2"
				spirit:configGroups="1 S_AXI_PWM_IO_(AXI4Lite_Slave_Interface)"
				spirit:minimum="5"
				spirit:maximum="32">5</spirit:value>
	</spirit:parameter>
	<spirit:parameter>
		<spirit:name>Component_Name</spirit:name>
		<spirit:value spirit:resolve="user"
				spirit:id="PARAM_VALUE.Component_Name"
				spirit:order="1">pwm_v1_0</spirit:value>
	</spirit:parameter>
</spirit:parameters>

model下描述某个端口的子节点,包括端口方向等属性

<spirit:port>
	<spirit:name>out_r</spirit:name>
	<spirit:wire>
	   <spirit:direction>out</spirit:direction>
	   <spirit:vector>
		  <spirit:left spirit:format="long"
						spirit:resolve="immediate">0</spirit:left>
		  <spirit:right spirit:format="long"
						spirit:resolve="immediate">0</spirit:right>
	   </spirit:vector>
	   <spirit:wireTypeDefs>
		  <spirit:wireTypeDef>
				 <spirit:typeName>std_logic_vector</spirit:typeName>
				 <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
				 <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
		  </spirit:wireTypeDef>
	   </spirit:wireTypeDefs>
	</spirit:wire>
</spirit:port>

fileSets节点:描述了各种情况下所用到的资源文件

综合时用到的文件:

<spirit:fileSet>
	 <spirit:name>xilinx_verilogsynthesis_view_fileset</spirit:name>
	 <spirit:file>
			<spirit:name>constraints/pwm_ooc.xdc</spirit:name>
			<spirit:userFileType>xdc</spirit:userFileType>
			<spirit:userFileType>USED_IN_out_of_context</spirit:userFileType>
			<spirit:userFileType>USED_IN_synthesis</spirit:userFileType>
			<spirit:userFileType>USED_IN_implementation</spirit:userFileType>
	 </spirit:file>
	 <spirit:file>
			<spirit:name>hdl/verilog/pwm.v</spirit:name>
			<spirit:fileType>verilogSource</spirit:fileType>
	 </spirit:file>
	 <spirit:file>
			<spirit:name>hdl/verilog/pwm_ap_rst_if.v</spirit:name>
			<spirit:fileType>verilogSource</spirit:fileType>
	 </spirit:file>
	 <spirit:file>
			<spirit:name>hdl/verilog/pwm_pwm_io_if.v</spirit:name>
			<spirit:fileType>verilogSource</spirit:fileType>
	 </spirit:file>
	 <spirit:file>
			<spirit:name>hdl/verilog/pwm_top.v</spirit:name>
			<spirit:fileType>verilogSource</spirit:fileType>
			<spirit:userFileType>CHECKSUM_b1913739</spirit:userFileType>
	 </spirit:file>
</spirit:fileSet>

软件驱动程序的文件

<spirit:fileSet>
	 <spirit:name>xilinx_softwaredriver_view_fileset</spirit:name>
	 <spirit:file>
			<spirit:name>drivers/pwm_top_v1_0/data/pwm_top.mdd</spirit:name>
			<spirit:userFileType>mdd</spirit:userFileType>
	 </spirit:file>
	 <spirit:file>
			<spirit:name>drivers/pwm_top_v1_0/data/pwm_top.tcl</spirit:name>
			<spirit:fileType>tclSource</spirit:fileType>
	 </spirit:file>
	 <spirit:file>
			<spirit:name>drivers/pwm_top_v1_0/src/Makefile</spirit:name>
			<spirit:fileType>unknown</spirit:fileType>
	 </spirit:file>
	 <spirit:file>
			<spirit:name>drivers/pwm_top_v1_0/src/xpwm.c</spirit:name>
			<spirit:fileType>cSource</spirit:fileType>
	 </spirit:file>
	 <spirit:file>
			<spirit:name>drivers/pwm_top_v1_0/src/xpwm.h</spirit:name>
			<spirit:fileType>cSource</spirit:fileType>
	 </spirit:file>
	 <spirit:file>
			<spirit:name>drivers/pwm_top_v1_0/src/xpwm_hw.h</spirit:name>
			<spirit:fileType>cSource</spirit:fileType>
	 </spirit:file>
	 <spirit:file>
			<spirit:name>drivers/pwm_top_v1_0/src/xpwm_linux.c</spirit:name>
			<spirit:fileType>cSource</spirit:fileType>
	 </spirit:file>
	 <spirit:file>
			<spirit:name>drivers/pwm_top_v1_0/src/xpwm_sinit.c</spirit:name>
			<spirit:fileType>cSource</spirit:fileType>
	 </spirit:file>
</spirit:fileSet>

xml中使用的是相对路径,解析时,会到IP核文件夹下查找相应资源。

3、总结

各个节点就不再一一分析了,总而言之,Vivado利用一个XML文件对IP核的接口、总线、资源文件等各方面进行了描述。在使用IP核的过程中,我们不再需要手动去更改一些文件,所以不像在XPS中那样需要对IP核的文件组织必须要有好的理解才行。不过既然有网友提出这个问题,我就写一下吧,希望能够有所帮助。


版权声明:

本文由博主“cuter”发布。欢迎转载,但不得擅自更改博文内容,也不得用于任何盈利目的。转载时不得删除作者简介和版权声明。如有盗用而不说明出处引起的版权纠纷,由盗用者自负。

博客官方地址:

ChinaAET:http://blog.chinaaet.com/cuter521

EDN China: http://bbs.ednchina.com/BLOG_cuter521_356737.HTM