如要将IP添加为LabVIEW项目的组件级IP(CLIP)项,IP必须具备相关声明XML文件,以定义用于FPGA模块的I/O。声明XML文件用于描述IP的元素。FPGA模块使用该文件添加IP至LabVIEW项目。

有关使用XML的信息,请参阅www.w3.org/XML

创建声明文件

注: NI强烈建议使用配置组件级IP向导创建此声明文件,这样可规避常见的错误。下表包含了配置组件级IP向导生成的XML标记的参考信息。

声明文件的第一行包含XML的版本信息。所有文件内部的标记都必须用<CLIPDeclaration>标记括起来,如下所示:

<?xml version="1.0"?> <CLIPDeclaration Name="My VHDL IP"> <!-- Insert tags here --> </CLIPDeclaration>

下表定义了可用于声明文件的XML标识符。
标签必需?父项标识符带父标签的标签数量说明
CLIPDeclaration所有CLIP定义都必须包含在该标签中。名称为必需属性,用于定义LabVIEW显示的剪辑片段的名称。
FormatVersionCLIPDeclaration1定义要在该声明XML文件中使用的CLIP标签的版本。将FormatVersion设置为4.3。
DescriptionCLIPDeclaration1描述该CLIP,并在组件级IP属性对话框的常规页面上显示该描述。
SupportedDeviceFamiliesCLIPDeclaration1

使用逗号分隔的列表定义支持的设备系列。LabVIEW可识别下列设备:Spartan-3、Spartan-3E、Spartan-6、Virtex-II、Virtex-II Pro、Virtex-5、Virtex-6、Virtex-7、Zynq、Kintex-7。

也可指定“无限制”以支持所有系列。

CompatibleCLIPSocketListCLIPDeclaration1对于套接字CLIP,指定CLIP支持的套接字。
SocketCompatibleCLIPSocketList1或更大对于套接字CLIP,指定兼容的套接字名称。
TopLevelEntityAndArchitectureCLIPDeclaration1指定顶层综合和仿真VHDL文件的实体和架构。
SynthesisModelTopLevelEntityAndArchitecture1指定顶层综合VHDL文件的实体和架构名称。
EntitySynthesisModel1指定顶层综合VHDL文件的实体名称。
ArchitectureSynthesisModel1指定顶层综合VHDL文件的架构名称。
SimulationModelTopLevelEntityAndArchitecture1指定顶层仿真VHDL文件的实体和架构名称。
EntitySimulationModel1指定顶层仿真VHDL文件的实体名称。
ArchitectureSimulationModel1指定顶层仿真VHDL文件的架构名称。
InterfaceListCLIPDeclaration1包含一个或多个接口定义。不能嵌套接口列表。只能定义一个接口列表。
InterfaceInterfaceList1或更大定义可用于CLIP或其中提供的所有I/O、时钟和其他信号。不能嵌套接口。名称是必需的属性。
InterfaceTypeInterface1

定义接口在FPGA中的连接位置。可输入下列值之一:

  • LabVIEW:接口连接至FPGA模块。所有I/O和时钟均可作为FPGA模块中的资源使用。
  • Socket:接口直接连接到终端定义的套接字。I/O和时钟在FPGA模块中不可用作资源。
  • Fabric:接口直接连接至FPGA。I/O和时钟在FPGA中不可用作资源。
SignalListInterface1包含一个或多个信号定义。不能嵌套SignalList标签。
SignalSignalList1或更大

定义可用于CLIP或其中提供的信号。必须包含FPGA模块用于显示的Name属性。Name属性必须以字母开头,且只能包含英文字母和数字、句点、短划线和下划线。默认值为您在Signal标签中声明的HDLName。

要将信号组织到CLIP IO层次结构中,请在名称中使用句点作为分隔符。例如,名为A.Input和A.Output的信号将在项目中创建一个名为A的文件夹,其中包含信号Input和Output。

DescriptionSignal1指定信号的说明信息。
HDLNameSignal0或1定义VHDL文件中I/O实体的名称。端口的HDLName必须与顶层综合文件中的名称相同。
RequiredClockDomainSignal0或1如果未指定必需的时钟域,用户可使用任意时钟域的I/O。RequiredClockDomain的值必须与CLIP XML文件其他位置中定义的时钟信号名称匹配。如需指定时钟域,程序框图中使用此CLIP I/O的任意I/O节点必须位于指定的时钟域内。如I/O节点为错误的时钟域,LabVIEW在FPGA VI编译过程中将返回错误。
LeaveUndrivenIfNotUsedInLabVIEWSignal0或1指定当VHDL具有默认值时,不驱动顶层文件中的信号。否则,LabVIEW在代码生成期间驱动全零信号。
HDLTypeSignal1指定信号的VHDL端口类型。仅支持std_logicstd_logic_vector。复位和时钟信号只能是std_logic
UseInLabVIEWSingleCycleTimedLoopSignal0或1有效值为:NotAllowed、Allowed、Required。默认值为Allowed。该标签指定如何在单周期定时循环中使用CLIP I/O。在单周期定时循环内,可确保在每个时钟沿锁定数据。如CLIP中的IP希望在每个时钟沿接收值,可将此标签设置为Required,以强制LabVIEW执行此要求。
SpecificTargetClockSignal0或1指定一个可用的FPGA终端基本时钟作为CLIP时钟所需的时钟连接。该标签的值为特定FPGA终端基本时钟的名称。FPGA终端基本时钟必须存在于项目中,并且必须满足声明XML文件中指定的所需频率范围。
DataTypeSignal1

指定信号的数据类型。如信号是用于LabVIEW接口,数据类型还将定义LabVIEW显示此信号的方式。如果信号用于套接字接口,则数据类型必须与套接字中信号的数据类型匹配。使用下列子标签之一定义数据类型:

  • <Boolean />
  • <U8 />
  • <U16 />
  • <U32 />
  • <U64 />
  • <I8 />
  • <I16 />
  • <I32 />
  • <I64 />
  • <FXP>...</FXP>
  • <Array>...</Array>
BooleanDataType或Array查看父标签指定VHDL代码使用std_logic。*
U8DataType查看父标签指定VHDL代码使用std_logic_vector(7 downto 0)。*
U16DataType查看父标签指定VHDL代码使用std_logic_vector(15 downto 0)。*
U32DataType查看父标签指定VHDL代码使用std_logic_vector(31 downto 0)。*
U64DataType查看父标签指定VHDL代码使用std_logic_vector(63 downto 0)。*
I8DataType查看父标签指定VHDL代码使用std_logic_vector(7 downto 0)。*
I16DataType查看父标签指定VHDL代码使用std_logic_vector(15 downto 0)。*
I32DataType查看父标签指定VHDL代码使用std_logic_vector(31 downto 0)。*
I64DataType查看父标签指定VHDL代码使用std_logic_vector(63 downto 0)。*
FXPDataType查看父标签指定VHDL代码使用std_logic_vector(x downto 0),其中x的范围为[0,63]。*
WordLengthFXP0或1指定FXP信号的字长。支持的范围为[1, 64]。
IntegerWordLengthFXP0或1指定FXP信号的整数字长。支持的范围为[-2048, 2047]。
UnsignedFXP0或1如FXP信号为无符号信号,则添加该标签。如果FXP信号带符号,请勿添加该标签。
ArrayDataType查看父标签创建布尔数据类型的数组。必须在Array标签中包含Boolean标签。只能使用带套接字CLIP的Array标签。
SizeArray1指定数组的大小。
DirectionSignal0或1

指示CLIP是否接收或发送有关信号的数据。您可以选择以下值:

  • ToCLIP:用于CLIP接收有关信号的数据。ToCLIP为默认值。
  • FromCLIP:用于CLIP发送有关信号的数据。
  • Bidirectional:用于双向线路。双向支持仅适用于套接字CLIP。
SignalTypeSignal0或1

表示信号的类型。您可以选择以下值:

  • 数据:指定信号为标准I/O数据信号。如未指定SignalType标签的值,则默认值为数据。
  • 时钟:信号为时钟时使用。使用时钟时,必须使用DataType标签内的<Boolean/>标签。
  • 重置:在信号为连接FPGA VI的全局异步重置信号的复位信号时使用;请参考“创建或获取IP”主题中的重置VHDL代码部分。FPGA VI的全局异步重置信号为高电平有效。仅当InterfaceType标签设置为Fabric时可使用重置信号。重置信号必须为ToCLIP信号。
  • 时钟状态:时钟状态信号有两种类型:SourceClockReadyDerivedClocksValid。对于带有SupportDerivedClocks标签的每个FromCLIP时钟,需要上述两种信号。上述信号与生成衍生时钟的LabVIEW FPGA时钟电路一起实现握手接口。
FreqInHertzSignal1定义信号的频率范围。如果SignalType设置为时钟,则需要FreqInHertz标签。
MaxFreqInHertz1以SI表示法定义支持的最大频率。如果包含FreqInHertz标签,则需要Max标签。**
MinFreqInHertz0或1以SI表示法定义支持的最小频率。如未指定Min,则Min值等于Max值。**
ImplementationListCLIPDeclaration1定义要包含的CLIP文件。CLIP文件不必位于同一目录中。只能包含一个ImplementationList标签。
PathImplementationList1或更大

定义编译IP所需的实现文件所在的路径或目录。目录的路径不包括子目录,因此必须在单独的标签中定义子目录。Path标签采用相对于XML文件的路径或绝对路径。

定义子目录的相对路径时,连续使用两个句点(..)表示当前工作目录的父目录,使用一个句点(.)表示当前工作目录,使用斜杠(/或\)进入下一个子目录。例如,使用../folderA/fileB.vhd指向folderA目录中的fileB.vhd文件,该目录与磁盘上包含XML文件的文件夹处于同一层次结构。使用/folderA/fileB.vhd指向folderA目录中的fileB.vhd文件,该目录与磁盘上的XML文件处于同一层次结构。LabVIEW返回无效路径错误。除非XML文件中不存在其他文件或目录标签,否则对于空目录的路径,LabVIEW不会返回错误。名称是该标签的必需属性,且必须与综合文件名相同。

MD5Path1检测综合文件是否被修改。
TopLevelPath0或1指示当前综合文件是否为顶层文件。顶层综合文件可以是一个且只有一个VHDL文件。
SimulationFileListPath1定义特定综合文件的仿真文件。一个综合文件只能包含一个<SimulationFileList>标签。当<SimulationModel>存在时,需要该标签。
PathSimulationFileList1或更大

定义编译IP所需的仿真文件所在的路径或目录。目录的路径不包括子目录,因此必须在单独的标签中定义子目录。Path标签采用相对于XML文件的路径或绝对路径。

定义子目录的相对路径时,连续使用两个句点(..)表示当前工作目录的父目录,使用一个句点(.)表示当前工作目录,使用斜杠(/或\)进入下一个子目录。例如,使用../folderA/fileB.vhd指向folderA目录中的fileB.vhd文件,该目录与磁盘上包含XML文件的文件夹处于同一层次结构。使用/folderA/fileB.vhd指向folderA目录中的fileB.vhd文件,该目录与磁盘上的XML文件处于同一层次结构。LabVIEW返回无效路径错误。除非XML文件中不存在其他文件或目录标签,否则LabVIEW不会返回空目录路径错误。当<SimulationModelType>为用户定义时,<SimulationModelType>下需要该标签。仿真文件名应指定为该标签的名称属性。名称是必需的属性。

SimulationModelTypeSimulationFileList1定义特定综合文件的仿真模型类型。选项包括:与综合相同用户定义从仿真模型中排除。对于非网表文件,默认选项为与综合相同。对于网表文件,默认选项为从仿真模型中排除,不支持与综合相同
NumberOfDCMsNeededCLIPDeclaration0或1在FPGA上保留一定数量的数字时钟管理器(DCM)。LabVIEW通过该数值在编译时判定代码是否初始化过多DCM。
NumberOfMMCMsNeededCLIPDeclaration0或1在FPGA上保留一定数量的混合模式时钟管理器(MMCM)。LabVIEW通过该数值在编译时判定代码是否初始化过多MMCM。
NumberOfBufGsNeededCLIPDeclaration0或1在FPGA上保留一定数量的BUFG。LabVIEW通过该数值在编译时判定代码是否初始化过多全部时钟。
DutyCycleRangeSignal0或1定义时钟支持的最大和最小占空比。默认值为50%。值后包含%符号。
PercentInHighMaxDutyCycleRange0或1定义时钟保持高电平的最长时间(百分比)。默认值为50%。值后包含%符号。**
PercentInHighMinDutyCycleRange0或1定义时钟保持高电平的最短时间(百分比)。默认值为50%。值后包含%符号。**
AccuracyInPPM

在ToCLIP中:否

在FromCLIP中:是

Signal0或1指定CLIP时钟的精度(单位为PPM)。**
JitterInPicoSeconds

ToCLIP中:否

FromCLIP中:是

Signal0或1指定CLIP时钟的抖动(单位为皮秒)。**
GenericListCLIPDeclaration1指定VHDL类属的信息。
GenericGenericList1或更大指定类属名称作为该标签的属性。
DescriptionGeneric1指定类属的说明。在组件级IP属性的类属和语法检查页面的消息框内显示说明信息。
GenericTypeGeneric1指定顶层综合文件中的类属类型。
DefaultValueGeneric1指定类属的默认值。该值来自顶层综合文件。可在组件级IP属性对话框的类属和语法检查页或CLIP向导中指定其他值来覆盖默认值
SupportDerivedClocksSignal1每个支持衍生时钟的FromCLIP时钟都需要该标签。如存在该标签,还需要SourceClockReadyHDLNameDerivedClocksValidHDLName标签。该标签仅对FromCLIP时钟信号有效。
SourceClockReadyHDLNameSignal1每个带有SupportDerivedClocks标签的FromCLIP时钟都需要该标签。这是FromCLIP方向上时钟状态类型信号的HDL名称。该HDL名称的存在表示FromCLIP时钟有效且自由运行。一旦置为有效,该信号应保持有效,直到DerivedClocksValid信号置为有效。该信号置为无效表示FromCLIP时钟即将关闭。该信号置为无效后,在DerivedClocksValidHDLName信号置为无效之前,不应关闭FromCLIP时钟。
DerivedClocksValidHDLNameSignal1

每个带有SupportDerivedClocks标签的FromCLIP时钟都需要该标签。这是ToCLIP方向上时钟状态类型信号的HDL名称。该HDL名称的存在表示LabVIEW FPGA时钟生成电路生成并由该FromCLIP时钟供源的所有衍生时钟均有效且自由运行。该信号有两个用途:

  • 该信号置为无效向CLIP表明可以安全地禁用FromCLIP时钟。
  • 该信号向CLIP指示生成的衍生时钟何时有效。

每个支持衍生时钟的外部时钟都需要该标签。

SupportsGating

ToCLIP:是

FromCLIP中:否

Signal1每个ToCLIP门控时钟都需要该标签,以支持从单周期定时循环中删除隐式启用信号。
CyclesRequiredBeforeAsynchronousResetClears

ToCLIP:是

FromCLIP中:否

Signal1定义异步复位置为有效时该时钟必须发生的时钟边沿数。当程序生成规范被配置为允许移除隐式启用信号时,该CLIP值必须为0。因为时钟开始运行前,异步重置先置为有效,然后置为无效。如时钟与外部时钟配合使用且重置过程中可能停止,该值必须为0。如CLIP在异步重置过程中需要运行时钟(例如,用于使用内置FIFO的CLIP),且设计要求移除隐式启用信号。请考虑创建本地异步重置,且当本地重置有效时,阻止程序框图访问CLIP或来自CLIP的访问。
ReadBeforePlacePath1该标签可应用于一个或多个XDC文件。XDC文件包含Xilinx Vivado工具链读取的约束。Xilinx Vivado工具链将在调用Place进程之前读取带有ReadBeforePlace标签的XDC文件,而就在调用Synthesis进程之前,Xilinx Vivado工具链将读取不带ReadBeforePlace标签的XDC文件。该标签在LabVIEW FPGA 2022及更高版本(CLIP FormatVersion 4.3及更高版本)中可用。该标签不会由向导设置,应手动设置。该标签在包含Xilinx ISE工具链读取的约束的UCF文件中不可用。

*该标签不包含值,因此您可以在打开标签中使用正斜杠或创建空的打开和关闭标签。例如,可以使用<Boolean /><Boolean> </Boolean>来表示布尔数据类型。

**在CLIP参数中输入数值时,必须使用句点作为小数点分隔符。如使用逗号作为小数点分隔符,LabVIEW将返回XML错误。

使用模式减少错误

XML模式文件是将XML文件限制为特定格式的定义文件。编写XML文件时,可以向大多数XML编辑工具添加模式文件。为用户定义CLIP创建CLIP声明文件时,可使用labview\FPGA\CLIP\Schema目录下的CLIPDeclaration.xsd模式文件最大限度地减少语法和格式错误。

注: CLIPDeclaration.xsd模式文件仅可用于用户定义CLIP。关于插槽CLIP模式的详细信息,见FPGA终端硬件文档。
注: NI强烈建议使用配置组件级IP向导,以避免声明XML文件中出现错误。

处理不同目录下的多个执行文件

用户可指定多个文件实现CLIP代码。在以下范例中,待执行的CLIP具有5个文件保存在下列目录结构中:

foo/myCLIPDeclaration.xml

foo/myTop.vhd

foo/mySide.vhd

foo/components/myLeftSubComponent.vhd

foo/components/myMiddleSubComponent.vhd

foo/components/myRightSubComponent.vhd

myCLIPDeclaration.xml中可使用相对路径表明所有5个VHDL文件均为CLIP的必需文件。在XML文件中包含下列代码,指定foo目录下的两个VHDL文件和components中的所有文件均为必需文件。

<ImplementationList>

<Path Name="./myTop.vhd">

<TopLevel/></Path>

<Path Name="./mySide.vhd"></Path>

<Path Name="./components"></Path>

(

<Path Name="./components/myLeftSubComponent.vhd"></Path>

<Path Name="./components/myMiddleSubComponent.vhd"></Path>

<Path Name="./components/myRightSubComponent.vhd"></Path>

)

</ImplementationList>

请参考CLIP教程第2部分:定义CLIP接口的范例。