在Vivado定制IP的时候,或者在IP Catalog中双击一个IP,不论该IP是我们自己添加到工程的自定义IP,还是Vivado自己带的IP,选择"Customize IP"后都会弹出如下图所示的框框。可以看到一种叫做”Global”,一种叫”Out of Context (OOC)”。

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

Out-Of-Context (OOC) 即脱离上下文
    OOC选项是Vivado给我们的默认选项,在OOC模式下,Vivado将会把生成的IP当成一个单独的模块来进行综合,生成.dcp (design checkpoint)文件,工程要用到IP的时候,只需从.dcp文件中解析出对应IP的网表文件即可,而不需对IP进行重新综合,这样的方式可以加快综合的速度;而Gobal选择则是每次工程综合的时候,IP核都会和工程一起综合,综合时间很长,也不会产生.dcp文件。OOC同时会使用一个只在OOC模式下有用的约束文件“_ooc.xdc”。 除了生成.dcp文件,OOC还会生成一个以”stub.v”结尾的HDL文件,是当前IP设计的一个黑盒文件,只有输入输出端口,工程调用这个的时候实际上是在解析.dcp中的网表文件,进而继续综合和布局布线。

OOC的优势
    通过综合实现某个模块的快速迭代,不用综合系统的其余部分,整个设计的迭代更快了;
利于系统其余部分的快速迭代,如果某部分确定稳定不变了,可以对这个模块进行OOC综合操作,保留这个综合版本,这样就可以方便迭代其余部分;
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:’bz;

通过OOC方式综合后,my_signal信号值就不会是高阻值Z了, Vivado会选择不保留三态。如果my_signal信号只连接到外部输出I/O呢?即能够使用OOC方式对这部分模块进行综合,同时保留三态。

满足上述需求的方式就是在RTL中实例化一个三态缓存(buffer)。

OBUF u1(.l(din1), .T(n_enable), .O(my_signal));

参考:

http://www.sohu.com/a/129575422_292853 关于高阻态和OOC(out of context)综合方式

Vivado 的IP:Global 和 Out-Of-Context选项问题的更多相关文章

  1. modelsim 独立仿真vivado的IP核及仿真脚本

    Modelsim独立仿真vivado的IP 最近一直在做local dimming项目的FPGA硬件实现,算法的其中一步就是直方图统计,即数字图像的某一灰度级的像素数,这个直方图的源码找了半天才搞到, ...

  2. vivado封装IP

    reference: https://www.cnblogs.com/mouou/p/5851736.html   1.新建一个测试工程 工程化的设计方法是离不开工程的,第一步往往都是新建工程,后面我 ...

  3. 第三章 VIVADO 自定义IP 流水灯实验

    第二章里面已经说过了,MIZ701 PL部分没有输入时钟,因此驱动PL资源必须是通过PS来提供时钟,所以这个流水灯实验也得建立一个最小系统了,然后再添加一个流水灯的自定义IP. 3.0本章难度系数★★ ...

  4. Vivado利用IP自带的示例工程和仿真

    有时候想查看IP的特性和功能,又不想自己写testbench,Vivado自带的IP示例工程就能派上用场,原来一直不知道怎么打开IP的示例工程 第一步:在原有的工程中新建IP,按照你想要的IP属性,例 ...

  5. Vivado cordic IP求模求角教程

    前言 当需要对复数求模的时候,用FPGA怎么求呢?怎么开根号? 方法1:先求幅值平方和,再使用cordic IP开根号.(蠢办法) 方法2:直接用cordic求取模值. 此处只介绍方法2,资源占用更少 ...

  6. 基于Vivado调用ROM IP core设计DDS

     DDS直接数字式频率合成器(Direct Digital Synthesizer) 下面是使用MATLAB生成正弦波.三角波.方波的代码,直接使用即可. t=:*pi/^:*pi y=0.5*sin ...

  7. Vivado使用技巧(二):封装自己设计的IP核

    由 judyzhong 于 星期五, 09/08/2017 - 14:58 发表 概述   Vivado在设计时可以感觉到一种趋势,它鼓励用IP核的方式进行设计.“IP Integrator”提供了原 ...

  8. Vivado使用技巧:封装自己设计的IP核

    概述   Vivado在设计时可以感觉到一种趋势,它鼓励用IP核的方式进行设计.“IP Integrator”提供了原理图设计的方式,只需要在其中调用设计好的IP核连线.IP核一部分来自于Xilinx ...

  9. Android 获得本地IP地址、外网IP地址、本设备网络状态信息、本地Mac地址

    本地内网IP和外网IP的区别: 根据我的经验一台电脑需要两个ip才可以上网,一个是本地的内网ip 一个是外网的ip 本地的ip 一般是192.168.1.2这种样子  只要在不同的路由器上可以重复 外 ...

随机推荐

  1. [Token] 从index.jsp中获取Token

    import com.eviware.soapui.support.GroovyUtils def groovyUtils = new GroovyUtils( context ) def holde ...

  2. jquery页面初始化控件时间

    this.InitControlTime = function () { if ($("#txt_Id_").val() == "") { var today ...

  3. 2018年计科五班秋季C语言基础课第1次作业

    ---恢复内容开始--- 1.翻阅邹欣老师博客关于师生关系博客,并回答下列问题: (1)大学和高中最大的不同是没有人天天看着你,请看大学理想的师生关系是?有何感想? 答:我认为是邹欣老师说的健身教练 ...

  4. 改善C#公共程序类库质量的10种方法(转)

    出处:http://www.cnblogs.com/JamesLi2015/p/3140897.html 最近重构一套代码,运用以下几种方法,供参考. 1  公共方法尽可能的使用缓存 public s ...

  5. [GO]简单的并发服务器

    package main import ( "net" "fmt" "strings" ) func HandleConn(conn net ...

  6. #2002 无法登录 MySQL 服务器

    phpMyAdmin无法登录,输入用户名和密码后点击“执行”后一直报 “#2002 无法登录 MySQL 服务器”. 解决办法,将 “phpMyAdmin/libraries”文件夹下的config. ...

  7. HDU 6125 Free from square (状压DP+背包)

    题意:问你从 1 - n 至多选 m 个数使得他们的乘积不能整除完全平方数. 析:首先不能整除完全平方数,那么选的数肯定不能是完全平方数,然后选择的数也不能相同的质因子. 对于1-500有的质因子至多 ...

  8. C#延迟执行

    借鉴于该篇博客:http://kb.cnblogs.com/page/42581/ 先看两个方法 public class YieldClasses { public static IEnumerab ...

  9. Javascript与数据结构系列(一)——栈的实现

    栈的实现 实现一个栈,当务之急是决定存储数据的底层数据结构.这里采用的是数组. 我们的实现以定义 Stack 类的构造函数开始: function Stack() { this.dataStore = ...

  10. Linux Guard Service - 前台进程和后台进程切换

    把一个正在执行的程序放入后台 [root@localhost 01]# Ctrl+Z 此使程序被移动到后台,但不能继续输出(处于暂停态) [root@localhost 01]# ./test1-1 ...