Vivado IP的两种综合方式:Global 和 Out-Of-Context

在最新的Vivado的版本中,定制IP的时候,会有一个综合方式的选择,如下图所示。可以看到一种叫做”Global”,一种叫”Out-Of-Context (OOC)”。从字面意思上来理解,”Out-Of-Context”是“脱离上下文”的意思。”Global”即全局。



Global synthesis

如果选择的是全局综合选项,那IP生成的文件将会和其他的用户文件一起进行综合,这也就意味着,每一次用户文件被修改后,IP都会跟着一起综合一遍。

Out-Of-Context (OOC)

OOC选项是Vivado给我们的默认选项,在OOC模式下,Vivado将会把生成的IP当成一个单独的模块来进行综合,生成.dcp (design checkpoint)文件。同时会使用一个只在OOC模式下有用的约束文件“_ooc.xdc”。
除了生成.dcp文件,OOC还会生成一个以”stub”结尾的HDL文件,是当前IP设计的一个黑盒文件,其实就是只有输入输出端口,没有其他内容,如下图所示是一个FIFO IP的”char_fifo_stub.v”实例。这个文件的作用就是跟着工程中的其他文件一起进行综合过程
这里写图片描述
最后,在”implementation”阶段,OOC生成的.dcp文件中的网表文件将和其他设计文件综合后生成的网表文件一起。




总之,两种综合方式的flow看上图。

OOC的优势
  1. 通过综合实现某个模块的快速迭代,不用综合系统的其余部分,整个设计的迭代更快了;
  2. 利于系统其余部分的快速迭代,如果某部分确定稳定不变了,可以对这个模块进行OOC综合操作,保留这个综合版本,这样就可以方便迭代其余部分;
  3. OOC将会产生”_sim_netlist.v” 或者 “_sim_netlist.vhdl”仿真文件,如果我们在使用只支持某种语言的仿真器,而IP不提供该语言的RTL文件,我们就可以直接用这些仿真文件进行IP仿真。
关于高阻态和OOC(out of context)综合方式

如果设计中存在三态(高阻态),OOC综合操作就会受到影响,FPGA仅支持I/O输出端口的高阻态,在器件内部是不允许的,如果你使用OOC综合方式,Vivado工具并不知道某个具体的信号是连接I/O输出还是在器件内部进行连接,最后,综合工具会将这个高阻信号转换为某个逻辑值,而不是最为高阻态进行综合。

举个例子,下面的代码就会带来不好的影响:

assign my_signal = enable?din1:1’bz;

通过OOC方式综合后,my_signal信号值就不会是高阻值Z了, Vivado会选择不保留三态。如果my_signal信号只连接到外部输出I/O呢?即能够使用OOC方式对这部分模块进行综合,同时保留三态。
满足上述需求的方式就是在RTL中实例化一个三态缓存(buffer)。

OBUF u1(.l(din1), .T(n_enable), .O(my_signal));
参考资料
  1. Vivado Design Suite User Guide: Designing with IP (UG896) - Xilinx
  2. http://www.sohu.com/a/129575422_292853
<think>好的,我现在需要帮助用户了解如何在Vivado中添加PLL。根据用户提供的引用内容,特别是引用[1]、[2]、[3],我需要整理出清晰的步骤。首先,用户提到的引用[2]提到PLL用于生成不同频率的时钟,而引用[1][3]涉及IP核的选择添加方法。 用户可能刚接触Vivado,需要详细的步骤指导。我应该分步骤说明,从创建工程到生成输出,确保每个环节都清楚。引用[3]提到添加IP核的两种方法:通过目录或.xci文件,这可能需要在步骤中涵盖。同时,引用[1]强调选择PLL而非MMCM,这点要重点指出。 另外,用户可能想知道如何配置PLL的参数,比如输入时钟所需输出频率。需要解释每个配置页面的作用,比如BasicOutput Clocks。还要注意生成输出产品后验证的步骤,这可能对后续使用很重要。 最后,生成相关问题时要考虑用户可能遇到的后续问题,比如时钟约束、常见错误等,确保覆盖实际应用中的痛点。确保引用正确,比如在步骤1中提到选择PLL的部分引用[1],在IP核添加方法引用[3]。</think>### Vivado中添加PLL的详细步骤 #### 1. **创建或打开Vivado工程** - 新建工程时选择目标FPGA型号(需确认芯片支持PLL功能)[^2] - 已有工程可直接进入IP Catalog操作 #### 2. **打开IP Catalog** - 在Flow Navigator面板点击 **IP Catalog** - 搜索栏输入"clock"筛选,选择 **Clocking Wizard**(Xilinx官方PLL/IP核名称) #### 3. **配置PLL参数** ```mermaid graph TD A[Component Name] --> B(命名IP核) B --> C[Basic设置] C -->|选择PLL| D[Primitive选PLL] D --> E[Input Clock] E -->|输入源时钟频率| F[Output Clocks] F -->|设置所需输出频率| G[完成配置] ``` - **Basic设置**: - 在"Primitive"选项中选择 **PLL**(注意与MMCM区分)[^1] - 设置输入时钟频率(如25MHz板上时钟)[^2] - **Output Clocks**: - 勾选需生成的时钟数量 - 设置各时钟的乘法/除法系数或直接输入目标频率 - 可启用时钟使能、复位信号等高级功能 #### 4. **生成IP核** - 点击"Generate"生成PLL模块 - 自动生成以下文件: - `.xci`(IP核配置文件)[^3] - `.veo`(实例化模板) - 相关约束文件 #### 5. **在设计中实例化** ```verilog // 例化模板示例 clk_wiz_0 instance_name ( .clk_in1(clk_25m), // 输入时钟 .clk_out1(clk_100m), // 输出时钟1 .clk_out2(clk_50m), // 输出时钟2 .reset(reset), // 可选复位 .locked(locked) // 锁定状态指示 ); ``` #### 6. **生成输出产品** - 在Sources面板右键IP核选择 **Generate Output Products** - 选择综合选项- Global:全局有效 - Out of Context:独立于顶层设计 #### 7. **添加约束文件** - 在I/O Planning界面确认时钟管脚约束 - 自动生成或手动创建.xdc文件: ``` create_clock -period 40.000 -name clk_25m [get_ports clk_25m] ``` ### 验证要点 1. 检查 **locked信号** 是否拉高(PLL锁定指示) 2. 使用ILA(集成逻辑分析仪)抓取时钟波形 3. 通过Timing Report确认时钟网络建立/保持时间
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值