FPGA 中 IP基础学习

IP 是什么?

首先,要知道什么是IP。Intellecture Property,相当于软件领域的API函数库,三方开源项目。要开发一个真正可用的电路设计,不管什么领域,总会使用到一些IP,不太可能从头开始。IP分为硬核和软核,我们今天讲的是软核IP。

IP 的业界标准

IP 为了方便使用,业界对于IP 约定了封装的关键格式定义。IP - XACT ( eXchange ArchiteCTure),这是为了方便大家的IP能够互相通用。具体的内容,可参见:

IP-XACT 这是IP- XACT 的官方网站。

IP-XACT标准的User Guide为:
IP-XACT_User_Guide_2018-02-16.pdf
IPXACT-2014-issues-Dec-2019.pdf

IP 关键定义

component:基础定义

name: IP 核名称
version:IP 核版本
vendor:供应商(开发商)
library:库名称(实际就是分类,可以多个层级的嵌套)

model-parameter: 这是最关键的,定义了参数的名称,类型。

节点名称

节点说明

ipxact:name

参数名称

ipxact:value

参数默认值

属性名称

属性说明

parameterId

参数ID

resolve

解析方式,user和generated,user为用户自己解析,generated为软件自定解析连接。

type

参数类型,目前支持类型有:bit、byte、shortint、int、longint、shortreal、real、string

属性名称

属性说明

parameterId

Id号

minimum

最小值

maximum

最大值

resolve

同上

type

值定义,同上

choiceRef

值枚举,参考choices节点

注意:上面的choice说明该项是枚举值。

choices节点的定义:

节点名称

节点说明

ipxact:name

枚举名称

ipxact:enumeration

枚举值(N个)

model-port:接口定义

这是IP向外给出的接口,方向(进,出),是否出现(可以通过表达式来控制)

节点名称

子节点

子节点

节点说明

ipxact:name

端口名称

ipxact:isPresent

是否有效,通过true或false,或者表达式进行动态控制

ipxact:wire

端口线属性

ipxact:direction

端口方向,in、out、 inout、phantom

ipxact:drivers

端口驱动

ipxact:driver

端口驱动

ipxact:defaultValue

端口默认值

ipxact:qualifier

ipxact:isClock

是否是Clock

ipxact:isReset

是否是Reset

ipxact:isAddress

是否是Address

ipxact:isData

是否是Data

vendorExtensions

自定义的额外属性

eagle:portInfo

自有节点定义,定义端口信息

eagle:type

端口类型,暂定CLOCK、RESET、DATA

model-instantiations:实例化定义

主要约定了真实使用时,需要实例化的一些参数,比如:语言,涉及到哪些文件,涉及到的参数。

注意:参数并不一定是接口。

节点名称

节点说明

ipxact:name

组件实例化的名称

ipxact:language

实例化语言,包括Verilog、VHDL、System Verilog等

ipxact:moduleParameters

定义了Verilog中的所有参数,以DLRAM为例,则为下图中所有的参数。

ipxact:fileSetRef

定义了组件例化的所引用的文件名,参考fileSets节点

fileSets:约定了IP核需要的所有文件。

节点名称

子节点

节点说明

ipxact:name

文件集名称

ipxact:file

文件

ipxact:name

文件名,绝对路径或相对路径

ipxact:fileType

文件类型,如Verilog文件,VHDL文件等

ipxact:logicalName

定义在本xml中所使用的逻辑名称

Model-views:定义了不同视角需要的视图

设计视图,验证视图,物理视图,封装视图等。

节点名称

节点说明

ipxact:name

视图名称

ipxact:displayName

视图显示名称

ipxact:envIdentifier

当前视图的环境标识符,标识视图属于哪个环境,例如设计环境或验证环境等

ipxact:componentInstantiationRef

组件例化的引用

vendorExtensions:用于扩展

供应商自行定义的属性和功能。

表达式

另外,非常关键的是,上述定义的值部分,是可以用表达式的。这样,可以通过用户的不同输入,控制很多属性。表达式支持 SystemVerilog。

IP Catelog

好了,IP定义好了,那什么叫IP Catelog呢?如字面意思,它就是一个IP的集合,为了方便大家搜索,查找到需要的IP。所以,它可以按IP定义中的library和name来组成,没有任何难度,是很好实现的功能。

IP Package

IP Package 就是一个工具,可以把自已的工程打包成一个标准的IP。它包括文件封装,打包,目录版本管理,元数据的定义和相关的文档。还可以导入到客户工程,或者分项给其它用户。

这个可以理解为对 IP-XACT协议中的细节进行定义的过程和辅助的工具。它并不是必须的,因为,如果你足够了解XACT,你完全可以手工完成整个过程。

UI 生成工具

对于model-views中的用户的参数设置界面,可以采用系统内置的列表式,也可以自定义界面,如果自定义界面,则需要自行解析相应的界面定义文件(需要自行实现若干输入UI组件)。一般情况,使用列表式界面即可。对于复杂的输入,则需要自定义界面。

Block Design

如果我们要连接不同的IP,进行组合处理,block design是一个很好的图形工具,使设计工程师能通过拖放和连接IP核来实现的复杂的功能模块。当然,最极端的情况是只有一个IP。当完成连接后,要给到用户使用,一般采取wrapper的方式。

IP Wrapper

通过Wrapper,定义blockdesign的输入,输出,会最终形成一个wrapper,然后用户按黑盒的方式,只需要了解wrapper,来使用真实的IP。所以,wrapper并不是一个设计期的行为,而是一个运行期的动作。因为它的前置还有block design。

IP 例化

IP最终实例化使用有两种情况,一种是用于行为仿真,一种是正常综合使用。基本雷同。

在使用时,非常简单,直接调用wrapper,当然,这时会要求填写一些参数,这时会使用到定义的参数界面。

IP 加密

如果用户想保护自已的IP源码,还可以采用先综合,再封装的方式,将源码隐藏起来,当然,这种方式会强依赖于综合工具,如果不同的产品之间,不一定能通用。

其它

IP实际上是和器件相关的,同一个IP可能在不同器件不一定兼容。这是可能发生的。

对于IP的使用,大概涉及的上述的内容,一开始接触时,容易把几个概念搞混淆。实际上,IP封装和使用的相关概念是比较简单的,自已要做一个IP Packager和 IP Generate,甚至产生IP 的 Repository 都是非常简单的,只需要严格按照 IP - XACT的最新协议来实现即可。

当然,要写好一个IP,那属于硬件电路设计编程的事情,不在这里讨论。我只是在考虑自已要实现IP封装相关的功能,需要做一些什么事情。

 

你可能感兴趣的:(学习,fpga开发)