情景描述:

芯片:zynq7020

问题:

设计从FPGA的U19引脚上的开发板板接收时钟输入125M,并将其送到两个MMCM。
使用软件:vivado2015.4
在Vivado中打开合成设计后,我得到以下Crticial警告:

Failed to create I/OLOGIC Route Through shape for instance MMCM_2/inst/clkin1_ibufg. Found overlapping instances within the shape: MMCM_1/inst/clkin1_ibufg and MMCM_MAC_1/inst/clkin1_ibufg.

Cannot set LOC property of ports, Instance MMCM_2/inst/clkin1_ibufg can not be placed in INBUF_DCIEN of site IOB_X1Y424 because the bel is occupied by MMCM_1/inst/clkin1_ibufg. This could be caused by bel constraint conflict

MMCM没有手工实例化,而是使用时钟向导创建的,通常,当使用MMCM IP核,它包括所有缓冲区:

输出时钟上BUFG

时钟反馈的ebufg

驱动输入时钟的IBUFG

当只有一个时钟向导核心由输入时钟驱动时,这很好,但是当你尝试使用两个时,你最终会实例化两个IBUFG(或IBUF)单元。
这是非法的。

FPGA的每个引脚都有一个且只有一个输入缓冲区(IBUF) - 你不能将两个并行放置

必须修改MMCM的输入。
如果您正在使用时钟向导,则必须从两个时钟核心的输入中移除IBUF,然后在设计的顶层手动实例化IBUF(并将输出馈送到两个时钟核心)。
但是,解决这个问题会产生另一个问题。
用于MMCM的“最佳”输入是与MMCM在同一时钟区域中的四个时钟引脚之一。
但是,在7系列中,每个时钟区域只有一个MMCM。
因此,您无法通过“最佳”输入机制从同一时钟源驱动多个MMCM。
试图这样做会产生另一个严重警告。
这可以通过将另一个MMCM(在不同的时钟区域中)的CLOCK_DEDICATED_ROUTE属性设置为“BACKBONE”来解决,假设它在时钟能力引脚的相邻时钟区域内(即时钟区域上方或下方的时钟区域)
功能引脚和其他MMCM驻留)。
这样做(使用BACKBONE)会增加一些额外的时钟延迟,而这些延迟不会被MMCM补偿 - 这会对使用MMCM在“其他”时钟区域生成的时钟的任何接口的时序产生负面影响(可能
或者对你的设计无关紧要)。
那么,下一个问题是“为什么你需要两个MMCM”? 
MMCM可以使用相同的VCO(因此相同的MMCM)生成不同的时钟输出频率和相位。
虽然有些情况下您绝对必须使用两种不同的MMCM,但如果可以的话,通常最好避免这种情况,并将两者结合起来。
那么告诉我们你在做什么需要不同的MMCM,我们可以看看它们是否可能/更好地结合起来。

何检查哪个MMCM放置在时钟引脚的时钟区域中,哪个放置在时钟区域上方/下方?
最简单的方法是在Vivado IDE(GUI)中打开设计,并在设备查看器中找到MMCM和时钟引脚。
在器件查看器中,时钟区域(和I / O bank)可清晰识别。
要查找对象,可能最容易从设计的示意图开始,并选择要查找的对象。
在原理图视图中选择对象时,它也会在设备视图中被选中并高亮显示。
有没有办法可以让工具将特定的MMCM放在时钟引脚的时钟区域,而另一个MMCM放在上/下的时钟区域?
引脚的时钟区域只有一个MMCM。
像所有资源一样,FPGA中的站点被命名 -  MMCM位置看起来像MMCME2_ADV_X0Y0
您可以通过设置单元格的LOC属性将单元格放置在站点上。
在您的XDC中,您可以做到
set_property LOC MMCME2_ADV_X0Y0 [get_cells]
我需要两个MMCM,因为我需要9个异步时钟
首先,这是很多时钟......其次,根据定义,来自MMCM的时钟都是彼此同步的。
它们之间的时序关系可能很复杂,但它们是同步的......
我可以通过使用divide_by_2逻辑生成一些时钟来最小化这个数字(9)。
我可以通过放置BUFG并使用create_clock(不是create_generated_clock)约束来在divide_by_2逻辑的输出上定义新时钟吗?
通常不建议使用结构时钟 - 这会在生成的时钟和源时钟之间引入大量偏差。
但是,你说你的时钟是异步的 - 如果你真的不关心时钟之间的关系那么你就可以做到这一点。
生成时钟作为触发器的输出并通过BUFG运行。
生成分频时钟的更好方法是使用BUFGCE或BUFHCE,每隔一个时钟启用“CE”。
这会产生频率为1/2的时钟,输出时钟与输入时钟保持同相。
但是,如果你真的希望时钟是异步的,这并不重要。
当使用BUFGCE / BUFHCE生成时钟时,您需要知道结果时钟的占空比不是50/50  - 除以2,它将是25/75。
最后,无论你做什么(结构分割器或BUFGCE / BUFHCE),我通常会用create_generated_clock限制它 - 这是一个生成的时钟,而不是主时钟。
但是 - 再次 - 如果这些时钟真正异步,这也无所谓......

两个MMCM共享时钟输入时的严重警告和错误的更多相关文章

  1. 有关 GCC 及 JNA 涉及动态库/共享库时处理库文件名的问题

    动态库尤其是共享库在 Linux 环境下普遍存在库文件名包含版本号的情况,比如 Linux 环境下经常会发现一个共享库的真实文件名是 libfoo.so.1.1.0,而同时会有多个指向该真实库文件的软 ...

  2. CreateFileMapping共享内存时添加Global的作用

    来源:http://www.cnblogs.com/elvislogs/articles/ShareMemory.html 通常使用CreateFileMapping建立共享内存时名称中没有加入&qu ...

  3. 同一个tomcat多个项目共享session,一个tomcat两个项目共享sessionId

    同一个tomcat多个项目共享session,一个tomcat两个项目共享sessionId >>>>>>>>>>>>>& ...

  4. Oracle RAC:使用 NFS 共享存储时的 mount 选项 总结

    oracle rac 使用nfs作为共享存储时,mount的选项有 要求,不能随便设置 grid的要求:      rw,bg,hard,nointr,rsize=32768,wsize=32768, ...

  5. Mac、Linux下两个Emacs共享一个配置文件

    Mac.Linux下两个Emacs共享一个配置文件 有些嵌入式的实验需要在Linux进行,就安装了RHEL6.4的虚拟机,下载并编译了Emacs. 在Linux的.emacs文件中加入以下语句,即可引 ...

  6. react中IOS手机里面两个input同时存在时,聚焦focus失效解决办法

    最近在做webapp搜索功能时,用到两个input同时存在时,轻点input聚焦时,ios手机软键盘弹起又失效,一直在寻找合理的解决办法,现在最简单的总结回顾: <一>bug显示 < ...

  7. L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误(转)

    L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误   错误描述:“ L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误” 只有这个没有错误码. ...

  8. 删除表空间时,遇到了ORA-14404错误

      Oracle中删除表空间时,遇到了ORA-14404错误.   错误信息如下: SQL> DROP TABLESPACE PART1 INCLUDING CONTENTS AND DATAF ...

  9. SQL2008、SQL2013 执行Transact-SQL 语句或者批处理时发生了异常。错误5120

    附加数据库的时候遇到问题,问题描述如下: 附加数据库 对于 服务器"服务器名"失败.(Microsoft.SqlServer.Smo) 执行Transact-SQL 语句或者批处理 ...

随机推荐

  1. C语言中printf,scanf,puts,%%等输出格式

    #include<stdio.h> int main(void){    int a;    printf("请输入一个整数,程序求取他的最后一位数字:");    s ...

  2. Neutron路由篇:L3 agent+Namespace

    Neutron 的路由服务是由 l3 agent 提供的. 除此之外,l3 agent 通过 iptables 提供 firewall 和 floating ip 服务.     l3 agent 需 ...

  3. HTML之表单

    目录 表单的结构 get方式与post方式 输入 单行文本输入框 提交按钮和重置按钮 密码输入框 复选框 单选按钮 图像按钮 文本选择输入框 隐藏框 多行文本输入框 下拉列表框 新增输入元素 新增其他 ...

  4. Pairwise 找到你的另一半

    都说优秀的程序员擅长面向对象编程,但却经常找不到另一半,这是为什么呢?因为你总是把自己局限成为一个程序员,没有打开自己的思维. 这是一个社群的时代啊,在这里你应该找到与你有相同价值观但又互补的另一半. ...

  5. 在vue 里使用腾讯ditu

    https://www.cnblogs.com/mrer/p/7144705.html

  6. centos7服务器配置nuxt部署环境

    一.安装node(默认安装在根目录下) 1.首先安装wget yum install -y wget 2.下载最新nodejs安装包 wget https://nodejs.org/dist/v10. ...

  7. bzoj3678 Katu Puzzle

    题目链接 题意 给定一张图,对于每条边给出一个运算符\((\&,|,\otimes)\)和一个值\(c(0 \le c \le 1)\).问能否通过给每个点赋上一个值.使得每条边通过指定的运算 ...

  8. 码云报错:fatal: remote origin already exists.解决方法

    今天在提交Git的时候,遇到了几个问题,记录一下,方便以后查找O(∩_∩)O 第一个问题 git remote add origin************** fatal: remote origi ...

  9. docker容器网络

    1.我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: · host模式,使用--net=host指定 · containe ...

  10. Gcc 命令大全

    gcc这条命令用来将源代码生成可执行程序,下面来看一下gcc的常用选项. 1.无选项编译链接 例:命令:gcc test.c //会默认生成a.out可执行程序 2.-E: 进行预处理和编译,生成汇编 ...