定义IP接口
- 更新时间2025-05-20
- 阅读时长20分钟
如要将IP添加为LabVIEW项目的组件级IP(CLIP)项,IP必须具备相关声明XML文件,以定义用于FPGA模块的I/O。声明XML文件用于描述IP的元素。FPGA模块使用该文件添加IP至LabVIEW项目。
有关使用XML的信息,请参阅www.w3.org/XML。
创建声明文件
声明文件的第一行包含XML的版本信息。所有文件内部的标记都必须用<CLIPDeclaration>标记括起来,如下所示:
<?xml version="1.0"?> <CLIPDeclaration Name="My VHDL IP"> <!-- Insert tags here --> </CLIPDeclaration>
| 标签 | 必需? | 父项标识符 | 带父标签的标签数量 | 说明 |
|---|---|---|---|---|
| CLIPDeclaration | 是 | — | — | 所有CLIP定义都必须包含在该标签中。名称为必需属性,用于定义LabVIEW显示的剪辑片段的名称。 |
| FormatVersion | 是 | CLIPDeclaration | 1 | 定义要在该声明XML文件中使用的CLIP标签的版本。将FormatVersion设置为4.3。 |
| Description | 否 | CLIPDeclaration | 1 | 描述该CLIP,并在组件级IP属性对话框的常规页面上显示该描述。 |
| SupportedDeviceFamilies | 否 | CLIPDeclaration | 1 | 使用逗号分隔的列表定义支持的设备系列。LabVIEW可识别下列设备:Spartan-3、Spartan-3E、Spartan-6、Virtex-II、Virtex-II Pro、Virtex-5、Virtex-6、Virtex-7、Zynq、Kintex-7。 也可指定“无限制”以支持所有系列。 |
| CompatibleCLIPSocketList | 否 | CLIPDeclaration | 1 | 对于套接字CLIP,指定CLIP支持的套接字。 |
| Socket | 是 | CompatibleCLIPSocketList | 1或更大 | 对于套接字CLIP,指定兼容的套接字名称。 |
| TopLevelEntityAndArchitecture | 是 | CLIPDeclaration | 1 | 指定顶层综合和仿真VHDL文件的实体和架构。 |
| SynthesisModel | 是 | TopLevelEntityAndArchitecture | 1 | 指定顶层综合VHDL文件的实体和架构名称。 |
| Entity | 是 | SynthesisModel | 1 | 指定顶层综合VHDL文件的实体名称。 |
| Architecture | 否 | SynthesisModel | 1 | 指定顶层综合VHDL文件的架构名称。 |
| SimulationModel | 否 | TopLevelEntityAndArchitecture | 1 | 指定顶层仿真VHDL文件的实体和架构名称。 |
| Entity | 是 | SimulationModel | 1 | 指定顶层仿真VHDL文件的实体名称。 |
| Architecture | 否 | SimulationModel | 1 | 指定顶层仿真VHDL文件的架构名称。 |
| InterfaceList | 是 | CLIPDeclaration | 1 | 包含一个或多个接口定义。不能嵌套接口列表。只能定义一个接口列表。 |
| Interface | 是 | InterfaceList | 1或更大 | 定义可用于CLIP或其中提供的所有I/O、时钟和其他信号。不能嵌套接口。名称是必需的属性。 |
| InterfaceType | 是 | Interface | 1 | 定义接口在FPGA中的连接位置。可输入下列值之一:
|
| SignalList | 是 | Interface | 1 | 包含一个或多个信号定义。不能嵌套SignalList标签。 |
| Signal | 是 | SignalList | 1或更大 | 定义可用于CLIP或其中提供的信号。必须包含FPGA模块用于显示的Name属性。Name属性必须以字母开头,且只能包含英文字母和数字、句点、短划线和下划线。默认值为您在Signal标签中声明的HDLName。 要将信号组织到CLIP IO层次结构中,请在名称中使用句点作为分隔符。例如,名为A.Input和A.Output的信号将在项目中创建一个名为A的文件夹,其中包含信号Input和Output。 |
| Description | 否 | Signal | 1 | 指定信号的说明信息。 |
| HDLName | 否 | Signal | 0或1 | 定义VHDL文件中I/O实体的名称。端口的HDLName必须与顶层综合文件中的名称相同。 |
| RequiredClockDomain | 否 | Signal | 0或1 | 如果未指定必需的时钟域,用户可使用任意时钟域的I/O。RequiredClockDomain的值必须与CLIP XML文件其他位置中定义的时钟信号名称匹配。如需指定时钟域,程序框图中使用此CLIP I/O的任意I/O节点必须位于指定的时钟域内。如I/O节点为错误的时钟域,LabVIEW在FPGA VI编译过程中将返回错误。 |
| LeaveUndrivenIfNotUsedInLabVIEW | 否 | Signal | 0或1 | 指定当VHDL具有默认值时,不驱动顶层文件中的信号。否则,LabVIEW在代码生成期间驱动全零信号。 |
| HDLType | 是 | Signal | 1 | 指定信号的VHDL端口类型。仅支持std_logic和std_logic_vector。复位和时钟信号只能是std_logic。 |
| UseInLabVIEWSingleCycleTimedLoop | 否 | Signal | 0或1 | 有效值为:NotAllowed、Allowed、Required。默认值为Allowed。该标签指定如何在单周期定时循环中使用CLIP I/O。在单周期定时循环内,可确保在每个时钟沿锁定数据。如CLIP中的IP希望在每个时钟沿接收值,可将此标签设置为Required,以强制LabVIEW执行此要求。 |
| SpecificTargetClock | 否 | Signal | 0或1 | 指定一个可用的FPGA终端基本时钟作为CLIP时钟所需的时钟连接。该标签的值为特定FPGA终端基本时钟的名称。FPGA终端基本时钟必须存在于项目中,并且必须满足声明XML文件中指定的所需频率范围。 |
| DataType | 是 | Signal | 1 | 指定信号的数据类型。如信号是用于LabVIEW接口,数据类型还将定义LabVIEW显示此信号的方式。如果信号用于套接字接口,则数据类型必须与套接字中信号的数据类型匹配。使用下列子标签之一定义数据类型:
|
| Boolean | 否 | DataType或Array | 查看父标签 | 指定VHDL代码使用std_logic。* |
| U8 | 否 | DataType | 查看父标签 | 指定VHDL代码使用std_logic_vector(7 downto 0)。* |
| U16 | 否 | DataType | 查看父标签 | 指定VHDL代码使用std_logic_vector(15 downto 0)。* |
| U32 | 否 | DataType | 查看父标签 | 指定VHDL代码使用std_logic_vector(31 downto 0)。* |
| U64 | 否 | DataType | 查看父标签 | 指定VHDL代码使用std_logic_vector(63 downto 0)。* |
| I8 | 否 | DataType | 查看父标签 | 指定VHDL代码使用std_logic_vector(7 downto 0)。* |
| I16 | 否 | DataType | 查看父标签 | 指定VHDL代码使用std_logic_vector(15 downto 0)。* |
| I32 | 否 | DataType | 查看父标签 | 指定VHDL代码使用std_logic_vector(31 downto 0)。* |
| I64 | 否 | DataType | 查看父标签 | 指定VHDL代码使用std_logic_vector(63 downto 0)。* |
| FXP | 否 | DataType | 查看父标签 | 指定VHDL代码使用std_logic_vector(x downto 0),其中x的范围为[0,63]。* |
| WordLength | 否 | FXP | 0或1 | 指定FXP信号的字长。支持的范围为[1, 64]。 |
| IntegerWordLength | 否 | FXP | 0或1 | 指定FXP信号的整数字长。支持的范围为[-2048, 2047]。 |
| Unsigned | 否 | FXP | 0或1 | 如FXP信号为无符号信号,则添加该标签。如果FXP信号带符号,请勿添加该标签。 |
| Array | 否 | DataType | 查看父标签 | 创建布尔数据类型的数组。必须在Array标签中包含Boolean标签。只能使用带套接字CLIP的Array标签。 |
| Size | 是 | Array | 1 | 指定数组的大小。 |
| Direction | 否 | Signal | 0或1 | 指示CLIP是否接收或发送有关信号的数据。您可以选择以下值:
|
| SignalType | 否 | Signal | 0或1 | 表示信号的类型。您可以选择以下值:
|
| FreqInHertz | 否 | Signal | 1 | 定义信号的频率范围。如果SignalType设置为时钟,则需要FreqInHertz标签。 |
| Max | 是 | FreqInHertz | 1 | 以SI表示法定义支持的最大频率。如果包含FreqInHertz标签,则需要Max标签。** |
| Min | 否 | FreqInHertz | 0或1 | 以SI表示法定义支持的最小频率。如未指定Min,则Min值等于Max值。** |
| ImplementationList | 是 | CLIPDeclaration | 1 | 定义要包含的CLIP文件。CLIP文件不必位于同一目录中。只能包含一个ImplementationList标签。 |
| Path | 是 | ImplementationList | 1或更大 | 定义编译IP所需的实现文件所在的路径或目录。目录的路径不包括子目录,因此必须在单独的标签中定义子目录。Path标签采用相对于XML文件的路径或绝对路径。 定义子目录的相对路径时,连续使用两个句点(..)表示当前工作目录的父目录,使用一个句点(.)表示当前工作目录,使用斜杠(/或\)进入下一个子目录。例如,使用../folderA/fileB.vhd指向folderA目录中的fileB.vhd文件,该目录与磁盘上包含XML文件的文件夹处于同一层次结构。使用/folderA/fileB.vhd指向folderA目录中的fileB.vhd文件,该目录与磁盘上的XML文件处于同一层次结构。LabVIEW返回无效路径错误。除非XML文件中不存在其他文件或目录标签,否则对于空目录的路径,LabVIEW不会返回错误。名称是该标签的必需属性,且必须与综合文件名相同。 |
| MD5 | 否 | Path | 1 | 检测综合文件是否被修改。 |
| TopLevel | 否 | Path | 0或1 | 指示当前综合文件是否为顶层文件。顶层综合文件可以是一个且只有一个VHDL文件。 |
| SimulationFileList | 否 | Path | 1 | 定义特定综合文件的仿真文件。一个综合文件只能包含一个<SimulationFileList>标签。当<SimulationModel>存在时,需要该标签。 |
| Path | 否 | SimulationFileList | 1或更大 | 定义编译IP所需的仿真文件所在的路径或目录。目录的路径不包括子目录,因此必须在单独的标签中定义子目录。Path标签采用相对于XML文件的路径或绝对路径。 定义子目录的相对路径时,连续使用两个句点(..)表示当前工作目录的父目录,使用一个句点(.)表示当前工作目录,使用斜杠(/或\)进入下一个子目录。例如,使用../folderA/fileB.vhd指向folderA目录中的fileB.vhd文件,该目录与磁盘上包含XML文件的文件夹处于同一层次结构。使用/folderA/fileB.vhd指向folderA目录中的fileB.vhd文件,该目录与磁盘上的XML文件处于同一层次结构。LabVIEW返回无效路径错误。除非XML文件中不存在其他文件或目录标签,否则LabVIEW不会返回空目录路径错误。当<SimulationModelType>为用户定义时,<SimulationModelType>下需要该标签。仿真文件名应指定为该标签的名称属性。名称是必需的属性。 |
| SimulationModelType | 是 | SimulationFileList | 1 | 定义特定综合文件的仿真模型类型。选项包括:与综合相同、用户定义和从仿真模型中排除。对于非网表文件,默认选项为与综合相同。对于网表文件,默认选项为从仿真模型中排除,不支持与综合相同。 |
| NumberOfDCMsNeeded | 否 | CLIPDeclaration | 0或1 | 在FPGA上保留一定数量的数字时钟管理器(DCM)。LabVIEW通过该数值在编译时判定代码是否初始化过多DCM。 |
| NumberOfMMCMsNeeded | 否 | CLIPDeclaration | 0或1 | 在FPGA上保留一定数量的混合模式时钟管理器(MMCM)。LabVIEW通过该数值在编译时判定代码是否初始化过多MMCM。 |
| NumberOfBufGsNeeded | 否 | CLIPDeclaration | 0或1 | 在FPGA上保留一定数量的BUFG。LabVIEW通过该数值在编译时判定代码是否初始化过多全部时钟。 |
| DutyCycleRange | 否 | Signal | 0或1 | 定义时钟支持的最大和最小占空比。默认值为50%。值后包含%符号。 |
| PercentInHighMax | 否 | DutyCycleRange | 0或1 | 定义时钟保持高电平的最长时间(百分比)。默认值为50%。值后包含%符号。** |
| PercentInHighMin | 否 | DutyCycleRange | 0或1 | 定义时钟保持高电平的最短时间(百分比)。默认值为50%。值后包含%符号。** |
| AccuracyInPPM | 在ToCLIP中:否 在FromCLIP中:是 | Signal | 0或1 | 指定CLIP时钟的精度(单位为PPM)。** |
| JitterInPicoSeconds | 在ToCLIP中:否 在FromCLIP中:是 | Signal | 0或1 | 指定CLIP时钟的抖动(单位为皮秒)。** |
| GenericList | 否 | CLIPDeclaration | 1 | 指定VHDL类属的信息。 |
| Generic | 是 | GenericList | 1或更大 | 指定类属名称作为该标签的属性。 |
| Description | 否 | Generic | 1 | 指定类属的说明。在组件级IP属性的的类属和语法检查页面的消息框内显示说明信息。 |
| GenericType | 是 | Generic | 1 | 指定顶层综合文件中的类属类型。 |
| DefaultValue | 是 | Generic | 1 | 指定类属的默认值。该值来自顶层综合文件。可在组件级IP属性对话框的类属和语法检查页或CLIP向导中指定其他值来覆盖默认值。 |
| SupportDerivedClocks | 否 | Signal | 1 | 每个支持衍生时钟的FromCLIP时钟都需要该标签。如存在该标签,还需要SourceClockReadyHDLName和DerivedClocksValidHDLName标签。该标签仅对FromCLIP时钟信号有效。 |
| SourceClockReadyHDLName | 否 | Signal | 1 | 每个带有SupportDerivedClocks标签的FromCLIP时钟都需要该标签。这是FromCLIP方向上时钟状态类型信号的HDL名称。该HDL名称的存在表示FromCLIP时钟有效且自由运行。一旦置为有效,该信号应保持有效,直到DerivedClocksValid信号置为有效。该信号置为无效表示FromCLIP时钟即将关闭。该信号置为无效后,在DerivedClocksValidHDLName信号置为无效之前,不应关闭FromCLIP时钟。 |
| DerivedClocksValidHDLName | 是 | Signal | 1 | 每个带有SupportDerivedClocks标签的FromCLIP时钟都需要该标签。这是ToCLIP方向上时钟状态类型信号的HDL名称。该HDL名称的存在表示LabVIEW FPGA时钟生成电路生成并由该FromCLIP时钟供源的所有衍生时钟均有效且自由运行。该信号有两个用途:
每个支持衍生时钟的外部时钟都需要该标签。 |
| SupportsGating | ToCLIP:是 在FromCLIP中:否 | Signal | 1 | 每个ToCLIP门控时钟都需要该标签,以支持从单周期定时循环中删除隐式启用信号。 |
| CyclesRequiredBeforeAsynchronousResetClears | ToCLIP:是 在FromCLIP中:否 | Signal | 1 | 定义异步复位置为有效时该时钟必须发生的时钟边沿数。当程序生成规范被配置为允许移除隐式启用信号时,该CLIP值必须为0。因为时钟开始运行前,异步重置先置为有效,然后置为无效。如时钟与外部时钟配合使用且重置过程中可能停止,该值必须为0。如CLIP在异步重置过程中需要运行时钟(例如,用于使用内置FIFO的CLIP),且设计要求移除隐式启用信号。请考虑创建本地异步重置,且当本地重置有效时,阻止程序框图访问CLIP或来自CLIP的访问。 |
| ReadBeforePlace | 否 | Path | 1 | 该标签可应用于一个或多个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模式文件最大限度地减少语法和格式错误。
处理不同目录下的多个执行文件
用户可指定多个文件实现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接口的范例。