目录
- 1 IP-Centric设计流程
- 2 基于IP设计
-
- 2.2 IP设置
- 2.3 IP Cache的设置
-
- 2.7 管理IP约束
-
- 2.7.1 更改IP综合运行属性
- 2.7.2 约束文件处理顺序
- 2.8 设置目标时钟周期
-
- 2.14 关于核容器
- 什么是核容器
1 IP-Centric设计流程
IP: intellectual property,知识产权。
IP catalog 包含XIlinx发布的 Plug-and-Play(即插即用)IP,即添加可用。
拓展IP catalog的四种方式:
- matlab上的System Generator for DSP designs
- Vivado High-Level synthesis(HLS)设计(C/C++ 算法)
- 第三方IP
- Vivado IP packager工具打包的设计
IP 术语:
- IP Definition: IP定义。使用 IP-XACT 特性描述的IP。
- IP Customization: IP定制。从IP Definition上定制IP,生成XCI文件。XCI文件存储用户指定的配置。
- IP Location: IP位置。包含当前项目中的一个或多个自定义IP的目录。
- IP Repository: IP库。添加到Xilinx IP catalog的IP Definition集合的统一视图。
- IP Catalog: IP目录允许检索Xilinx Plug-and-Play知识产权(IP),以及第三方供应商提供的其他与IP-XACT兼容的IP。也可以包含自己打包的IP。
- Output Products: 为IP Customization而生成的文件。他们包括HDL、约束条件和仿真目标。在生成输出产品期间,Vivado工具将IP定制存储在XCI文件中,并使用XCI文件生成综合和仿真期间使用的文件。
- Global Synthesis: 将IP与top-level用户逻辑一起综合。
- Out-Of-Context (OOC) Design Flow: OOC设计流程为生成的输出产品创建一个独立的综合设计run。这个默认流创建一个设计检查点文件(DCP)和一个Xilinx设计约束文件(_ooc.xdc)。
- Hierarchical IP and Subsystem IP: 这些术语可以互换地用来描述一个IP,它是一个由多个IP组成的子系统,这些IP是作为块设计或RTL流的一部分的分层拓扑结构。
- Sub-core IP: 指在另一个非Hierarchical (Subsystem) IP使用的IP。这可以是来自Vivado IP目录、用户定义的IP、第三方IP或IP核心库的IP。
IP-XACT:IP-XACT是一个标准的电子知识产权(IP)的说明。由SPIRIT联盟发布。它使IP提供商能够为组件和设计提供可读和可机器处理的IP的单一描述,并与其他所需的数据一起分享给IP用户。
2 基于IP设计
可以通过以下方式创建IP Customization:
- 从IP catalog
- 使用Manage IP project流创建一个独立的IP Customization,以便在当前项目和其他项目中使用。
- 使用Tcl脚本。
- 添加或创建block design(BD)
定制完成后,可以直接创建output product或在之后创建。
2.2 IP设置
-
Core Containers
: 核容器功能。是否将IP和所有生成的输出文件包含在一个扩展名为XCIX的压缩二进制文件中。
-
Simulation
:
- 选择是否使用预编译好的库文件。
- 是否自动生成IP的仿真脚本。
为每个IP产生仿真脚本。Vivado把脚本放在.ip_user_files路径。
-
Upgrade IP
:
在更新IP时产生ip_upgrade.log文件。日志文件存储在项目目录的根位置(项目XPR文件所在的位置)。
-
Default IP Location:
可以使用它来设置创建和存储IP和输出产品的位置。默认放在.src/sources_1/ip路径。
-
IP Cache:
定义Vivado如何为项目使用IP缓存。缓存选项包括:
Cache scope:
disabled、local(默认设置)或remote。Local选项路径是默认的。remote为指定的路径。
Cache location:
: 文件路径
Clear Cache:
在Tcl控制台中执行以下命令:config_ip_cache,从磁盘中删除缓存文件:
config_ip_cache -clear_output_repo
2.3 IP Cache的设置
在项目模式中使用OOC流程可以加速综合过程的output product。IP Cache是默认勾选的,此时Vivado产生综合output product(比如DCP和stub文件)以及一个cache entry。
一个cache entry包含两个硬盘路径:
- :包含XCI、DCP、sim_netlist和stub文件。
- .logs:包含综合log文件(runme.log)
在产生缓存后,当用相同的属性创建新的IP自定义时,产生IP的时候不会再次进行综合。相反,Vivado引用缓存并复制综合的输出。IP指的是已经完成综合的IP,消除了对相同定制的其他IP运行OOC合成的需要。
当生成一个启用缓存的IP时,如果没有缓存命中,Vivado工具将创建一个正常的设计运行。但是,如果有缓存命中,则综合结果(DCP和存根文件)从缓存目录复制到IP目录并重命名。没有创建设计运行,但是添加了一个报告缓存命中的条目,如下图所示。
2.3.1 为新项目配置IP cache
一个新项目默认使能 IP Cache 并配置路径为local。但是如果多人指向相同的cache路径可以减少硬盘的使用。每个用户不需要创建别人正在使用的相同的IP cache。
通过给 Vivado_init.tcl 添加 project.defaultIPCacheSetting 参数的控制来实现新项目关闭cache或者配置一个remote location。
2.7 管理IP约束
2.7.1 更改IP综合运行属性
IP目录中的大多数IP基于用户自定义产生特定于IP的XDC约束。IP提供的约束使用默认的综合设置进行优化。
推荐:不要为任何IP设计运行更改这些设置,因为在应用约束时可能会遇到问题。如果必须更改IP OOC运行的综合设置,可以在Tcl控制台中使用以下set_property命令:
[get_runs _synth_1]
例子:set_property STEPS.SYNTH.DESIGN.ARGS.FSM_EXTRACTION sequential [get_runs my_IP_synth_1]
2.7.2 约束文件处理顺序
默认情况下,IP XDC约束的PROCESSING_ORDER值为EARLY。用户约束标记为NORMAL。这样,后面处理的约束可以覆盖前面处理的同一对象上的约束。
处理IP XDC文件的顺序如下:
- 设置为EARLY的用户XDC
- 设置为EARLY的IP XDC
- 设置为NORMAL的用户XDC(默认)
- 设置为LATE的IP XDC
- 设置为LATE的用户XDC
通过这种方法,可以在IP XDC 之前或之后运行一个用户XDC。
Vivado IP可以生成多个XDC约束文件。默认情况下,IP约束优先于用户约束,原因如下:
- IP可能会产生一个时钟,它必须对终端用户的约束是可用的。
- 如果IP提供物理约束,终端用户可以在必要时覆盖它们。
使用report_compile_order Tcl命令报告约束编译顺序的示例如下:
report_compile_order -constraints
IP交付的一些约束可能依赖于来自终端用户或其他IP的时钟对象。这些约束在一个单独的XDC文件中提供,并在终端用户约束之后进行处理。
- .xdc
通常,IP提供一个core XDC文件,该文件可以包含时钟创建命令以及不依赖外部时钟的命令。约束文件名为.xdc,称为core xdc文件。
- _clocks.xdc
IP还可以包含另一个XDC文件,该文件包含依赖时钟的命令。
因为顶层时钟可以来自其他约束,或者来自具有依赖关系的其他IP,所以需要 预先定义这些时钟 的任何约束都应该放在_clocks.xdc中。默认情况下,Vivado IDE在用户约束和其他IP核心xdc文件后处理_clocks.xdc。
- _OOC.xdc
大多数IP也产生一个OOC XDC文件(_OOC.xdc)。该文件包含IP输入时钟的默认顶层定义。此文件仅在使用推荐的默认流(将IP综合为顶层设计的OOC)时在DCP创建中使用。当Vivado综合顶层设计的IP OOC时,由终端用户或其他IP创建的时钟是不可用的;因此,这个文件对于提供综合IP的时钟定义是必要的。就是OOC过程中暂时使用的一个时钟约束。
用户逻辑implementation期间不需要_ooc.xdc,因为在应用约束之前,所有的网络列表都是链接在一起的。此时,任何需要时钟的IP都可以使用用户创建的时钟或IP创建的时钟。
- 额外的XDC
有些IP可以产生额外的XDC文件。这可能是因为它们产生了仅在综合或实现期间使用的约束。
当创建一个以平台板而不是目标部件为目标的项目时,该板在IP自定义期间是可用的,允许指定在连接到IP时使用板上的哪些连接。这将生成一个_board.xdc文件,其中包含PACKAGE_PIN、IOSTANDARD和其他物理约束。
Vivado Design Suite User Guide: Using Constraints (UG903)
Vivado 处理IP时产生的一些约束文件:
- dont_touch.xdc
Vivado工具使用dont_touch.xdc以在综合IP时在IP顶层设置DONT_TOUCH属性。这样可以防止接口端口被移除。
可以在综合日志文件中看到这个约束文件正在被处理,或者是在使用OOC(默认流)综合IP时,或者是在使用 end-user RTL综合IP时,在全局综合日志文件中。
- in_context.xdc
默认情况下,IP在顶层综合期间被视为黑盒,因为它是使用OOC综合的。在创建IP DCP的过程中,在以下情况下,会创建_in_context.xdc文件并保存在IP DCP文件中:
- 该IP产生一个时钟,可以在IP边界上引用
- 该IP具有任何I/O缓冲的实例
如果存在,则在综合用户逻辑时,在end-user约束之前处理_in_context.XDC文件。在实现过程中不需要这个文件,因为IP不再是一个黑盒。
如果创建了时钟,它们被放置在IP黑盒子单元的边界pin上。时钟可以有以下几种类型:
- IP输入端口上的主时钟(例如时钟向导IP)
- IP输出端口上的主时钟
- 在IP的输出端口上产生的时钟,主时钟是输入时钟(例如时钟向导IP)
只有在IP包含input buffer的情况下,才会在IP的输入端口上创建时钟。默认情况下,时钟向导是这样配置的。这个时钟在顶层用户逻辑综合期间接到顶层端口。
如果一个用户约束必须引用一个IP产生的时钟,它应该通过引用产生时钟的IP的pin来间接完成,例如在get_clocks命令中:
get_clocks –of_objects [get_pins ]
如果有I/O buffer,对于有I/O buffer的接口引脚,IO_BUFFER_TYPE属性被设置为NONE。设置此属性可防止在顶层综合期间插入额外的I/O buffer。
2.8 设置目标时钟周期
默认情况下,IP是独立综合的,而OOC与设计的其余部分分离。
- 在用户逻辑的综合过程中,IP被视为一个黑盒子。
- 在实现过程中,IP网表与其他IP网表或用户网表进行链接。
因为IP独立于顶层综合,Vivado工具在OOC完成为IP提供时钟定义后创建_ooc.xdc。
如果不指定目标周期,则使用默认的时钟周期。当用于独立IP的周期与合成顶级IP时所看到的周期不同时,这可能会导致警告:
该警告通知,如果使用了全局综合,将使用与综合OOC IP时不同的时钟周期来综合IP。也就是说在OOC看到这个警告,如果我们确定给IP的时钟在外部约束过了,就可以忽略,因为在全局综合的时候会使用我们自己约束的时钟周期。
IP有多种时钟选项:
- IP可能在定制GUI中有选项来设置在OOC合成期间使用的目标频率/周期。您可以使用Tcl控制台查询和设置IP的配置选项。
- IP可能有一个标签为“时钟”的标签,它允许您为IP设置目标频率。
- IP可能将目标设置与其他设置混在一起。通常,有一个工具提示来解释设置。
- IP不提供GUI选项自定义目标时钟频率或周期必须依赖其他时钟源的频率
IP的时钟端口有一个以FREQ_HZ结尾的属性。改变这些属性会导致_ooc.xdc文件用于在为IP生成输出产品时使用这些值。
2.8.1 使用Tcl命令设置目标时钟周期
名为char_fifo的FIFO生成器IP设置目标时钟的步骤示例,它在Wave generator示例设计中使用。IP被定制为在读写端口和本机接口上使用公共时钟:
- 使用report_property命令报告IP可用的属性。
report_property [get_ips char_fifo]
- 从输出中,可以看到这个IP有5个以FREQ_HZ结尾的属性:
- CONFIG.core_clk.FREQ_HZ:适用于使用普通时钟时(本例)
- CONFIG.read_clk.FREQ_HZ: 适用于使用独立时钟时
- CONFIG.write_clk.FREQ_HZ:适用于使用独立时钟时
- CONFIG.slave_aclk.FREQ_HZ:适用于使用AXI
- CONFIG.master_aclk.FREQ_HZ: 适用于使用AXI
只有第一个输出适用于具有公共时钟的本机接口。CONFIG.core_clk。FREQ_HZ默认设置为100000000或100MHz。
如果已经生成了IP,可以查看char_fifo_ooc.XDC文件并查看以下行:
create_clock -period 10 -name clk [get_ports clk]
- 对于本例,需要的时钟频率为250MHZ,设置如下:
set_property CONFIG.core_clk.FREQ_HZ 250000000 [get_ips char_fifo]
- 设置属性后,生成IP。这将导致OOC运行(如果存在)被重置并重新运行。
综合完成后,char_fifo_ooc.XDC可以看到:
create_clock -period 4 -name clk [get_ports clk]
2.14 关于核容器
什么是核容器
核容器特性通过提供IP的单一文件表示。这个可选特性选择将IP和所有生成的输出文件包含在一个扩展名为XCIX的压缩二进制文件中。这个扩展类似于用于IP定制文件的XCI文件,并以类似的方式工作。
在添加或读取IP时,需要指定XCI文件,在启用了核心容器的情况下,需要添加或读取XCIX文件。
当为现有IP启用核心容器特性时,XCIX文件将替换IP目录和输出产品。当禁用IP的核心容器特性时,
XCIX文件被转换为包含XCI文件在内的所有输出产品的IP目录。
为IP启用核心容器会改变该IP实例的磁盘表示;在Vivado中,IP的内部表示保持不变。
在Vivado Sources视图中,这两个IP看起来是相同的,都列出了输出产品,所有这些产品都可以在Vivado IDE中打开查看
在磁盘上,有一个用于clk_core的文件夹和一个用于char_fifo IP的XCIX文件。
当IP使用Core Container时,Vivado工具从这个XCIX文件中读取合成和实现所需的IP源文件。文件不会被解压缩到临时目录中,而是直接从二进制文件中读取。